Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 10 May 2012 12:39:17 -0700
From:      Jeff Kletsky <jeff+freebsd@wagsky.com>
To:        freebsd-stable@freebsd.org
Subject:   Two build problems -- "make memstick" and "make release" with -DWITHOUT_CLANG
Message-ID:  <4FAC1965.7070800@wagsky.com>

next in thread | raw e-mail | index | archive | help
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






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4FAC1965.7070800>