temp version that at least fixes a serious regression in previous revision
[bootcd.git] / build.sh
index b7be938..bfec840 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -7,13 +7,15 @@
 # Mark Huang <mlhuang@cs.princeton.edu>
 # Copyright (C) 2004-2007 The Trustees of Princeton University
 #
-# $Id$
-#
 
 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
+
 # defaults
 DEFAULT_TYPES="usb iso"
 # Leave 4 MB of free space
@@ -30,7 +32,7 @@ OUTPUT_BASE=
 DRY_RUN=""
 OUTPUT_NAME=""
 TYPES=""
-KARGS_STR=""
+KERNEL_ARGS=""
 
 # various globals
 BUILDTMP=""
@@ -43,7 +45,6 @@ console_dev=""
 console_baud=""
 console_spec=""
 console_serial_line=""
-kernel_args=""
 
 
 #################### compute all supported types
@@ -163,7 +164,7 @@ function parse_command_line () {
            o) OUTPUT_NAME="$OPTARG" ;;
            C) CUSTOM_DIR="$OPTARG" ;;
            V) VARIANT="$OPTARG" ;;
-           k) KARGS_STR="$KARGS_STR $OPTARG" ;;
+           k) KERNEL_ARGS="$KERNEL_ARGS $OPTARG" ;;
            n) DRY_RUN=true ;;
            h|*) usage ;;
        esac
@@ -229,14 +230,23 @@ 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 5.0 (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"
+    isolinuxfiles="isolinux.bin ldlinux.c32 isolinux-debug.bin"
+    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..."
@@ -333,14 +343,21 @@ EOF
        plnet -- --root $OVERLAY --files-only --program BootCD $NODE_ID
     fi
 
-    if [ -n "$IS_SERIAL" ] ; then
-       KARGS_STR="$KARGS_STR ${console_spec}"
-    fi
-
-    if [ -n "$KARGS_STR" ] ; then
-       echo "$KARGS_STR" > $OVERLAY/kargs.txt
-       kernel_args=$KARGS_STR
-    fi
+    [ -n "$IS_SERIAL" ] && KERNEL_ARGS="$KERNEL_ARGS ${console_spec}"
+
+    # tmp: should be restricted to f15 nodes and above
+    # making sure the network interfaces are still numbered eth0 and above
+    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"
+    [ -n "$KERNEL_ARGS" ] && echo "$KERNEL_ARGS" > $OVERLAY/kargs.txt
 
     # Pack overlay files into a compressed archive
     echo "* Compressing overlay image"
@@ -372,14 +389,14 @@ function build_iso() {
     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}
+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
 EOF
 
     # Create ISO image
-    echo "* Creating ISO image"
+    echo "* Creating ISO image in $(pwd)"
     mkisofs -o "$iso" $MKISOFS_OPTS $ISOFS
 }
 
@@ -425,7 +442,7 @@ EOF
     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}
+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
@@ -465,7 +482,7 @@ EOF
     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}
+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
@@ -548,9 +565,12 @@ EOF
     popd
 
     # update etc/inittab to start with pl_rsysinit
-    sed -i 's,pl_sysinit,pl_rsysinit,' etc/inittab
+    for file in etc/inittab etc/event.d/rcS etc/init/rcS.conf; do
+       [ -f $file ] && sed -i 's,pl_sysinit,pl_rsysinit,' $file
+    done
 
     # modify inittab to have a serial console
+    # xxx this might well be broken with f12 and above xxx
     if [ -n "$serial" ] ; then
        echo "T0:23:respawn:/sbin/agetty -L $console_dev $console_baud vt100" >> etc/inittab
         # and let root log in
@@ -624,7 +644,7 @@ function build_iso_cramfs() {
     cat >$tmp/isolinux.cfg <<EOF
 ${console_serial_line}
 DEFAULT kernel
-APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${kernel_args}
+APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${KERNEL_ARGS}
 DISPLAY pl_version
 PROMPT 0
 TIMEOUT 40
@@ -662,7 +682,7 @@ function build_usb_cramfs() {
     cat >$tmp <<EOF
 ${console_serial_line}
 DEFAULT kernel
-APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${kernel_args}
+APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${KERNEL_ARGS}
 DISPLAY pl_version
 PROMPT 0
 TIMEOUT 40