Date: Mon, 11 Mar 2002 13:11:38 +0200 From: Ruslan Ermilov <ru@FreeBSD.ORG> To: BOUWSMA Beery <freebsd-user@netscum.dyndns.dk> Cc: freebsd-stable@FreeBSD.ORG Subject: Re: buildworld with ro /usr/src broken Message-ID: <20020311111138.GA4678@sunbay.com> In-Reply-To: <200203102012.g2AKCbZ00762@beerswilling.netscum.dyndns.dk> References: <20020209130437.GA15287@myhakas.estpak.ee> <200202091743.g19HhIm00362@beerswilling.netscum.dyndns.dk> <20020227111914.GB30220@sunbay.com> <20020227155244.A24137@newtrinity.default-network.net> <20020227204012.GA99496@sunbay.com> <200203102012.g2AKCbZ00762@beerswilling.netscum.dyndns.dk>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Mar 10, 2002 at 09:12:37PM +0100, BOUWSMA Beery wrote: > [replies sent directly to me may timeout and bounce, since I'm not > online as often as I should be, but I'll check the list archives] > > > > > > MAKEOBJDIR[PREFIX] only work right if set as environment variables. > > > > > I have an uncommitted patch that makes it possible to set them on > > > > make(1)'s command line but still no joy in attempting to set them > > > > in /etc/make.conf. I bear in mind adding a patch to Makefile.inc1 > > > > too that would prevent people from attempting to set MAKEOBJDIRPREFIX > > > > in /etc/make.conf. > > Bah. You're no fun. > > Hmmm, so why then am I now buildworld'ing -current (and have been for > the past almost five hours) with a read-only /usr/src > # touch /usr/src/foo > touch: /usr/src/foo: Read-only file system > using only the commandline `time nice make buildworld' with the > object tree being put in > bash-2.05a$ ls -lart /usr/obj/5.0-CURRENT/usr/src/ > total 42 > drwxr-xr-x 3 root wheel 512 Jan 11 06:58 .. > drwxr-xr-x 4 root wheel 512 Jan 25 15:33 gnu > drwxr-xr-x 6 root wheel 512 Jan 25 15:34 secure > drwxr-xr-x 5 root wheel 512 Jan 25 18:38 sys > drwxr-xr-x 3 root wheel 512 Mar 6 13:28 i386 > drwxr-xr-x 55 root wheel 1024 Mar 6 14:06 lib > drwxr-xr-x 35 root wheel 512 Mar 6 14:06 bin > drwxr-xr-x 41 root wheel 1024 Mar 6 14:07 games > drwxr-xr-x 32 root wheel 1024 Mar 6 14:09 libexec > drwxr-xr-x 86 root wheel 2048 Mar 6 14:10 sbin > drwxr-xr-x 16 root wheel 512 Mar 6 14:11 share > drwxr-xr-x 207 root wheel 6656 Mar 6 14:14 usr.bin > drwxr-xr-x 158 root wheel 5632 Mar 6 14:16 usr.sbin > drwxr-xr-x 3 root wheel 512 Mar 6 14:16 etc > drwxr-xr-x 16 root wheel 512 Mar 6 14:16 . > drwxr-xr-x 4 root wheel 512 Mar 6 15:34 include > > And I've been building both -stable and -current this way > in subdirectories of /usr/obj for months, with read-only src, > since figuring how to force it to work? > > > > > I don't want to doubt your expertise but > > > `cd /usr/src && make MAKEOBJDIRPREFIX=/tmp/obj buildworld` > > > works for ages for me, same for installworld. > > (This is no doubt because /usr/src is read-write for this > particular user and receives the changes that break buildworld > in the read-only case) > > > > > Run the following commands in sequence to see what I'm talking about: > > > rm -rf /tmp/obj > > cd /usr/src/bin/cat > > make MAKEOBJDIRPREFIX=/tmp/obj obj > > make MAKEOBJDIRPREFIX=/tmp/obj all > > Okay, here's what I see, /usr/src read-only. > > bash-2.05a$ make MAKEOBJDIRPREFIX=/tmp/obj obj > /tmp/obj/usr/src/bin/cat created for /usr/src/bin/cat > bash-2.05a$ make MAKEOBJDIRPREFIX=/tmp/obj all > cc -O -pipe -Wall -Wformat -Werror -Wall -Wno-uninitialized -Wnon-const-forma > t -Wno-format-extra-args -Werror -c cat.c > Assembler messages: > FATAL: can't create cat.o: Permission denied > > > > ls -l /tmp/usr/usr/src/bin/cat > (s,usr,obj, of course) > As expected, with my read-only source (and working as a normal luser > too), the attempt fails. > > > > Try setting MAKEOBJDIRPREFIX in environment then. > > Here's what I have that's of interest in my /etc/make.conf, for > both -current and -stable (NetBSD allows me to define BSDOBJDIR to > get somewhat similar results)... > > RELNAME!= /usr/bin/uname -r > MAKEOBJDIRPREFIX?= /usr/obj/${RELNAME} > > You're right, though, that not all targets will work with this. > Here's what I get with the `all' target: > > [17:13:36]root@dastardly.newsbastards.org:/usr/src/bin/cat{506}# rmdir !$ > rmdir /usr/obj/5.0-CURRENT/usr/src/bin/cat/ > [17:13:55]root@dastardly.newsbastards.org:/usr/src/bin/cat{507}# make obj > /usr/obj/5.0-CURRENT/usr/src/bin/cat created for /usr/src/bin/cat > > [17:27:08]root@dastardly.newsbastards.org:/usr/src/bin/cat{545}# make all > cc -O -pipe -Wall -Wformat -Werror -Wall -Wno-uninitialized -Wnon-const-forma > t -Wno-format-extra-args -Werror -c cat.c > Assembler messages: > FATAL: can't create cat.o: Read-only file system > cat.c:312: output pipe has been closed > *** Error code 1 > > Stop in /usr/src/bin/cat. > > > I played around a bit with the -f and -m `make' options to see if I > could get this working based on my /etc/make.conf contents, but no > real joy was to be found. In a case like this, or, say, when I had > to rebuild one of the kernel modules with a patch, I needed to use > the `env ...' form of the command. > > > However, as part of a `buildworld' or `buildkernel' or `installworld' > run, I do get things put in the proper place, rather than building > them in /usr/src proper; later once the build has gotten around to > this directory: > > [01:37:51]root@dastardly.newsbastards.org:/usr/src/bin/cat{557}# ls -lart /usr/ > obj/5.0-CURRENT/usr/src/bin/cat/ > total 98 > drwxr-xr-x 35 root wheel 512 Mar 6 17:13 .. > -rw-r--r-- 1 root wheel 1990 Mar 6 21:05 .depend > -rw-r--r-- 1 root wheel 5452 Mar 6 22:29 cat.o > -rwxr-xr-x 1 root wheel 82283 Mar 6 22:29 cat > drwxr-xr-x 2 root wheel 512 Mar 6 22:29 . > -rw-r--r-- 1 root wheel 2428 Mar 6 22:29 cat.1.gz > > So I'll agree that the /etc/make.conf solution isn't perfect and > breaks with some things less than a full world, but so far it's > performed adequately, the read-only status of /usr/src being a > safety net that I'll probably be losing now that I've gotten a > union mount atop it to work with `make', containing my local hacks. > You don't see this behavior with `buildworld' etc. targets because Makefile.inc1 sets it for you in environment, and executes another copy of make(1) with this environment to actually build the target. [...] Cheers, -- Ruslan Ermilov Sysadmin and DBA, ru@sunbay.com Sunbay Software AG, ru@FreeBSD.org FreeBSD committer, +380.652.512.251 Simferopol, Ukraine http://www.FreeBSD.org The Power To Serve http://www.oracle.com Enabling The Information Age To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020311111138.GA4678>