Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Jun 2014 19:28:26 -0400
From:      Adrian Chadd <adrian@freebsd.org>
To:        Bryan Drewery <bdrewery@freebsd.org>
Cc:        "freebsd-hackers@freebsd.org" <hackers@freebsd.org>
Subject:   Re: [RFC] Fixed installworld with noexec /tmp
Message-ID:  <CAJ-Vmo=AhqX7YZ2EjwrYtOzHYW6-mXO_3EN8n1ePVnYJb45PhQ@mail.gmail.com>
In-Reply-To: <25659df71b49c7b72b6f2d9a786c5ac9@shatow.net>
References:  <25659df71b49c7b72b6f2d9a786c5ac9@shatow.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Would this fix instances of people building world on a shared box?

(ie, multiple different srcdir/objdir/destdir, but same /tmp?)


-a


On 9 June 2014 19:01, Bryan Drewery <bdrewery@freebsd.org> wrote:
> 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
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=AhqX7YZ2EjwrYtOzHYW6-mXO_3EN8n1ePVnYJb45PhQ>