Add -e option to unpack ISOs
[grml-live.git] / grml-live
index 525011d..87e5303 100755 (executable)
--- a/grml-live
+++ b/grml-live
@@ -46,6 +46,7 @@ Usage: $PN [options, see as follows]
    -C <configfile>         configuration file for grml-live
    -d <date>               use specified date instead of build time as date of release
    -D <configdir>          use specified configuration directory instead of /etc/grml/fai
+   -e <iso_name>           extract ISO and squashfs contents from iso_name
    -F                      force execution without prompting
    -g <grml_name>          set the grml flavour name
    -h                      display short usage information and exit
@@ -148,6 +149,7 @@ LIVE_CONF=/etc/grml/grml-live.conf
 # umount all directories {{{
 umount_all() {
    # make sure we don't leave any mounts - FAI doesn't remove them always
+   umount $CHROOT_OUTPUT/proc/sys/fs/binfmt_misc 2>/dev/null || /bin/true
    umount $CHROOT_OUTPUT/proc 2>/dev/null || /bin/true
    umount $CHROOT_OUTPUT/sys  2>/dev/null || /bin/true
    umount $CHROOT_OUTPUT/dev/pts 2>/dev/null || /bin/true
@@ -289,7 +291,7 @@ copy_addon_file() {
 # }}}
 
 # command line parsing {{{
-while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do
+while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do
   case "$opt" in
     a) ARCH="$OPTARG" ;;
     A) PACK_ARTIFACTS=1 ;;
@@ -299,6 +301,7 @@ while getopts "a:C:c:d:D:g:i:I:o:r:s:t:T:U:v:AbBFnNqQuVz" opt; do
     C) LOCAL_CONFIG="$(readlink -f $OPTARG)" ;;
     d) DATE="$OPTARG" ;;
     D) GRML_FAI_CONFIG="$(readlink -f $OPTARG)" ;;
+    e) EXTRACT_ISO_NAME="$(readlink -f $OPTARG)" ;;
     g) GRML_NAME="$OPTARG" ;;
     i) ISO_NAME="$OPTARG" ;;
     I) CHROOT_INSTALL="$OPTARG" ;;
@@ -414,6 +417,7 @@ if [ -z "$FORCE" ] ; then
    [ -n "$LOCAL_CONFIG" ]        && echo "  Configuration:     $LOCAL_CONFIG"
    [ -n "$GRML_FAI_CONFIG" ]     && echo "  Config directory:  $GRML_FAI_CONFIG"
    echo "  main directory:    $OUTPUT"
+   [ -n "$EXTRACT_ISO_NAME" ]    && echo "  Extract ISO:       $EXTRACT_ISO_NAME"
    [ -n "$UNPACK_CHROOT" ]       && echo "  Chroot from:       $UNPACK_CHROOT"
    [ -n "$CHROOT_OUTPUT" ]       && echo "  Chroot target:     $CHROOT_OUTPUT"
    [ -n "$BUILD_OUTPUT" ]        && echo "  Build target:      $BUILD_OUTPUT"
@@ -541,6 +545,35 @@ if [ -n "${UNPACK_CHROOT}" ]; then
 fi
 # }}}
 
+# unpack iso/squashfs {{{
+extract_iso() {
+if [ -n "$EXTRACT_ISO_NAME" ]; then
+  log "Unpacking ISO from ${EXTRACT_ISO_NAME}"
+  einfo "Unpacking ISO from ${EXTRACT_ISO_NAME}"
+  local mountpoint=$(mktemp -d)
+  local rc=0
+  mount -o loop "${EXTRACT_ISO_NAME}" "$mountpoint" ; rc=$?
+  if [ "$rc" != 0 ]; then
+    rmdir "$mountpoint"
+    log "mount failed"
+    eerror "mount failed"
+    eend 1
+    bailout 1
+  fi
+  unsquashfs -d "${CHROOT_OUTPUT}" "${mountpoint}"/live/*.squashfs ; rc=$?
+  umount "$mountpoint"
+  rmdir "$mountpoint"
+  if [ "$rc" != 0 ]; then
+    log "unsquashfs failed"
+    eerror "unsquashfs failed"
+    eend 1
+    bailout 1
+  fi
+fi
+}
+extract_iso
+# }}}
+
 # cleanup CHROOT_ARCHIVE now {{{
 if [ -n "${PACK_ARTIFACTS}" ]; then
   # can't do this earlier, as UNPACK_CHROOT might point to CHROOT_ARCHIVE
@@ -1380,6 +1413,7 @@ create_netbootpackage() {
   mkdir -p "${WORKING_DIR}/pxelinux.cfg"
 
   if tar -C "$OUTPUTDIR" -jcf "${OUTPUT_FILE}" "grml_netboot_package_${GRML_NAME}_${VERSION}" ; then
+    sha1sum "${OUTPUT_FILE}" > "${OUTPUT_FILE}.sha1"
     einfo "Generated netboot package ${OUTPUT_FILE}" ; eend 0
     rm -rf "${OUTPUTDIR}"
   else