--- tools/tools/nanobsd/nanobsd.sh.orig 2010-06-13 20:09:06.000000000 -0600
+++ tools/tools/nanobsd/nanobsd.sh 2010-11-12 17:50:35.000000000 -0700
@@ -131,9 +131,15 @@
# Progress Print level
PPLEVEL=3
+# Set NANO_LABEL to non-blank to form the basis for using /dev/ufs/label
+# in preference to /dev/${NANO_DRIVE}
+# Root partition will be ${NANO_LABEL}s{1,2}
+# /cfg partition will be ${NANO_LABEL}s3
+# /data partition will be ${NANO_LABEL}s4
+NANO_LABEL=""
+
#######################################################################
# Not a variable at this time
-
NANO_ARCH=`uname -p`
#######################################################################
@@ -354,6 +360,40 @@
done
)
+newfs_part ( ) (
+ local dev mnt lbl
+ dev=$1
+ mnt=$2
+ lbl=$3
+ echo newfs ${NANO_NEWFS} ${NANO_LABEL:+-L${NANO_LABEL}${lbl}} ${dev}
+ newfs ${NANO_NEWFS} ${NANO_LABEL:+-L${NANO_LABEL}${lbl}} ${dev}
+ mount ${dev} ${mnt}
+)
+
+populate_slice ( ) (
+ local dev dir mnt lbl
+ dev=$1
+ dir=$2
+ mnt=$3
+ lbl=$4
+ test -z $2 && dir=/var/empty
+ test -d $dir || dir=/var/empty
+ echo "Creating ${dev} with ${dir} (mounting on ${mnt})"
+ newfs_part $dev $mnt $lbl
+ cd ${dir}
+ find . -print | grep -Ev '/(CVS|\.svn)' | cpio -dumpv ${mnt}
+ df -i ${mnt}
+ umount ${mnt}
+)
+
+populate_cfg_slice ( ) (
+ populate_slice "$1" "$2" "$3" "$4"
+)
+
+populate_data_slice ( ) (
+ populate_slice "$1" "$2" "$3" "$4"
+)
+
create_i386_diskimage ( ) (
pprint 2 "build diskimage"
pprint 3 "log: ${NANO_OBJ}/_.di"
@@ -453,12 +493,8 @@
bsdlabel ${MD}s1
# Create first image
- newfs ${NANO_NEWFS} /dev/${MD}s1a
- mount /dev/${MD}s1a ${MNT}
- df -i ${MNT}
- echo "Copying worlddir..."
- ( cd ${NANO_WORLDDIR} && find . -print | cpio -dump ${MNT} )
- df -i ${MNT}
+ populate_slice /dev/${MD}s1a ${NANO_WORLDDIR} ${MNT} "s1a"
+ mount -o async /dev/${MD}s1a ${MNT}
echo "Generating mtree..."
( cd ${MNT} && mtree -c ) > ${NANO_OBJ}/_.mtree
( cd ${MNT} && du -k ) > ${NANO_OBJ}/_.du
@@ -471,19 +507,20 @@
mount /dev/${MD}s2a ${MNT}
for f in ${MNT}/etc/fstab ${MNT}/conf/base/etc/fstab
do
- sed -i "" "s/${NANO_DRIVE}s1/${NANO_DRIVE}s2/g" $f
+ sed -i "" "s=${NANO_DRIVE}s1=${NANO_DRIVE}s2=g" $f
done
umount ${MNT}
+ if [ ! -z ${NANO_LABEL} ]; then
+ tunefs -L ${NANO_LABEL}"s2a" /dev/${MD}s2a
+ fi
fi
# Create Config slice
- newfs ${NANO_NEWFS} /dev/${MD}s3
- # XXX: fill from where ?
+ populate_cfg_slice /dev/${MD}s3 "${NANO_CFGDIR}" ${MNT} "s3"
# Create Data slice, if any.
if [ $NANO_DATASIZE -ne 0 ] ; then
- newfs ${NANO_NEWFS} /dev/${MD}s4
- # XXX: fill from where ?
+ populate_data_slice /dev/${MD}s4 "${NANO_DATADIR}" ${MNT} "s4"
fi
if [ "${NANO_MD_BACKING}" = "swap" ] ; then
@@ -650,19 +687,19 @@
#######################################################################
# Convenience function:
-# Register $1 as customize function.
+# Register all args as customize function.
customize_cmd () {
- NANO_CUSTOMIZE="$NANO_CUSTOMIZE $1"
+ NANO_CUSTOMIZE="$NANO_CUSTOMIZE $*"
}
#######################################################################
# Convenience function:
-# Register $1 as late customize function to run just before
+# Register all args as late customize function to run just before
# image creation.
late_customize_cmd () {
- NANO_LATE_CUSTOMIZE="$NANO_LATE_CUSTOMIZE $1"
+ NANO_LATE_CUSTOMIZE="$NANO_LATE_CUSTOMIZE $*"
}
#######################################################################
@@ -790,6 +827,11 @@
NANO_PMAKE="${NANO_PMAKE} -DNO_CLEAN"
fi
+# Override user's NANO_DRIVE if they specified a NANO_LABEL
+if [ ! -z "${NANO_LABEL}" ]; then
+ NANO_DRIVE=ufs/${NANO_LABEL}
+fi
+
export MAKEOBJDIRPREFIX
export NANO_ARCH
@@ -814,6 +856,7 @@
export NANO_WORLDDIR
export NANO_BOOT0CFG
export NANO_BOOTLOADER
+export NANO_LABEL
#######################################################################
# And then it is as simple as that...