Date: Mon, 09 Jun 2014 18:01:48 -0500 From: Bryan Drewery <bdrewery@FreeBSD.org> To: hackers@FreeBSD.org Subject: [RFC] Fixed installworld with noexec /tmp Message-ID: <25659df71b49c7b72b6f2d9a786c5ac9@shatow.net>
next in thread | raw e-mail | index | archive | help
I've always had my /tmp mounted as noexec. Despite how useless this is, I and many others have had trouble with installworld due to it. You can see how frequent it occurs here: https://www.google.com/#q=freebsd+installworld+noexec A simple workaround, which I only just discovered from PR 58117, is to set TMPDIR to somewhere that can exec. This patch fixes it by using the OBJDIR rather than the assumed /tmp or TMPDIR. The purpose of the installworld code using INSTALLTMP is to use the pre-install binaries to do the install, rather than the newly built binaries. This is to ensure the binaries will run while system is in an inconsistent state with libraries and in case the kernel is not yet upgraded. My change adds continues to respect that by ensuring it uses the already-installed mkdir(1) and env(1) with full paths. http://people.freebsd.org/~bdrewery/patches/installworld-noexec.txt --- Makefile.inc1 +++ Makefile.inc1 @@ -191,7 +191,9 @@ TMPPATH= ${STRICTTMPPATH}:${PATH} # when in the middle of installing over this system. # .if make(distributeworld) || make(installworld) -INSTALLTMP!= /usr/bin/mktemp -d -u -t install +INSTALLTMPDIR= ${OBJTREE}${.CURDIR}/itmp +INSTALLTMP!= /bin/mkdir -p ${INSTALLTMPDIR} && /usr/bin/env \ + TMPDIR=${INSTALLTMPDIR} /usr/bin/mktemp -d -u -t install .endif # @@ -833,7 +835,7 @@ distributeworld installworld: _installcheck_world LOCAL_MTREE=${LOCAL_MTREE:Q} distrib-dirs .endif ${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \ - ${IMAKEENV} rm -rf ${INSTALLTMP} + ${IMAKEENV} rm -rf ${INSTALLTMPDIR} .if make(distributeworld) .for dist in ${EXTRA_DISTRIBUTIONS} find ${DESTDIR}/${DISTDIR}/${dist} -mindepth 1 -empty -delete The only downside I see is that failures can leave the stale tmpdir in the OBJDIR, which is why I remove the entire "itmp" dir once installworld finally does succeed. -- Regards, Bryan Drewery
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?25659df71b49c7b72b6f2d9a786c5ac9>