readd grml patches
[live-boot-grml.git] / debian / patches / 07_support_findiso.dpatch
diff --git a/debian/patches/07_support_findiso.dpatch b/debian/patches/07_support_findiso.dpatch
new file mode 100755 (executable)
index 0000000..bceb699
--- /dev/null
@@ -0,0 +1,75 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_support_findiso.dpatch by Michael Schierl <schierlm@gmx.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: support for findoiso bootoption
+# When booting with findiso=/grml_2010.05.iso, it will look for
+# that .iso file on all disks where it usually looks for the .squashfs
+# file. When it is found, the disk containing the iso is read-only mounted
+# as /live/findiso (and exposed there after boot completed). The squashfs
+# file is searched inside that ISO file then.
+
+@DPATCH@
+diff --git a/scripts/live b/scripts/live
+index d79beed..04ad61e 100755
+--- a/scripts/live
++++ b/scripts/live
+@@ -102,6 +102,11 @@ Arguments ()
+                                 export FETCH
+                                 ;;
++                      findiso=*)
++                              FINDISO="${ARGUMENT#findiso=}"
++                              export FINDISO
++                              ;;
++
+                       forcepersistentfsck)
+                               FORCEPERSISTENTFSCK="Yes"
+                               export FORCEPERSISTENTFSCK
+@@ -1526,6 +1531,19 @@ check_dev ()
+               mount -t ${fstype} -o ro,noatime "${devname}" ${mountpoint} || continue
+               [ -n "$devuid" ] && echo "$devuid" >> $tried
++              if [ -n "${FINDISO}" ]
++              then
++                      if [ -f ${mountpoint}/${FINDISO} ]
++                      then
++                              umount ${mountpoint}
++                              mkdir /live/findiso -p
++                              mount -t ${fstype} -o ro,noatime "${devname}" /live/findiso
++                              loopdevname=$(setup_loop "/live/findiso/${FINDISO}" "loop" "/sys/block/loop*" "" '')
++                              devname="${loopdevname}"
++                              mount -t iso9660 -o ro,noatime "${devname}" ${mountpoint}
++                      fi
++              fi
++
+               if is_live_path ${mountpoint} && \
+                       ([ "${skip_uuid_check}" ] || matches_uuid ${mountpoint})
+               then
+diff --git a/scripts/live b/scripts/live
+index d79beed..d19a5c5 100755
+--- a/scripts/live
++++ b/scripts/live
+@@ -1831,6 +1831,22 @@ mountroot ()
+       # when booting FAI, this simple workaround solves it
+       ls /root/* >/dev/null 2>&1
++      # Move findiso directory to the new root filesystem so that programs there can get at it.
++      if [ -d /live/findiso -a ! -d /root/live/findiso ]
++      then
++              mkdir -p /root/live/findiso
++              mount -n --move /live/findiso /root/live/findiso
++      fi
++
++      # if we do not unmount the ISO we can't run "fsck /dev/ice" later on
++      # because the mountpoint is left behind in /proc/mounts, so let's get
++      # rid of it when running from RAM
++      if [ -n "$FINDISO" ] && [ "${TORAM}" ]
++      then
++              losetup -d /dev/loop0
++              grep -q /live/findiso /proc/mounts && umount /root/live/findiso
++      fi
++
+       # copy snapshot configuration if exists
+       if [ -f snapshot.conf ]
+       then