On Sun, 25 Feb 2018, Adam Weinberger wrote: > > > (full log: > > > https://gist.github.com/saper/0be3f9b4e9eb819d3ec00f5273705517#file-node-sass-4-7-2-log > > > ) > > > > > > Why are /bin/mkdir -p and /bin/cp commands invoked again in the "extract" > > > phase? > > > > > > FreeBSD 11.1-STABLE #10 r321629 running poudriere-3.2.4 (I have updated > > > poudriere today) > > First of all, just so you know, npm module ports won't be added to the ports > tree. I just wanted to be clear in case you were planning on submitting it. > There were a couple threads about this a while back. > > With that out of the way, you're hitting errors for two reasons here.
Yes, this is my private port that I am using to produce FreeBSD binaries for node-sass. Getting binary npm modules into our ports tree is another conversation. The problem here is that a whole thing worked for me before for months so I am aware of all those limitations for particular build phases (it took me long to figure out that). > The first problem is that npm needs network access, and poudriere prevents > ports from dialing out. You can work around this with the > ALLOW_NETWORKING_PACKAGES variable in poudriere.conf. > > The other problem you're hitting is that npm saves a cache, and for some > reason you're trying to run it from /usr/ports/distfiles/node-sass. Ports > themselves should never, ever have the ability to create files in > /usr/ports/distfiles. If you run 'npm install' from ${WRKSRC}, then you can > do: > cd ${WRKSRC} && ${SETENV} HOME=/tmp npm install Aren't ports allowed to write in /usr/ports/distfiles during the fetch phase? That would be new to me... This whole thing was working for me before (with older poudriere/bsd.port.mk maybe). I try to force npm to fetch everything (including dependent modules) in the fetch phase: 42 post-fetch: 43 ${MKDIR} ${DISTDIR}/${PORTNAME} 44 ${MKDIR} ${NPM_CACHE} 45 ${CP} ${FILESDIR}/package-lock.json ${DISTDIR}/${PORTNAME} 46 ${CP} ${FILESDIR}/package.json ${DISTDIR}/${PORTNAME} 47 (cd ${DISTDIR}/${PORTNAME} && ${SETENV} NPM_CONFIG_CACHE=${NPM_CACHE} npm install --ignore-scripts) I copy everything I need from distfiles to ${WRKSRC} in the extract phase: 49 post-extract: 50 (cd ${DISTDIR}/${PORTNAME} && ${FIND} node_modules | ${PAX} -rw ${WRKSRC}) 51 I build everything without touching the network: 52 do-build: 53 (cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} ${MAKE_ENV} NPM_CONFIG_CACHE=${NPM_CACHE} npm instal l --nodedir=${LOCALBASE}) The problem in particular is that "post-fetch" target is invoked ALSO during the "extract" target, I don't know why: =======================<phase: extract >============================ ^^^^^^^^^^^^ ===> License MIT accepted by the user ===> Fetching all distfiles required by node-sass-4.7.2 for building ^^^^^^^^^^^^ /bin/mkdir -p /portdistfiles/node-sass /bin/mkdir -p /portdistfiles/npm It did that already in the fetch phase: =========================================================================== =======================<phase: fetch >============================ ===> License MIT accepted by the user ===> Fetching all distfiles required by node-sass-4.7.2 for building /bin/mkdir -p /portdistfiles/node-sass /bin/mkdir -p /portdistfiles/npm and it tries that again in the checksum phase: =========================================================================== =======================<phase: checksum >============================ ===> License MIT accepted by the user ===> Fetching all distfiles required by node-sass-4.7.2 for building /bin/mkdir -p /portdistfiles/node-sass /bin/mkdir -p /portdistfiles/npm Maybe there is an additional check for a successful fetch that I have missed. Marcin
smime.p7s
Description: S/MIME Cryptographic Signature