From: Christian Hofstaedtler Date: Thu, 15 Dec 2011 15:07:50 +0000 (+0100) Subject: Add -e option to unpack ISOs X-Git-Tag: v0.17.1~35 X-Git-Url: https://git.grml.org/?p=grml-live.git;a=commitdiff_plain;h=11baa336b55b8ddec2c3e830013a4fb1d8bd07f8 Add -e option to unpack ISOs --- diff --git a/docs/grml-live.txt b/docs/grml-live.txt index 380ca9e..a4f456f 100644 --- a/docs/grml-live.txt +++ b/docs/grml-live.txt @@ -10,9 +10,10 @@ Linux Live system (CD/ISO) Synopsis -------- -grml-live [-a ] [-c ] [-C ] [-g -] [-i ] [-o ] [-r ] [-s -] [-t ] [-v ] [-U ] [ +grml-live [-a ] [-c ] [-C ] [ +-e ] [-g ] [-i ] [ +-o ] [-r ] [-s ] [ +-t ] [-v ] [-U ] [ -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. diff --git a/grml-live b/grml-live index 1e6b6c3..87e5303 100755 --- a/grml-live +++ b/grml-live @@ -46,6 +46,7 @@ Usage: $PN [options, see as follows] -C configuration file for grml-live -d use specified date instead of build time as date of release -D use specified configuration directory instead of /etc/grml/fai + -e extract ISO and squashfs contents from iso_name -F force execution without prompting -g 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