-# init
-TYPES=""
-# Get options
-while getopts "c:f:t:as:O:o:C:nh" opt ; do
- case $opt in
- c)
- CONFIGURATION=$OPTARG ;;
- f)
- NODE_CONFIGURATION_FILE=$OPTARG ;;
- t)
- TYPES="$TYPES $OPTARG" ;;
- a)
- TYPES="$ALL_TYPES" ;;
- s)
- CONSOLE_INFO="$OPTARG"
- [ "$CONSOLE_INFO" == "default" ] && CONSOLE_INFO=$SERIAL_CONSOLE
- ;;
- O)
- OUTPUT_BASE="$OPTARG" ;;
- o)
- OUTPUT_NAME="$OPTARG" ;;
- C)
- CUSTOM_DIR="$OPTARG" ;;
- n)
- DRY_RUN=true ;;
- h|*)
- usage ;;
- esac
-done
-
-# use default if not set
-[ -z "$TYPES" ] && TYPES="$DEFAULT_TYPES"
-
-# Do not tolerate errors
-set -e
-
-# Change to our source directory
-srcdir=$(cd $(dirname $0) && pwd -P)
-pushd $srcdir
-
-# Root of the isofs
-isofs=$PWD/build/isofs
-
-# The reference image is expected to have been built by prep.sh (see .spec)
-# we disable the initial logic that called prep.sh if that was not the case
-# this is because prep.sh needs to know pldistro
-if [ ! -f $isofs/bootcd.img -o ! -f build/version.txt ] ; then
- echo "You have to run prep.sh prior to calling $0 - exiting"
- exit 1
-fi
-
-# build/version.txt written by prep.sh
-BOOTCD_VERSION=$(cat build/version.txt)
-
-if [ -f /etc/planetlab/plc_config ] ; then
- # Source PLC configuration
- . /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
- . configurations/$CONFIGURATION/configuration
- PLC_NAME="PlanetLab"
- PLC_MAIL_SUPPORT_ADDRESS="support@planet-lab.org"
- PLC_WWW_HOST="www.planet-lab.org"
- PLC_WWW_PORT=80
- if [ -n "$EXTRA_VERSION" ] ; then
- BOOTCD_VERSION="$BOOTCD_VERSION $EXTRA_VERSION"
- fi
- PLC_BOOT_HOST=$PRIMARY_SERVER
- PLC_BOOT_SSL_PORT=$PRIMARY_SERVER_PORT
- PLC_BOOT_CA_SSL_CRT=configurations/$CONFIGURATION/$PRIMARY_SERVER_CERT
- PLC_ROOT_GPG_KEY_PUB=configurations/$CONFIGURATION/$PRIMARY_SERVER_GPG
-fi
-
-FULL_VERSION_STRING="${PLC_NAME} BootCD ${BOOTCD_VERSION}"
-
-echo "* Building images for $FULL_VERSION_STRING"
-
-# 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
+####################
+function parse_command_line () {
+
+ # init
+ TYPES=""
+ # Get options
+ while getopts "f:t:as:SO:o:C:V:k:nh" opt ; do
+ case $opt in
+ f) NODE_CONFIGURATION_FILE=$OPTARG ;;
+ t) TYPES="$TYPES $OPTARG" ;;
+ a) TYPES="$ALL_TYPES" ;;
+ s) CONSOLE_INFO="$OPTARG" ;;
+ S) CONSOLE_INFO=$SERIAL_CONSOLE ;;
+ O) OUTPUT_BASE="$OPTARG" ;;
+ o) OUTPUT_NAME="$OPTARG" ;;
+ C) CUSTOM_DIR="$OPTARG" ;;
+ V) VARIANT="$OPTARG" ;;
+ k) KERNEL_ARGS="$KERNEL_ARGS $OPTARG" ;;
+ n) DRY_RUN=true ;;
+ h|*) usage ;;
+ esac
+ done
+
+ # use defaults if not set
+ [ -z "$TYPES" ] && TYPES="$DEFAULT_TYPES"
+ [ -z "$VARIANT" ] && VARIANT="build"
+ [ "$CONSOLE_INFO" == "default" ] && CONSOLE_INFO=$SERIAL_CONSOLE
+
+ if [ -n "$NODE_CONFIGURATION_FILE" ] ; then
+ # check existence of NODE_CONFIGURATION_FILE and normalize as we will change directory
+ if [ ! -f "$NODE_CONFIGURATION_FILE" ] ; then
+ echo "Node configuration file $NODE_CONFIGURATION_FILE not found - exiting"
+ exit 1
+ fi
+ cf_dir="$(dirname $NODE_CONFIGURATION_FILE)"
+ cf_dir="$(cd $cf_dir; pwd -P)"
+ cf_file="$(basename $NODE_CONFIGURATION_FILE)"
+ NODE_CONFIGURATION_FILE="$cf_dir"/"$cf_file"