make installworld for non-root user
Ruslan Ermilov
ru at freebsd.org
Wed Jul 7 02:58:12 PDT 2004
On Wed, Jul 07, 2004 at 11:17:00AM +0200, Harti Brandt wrote:
> On Wed, 7 Jul 2004, Ruslan Ermilov wrote:
>
> RE>On Wed, Jul 07, 2004 at 09:57:52AM +0200, Harti Brandt wrote:
> RE>>
> RE>> Hi all,
> RE>>
> RE>> is there an easy way for a non-root user to test the installworld target?
> RE>> I came up with
> RE>>
> RE>> make SHAREOWN=harti SHAREGRP=harti LIBOWN=harti LIBGRP=harti \
> RE>> NOFSCHG=yes INFOMODE=644 INFOOWN=harti INFOGRP=harti MANOWN=harti \
> RE>> MANGRP=harti BINOWN=harti BINGRP=harti DESTDIR=/t/scratch/harti/root/ \
> RE>> installworld
> RE>>
> RE>> but that one breaks in libexec/pt_chown (which has a hard-coded
> RE>> BINOWN=root).
> RE>>
> RE>> Perhaps I can't see the obvious solution?
> RE>>
> RE>Many bits hardcode owners/groups/modes/flags, but it's still
> RE>possible to install as non-root. In fact, buildworld already
> RE>does this for you -- it uses src/tools/install.sh as INSTALL
> RE>to do it (see the BMAKEENV setting in Makefile.inc1).
>
> So it seems that:
>
> make SHAREOWN=harti SHAREGRP=harti INSTALL="sh `pwd`/release/install.sh" \
> DESTDIR="/somewhere" installworld
>
> almost works. Almost, because bsd.lib.mk contains
>
> SHLINSTALLFLAGS += -fschg
>
> That case is not handled in install.sh and should probably read
>
> SHLINSTALLFLAGS += -f schg
>
Rather I've fixed install.sh (committed):
%%%
Index: install.sh
===================================================================
RCS file: /home/ncvs/src/tools/install.sh,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- install.sh 6 Feb 2004 11:00:13 -0000 1.6
+++ install.sh 7 Jul 2004 09:38:14 -0000 1.7
@@ -33,6 +33,7 @@
case $1 in
-[bCcMpSs]) shift;;
-[Bfgmo]) shift; shift;;
+ -[Bfgmo]*) shift;;
*) break;
esac
done
%%%
> Additionally I had to add
>
> -fschg) shift;;
>
> to install.sh, because it seems that the installworld target uses the
> currently installed mk files not those from src/share/mk.
>
Not until you call installworld with "make -fMakefile.inc1 ...".
Normally, src/Makefile is used and it calls installworld with
-m${.CURDIR}/share/mk. You can verify with ``make -n installworld''.
> The SHAREOWN SHAREGRP is needed because share/zoneinfo/Makefile passes
> these directly to zic. This could probably be fixed by calling zic
> during buildworld and just install the compiled files during installworld.
>
Yes, I've been thinking of doing this for some years now. I will see if
I can fix it easily, now that I have a good reason for it. ;)
Cheers,
--
Ruslan Ermilov
ru at FreeBSD.org
FreeBSD committer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 187 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-hackers/attachments/20040707/12cc1062/attachment.bin
More information about the freebsd-hackers
mailing list