opensubscriber
   Find in this group all groups
 
Unknown more information…

f : freebsd-stable@freebsd.org 11 May 2012 • 3:39AM -0400

Two build problems -- "make memstick" and "make release" with -DWITHOUT_CLANG
by Jeff Kletsky

REPLY TO AUTHOR
 
REPLY TO GROUP




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



_______________________________________________
freebsd-stable@free... mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscribe@free..."

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.