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>

index | next in thread | raw e-mail

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





home | help

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