# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2004-2007 The Trustees of Princeton University
#
-# $Id$
-#
+# 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
+# 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"
# Leave 4 MB of free space
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
DRY_RUN=""
OUTPUT_NAME=""
TYPES=""
-KARGS_STR=""
+KERNEL_ARGS=""
# various globals
BUILDTMP=""
console_baud=""
console_spec=""
console_serial_line=""
-kernel_args=""
#################### compute all supported types
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
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"
+ isolinuxfiles="isolinux.bin ldlinux.c32 isolinux-debug.bin memdisk"
+ 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..."
plnet -- --root $OVERLAY --files-only --program BootCD $NODE_ID
fi
- if [ -n "$IS_SERIAL" ] ; then
- KARGS_STR="$KARGS_STR ${console_spec}"
- fi
+ [ -n "$IS_SERIAL" ] && KERNEL_ARGS="$KERNEL_ARGS ${console_spec}"
- if [ -n "$KARGS_STR" ] ; then
- echo "$KARGS_STR" > $OVERLAY/kargs.txt
- kernel_args=$KARGS_STR
- fi
+ # 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"
+ # output systemd-related messages on the serial line so it gets with log.txt
+ KERNEL_ARGS="$KERNEL_ARGS systemd.log_target=console console=ttyS0,115200"
+ # 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
echo "* Compressing overlay image"
# 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 "* Creating ISO image in $(pwd)"
mkisofs -o "$iso" $MKISOFS_OPTS $ISOFS
}
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
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
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
(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
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
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
build_overlay
build_types
+ echo "* Done with bootcd images for $NODE_CONFIGURATION_FILE - $(date +%H-%M:%S)"
exit 0
}