From: Marc Fiuczynski Date: Wed, 23 Aug 2006 12:50:32 +0000 (+0000) Subject: * Added support to build images with the serial line as the console X-Git-Tag: bootcd-3.4-2~54 X-Git-Url: http://git.onelab.eu/?p=bootcd.git;a=commitdiff_plain;h=38d28a2ffec0d8715e69c76d7e71e0736a0c3ce6 * Added support to build images with the serial line as the console * Added support to build cramfs based images, which lets one install on memory constrained systems. These are only built when the -a flag * Intermediate images are now built in /data (if available), rather than in /tmp. The reason being that /tmp within a chroot'ed myplc environment does not have sufficient space. Falls back to using /tmp if /data is not available * Made build.sh be backwards compatible with an RC1 based MyPLC installations. --- diff --git a/build.sh b/build.sh index 968c457..bff2262 100755 --- a/build.sh +++ b/build.sh @@ -10,25 +10,27 @@ # Mark Huang # Copyright (C) 2004-2006 The Trustees of Princeton University # -# $Id$ +# $Id: build.sh,v 1.40 2006/07/25 23:51:39 mlhuang Exp $ # PATH=/sbin:/bin:/usr/sbin:/usr/bin CONFIGURATION=default NODE_CONFIGURATION_FILE= +ALL=0 usage() { echo "Usage: build.sh [OPTION]..." echo " -c name (Deprecated) Static configuration to use (default: $CONFIGURATION)" echo " -f planet.cnf Node to customize CD for (default: none)" + echo " -a Build all images (default: only base images)" echo " -h This message" exit 1 } # Get options -while getopts "c:f:h" opt ; do +while getopts "c:f:ah" opt ; do case $opt in c) CONFIGURATION=$OPTARG @@ -36,6 +38,9 @@ while getopts "c:f:h" opt ; do f) NODE_CONFIGURATION_FILE=$OPTARG ;; + a) + ALL=1 + ;; h|*) usage ;; @@ -66,6 +71,14 @@ if [ -f /etc/planetlab/plc_config ] ; then . /etc/planetlab/plc_config fi +### This support for backwards compatibility can be taken out in the +### future. RC1 based MyPLCs set $PLC_BOOT_SSL_CRT in the plc_config +### file, but >=RC2 based bootcd assumes that $PLC_BOOT_CA_SSL_CRT is +### set. +if [ -z "$PLC_BOOT_CA_SSL_CRT" -a ! -z "$PLC_BOOT_SSL_CRT" ] ; then + PLC_BOOT_CA_SSL_CRT=$PLC_BOOT_SSL_CRT +fi + # If PLC configuration is not valid, try a static configuration if [ -z "$PLC_BOOT_CA_SSL_CRT" -a -d configurations/$CONFIGURATION ] ; then # (Deprecated) Source static configuration @@ -85,8 +98,18 @@ fi FULL_VERSION_STRING="$PLC_NAME BootCD $BOOTCD_VERSION" +echo "* Building images for $FULL_VERSION_STRING" + +# From within a myplc chroot /tmp is too small to build +# all possible images, whereas /data is part of the host +# filesystem and usually has sufficient space. What we +# should do is check whether the expected amount of space +# is available. +[ -d /data ] && BUILDTMP=/data || BUILDTMP=/tmp + # Root of the ISO and USB images -overlay=$(mktemp -d /tmp/overlay.XXXXXX) +echo "* Populating root filesystem..." +overlay=$(mktemp -d ${BUILDTMP}/overlay.XXXXXX) install -d -m 755 $overlay trap "rm -rf $overlay" ERR INT @@ -208,29 +231,319 @@ mkisofs -o "$iso" \ -no-emul-boot -boot-load-size 4 -boot-info-table \ $isofs +echo "* Creating ISO image with serial line support" +iso="$PLC_NAME-BootCD-$BOOTCD_VERSION-serial.iso" +cat >$isofs/isolinux.cfg <$tmp/syslinux.cfg <$tmp/syslinux.cfg <./etc/fstab < etc/rc.d/init.d/pl_rsysinit < /tmp/etc/mtab + +# copy over directory contents of all _o directories from /etc and /var +# /tmp/etc and /tmp/var +pushd /etc +for odir in \$(cd /etc && ls -d *_o); do dir=\$(echo \$odir | sed 's,\_o$,,'); (mkdir -p /tmp/etc/\$dir && cd \$odir && find . | cpio -p -d -u /tmp/etc/\$dir); done +popd +pushd /var +for odir in \$(cd /var && ls -d *_o); do dir=\$(echo \$odir | sed 's,\_o$,,'); (mkdir -p /tmp/var/\$dir && cd \$odir && find . | cpio -p -d -u /tmp/var/\$dir); done +popd + +echo "done" +# hand over to pl_sysinit +echo "pl_rsysinit: handing over to pl_sysinit" +/etc/init.d/pl_sysinit +EOF +chmod +x etc/rc.d/init.d/pl_rsysinit + +popd + +chown -R 0.0 $cramfs + +#create the cramfs image +echo "* Creating cramfs image" +mkfs.cramfs $tmp/ $cramfs +# Leave 1 MB of free space on the VFAT filesystem +cramfs_size=$(($(du -sk $cramfs | awk '{ print $1; }'))) +mv $cramfs ${BUILDTMP}/cramfs.img +rm -rf $tmp +trap - ERR INT + +# Create ISO CRAMFS image +echo "* Creating ISO CRAMFS-based image" +iso="$PLC_NAME-BootCD-$BOOTCD_VERSION-cramfs.iso" + +tmp=$(mktemp -d ${BUILDTMP}/bootcd.XXXXXX) +trap "$tmp; rm -rf $tmp" ERR INT +(cd $isofs && find . | grep -v "\.img$" | cpio -p -d -u $tmp/) +cat >$tmp/isolinux.cfg <$tmp/isolinux.cfg <$tmp/syslinux.cfg <$tmp/syslinux.cfg <