Given a kernel rpm file, this script updates the bootcd with a new
[bootcd.git] / build.sh
index afe0190..344ccb0 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -28,6 +28,7 @@ OUTPUT_BASE=
 DRY_RUN=""
 OUTPUT_NAME=""
 TYPES=""
+KARGS_STR=""
 
 # various globals
 BUILDTMP=""
@@ -40,6 +41,7 @@ console_dev=""
 console_baud=""
 console_spec=""
 console_serial_line=""
+kernel_args=""
 
 
 #################### compute all supported types
@@ -97,19 +99,8 @@ function init_and_check () {
        . /etc/planetlab/plc_config
     fi
 
-    # From within a myplc chroot /usr/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.
-    BUILDTMP=/usr/tmp
-    if [ -d /data/tmp ] ; then
-       isreadonly=$(mktemp /data/tmp/isreadonly.XXXXXX || /bin/true)
-       if [ -n "$isreadonly" ] ; then
-            rm -f "$isreadonly"
-            BUILDTMP=/data/tmp
-       fi
-    fi
+    # use /var/tmp that should be large enough on both chroot- or vserver-based myplc
+    BUILDTMP=/var/tmp
 
     FULL_VERSION_STRING="${PLC_NAME} BootCD ${BOOTCD_VERSION}"
 
@@ -140,6 +131,7 @@ usage() {
     echo "    -o output-name   The full name of the generated file"
     echo "    -C custom-dir    Custom directory"
     echo "    -n               Dry run - mostly for debug/test purposes"
+    echo "    -k               Add additional parameters to the kargs.txt file"
     echo "    -h               This message"
     echo "All known types: $ALL_TYPES"
     exit 1
@@ -151,7 +143,7 @@ function parse_command_line () {
     # init
     TYPES=""
     # Get options
-    while getopts "f:t:as:SO:o:C:nh" opt ; do
+    while getopts "f:t:as:SO:o:C:k:nh" opt ; do
        case $opt in
            f) NODE_CONFIGURATION_FILE=$OPTARG ;;
            t) TYPES="$TYPES $OPTARG" ;;
@@ -161,6 +153,7 @@ function parse_command_line () {
            O) OUTPUT_BASE="$OPTARG" ;;
            o) OUTPUT_NAME="$OPTARG" ;;
            C) CUSTOM_DIR="$OPTARG" ;;
+           k) KARGS_STR="$KARGS_STR $OPTARG" ;;
            n) DRY_RUN=true ;;
            h|*) usage ;;
        esac
@@ -310,10 +303,18 @@ EOF
     if [ -f "$NODE_CONFIGURATION_FILE" ] ; then
        echo "* Installing node configuration file $NODE_CONFIGURATION_FILE -> /usr/boot/plnode.txt of the bootcd image"
        install -D -m 644 $NODE_CONFIGURATION_FILE $OVERLAY/usr/boot/plnode.txt
+       NODE_ID=$(source $NODE_CONFIGURATION_FILE; echo $NODE_ID)
+       echo "* Building network configuration for $NODE_ID"
+       plnet -- --root $OVERLAY --files-only --program BootCD $NODE_ID
     fi
 
     if [ -n "$IS_SERIAL" ] ; then
-       echo "${console_spec}" > $OVERLAY/kargs.txt
+       KARGS_STR="$KARGS_STR ${console_spec}"
+    fi
+
+    if [ -n "$KARGS_STR" ] ; then
+       echo "$KARGS_STR" > $OVERLAY/kargs.txt
+       kernel_args=$KARGS_STR
     fi
 
     # Pack overlay files into a compressed archive
@@ -346,7 +347,7 @@ 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 ${console_spec}
+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
@@ -354,9 +355,7 @@ EOF
 
     # Create ISO image
     echo "* Creating ISO image"
-    mkisofs -o "$iso" \
-        $MKISOFS_OPTS \
-        $ISOFS
+    mkisofs -o "$iso" $MKISOFS_OPTS $ISOFS
 }
 
 #################### USB with partitions
@@ -396,7 +395,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 ${console_spec}
+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
@@ -429,7 +428,7 @@ function build_usb() {
     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 ${console_spec}
+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
@@ -586,7 +585,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 ${console_spec}
+APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${kernel_args}
 DISPLAY pl_version
 PROMPT 0
 TIMEOUT 40
@@ -624,7 +623,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 ${console_spec}
+APPEND ramdisk_size=$cramfs_size initrd=cramfs.img root=/dev/ram0 ro ${kernel_args}
 DISPLAY pl_version
 PROMPT 0
 TIMEOUT 40