diff options
| author | Ronny Standtke <Ronny.Standtke@fhnw.ch> | 2009-02-08 00:14:03 +0100 |
|---|---|---|
| committer | Daniel Baumann <daniel@debian.org> | 2011-03-09 17:48:04 +0100 |
| commit | 225b4d5b57ac7a69aa47b408f5d3f69ec53242da (patch) | |
| tree | 7ff209d96a51de976cb3869f71ca2fb3c8de9bee | |
| parent | 87442bce08be1da345a90026f64b66df5f41ccc8 (diff) | |
| download | live-boot-225b4d5b57ac7a69aa47b408f5d3f69ec53242da.tar.gz live-boot-225b4d5b57ac7a69aa47b408f5d3f69ec53242da.zip | |
Do not eject USB flash drives (Closes: #457070).
| -rw-r--r-- | debian/init | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/debian/init b/debian/init index 149314b..1dd72cc 100644 --- a/debian/init +++ b/debian/init @@ -56,6 +56,29 @@ cache_path() { fi } +get_boot_device() { + # search in /proc/mounts for the device that is mounted at /live/image + while read DEVICE MOUNT REST; do + if [ "${MOUNT}" == "/live/image" ]; then + echo "${DEVICE}" + exit 0 + fi + done < /proc/mounts +} + +device_is_USB_flash_drive() +{ + # remove leading "/dev/" and all trailing numbers from input + DEVICE=$(expr substr ${1} 6 3) + # check that device starts with "sd" + [ "$(expr substr ${DEVICE} 1 2)" != "sd" ] && return 1 + # check that the device is an USB device + if readlink /sys/block/${DEVICE}/device | grep -q usb ; then + return 0 + fi + return 1 +} + do_stop () { if [ ! -z "${ROOTSNAP}" ]; then @@ -89,17 +112,30 @@ do_stop () done if [ -z ${QUICKREBOOT} ]; then + # TODO: i18n, dialog if [ -x /usr/bin/eject ] then - eject -p -m /live/image >/dev/null 2>&1 + BOOT_DEVICE="$(get_boot_device)" + if device_is_USB_flash_drive ${BOOT_DEVICE}; then + # do NOT eject USB flash drives! + # otherwise rebooting with most USB flash drives failes because + # they actually remember the "ejected" state even after reboot + MESSAGE="Please remove the USB flash drive" + else + # ejecting is a very good idea here + eject -p -m /live/image >/dev/null 2>&1 + # TODO: detect CD + MEDIUM="DVD" + MESSAGE="Please remove the ${MEDIUM}, close the ${MEDIUM} tray (if any)" + fi + MESSAGE="${MESSAGE} and press ENTER:" [ "$prompt" ] || return 0 fi stty sane < /dev/console - # XXX - i18n - echo "Please remove the disc and close the tray (if any) then press ENTER: " > /dev/console + echo -n -e "\n\n${MESSAGE}" > /dev/console if [ -x /sbin/usplash_write ]; then /sbin/usplash_write "TIMEOUT 86400" /sbin/usplash_write "TEXT-URGENT Please remove the disc, close the tray (if any)" |
