Also allowing to use the removable keyword for specifying a live media.
authorDaniel Baumann <daniel@debian.org>
Thu, 12 Mar 2009 07:07:48 +0000 (08:07 +0100)
committerDaniel Baumann <daniel@debian.org>
Thu, 12 Mar 2009 07:07:48 +0000 (08:07 +0100)
manpages/live-initramfs.en.7.txt
scripts/live

index c1dcd5b..d6a7d21 100644 (file)
@@ -114,6 +114,10 @@ to find this device for the "/live" directory where the read-only root
 filesystem should reside. If it did not find something usable, the normal scan
 for block devices is performed.
 
 filesystem should reside. If it did not find something usable, the normal scan
 for block devices is performed.
 
+Instead of specifing an actual device name, the keyword 'removable' can be used
+to limit the search of acceptable live media to removable type only. Note that
+cdrom devices are not removable, but e.g. usb mass storage is.
+
   {live-media-encryption|encryption}=**TYPE**::
 
 live-initramfs will mount the encrypted rootfs TYPE, asking the passphrase,
   {live-media-encryption|encryption}=**TYPE**::
 
 live-initramfs will mount the encrypted rootfs TYPE, asking the passphrase,
index 5d5b978..d7c2347 100755 (executable)
@@ -1401,13 +1401,33 @@ find_livefs ()
        fi
 
        # first look at the one specified in the command line
        fi
 
        # first look at the one specified in the command line
-       if [ ! -z "${LIVE_MEDIA}" ]
-       then
-               if check_dev "null" "${LIVE_MEDIA}" "skip_uuid_check"
-               then
-                       return 0
-               fi
-       fi
+       case "${LIVE_MEDIA}" in
+               removable)
+                       for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)")
+                       do
+                               if [ "$(cat ${sysblock}/removable)" = "1" ]
+                               then
+                                       for dev in $(subdevices "${sysblock}")
+                                       do
+                                               if check_dev "${dev}"
+                                               then
+                                                       return 0
+                                               fi
+                                       done
+                               fi
+                       done
+                       ;;
+
+               *)
+                       if [ ! -z "${LIVE_MEDIA}" ]
+                       then
+                               if check_dev "null" "${LIVE_MEDIA}" "skip_uuid_check"
+                               then
+                                       return 0
+                               fi
+                       fi
+                       ;;
+       esac
 
        # or do the scan of block devices
        for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)")
 
        # or do the scan of block devices
        for sysblock in $(echo /sys/block/* | tr ' ' '\n' | grep -vE "/(loop|ram|dm-|fd)")