>Number:         160443
>Category:       kern
>Synopsis:       [patch] make nanobsd builds deterministic and add $SRCCONF knob
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Sep 04 00:10:08 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator:     Garrett Cooper
>Release:        9-BETA1
>Organization:
iXsystems, Inc.
>Environment:
FreeBSD fallout.local 9.0-BETA2 FreeBSD 9.0-BETA2 #0 r225239M: Sun Aug 28 
22:34:21 PDT 2011     [email protected]:/usr/obj/usr/src/sys/FALLOUT  amd64
>Description:
The current incarnation of nanobsd doesn't deal with src.conf properly. In 
particular, src.conf is included before make.conf, s.t. if SRCCONF is defined 
in __MAKE_CONF, builds with become non-deterministic and the point of 
specifying SRCCONF=/dev/null will become null and moot.

The following also adds an environmental knob so people can specify $SRCCONF, 
if they desire.
>How-To-Repeat:
1. Check out freenas, prior to r7546.
2. echo 'WITHOUT_KERBEROS=' >> /etc/src.conf
3. sh build/do_build.sh

The build will fail with nss_ldap as it requires kerberos support.
>Fix:


Patch attached with submission follows:

Index: tools/tools/nanobsd/nanobsd.sh
===================================================================
--- tools/tools/nanobsd/nanobsd.sh      (revision 224946)
+++ tools/tools/nanobsd/nanobsd.sh      (working copy)
@@ -159,6 +159,10 @@
 # Directory to populate /data from
 NANO_DATADIR=""
 
+# src.conf to use when building the image. Defaults to /dev/null for the sake
+# of determinism.
+SRCCONF=${SRCCONF:=/dev/null}
+
 #######################################################################
 #
 # The functions which do the real work.
@@ -182,7 +186,6 @@
 
        echo "${CONF_WORLD}" > ${NANO_MAKE_CONF_BUILD}
        echo "${CONF_BUILD}" >> ${NANO_MAKE_CONF_BUILD}
-       echo "SRCCONF=/dev/null" >> ${NANO_MAKE_CONF_BUILD}
 )
 
 build_world ( ) (
@@ -191,6 +194,7 @@
 
        cd ${NANO_SRC}
        env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} \
+               SRCCONF=${SRCCONF} \
                __MAKE_CONF=${NANO_MAKE_CONF_BUILD} buildworld \
                > ${MAKEOBJDIRPREFIX}/_.bw 2>&1
 )
@@ -215,9 +219,10 @@
        # Note: We intentionally build all modules, not only the ones in
        # NANO_MODULES so the built world can be reused by multiple images.
        env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} buildkernel \
-               __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \
                ${kernconfdir:+"KERNCONFDIR="}${kernconfdir} \
                KERNCONF=${kernconf}
+               SRCCONF=${SRCCONF} \
+               __MAKE_CONF=${NANO_MAKE_CONF_BUILD} \
        ) > ${MAKEOBJDIRPREFIX}/_.bk 2>&1
 )
 
@@ -245,7 +250,6 @@
 
        echo "${CONF_WORLD}" > ${NANO_MAKE_CONF_INSTALL}
        echo "${CONF_INSTALL}" >> ${NANO_MAKE_CONF_INSTALL}
-       echo "SRCCONF=/dev/null" >> ${NANO_MAKE_CONF_INSTALL}
 )
 
 install_world ( ) (
@@ -256,6 +260,7 @@
        env TARGET_ARCH=${NANO_ARCH} \
        ${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} installworld \
                DESTDIR=${NANO_WORLDDIR} \
+               SRCCONF=${SRCCONF} \
                > ${NANO_OBJ}/_.iw 2>&1
        chflags -R noschg ${NANO_WORLDDIR}
 )
@@ -267,8 +272,10 @@
 
        cd ${NANO_SRC}
        env TARGET_ARCH=${NANO_ARCH} \
-       ${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} distribution \
+       ${NANO_PMAKE} distribution \
                DESTDIR=${NANO_WORLDDIR} \
+               SRCCONF=${SRCCONF} \
+               __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} \
                > ${NANO_OBJ}/_.etc 2>&1
        # make.conf doesn't get created by default, but some ports need it
        # so they can spam it.
@@ -290,10 +297,11 @@
        cd ${NANO_SRC}
        env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} installkernel \
                DESTDIR=${NANO_WORLDDIR} \
-               __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} \
                ${kernconfdir:+"KERNCONFDIR="}${kernconfdir} \
                KERNCONF=${kernconf} \
                MODULES_OVERRIDE="${NANO_MODULES}"
+               SRCCONF=${SRCCONF} \
+               __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} \
        ) > ${NANO_OBJ}/_.ik 2>&1
 )
 


>Release-Note:
>Audit-Trail:
>Unformatted:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"

Reply via email to