svn commit: r249549 - in stable/9/sys: amd64/conf i386/conf

Jeremy Chadwick jdc at koitsu.org
Fri Apr 19 00:47:19 UTC 2013


On Wed, Apr 17, 2013 at 09:21:02PM -0500, Brooks Davis wrote:
> On Wed, Apr 17, 2013 at 03:56:03PM -0700, Jeremy Chadwick wrote:
> > On Wed, Apr 17, 2013 at 02:47:06PM -0500, Brooks Davis wrote:
> > > On Wed, Apr 17, 2013 at 12:35:38PM -0700, Jeremy Chadwick wrote:
> > > > On Wed, Apr 17, 2013 at 02:54:33PM +0200, Jeremie Le Hen wrote:
> > > > > Hi Jeremy,
> > > > > 
> > > > > On Tue, Apr 16, 2013 at 09:19:19AM -0700, Jeremy Chadwick wrote:
> > > > > > 
> > > > > > Now that this has been enabled by default, I should warn folks of a
> > > > > > caveat that I found in the buildworld/buildkernel framework.  It's
> > > > > > easiest to explain like this:
> > > > > > 
> > > > > > 1. Install FreeBSD 9.x, svn checkout of stable/9, etc...
> > > > > > 2. Add WITHOUT_CDDL=true to /etc/src.conf
> > > > > > 3. Rebuild + install kernel/world per src/Makefile procedure
> > > > > > 4. Remove WITHOUT_CDDL=true from /etc/src.conf
> > > > > > 5. rm -fr /usr/obj/*
> > > > > > 6. Rebuild world
> > > > > > 7. Rebuild kernel -- fails, stating "ctfconvert: not found".
> > > > > > 
> > > > > > For whatever reason the buildkernel bits make the assumption that
> > > > > > ctfconvert exists on the system (presumably in $PATH or possibly a
> > > > > > hard-coded), when ideally it should try to use the recently-built
> > > > > > version in /usr/obj first.
> > > > > 
> > > > > I've tested this is a freshly installed 9.1-RELEASE jail and I haven't
> > > > > been biten by the bug you describe.
> > > > > 
> > > > > ctfconvert(1) seems to be installed by default in 9.1-RELEASE, this is
> > > > > probably there problem didn't occur.  I can easily verify this in the
> > > > > jail:
> > > > > 
> > > > > % root at test9:/usr/src # ls -l /usr/bin/ctfconvert /usr/bin/vi /usr/bin/tail 
> > > > > % -r-xr-xr-x  1 root  wheel  371536 Dec  4 09:33 /usr/bin/ctfconvert
> > > > > % -r-xr-xr-x  1 root  wheel   19848 Apr 17 06:28 /usr/bin/tail
> > > > > % -r-xr-xr-x  6 root  wheel  346432 Apr 17 06:28 /usr/bin/vi
> > > > > 
> > > > > 
> > > > > Do you have a theory about why you've got the problem while I haven't?
> > > > > FYI, it seems 9.0-RELEASE also has ctfconvert(1):
> > > > > http://svnweb.freebsd.org/base/release/9.0.0/cddl/usr.bin/ctfconvert/
> > > > > 
> > > > > My guess is tha this might happen if you don't have /usr/bin/ctfconvert.
> > > > > I've just removed it and trying to build kernel again.
> > > > 
> > > > I will spend some time to figure out exactly how to reproduce this.
> > > > 
> > > > Going from recent memory (~2 weeks ago), I encountered it on my VPS box
> > > > (which does run ntpd, just FYI):
> > > > 
> > > > 1. Initially installed with 9.1-RELEASE,
> > > > 2. Upgraded to stable/9 (using svn),
> > > > 3. WITHOUT_CDDL=true and WITHOUT_ZFS=true added to /etc/src.conf
> > > > 4. world/kernel rebuilt/reinstalled/etc. (this includes make delete-old,
> > > >    as per instructions in src/Makefile -- which would delete
> > > >    /usr/bin/ctfconvert)
> > > > 5. Fast forward many months
> > > > 6. Removed WITHOUT_CDDL=true from src.conf
> > > > 7. Encountered the above issue ("ctfconvert: not found") during
> > > >    buildkernel
> > > > 8. Rebuilt kernel again -- same error
> > > > 9. Removed WITHOUT_ZFS=true from src.conf
> > > > 10. Rebuilt kernel again -- worked
> > > > 
> > > > This could mean WITHOUT_ZFS=true has some bearing on this situation, but
> > > > I don't see how/why, as WITHOUT_CDDL is supposed to be the "trigger" for
> > > > ctf* utilities.  I did poke around the Makefiles and framework a bit
> > > > but didn't have any epiphanies.
> > > > 
> > > > Like I said -- I'll try to reproduce the exact scenario.
> > > 
> > > Looking at Makefile.inc1 around line 1164 (on HEAD), ctfconvert and
> > > cftmerge are bootstrap tools only when they don't exist at all on the
> > > host.  The code there should be expanded to bootstrap for cases where
> > > the installed ones are known to be broken (virtually all prior versions
> > > given recent fixes) as well as when they aren't present on the host
> > > system.
> > 
> > I'm able to reproduce the issue I speak of with 100% reliability.
> > Jeremie, I'm not sure why you're not able to reproduce this, because I
> > can do so reliably/consistently.
> 
> The following patch will probably fix the problem.
> 
> Index: Makefile.inc1
> ===================================================================
> --- Makefile.inc1       (revision 249590)
> +++ Makefile.inc1       (working copy)
> @@ -1114,9 +1114,7 @@
> 	usr.bin/clang/clang-tblgen
>  .endif
>  
> -.if ${MK_CDDL} != "no" && \
> -    ${BOOTSTRAPPING} < 800038 && \
> -    !(${BOOTSTRAPPING} >= 700112 && ${BOOTSTRAPPING} < 799999)
> +.if ${MK_CDDL} != "no"
>  _dtrace_tools= cddl/usr.bin/sgsmsg cddl/lib/libctf lib/libelf \
>      lib/libdwarf cddl/usr.bin/ctfconvert cddl/usr.bin/ctfmerge
>  .endif
> 
> This patch unconditionally bootstraps ctfconvert and ctfmerge unless
> WITHOUT_CDDL is set.

The above patch now breaks buildworld (not buildkernel) when
WITHOUT_CDDL=true **is not** defined:

cc -O2 -pipe -I/usr/src/cddl/usr.bin/ctfconvert/../../../sys/cddl/compat/opensolaris  -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/compat/opensolaris/include  -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris  -I/usr/src/cddl/usr.bin/ctfconvert/../../../sys/cddl/contrib/opensolaris  -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/head  -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/common  -I/usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt  -I/usr/src/cddl/usr.bin/ctfconvert/../../../sys/cddl/contrib/opensolaris/uts/common -DNEED_SOLARIS_BOOLEAN -g -std=gnu89  -Wno-unknown-pragmas -I/usr/obj/usr/src/tmp/legacy/usr/include -c /usr/src/cddl/usr.bin/ctfconvert/../../../cddl/contrib/opensolaris/tools/ctf/cvt/util.c
make: don't know how to make /usr/lib/libctf.a. Stop
*** [bootstrap-tools] Error code 2

Stop in /usr/src.
*** [_bootstrap-tools] Error code 1

Stop in /usr/src.
*** [buildworld] Error code 1

Stop in /usr/src.

By the way, the lines relevant to the _dtrace_tools assignment contain
spaces, not tabs, which is generally considered bad.  Fixing this
doesn't fix the above buildworld failure.

-- 
| Jeremy Chadwick                                   jdc at koitsu.org |
| UNIX Systems Administrator                http://jdc.koitsu.org/ |
| Mountain View, CA, US                                            |
| Making life hard for others since 1977.             PGP 4BD6C0CB |


More information about the svn-src-stable-9 mailing list