From: Ulrich Dangel Date: Sat, 12 Feb 2011 14:31:18 +0000 (+0100) Subject: Support generating small iso images with grml2iso. X-Git-Tag: v0.9.31~2 X-Git-Url: http://git.grml.org/?p=grml2usb.git;a=commitdiff_plain;h=161f2d52971bd95482a797c6011425a6030b5233 Support generating small iso images with grml2iso. Debian-live supports downloading the squashfs file from remote location. That means it is possible to create small iso images which downloads the squashfs file from a remote location. --- diff --git a/grml2iso b/grml2iso index 5992992..379ef68 100755 --- a/grml2iso +++ b/grml2iso @@ -46,6 +46,18 @@ Options: -p Add the specified parameter to the grml2usb commandline. For a list of valid parameters have a look at the grml2usb manpage. + Could be specfied multiple times. + -s URI Generate a small iso file which downloads the squashfs + file from the specified URI. Please note that due to + restrictions in the bootprocess only IPs are allowed. + Supported protocols are: http and ftp + + Examples: + $0 -s http://192.168.23.42:8000/grml/ -o small.iso grml64_2010.12.iso + + Will generate a file small.iso which tries to download the squashfs file from + http://192.168.23.42:8000/grml/ The squashfs file is located in the output + directory as the iso file. " [ -n "$1" ] && exit $1 || exit 1 } @@ -58,8 +70,9 @@ Options: DIR='' ADD_OPTS='' FORCE='' + URI='' typeset -a GRML2USB_OPTS - while getopts fb:c:o:r:p: name; do + while getopts fb:c:o:r:p:s: name; do case $name in o) ISOFILE="$OPTARG";; b) GRML2USB_OPTS+=(--bootoptions="$OPTARG");; @@ -67,9 +80,14 @@ Options: f) FORCE='true';; r) GRML2USB_OPTS+=(--remove-bootoption="$OPTARG");; p) GRML2USB_OPTS+=("$OPTARG");; + s) URI="$OPTARG";; ?) usage 2;; esac done + # test for specified URI + if [ -n "$URI" ] ; then + GRML2USB_OPTS+=(--bootoptions="fetch=$URI") + fi # make sure -o is specified [ -n "$ISOFILE" ] || usage 1 @@ -138,6 +156,28 @@ Options: echo "include hd.cfg" >> boot/isolinux/grmlmain.cfg # }}} +# adjust iso for small output if necessary [{{ + if [ -n "$URI" ] ; then + bootloader_files=$(find . -name "*.cfg" -type f) + bootloader_files+=" " + bootloader_files+=$(find . -name "*.lst" -type f) + output_dir=$(dirname "$ISOFILE") + for squashfs in $(find . -name *.squashfs) ; do + media_path="$(dirname "$squashfs")" + filename="$(basename "$squashfs")" + target="$output_dir/$filename" + if [ -f "$target" ] && [ ! -n "$FORCE" ] ; then + echo >&2 "Warning: $target already exists, and -force not specified, not overwriting" + else + mv $squashfs $target + OUTPUT_FILES+=("$target") + fi + sed -i -e "s#^\(^.*$media_path.*\)\($URI\)\(.*$\)#\1$URI/$filename\3#g" $bootloader_files + + done + fi +# }}} + # copy specified directory to cd {{{ if [ -n "$DIR" ] ; then echo >&2 "Copying ${DIR} to generated iso" @@ -167,6 +207,21 @@ Options: rm -rf "$WRKDIR/cddir" "$WRKDIR/grub_tmp" [[ $WRKDIR_EXISTED = 'false' ]] && rmdir "$WRKDIR" echo "Generated $ISOFILE" + if [ -n "$URI" ] ; then + echo " +Information: +============== +You requested to generate a small iso image. Your generated +iso image $ISOFILE does _not_ contain the squashfs files from +the source iso images. + +You have to provide the extracted squashfs files under $URI. + +ISO image: $ISOFILE +Squashfs files: ${OUTPUT_FILES[@]} +URI: $URI +" + fi # }}} ## EOF ######################################################################### diff --git a/grml2iso.8.txt b/grml2iso.8.txt index 8ed8eaa..84a5146 100644 --- a/grml2iso.8.txt +++ b/grml2iso.8.txt @@ -57,7 +57,9 @@ Remove specified boot parameter from existing command line. Could be specified m Execute grml2usb with the specified parameters. For a list of valid parameters have a look at the link:http://grml.org/grml2usb/[grml2usb webpage] or the grml2usb manpage + *\-s *:: +Generate a small iso file which downloads the squashfs file from the specified URI. Due to current limitations in busyboxs wget and DNS resolution, an URL can not contain a hostname but an IP only. This is useful if you want to boot systems which support booting iso image from your local system. Besides the iso image this command also copies the squashfs file to the output directory. Usage examples --------------