Setting tag bootcd-5.4-1
[bootcd.git] / build.sh
index 16adabd..5ce3605 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -7,14 +7,26 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2004-2007 The Trustees of Princeton University
 #
+# Jan 2015 - f21 comes with isolinux 6.03 (was 4.05 in f20)
+# http://www.syslinux.org/wiki/index.php/ISOLINUX
 
 COMMAND=$(basename $0)
 DIRNAME=$(dirname $0)
 PATH=/sbin:/bin:/usr/sbin:/usr/bin
 
-DEBUG_SYSTEMD=""
-# uncomment this on to get systemd's full log on console (slows things down)
-#DEBUG_SYSTEMD=true
+# debugging flags
+# keep KERNEL_DEBUG_ARGS void for production
+KERNEL_DEBUG_ARGS=""
+# add more flags here for debugging
+# KERNEL_DEBUG_ARGS="$KERNEL_DEBUG_ARGS some_other_kernel_arg"
+# see also
+#  (*) GetBootMedium that has some provisions for common
+#      kargs, like e.g. for removing the hangcheck feature,
+#      or for turning on debug messages for systemd
+#      these can be turned on with tags on the node
+#  (*) tests default config, that uses this feature so
+#      the tests can benefit these features, without deploying
+#      them by default in production
 
 # defaults
 DEFAULT_TYPES="usb iso"
@@ -23,6 +35,10 @@ GRAPHIC_CONSOLE="graphic"
 SERIAL_CONSOLE="ttyS0:115200:n:8"
 CONSOLE_INFO=$GRAPHIC_CONSOLE
 MKISOFS_OPTS="-R -J -r -f -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
+# isolinux-debug.bin is supposedly helpful as well if available,
+# when things don't work as expected
+#MKISOFS_OPTS="-R -J -r -f -b isolinux-debug.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table"
+
 FREE_SPACE=4096
 
 # command-line settable args
@@ -230,14 +246,26 @@ function build_overlay () {
 
     BUILDTMP=$(mktemp -d ${BUILDTMP}/bootcd.XXXXXX)
     push_cleanup rm -fr "${BUILDTMP}"
-    mkdir "${BUILDTMP}/isofs"
+
+    # initialize ISOFS
+    ISOFS="${BUILDTMP}/isofs"
+    mkdir -p "$ISOFS"
     for i in "$ISOREF"/isofs/{bootcd.img,kernel}; do
-       ln -s "$i" "${BUILDTMP}/isofs"
+       ln -s "$i" "$ISOFS"
+    done
+    # use new location as of fedora 12
+    # used to be in /usr/lib/syslinux/isolinux.bin
+    # removed backward compat in jan. 2015
+    # as of syslinux 6.05 (fedora 21) ldlinux.c32 is required by isolinux.bin
+    # the debug version can come in handy at times, and is 40k as well
+    isolinuxdir="/usr/share/syslinux"
+    # ship only what is mandatory, and forget about
+    # (*) isolinux-debug.bin as its name confuses mkisofs
+    # (*) memdisk that is not useful
+    isolinuxfiles="isolinux.bin ldlinux.c32"
+    for isolinuxfile in $isolinuxfiles; do
+       [ -f $isolinuxdir/$isolinuxfile ] && cp $isolinuxdir/$isolinuxfile "${BUILDTMP}/isofs"
     done
-    # the syslinux that comes with f12 has this file in a new location
-    cp "/usr/lib/syslinux/isolinux.bin" "${BUILDTMP}/isofs" \
-       || cp "/usr/share/syslinux/isolinux.bin" "${BUILDTMP}/isofs" 
-    ISOFS="${BUILDTMP}/isofs"
 
     # Root of the ISO and USB images
     echo "* Populating root filesystem..."
@@ -325,6 +353,19 @@ EOF
     # build/passwd copied out by prep.sh
     sed -e "s@^root:[^:]*:\(.*\)@root:$ROOT_PASSWORD:\1@" ${VARIANT}/passwd >$OVERLAY/etc/passwd
 
+# this is more harmful than helpful
+# idea being, since we start a full-featured fedora system now, it would
+# have been nice to be able to enter sshd very early on - before bm has even been downloaded
+# however somehow it appears that these lines ruin all chances to enter ssh at all
+# either early or even later on;
+# plus, it is unclear what this would give on non=systemd nodes, so I am backing off for now    
+#    # recent bootCDs rely on a standard systemd startup sequence
+#    # so allow debug key to enter in this context whenever that makes sense
+#    mkdir -p $OVERLAY/root/.ssh
+#    chmod 700 $OVERLAY/root/.ssh
+#    cp $PLC_DEBUG_SSH_KEY_PUB $OVERLAY/root/.ssh/authorized_keys
+#    chmod 600 $OVERLAY/root/.ssh/authorized_keys
+
     # Install node configuration file (e.g., if node has no floppy disk or USB slot)
     if [ -f "$NODE_CONFIGURATION_FILE" ] ; then
        echo "* Installing node configuration file $NODE_CONFIGURATION_FILE -> /usr/boot/plnode.txt of the bootcd image"
@@ -341,13 +382,9 @@ EOF
     KERNEL_ARGS="$KERNEL_ARGS biosdevname=0"
     # making sure selinux is turned off - somehow this is needed with lxc/f14
     KERNEL_ARGS="$KERNEL_ARGS selinux=0"
-# cannot use this mecahnism to set systemd default target because this applies to kexec boots as well
-#    # set default target for systemd
-#    KERNEL_ARGS="$KERNEL_ARGS systemd.unit=pl_boot.target"
-    # output more systemd-related messages on the console
-    KERNEL_ARGS="$KERNEL_ARGS systemd.log_target=console"
-    # this slows down system init but is very helpful when e.g. trying to run on a new distro
-    [ -n "$DEBUG_SYSTEMD" ] && KERNEL_ARGS="$KERNEL_ARGS systemd.log_level=debug systemd.journald.forward_to_console=1"
+    # add any debug flag if any (defined in the header of this script)
+    KERNEL_ARGS="$KERNEL_ARGS $KERNEL_DEBUG_ARGS"
+    # propagate kernel args for later boot stages
     [ -n "$KERNEL_ARGS" ] && echo "$KERNEL_ARGS" > $OVERLAY/kargs.txt
 
     # Pack overlay files into a compressed archive
@@ -379,15 +416,21 @@ function build_iso() {
     # Write isolinux configuration
     cat >$ISOFS/isolinux.cfg <<EOF
 ${console_serial_line}
-DEFAULT kernel
-APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
-DISPLAY pl_version
 PROMPT 0
-TIMEOUT 40
+DEFAULT planetlab-bootcd
+
+LABEL planetlab-bootcd
+  DISPLAY pl_version
+  LINUX kernel
+  APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
 EOF
 
     # Create ISO image
-    echo "* Creating ISO image"
+    echo "* Generated isolinux.cfg -------------------- BEG"
+    cat $ISOFS/isolinux.cfg
+    echo "* Generated isolinux.cfg -------------------- END"
+    echo "* Creating ISO image in pwd=$(pwd)"
+    echo "* with command mkisofs -o $iso $MKISOFS_OPTS $ISOFS"
     mkisofs -o "$iso" $MKISOFS_OPTS $ISOFS
 }
 
@@ -432,11 +475,13 @@ EOF
     tmp="${BUILDTMP}/syslinux.cfg"
     cat >$tmp <<EOF
 ${console_serial_line}
-DEFAULT kernel
-APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
-DISPLAY pl_version
 PROMPT 0
-TIMEOUT 40
+DEFAULT planetlab-bootcd
+
+LABEL planetlab-bootcd
+  DISPLAY pl_version
+  LINUX kernel
+  APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
 EOF
     mdel -i "$usb" z:/isolinux.cfg 2>/dev/null || :
     mcopy -i "$usb" "$tmp" z:/syslinux.cfg
@@ -472,11 +517,13 @@ EOF
     tmp="${BUILDTMP}/syslinux.cfg"
     cat >$tmp <<EOF
 ${console_serial_line}
-DEFAULT kernel
-APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
-DISPLAY pl_version
 PROMPT 0
-TIMEOUT 40
+DEFAULT planetlab-bootcd
+
+LABEL planetlab-bootcd
+  DISPLAY pl_version
+  LINUX kernel
+  APPEND ramdisk_size=$ramdisk_size initrd=bootcd.img,overlay.img${custom:+,custom.img} root=/dev/ram0 rw ${KERNEL_ARGS}
 EOF
     mdel -i "$usb" ::/isolinux.cfg 2>/dev/null || :
     mcopy -i "$usb" "$tmp" ::/syslinux.cfg
@@ -634,11 +681,13 @@ function build_iso_cramfs() {
     (cd $ISOFS && find . | grep -v "\.img$" | cpio -p -d -u $tmp/)
     cat >$tmp/isolinux.cfg <<EOF
 ${console_serial_line}
-DEFAULT kernel
-APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${KERNEL_ARGS}
-DISPLAY pl_version
 PROMPT 0
-TIMEOUT 40
+DEFAULT planetlab-bootcd
+
+LABEL planetlab-bootcd
+  DISPLAY pl_version
+  LINUX kernel
+  APPEND ramdisk_size=$ramdisk_size initrd=cramfs.img root=/dev/ram0 rw ${KERNEL_ARGS}
 EOF
 
     cp ${BUILDTMP}/cramfs.img $tmp
@@ -672,11 +721,13 @@ function build_usb_cramfs() {
     tmp="${BUILDTMP}/syslinux.cfg"
     cat >$tmp <<EOF
 ${console_serial_line}
-DEFAULT kernel
-APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${KERNEL_ARGS}
-DISPLAY pl_version
 PROMPT 0
-TIMEOUT 40
+DEFAULT planetlab-bootcd
+
+LABEL planetlab-bootcd
+  DISPLAY pl_version
+  LINUX kernel
+  APPEND ramdisk_size=$ramdisk_size initrd=cramfs.img root=/dev/ram0 rw ${KERNEL_ARGS}
 EOF
 
     mcopy -bsQ -i "$usb" "$tmp" ::/syslinux.cfg
@@ -736,7 +787,7 @@ function main () {
 
     init_and_check
 
-    echo "* Building images for $FULL_VERSION_STRING"
+    echo "* Building bootcd images for $NODE_CONFIGURATION_FILE ($FULL_VERSION_STRING) - $(date +%H-%M:%S)"
     # Do not tolerate errors
     set -e
     trap "do_cleanup" ERR INT EXIT
@@ -745,6 +796,7 @@ function main () {
     build_overlay
     build_types
 
+    echo "* Done with bootcd images for $NODE_CONFIGURATION_FILE - $(date +%H-%M:%S)"
     exit 0
 }