From 610c06cafd108f9af8d246988b9ce518aa2895f2 Mon Sep 17 00:00:00 2001 From: Tails developers Date: Sun, 8 Apr 2012 20:23:57 +0200 Subject: [PATCH] Adding support for the findiso boot parameter (Closes: #656135). Thanks to the grml team for the initial patch, thanks to adrian15sgd@gmail.com for bringing it to a mergeable state. --- manpages/en/live-boot.7 | 2 ++ scripts/live | 35 +++++++++++++++++++++++++++++++++++ scripts/live-helpers | 17 +++++++++++++++++ 3 files changed, 54 insertions(+) diff --git a/manpages/en/live-boot.7 b/manpages/en/live-boot.7 index 3d92e62..e5ac8ab 100644 --- a/manpages/en/live-boot.7 +++ b/manpages/en/live-boot.7 @@ -66,6 +66,8 @@ Target Lun 0 Path=,Type=fileio,IOMode=ro # If you want to boot multiple machines you might want to look at tuning some parameters like # Wthreads or MaxConnections +.IP "\fBfindiso\fR=\fI/PATH/TO/IMAGE\fI" 4 +Look for the specified ISO file on all disks where it usually looks for the .squashfs file (so you don't have to know the device name as in fromiso=....). .IP "\fBfromiso\fR=\fI/PATH/TO/IMAGE\fI" 4 Allows to use a filesystem from within an iso image that's available on live-media. .IP "\fBignore_uuid\fR" 4 diff --git a/scripts/live b/scripts/live index 46407c1..8046cc2 100755 --- a/scripts/live +++ b/scripts/live @@ -1355,6 +1355,21 @@ 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 -p /live/findiso + 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 @@ -1641,6 +1656,26 @@ 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 ] && [ ! -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 + + if is_mountpoint /live/findiso + then + umount /root/live/findiso + fi + fi + # copy snapshot configuration if exists if [ -f snapshot.conf ] then diff --git a/scripts/live-helpers b/scripts/live-helpers index e25e4bc..456c2d7 100644 --- a/scripts/live-helpers +++ b/scripts/live-helpers @@ -143,6 +143,11 @@ Arguments () export STATICIP ;; + findiso=*) + FINDISO="${ARGUMENT#findiso=}" + export FINDISO + ;; + live-getty) LIVE_GETTY="1" export LIVE_GETTY @@ -1579,3 +1584,15 @@ fix_home_rw_compatibility () /home source=." > "${include_list}" fi } + +is_mountpoint () { + + directory="$1" + + if [ $(stat -fc%d:%D "${directory}") != $(stat -fc%d:%D "${directory}/..") ] + then + return 0 + else + return 1 + fi +} -- 2.1.4