> On 04/14/17 09:21, Theo de Raadt wrote:
> >> AFAICS there is no way to build a release without upgrading the base
> >> system first, i.e. you have to have root privileges.
> >>
> >> To keep things simple, I wonder if it would be possible to use these
> >> privileges to avoid the noperm partition?
No, it isn't.
> > noperm is now so well established, we have already forgotten the various
> > tricks to during the transition, even moreso since there wasn't one
> > transition it was done in steps.
> >
>
> ???
>
> I would have guessed a simple
>
> if test "x$USER" != "xroot"; then
> echo "error: noperm partition wanted"
> exit 1
> fi
>
> would do.
There are such tests at the beginning of 'make release', so if you got
as far in 'make release' as you indicate below, your noperm setup is
fine:
$ sed -n 246,259p /usr/src/etc/Makefile
do-release:
@if [[ `id -u` -ne 0 ]]; then \
echo $@ must be called by root >&2; \
false; \
fi
@destmp=`df -P ${DESTDIR} | awk 'END { print $$6 }'`; \
if ! mount | grep -q " $${destmp} .*noperm"; then \
echo ${DESTDIR} must be on a noperm filesystem >&2; \
false; \
fi; \
if [[ `stat -f '%Su %Lp' $${destmp}` != '${BUILDUSER} 700' ]]; then \
echo $${destmp} must have owner BUILDUSER and mode 700 >&2; \
false; \
fi
> bash-4.4# export DESTDIR=/dest; export RELEASEDIR=/export/releasedir
> bash-4.4# cd /usr/src/etc && make release
> sh /usr/src/sys/conf/newvers.sh
> touch: version: Permission denied
> /usr/src/sys/conf/newvers.sh[84]: cannot create version: Permission denied
> *** Error 1 in /usr/src/sys/arch/amd64/compile/GENERIC.MP (Makefile:897
> 'vers.o')
> *** Error 1 in . (Makefile:20 'bsd.mp')
> *** Error 1 in . (Makefile:267 'release-sets')
> *** Error 1 in . (Makefile:260 'do-release')
> *** Error 1 in /usr/src/etc (Makefile:244 'release')
This indicates permission problems below /usr/obj (nothing to do with
noperm).
What is the output of
# ls -al /usr/obj /usr/obj/sys/arch/amd64/compile/{,GENERIC.MP/vers*}
> There are stable snapshots? Good thing, I will check.
There aren't. But you may want to check out syspatch(8)
http://man.openbsd.org/syspatch