I'm trying to do bisection to locate when a specific bug appeared and
can replicate the issue when I boot from a memstick and use the LiveCD
option. This keeps any questions of "upgrade or install" out of the picture.
Unfortunately, I've run into a couple problems.
After reading the new build(7) and release(7) information, I built
everything locally then tried
# cd /usr/src/release
# make memstick
At first, I attributed the hours of 100% CPU time for bsdtar to my
reasonably slow Atom 330 box. After a day, I decided that wasn't the
issue. Looking at the results, the files were being put in
/usr/src/release, not under /usr/obj/ somewhere, as I would have
expected. I believe that the process encountered a filesystem loop when
copying the source for the memstick.
If you look at the output of the make process, the first few lines are:
mkdir /usr/src/release/dist
mkdir /usr/src/release/dist
mkdir -p /usr/src/release/dist/usr
cd /usr/src/release/.. && make TARGET_ARCH=amd64 TARGET=amd64
distributeworld DISTDIR=/usr/src/release/dist
mkdir -p /usr/src/release/dist/usr
mkdir: /usr/src/release/dist: File exists
cd /usr/src/release/.. && make TARGET_ARCH=amd64 TARGET=amd64
distributekernel packagekernel DISTDIR=/usr/src/release/dist
ln -fs /usr/ports /usr/src/release/dist/usr/ports
ln -fs /usr/src/release/.. /usr/src/release/dist/usr/src
It looks like that last ln -fs creates a loop, which eventually results
in tar output of:
a
usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/sys/dev/e1000/e1000_osdep.c
a
usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/release/dist/usr/src/sys/dev/e1000/e1000_osdep.h
Running
# cd /usr/src/release
# make -n -p memstick
indicates that .OBJDIR is set to /usr/src/release (and is set to
/usr/obj/usr/src when make is executed in /usr/src).
# cd /usr/src
# make memstick
tells me that "memstick" isn't a recognized target.
I've tried setting MAKEOBJDIR in the environment, but that didn't change
the value of .OBJDIR reported by make.
So that is question #1 -- How can I build a memstick from an
already-compiled tree?
===
I can successfully
# cd /usr/src/release
# ./generate_release.sh stable/9 /usr/release/stable-9
or the like, but a build with clang enabled takes me close to three
hours. Since the issue isn't clang-related, I'd like to be able to build
without clang to the point of having a bootable memstick. release(7)
suggests that the environment variable MAKE_FLAGS could be used to pass
flags, however
# cd /usr/src/release
# export MAKE_FLAGS='-DWITHOUT_CLANG'
# ./generate_release.sh stable/9@226702 /usr/release/stable-9
ends up failing.
>>> World build started on Wed May 9 06:59:00 PDT 2012
>>> Rebuilding the temporary build tree
>>> stage 1.1: legacy release compatibility shims
[...]
Checked out revision 226702.
--------------------------------------------------------------
>>> World build started on Wed May 9 08:15:36 PDT 2012
--------------------------------------------------------------
--------------------------------------------------------------
>>> Rebuilding the temporary build tree
--------------------------------------------------------------
rm -rf /usr/obj/usr/release/226702/usr/src/tmp
rm -rf /usr/obj/usr/release/226702/usr/src/lib32
[...]
>>> World build completed on Wed May 9 09:40:48 PDT 2012
>>> Making hierarchy
>>> Installing everything
starts off nicely, but then eventually dies with
===> usr.bin/clang (install)
===> usr.bin/clang/clang (install)
install -s -o root -g wheel -m 555 clang /usr/release/226702/usr/bin
install: clang: No such file or directory
*** Error code 71
(plus the remaining errors up the chain)
I'm guessing that -DWITHOUT_CLANG isn't being passed to the installworld
process.
Which leads to the second question -- how can I "clean-build" a memstick
(or ISO) without having to build clang?
While I understand the need to get clang vetted out, for the purposes of
bisection, cutting an hour or two off of each of my builds is very
desirable.
Thanks!
Jeff
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"