Support generating small iso images with grml2iso.
authorUlrich Dangel <mru@grml.org>
Sat, 12 Feb 2011 14:31:18 +0000 (15:31 +0100)
committerUlrich Dangel <mru@grml.org>
Sat, 12 Feb 2011 14:31:18 +0000 (15:31 +0100)
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.

grml2iso
grml2iso.8.txt

index 5992992..379ef68 100755 (executable)
--- a/grml2iso
+++ b/grml2iso
@@ -46,6 +46,18 @@ Options:
      -p <grml2usb param> Add the specified parameter to the grml2usb
                          commandline. For a list of valid parameters have
                          a look at the grml2usb manpage.
      -p <grml2usb param> 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
   }
 "
     [ -n "$1" ] && exit $1 || exit 1
   }
@@ -58,8 +70,9 @@ Options:
   DIR=''
   ADD_OPTS=''
   FORCE=''
   DIR=''
   ADD_OPTS=''
   FORCE=''
+  URI=''
   typeset -a GRML2USB_OPTS
   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");;
     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");;
       f)   FORCE='true';;
       r)   GRML2USB_OPTS+=(--remove-bootoption="$OPTARG");;
       p)   GRML2USB_OPTS+=("$OPTARG");;
+      s)   URI="$OPTARG";;
       ?)   usage 2;;
     esac
   done
       ?)   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
 
 # make sure -o is specified
   [ -n "$ISOFILE" ] || usage 1
@@ -138,6 +156,28 @@ Options:
   echo "include hd.cfg" >> boot/isolinux/grmlmain.cfg
 # }}}
 
   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"
 # 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"
   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 #########################################################################
 # }}}
 
 ## EOF #########################################################################
index 8ed8eaa..84a5146 100644 (file)
@@ -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
 
 
 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 <URI>*::
 
 
+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
 --------------
 
 Usage examples
 --------------