Seed code for ipa-deployer
[ta/ipa-deployer.git] / work / iso-image-create
diff --git a/work/iso-image-create b/work/iso-image-create
new file mode 100755 (executable)
index 0000000..879e72a
--- /dev/null
@@ -0,0 +1,154 @@
+#!/bin/bash
+#
+# Copyright 2012 Hewlett-Packard Development Company, L.P.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+# This script generates iso image from the given kernel and ramdisk
+
+SCRIPTNAME=`basename $0`
+TMP_BUILD_DIR="/tmp/$SCRIPTNAME.$$"
+QEMU_IMG="/usr/bin/qemu-img"
+MKISOFS="/usr/bin/mkisofs"
+
+
+function show_options() {
+
+    echo "Usage: ${SCRIPTNAME} [options]"
+    echo
+    echo "Options:"
+
+    echo "    -o output filename "
+    echo "    -i initrd "
+    echo "    -k kernel "
+}
+
+function cleanup() {
+
+    v_print "Cleaning up.."
+    rm -rf $TMP_BUILD_DIR
+}
+
+function err_print() {
+    echo "ERROR: $@" 1>&2;
+}
+
+function v_print() {
+
+    echo "$*"
+}
+
+
+# Parse command line options
+ARGS=`getopt -o "o:i:k:" -l "output,initrd,kernel:" \
+      -n "$SCRIPTNAME" -- "$@"`
+if [ $? -ne 0 ];
+then
+        exit 1
+fi
+
+eval set -- "$ARGS"
+
+while true ; do
+    case "$1" in
+        -o) OUTPUT_FILENAME=$2; shift 2 ;;
+        -i) INITRD=$2; shift 2 ;;
+        -k) KERNEL=$2; shift 2 ;;
+        # *)  show_options ; exit 1 ;;
+        --) shift; break ;;
+    esac
+done
+
+# Verify whether kernel, initrd, and the image file is present
+if [ -z "$OUTPUT_FILENAME" ]; then
+    err_print "Output filename not provided."
+    show_options
+    exit 1
+fi
+
+if [ -z "$INITRD" ]; then
+    err_print "Initrd not provided."
+    show_options
+    exit 1
+fi
+
+if [ -z "$KERNEL" ]; then
+    err_print "Kernel not provided."
+    show_options
+    exit 1
+fi
+
+# Create a temporary build directory for holiding the contents of iso
+TMP_IMAGE_DIR="$TMP_BUILD_DIR/image"
+v_print "Creating temporary directory $TMP_IMAGE_DIR"
+mkdir -p "$TMP_IMAGE_DIR"
+
+# Copy isolinux bin to the isolinux directory
+mkdir -p "$TMP_IMAGE_DIR/isolinux"
+v_print "Copying isolinux.bin"
+if [ -f /usr/share/syslinux/isolinux.bin ]
+then
+    cp /usr/share/syslinux/isolinux.bin "$TMP_IMAGE_DIR/isolinux"
+
+elif [ -f /usr/lib/syslinux/isolinux.bin ]
+then
+    cp /usr/lib/syslinux/isolinux.bin "$TMP_IMAGE_DIR/isolinux"
+else
+    err_print "Could not find isolinux.bin. Install syslinux?"
+    cleanup
+    exit 1
+fi
+
+
+# Copy initrd, kernel
+v_print "Copying kernel to $TMP_IMAGE_DIR/vmlinuz"
+cp $KERNEL "$TMP_IMAGE_DIR/vmlinuz"
+if [ $? -ne 0 ]; then
+    err_print "Failed to copy $KERNEL to $TMP_IMAGE_DIR"
+    cleanup
+    exit 1
+fi
+
+v_print "Copying initrd to $TMP_IMAGE_DIR/initrd"
+cp $INITRD "$TMP_IMAGE_DIR/initrd"
+if [ $? -ne 0 ]; then
+    err_print "Failed to copy $INITRD to $TMP_IMAGE_DIR"
+    cleanup
+    exit 1
+fi
+
+# Generate isolinux.cfg for default booting
+v_print "Generating isolinux.cfg"
+echo "\
+DEFAULT install
+LABEL install
+    menu label "Install image"
+    kernel /vmlinuz
+    append initrd=/initrd boot_method=vmedia console=tty0 console=ttyS1,115200 selinux=0 --
+TIMEOUT 5
+PROMPT 0 " > "$TMP_IMAGE_DIR/isolinux/isolinux.cfg"
+
+# Convert relative path output filename to absolute path
+echo $OUTPUT_FILENAME | grep -q '^/'
+if [ $? -ne 0 ]; then
+    OUTPUT_FILENAME="$PWD/$OUTPUT_FILENAME"
+fi
+
+# Create the ISO
+v_print "Generating the ISO"
+cd $TMP_IMAGE_DIR && $MKISOFS -r -V "INSTALL_IMAGE" -cache-inodes -J -l -b isolinux/isolinux.bin  -no-emul-boot -boot-load-size 4 -boot-info-table -o $OUTPUT_FILENAME .
+
+# Cleanup
+cleanup
+