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]"

Reply via email to