svn commit: r195184 - stable/7/tools/tools/nanobsd

Nick Hibma n_hibma at FreeBSD.org
Tue Jun 30 09:20:44 UTC 2009


Author: n_hibma
Date: Tue Jun 30 09:20:43 2009
New Revision: 195184
URL: http://svn.freebsd.org/changeset/base/195184

Log:
  MFC all changes up to 194958:
  
  194288:
  Fix NanoBSD when the data partition size is defined as a negative
  number.
  
  194431:
  Allow building world into a separate dir (for reuse in multiple images).
  
  194437:
  Reverse some stuff I accidentally committed in the previous commit.
  
  194440:
  Cleanups.
  
  194958:
  Make pprint print through fd 3 so pprint can be used in customise
  functions.
  Prefix each log line with the running time.

Modified:
  stable/7/tools/tools/nanobsd/nanobsd.sh   (contents, props changed)

Modified: stable/7/tools/tools/nanobsd/nanobsd.sh
==============================================================================
--- stable/7/tools/tools/nanobsd/nanobsd.sh	Tue Jun 30 09:14:09 2009	(r195183)
+++ stable/7/tools/tools/nanobsd/nanobsd.sh	Tue Jun 30 09:20:43 2009	(r195184)
@@ -51,7 +51,6 @@ NANO_PACKAGE_LIST="*"
 
 # Object tree directory
 # default is subdir of /usr/obj
-# XXX: MAKEOBJDIRPREFIX handling... ?
 #NANO_OBJ=""
 
 # The directory to put the final images
@@ -147,21 +146,19 @@ NANO_ARCH=i386
 clean_build ( ) (
 	pprint 2 "Clean and create object directory (${MAKEOBJDIRPREFIX})"
 
-	if rm -rf ${MAKEOBJDIRPREFIX} > /dev/null 2>&1 ; then
-		true
-	else
+	if ! rm -rf ${MAKEOBJDIRPREFIX} > /dev/null 2>&1 ; then
 		chflags -R noschg ${MAKEOBJDIRPREFIX}
-		rm -rf ${MAKEOBJDIRPREFIX}
+		rm -r ${MAKEOBJDIRPREFIX}
 	fi
 	mkdir -p ${MAKEOBJDIRPREFIX}
 	printenv > ${MAKEOBJDIRPREFIX}/_.env
 )
 
 make_conf_build ( ) (
-	pprint 2 "Construct build make.conf ($NANO_MAKE_CONF)"
+	pprint 2 "Construct build make.conf ($NANO_MAKE_CONF_BUILD)"
 
-	echo "${CONF_WORLD}" > ${NANO_MAKE_CONF}
-	echo "${CONF_BUILD}" >> ${NANO_MAKE_CONF}
+	echo "${CONF_WORLD}" > ${NANO_MAKE_CONF_BUILD}
+	echo "${CONF_BUILD}" >> ${NANO_MAKE_CONF_BUILD}
 )
 
 build_world ( ) (
@@ -170,7 +167,7 @@ build_world ( ) (
 
 	cd ${NANO_SRC}
 	env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} \
-		__MAKE_CONF=${NANO_MAKE_CONF} buildworld \
+		__MAKE_CONF=${NANO_MAKE_CONF_BUILD} buildworld \
 		> ${MAKEOBJDIRPREFIX}/_.bw 2>&1
 )
 
@@ -188,62 +185,70 @@ build_kernel ( ) (
 	unset TARGET_CPUTYPE
 	unset TARGET_BIG_ENDIAN
 	env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} buildkernel \
-		__MAKE_CONF=${NANO_MAKE_CONF} KERNCONF=`basename ${NANO_KERNEL}` \
+		__MAKE_CONF=${NANO_MAKE_CONF_BUILD} KERNCONF=`basename ${NANO_KERNEL}` \
 		> ${MAKEOBJDIRPREFIX}/_.bk 2>&1
 	)
 )
 
 clean_world ( ) (
-	pprint 2 "Clean and create world directory (${NANO_WORLDDIR})"
-	if rm -rf ${NANO_WORLDDIR}/ > /dev/null 2>&1 ; then
-		true
+	if [ "${NANO_OBJ}" != "${MAKEOBJDIRPREFIX}" ]; then
+		pprint 2 "Clean and create object directory (${NANO_OBJ})"
+		if ! rm -rf ${NANO_OBJ} > /dev/null 2>&1 ; then
+			chflags -R noschg ${NANO_OBJ}
+			rm -r ${NANO_OBJ}
+		fi
+		mkdir -p ${NANO_OBJ} ${NANO_WORLDDIR}
+		printenv > ${NANO_OBJ}/_.env
 	else
-		chflags -R noschg ${NANO_WORLDDIR}/
-		rm -rf ${NANO_WORLDDIR}/
+		pprint 2 "Clean and create world directory (${NANO_WORLDDIR})"
+		if ! rm -rf ${NANO_WORLDDIR}/ > /dev/null 2>&1 ; then
+			chflags -R noschg ${NANO_WORLDDIR}
+			rm -rf ${NANO_WORLDDIR}
+		fi
+		mkdir -p ${NANO_WORLDDIR}
 	fi
-	mkdir -p ${NANO_WORLDDIR}/
 )
 
 make_conf_install ( ) (
-	pprint 2 "Construct install make.conf ($NANO_MAKE_CONF)"
+	pprint 2 "Construct install make.conf ($NANO_MAKE_CONF_INSTALL)"
 
-	echo "${CONF_WORLD}" > ${NANO_MAKE_CONF}
-	echo "${CONF_INSTALL}" >> ${NANO_MAKE_CONF}
+	echo "${CONF_WORLD}" > ${NANO_MAKE_CONF_INSTALL}
+	echo "${CONF_INSTALL}" >> ${NANO_MAKE_CONF_INSTALL}
 )
 
 install_world ( ) (
 	pprint 2 "installworld"
-	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.iw"
+	pprint 3 "log: ${NANO_OBJ}/_.iw"
 
 	cd ${NANO_SRC}
 	env TARGET_ARCH=${NANO_ARCH} \
-	${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF} installworld \
+	${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} installworld \
 		DESTDIR=${NANO_WORLDDIR} \
-		> ${MAKEOBJDIRPREFIX}/_.iw 2>&1
+		> ${NANO_OBJ}/_.iw 2>&1
 	chflags -R noschg ${NANO_WORLDDIR}
 )
 
 install_etc ( ) (
 
 	pprint 2 "install /etc"
-	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.etc"
+	pprint 3 "log: ${NANO_OBJ}/_.etc"
 
 	cd ${NANO_SRC}
 	env TARGET_ARCH=${NANO_ARCH} \
-	${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF} distribution \
+	${NANO_PMAKE} __MAKE_CONF=${NANO_MAKE_CONF_INSTALL} distribution \
 		DESTDIR=${NANO_WORLDDIR} \
-		> ${MAKEOBJDIRPREFIX}/_.etc 2>&1
+		> ${NANO_OBJ}/_.etc 2>&1
 )
 
 install_kernel ( ) (
 	pprint 2 "install kernel"
-	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.ik"
+	pprint 3 "log: ${NANO_OBJ}/_.ik"
 
 	cd ${NANO_SRC}
 	env TARGET_ARCH=${NANO_ARCH} ${NANO_PMAKE} installkernel \
 		DESTDIR=${NANO_WORLDDIR} \
-		__MAKE_CONF=${NANO_MAKE_CONF} KERNCONF=`basename ${NANO_KERNEL}` \
-		> ${MAKEOBJDIRPREFIX}/_.ik 2>&1
+		__MAKE_CONF=${NANO_MAKE_CONF_INSTALL} KERNCONF=`basename ${NANO_KERNEL}` \
+		> ${NANO_OBJ}/_.ik 2>&1
 )
 
 run_customize() (
@@ -252,9 +257,9 @@ run_customize() (
 	for c in $NANO_CUSTOMIZE
 	do
 		pprint 2 "customize \"$c\""
-		pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.cust.$c"
+		pprint 3 "log: ${NANO_OBJ}/_.cust.$c"
 		pprint 4 "`type $c`"
-		( $c ) > ${MAKEOBJDIRPREFIX}/_.cust.$c 2>&1
+		( $c ) > ${NANO_OBJ}/_.cust.$c 2>&1
 	done
 )
 
@@ -264,15 +269,15 @@ run_late_customize() (
 	for c in $NANO_LATE_CUSTOMIZE
 	do
 		pprint 2 "late customize \"$c\""
-		pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.late_cust.$c"
+		pprint 3 "log: ${NANO_OBJ}/_.late_cust.$c"
 		pprint 4 "`type $c`"
-		( $c ) > ${MAKEOBJDIRPREFIX}/_.late_cust.$c 2>&1
+		( $c ) > ${NANO_OBJ}/_.late_cust.$c 2>&1
 	done
 )
 
 setup_nanobsd ( ) (
 	pprint 2 "configure nanobsd setup"
-	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.dl"
+	pprint 3 "log: ${NANO_OBJ}/_.dl"
 
 	(
 	cd ${NANO_WORLDDIR}
@@ -312,7 +317,7 @@ setup_nanobsd ( ) (
 	rm tmp || true
 	ln -s var/tmp tmp
 
-	) > ${MAKEOBJDIRPREFIX}/_.dl 2>&1
+	) > ${NANO_OBJ}/_.dl 2>&1
 )
 
 setup_nanobsd_etc ( ) (
@@ -348,7 +353,7 @@ prune_usr() (
 
 create_i386_diskimage ( ) (
 	pprint 2 "build diskimage"
-	pprint 3 "log: ${MAKEOBJDIRPREFIX}/_.di"
+	pprint 3 "log: ${NANO_OBJ}/_.di"
 
 	(
 	echo $NANO_MEDIASIZE $NANO_IMAGES \
@@ -417,10 +422,10 @@ create_i386_diskimage ( ) (
 		# for booting the image from a USB device to work.
 		print "a 1"
 	}
-	' > ${MAKEOBJDIRPREFIX}/_.fdisk
+	' > ${NANO_OBJ}/_.fdisk
 
 	IMG=${NANO_DISKIMGDIR}/${NANO_IMGNAME}
-	MNT=${MAKEOBJDIRPREFIX}/_.mnt
+	MNT=${NANO_OBJ}/_.mnt
 	mkdir -p ${MNT}
 
 	if [ "${NANO_MD_BACKING}" = "swap" ] ; then
@@ -436,7 +441,7 @@ create_i386_diskimage ( ) (
 
 	trap "df -i ${MNT} ; umount ${MNT} || true ; mdconfig -d -u $MD" 1 2 15 EXIT
 
-	fdisk -i -f ${MAKEOBJDIRPREFIX}/_.fdisk ${MD}
+	fdisk -i -f ${NANO_OBJ}/_.fdisk ${MD}
 	fdisk ${MD}
 	# XXX: params
 	# XXX: pick up cached boot* files, they may not be in image anymore.
@@ -452,8 +457,8 @@ create_i386_diskimage ( ) (
 	( cd ${NANO_WORLDDIR} && find . -print | cpio -dump ${MNT} )
 	df -i ${MNT}
 	echo "Generating mtree..."
-	( cd ${MNT} && mtree -c ) > ${MAKEOBJDIRPREFIX}/_.mtree
-	( cd ${MNT} && du -k ) > ${MAKEOBJDIRPREFIX}/_.du
+	( cd ${MNT} && mtree -c ) > ${NANO_OBJ}/_.mtree
+	( cd ${MNT} && du -k ) > ${NANO_OBJ}/_.du
 	umount ${MNT}
 
 	if [ $NANO_IMAGES -gt 1 -a $NANO_INIT_IMG2 -gt 0 ] ; then
@@ -466,7 +471,6 @@ create_i386_diskimage ( ) (
 			sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/g" $f
 		done
 		umount ${MNT}
-
 	fi
 	
 	# Create Config slice
@@ -480,21 +484,21 @@ create_i386_diskimage ( ) (
 	fi
 
 	if [ "${NANO_MD_BACKING}" = "swap" ] ; then
-		echo "Writing out _.disk.full..."
+		echo "Writing out ${NANO_IMGNAME}..."
 		dd if=/dev/${MD} of=${IMG} bs=64k
 	fi
 
 	echo "Writing out _.disk.image..."
 	dd if=/dev/${MD}s1 of=${NANO_DISKIMGDIR}/_.disk.image bs=64k
 	mdconfig -d -u $MD
-	) > ${MAKEOBJDIRPREFIX}/_.di 2>&1
+	) > ${NANO_OBJ}/_.di 2>&1
 )
 
 last_orders () (
 	# Redefine this function with any last orders you may have
 	# after the build completed, for instance to copy the finished
 	# image to a more convenient place:
-	# cp ${MAKEOBJDIRPREFIX}/_.disk.image /home/ftp/pub/nanobsd.disk
+	# cp ${NANO_DISKIMGDIR}/_.disk.image /home/ftp/pub/nanobsd.disk
 )
 
 #######################################################################
@@ -660,7 +664,8 @@ late_customize_cmd () {
 #	Print $2 at level $1.
 pprint() {
     if [ "$1" -le $PPLEVEL ]; then
-	printf "%.${1}s %s\n" "#####" "$2"
+	runtime=$(( `date +%s` - $NANO_STARTTIME ))
+	printf "%s %.${1}s %s\n" "`date -u -r $runtime +%H:%M:%S`" "#####" "$2" 1>&3
     fi
 }
 
@@ -751,19 +756,13 @@ fi
 #######################################################################
 # Setup and Export Internal variables
 #
-if [ "x${NANO_OBJ}" = "x" ] ; then
-	MAKEOBJDIRPREFIX=/usr/obj/nanobsd.${NANO_NAME}/
-	NANO_OBJ=${MAKEOBJDIRPREFIX}
-else
-	MAKEOBJDIRPREFIX=${NANO_OBJ}
-fi
-
-if [ "x${NANO_DISKIMGDIR}" = "x" ] ; then
-	NANO_DISKIMGDIR=${MAKEOBJDIRPREFIX}
-fi
-
-NANO_WORLDDIR=${MAKEOBJDIRPREFIX}/_.w
-NANO_MAKE_CONF=${MAKEOBJDIRPREFIX}/make.conf
+test -n "${NANO_OBJ}" || NANO_OBJ=/usr/obj/nanobsd.${NANO_NAME}/
+test -n "${MAKEOBJDIRPREFIX}" || MAKEOBJDIRPREFIX=${NANO_OBJ}
+test -n "${NANO_DISKIMGDIR}" || NANO_DISKIMGDIR=${NANO_OBJ}
+
+NANO_WORLDDIR=${NANO_OBJ}/_.w
+NANO_MAKE_CONF_BUILD=${MAKEOBJDIRPREFIX}/make.conf.build
+NANO_MAKE_CONF_INSTALL=${NANO_OBJ}/make.conf.install
 
 if [ -d ${NANO_TOOLS} ] ; then
 	true
@@ -791,7 +790,8 @@ export NANO_DRIVE
 export NANO_HEADS
 export NANO_IMAGES
 export NANO_IMGNAME
-export NANO_MAKE_CONF
+export NANO_MAKE_CONF_BUILD
+export NANO_MAKE_CONF_INSTALL
 export NANO_MEDIASIZE
 export NANO_NAME
 export NANO_NEWFS
@@ -807,6 +807,10 @@ export NANO_BOOTLOADER
 #######################################################################
 # And then it is as simple as that...
 
+# File descriptor 3 is used for logging output, see pprint
+exec 3>&1
+
+NANO_STARTTIME=`date +%s`
 pprint 1 "NanoBSD image ${NANO_NAME} build starting"
 
 if $do_world ; then
@@ -840,7 +844,6 @@ prune_usr
 run_late_customize
 if $do_image ; then
 	create_${NANO_ARCH}_diskimage
-	echo "# Created NanoBSD disk image: ${MAKEOBJDIRPREFIX}/${NANO_IMGNAME}"
 else
 	pprint 2 "Skipping image build (as instructed)"
 fi


More information about the svn-src-all mailing list