Add -e option to unpack ISOs
authorChristian Hofstaedtler <ch@grml.org>
Thu, 15 Dec 2011 15:07:50 +0000 (16:07 +0100)
committerChristian Hofstaedtler <ch@grml.org>
Thu, 15 Dec 2011 15:20:09 +0000 (16:20 +0100)
docs/grml-live.txt
grml-live

index 380ca9e..a4f456f 100644 (file)
@@ -10,9 +10,10 @@ Linux Live system (CD/ISO)
 Synopsis
 --------
 
-grml-live [-a <architecture>] [-c <classe[s]>] [-C <configfile>] [-g
-<grml_name>] [-i <iso_name> ] [-o <output_directory>] [-r <release_name>] [-s
-<suite>] [-t <template_directory>] [-v <version_number>] [-U <username>] [
+grml-live [-a <architecture>] [-c <classe[s]>] [-C <configfile>] [
+-e <extract_iso_name>] [-g <grml_name>] [-i <iso_name>] [
+-o <output_directory>] [-r <release_name>] [-s <suite>] [
+-t <template_directory>] [-v <version_number>] [-U <username>] [
 -AbBFnNqQuVz]
 
 Description
@@ -132,6 +133,11 @@ grml-live this option provides you the option to use your own configuration
 directory. This directory is what's being referred to as ${GRML_FAI_CONFIG}
 throughout this documentation.
 
+  -e **EXTRACT_ISO_NAME**::
+
+The squashfs inside the specified ISO will be extracted and used as the chroot.
+This option is useful for remastering, in combination with -A and -b or -u.
+
   -F::
 
 Force execution and do not prompt for acknowledgment of configuration.
index 1e6b6c3..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
@@ -290,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 ;;
@@ -300,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" ;;
@@ -415,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"
@@ -542,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