#!/bin/bash
# Author: Steven Shiau <steven _at_ nchc org tw>
# License: GPL

# Load DRBL setting and functions
if [ ! -f "/opt/drbl/sbin/drbl-conf-functions" ]; then
  echo "Unable to find /opt/drbl/sbin/drbl-conf-functions! Program terminated!" 
  exit 1
fi
. /opt/drbl/sbin/drbl-conf-functions

# Load some necessary setting from drbl-ocs.conf
. /opt/drbl/conf/drbl-ocs.conf

# Load basic functions of ocs
. /opt/drbl/sbin/ocs-functions

# Settings
DEBIAN_ISO_URL="http://free.nchc.org.tw/drbl-core/iso/debian-live-for-ocs.iso"
DEBIAN_ISO="$(basename $DEBIAN_ISO_URL)"

#
prog="$(basename $0)"

# functions
USAGE() {
    echo "Usage:"
    echo "To put clonezilla image into live CD:"
    echo "$prog [OPTION] CLONEZILLA_IMAGE_NAME"
    echo "OPTION:"
    language_help_prompt_by_idx_no
    echo "-p, --image-path   Assign the clonezilla image path where CLONEZILLA_IMAGE_NAME exists. Default = $ocsroot"
    echo "$prog will download Debian live CD for clonezilla iso file from $DEBIAN_ISO_URL if ncecessary."
    echo "Ex:"
    echo "To put clonezilla image sarge-ocs (located in /home/partimag in clonezilla server) to Live CD, you can run:"
    echo "$prog sarge-ocs"
    echo "To put more images, just append them, such as:"
    echo "$prog sarge-ocs etch-ocs"
}

#
check_if_root

# Parse command-line options
while [ $# -gt 0 ]; do
  case "$1" in
    -l|--language)
            shift
            if [ -z "$(echo $1 |grep ^-.)" ]; then
              # skip the -xx option, in case 
              specified_lang="$1"
              shift
            fi
	    [ -z "$specified_lang" ] && USAGE && exit 1
            ;;
    -p|--image-path)
            shift
            if [ -z "$(echo $1 |grep ^-.)" ]; then
              # skip the -xx option, in case 
              image_path="$1"
              shift
            fi
	    [ -z "$image_path" ] && USAGE && exit 1
            ;;
    -*)     echo "${0}: ${1}: invalid option" >&2
            USAGE >& 2
            exit 2 ;;
    *)      break ;;
  esac
done
ocs_image="$*"
# strip the / to avoid problem
ocs_image="$(echo $ocs_image | sed -e "s|/||g")"
      
[ -z "$ocs_image" ] && USAGE && exit 1
[ -z "$image_path" ] && image_path=$ocsroot

if ! type mkisofs 2>/dev/null; then
  echo "mkisofs not found!"
  echo "Program terminated!"
  exit 1
fi
#
ask_and_load_lang_set $specified_lang

iso_file="$(basename $DEBIAN_ISO_URL)"
if [ ! -f "$iso_file" ]; then
  echo "We need Debian live CD for Clonnezilla to create clonezilla cd."
  echo "Downloadling the iso file from $DEBIAN_ISO_URL..."
  wget $DEBIAN_ISO_URL
fi

ocs_imgs_with_abs_path=""
for im in $ocs_image; do
  if [ ! -d "$image_path/$im" ]; then
    [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
    echo "clonezilla image path $image_path/$im is NOT found!"
    [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
    echo "Program terminated!"
    exit 1
  fi
  ocs_imgs_with_abs_path="$ocs_imgs_with_abs_path $image_path/$im=$image_path/$im"
  convert_ocs_format_from_1.5_to_2.0_or_newer $image_path/$im/
done
# use the 1st image name as iso filename
iso_label_tag="$(echo $ocs_image | awk -F" " '{print $1}')"

target_iso="clonezilla-${iso_label_tag}.iso"

echo "Creating clonezilla ISO with image(s) $ocs_image from $image_path..."
DEBIAN_ISO_TMP="$(mktemp -d /tmp/ocs-iso.XXXXXX)"
ISOLNX_TMP="$(mktemp -d /tmp/isolnx.XXXXXX)"
mount -o loop $DEBIAN_ISO $DEBIAN_ISO_TMP

# Create the iso image file
# isolinux should be rw, so we have to copy it, and exclude the one in iso image.
cp -a $DEBIAN_ISO_TMP/isolinux $ISOLNX_TMP/
mkisofs -o $target_iso \
 -A "Clonezilla live CD" \
 -V "$iso_label_tag" \
 -publisher "DRBL/Clonezilla http://drbl.sf.net http://clonezilla.sf.net" \
 -r -J -l \
 -b isolinux/isolinux.bin -c isolinux/boot.cata \
 -no-emul-boot -boot-load-size 4 -boot-info-table \
 -x $DEBIAN_ISO_TMP/isolinux \
 -graft-points $DEBIAN_ISO_TMP \
  /isolinux/=$ISOLNX_TMP/isolinux \
  /opt/drbl/=/opt/drbl \
  /ocs-live=/opt/drbl/setup/files/ocs/ocs-live \
  $ocs_imgs_with_abs_path

rc=$?
if [ "$rc" -gt 0 ]; then
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo "Something went wrong!"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  echo "Program terminated!"
  umount $DEBIAN_ISO_TMP
  exit 1
fi

# unmount all iso file
umount $DEBIAN_ISO_TMP

# Clean the tmp working directory
echo "Cleaning the tmp working directory..."
[ ! -z "$DEBIAN_ISO_TMP" ] && rm -rf $DEBIAN_ISO_TMP
[ ! -z "$ISOLNX_TMP" ] && rm -rf $ISOLNX_TMP

# 
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "Now you can burn the iso file \"$target_iso\" into CD/DVD, then use it to boot."
echo "When the boot sequence finishes, you can run \"/live_media/ocs-live\" to restore clonezilla image."
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
