#! /bin/sh /usr/share/dpatch/dpatch-run ## 07_support_findiso.dpatch by Michael Schierl ## ## 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 5681362..12e795b 100755 --- a/scripts/live +++ b/scripts/live @@ -106,6 +106,11 @@ Arguments () export FETCH ;; + findiso=*) + FINDISO="${ARGUMENT#findiso=}" + export FINDISO + ;; + forcepersistentfsck) FORCEPERSISTENTFSCK="Yes" export FORCEPERSISTENTFSCK @@ -1629,13 +1634,28 @@ 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*" 0 "") + devname="${loopdevname}" + mount -t iso9660 -o ro,noatime "${devname}" ${mountpoint} + else + umount ${mountpoint} + fi + fi + if is_live_path ${mountpoint} && \ ([ "${skip_uuid_check}" ] || matches_uuid ${mountpoint}) then echo ${mountpoint} return 0 else - umount ${mountpoint} + umount ${mountpoint} 2>/dev/null fi fi @@ -1933,6 +1953,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