Jeff Kletsky
2012-May-10 19:40 UTC
Two build problems -- "make memstick" and "make release" with -DWITHOUT_CLANG
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
Chuck Tuffli
2012-May-11 03:30 UTC
Two build problems -- "make memstick" and "make release" with -DWITHOUT_CLANG
On Thu, May 10, 2012 at 12:39 PM, Jeff Kletsky <jeff+freebsd@wagsky.com> wrote:> 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....> It looks like that last ln -fs creates a loop, which eventually results in > tar output of:I've run into this before but assumed it was due to building outside of /usr/src For me, the one reliable way of building the memstick + iso has been env MAKEOBJDIRPREFIX=../obj make DISTDIR=../R release HTH ---chuck
Dimitry Andric
2012-May-11 18:27 UTC
Two build problems -- "make memstick" and "make release" with -DWITHOUT_CLANG
On 2012-05-10 21:39, Jeff Kletsky wrote:> 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....> 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...> 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 71Try putting WITHOUT_CLANG= in your /etc/src.conf instead. I tried a generate-release.sh with just that in my src.conf (and no make.conf), and it just completed successfully. I don't think it is safe to pass WITH_ and WITHOUT_ settings via MAKE_FLAGS, at least not for this particular case.