From 225b4d5b57ac7a69aa47b408f5d3f69ec53242da Mon Sep 17 00:00:00 2001 From: Ronny Standtke Date: Sun, 8 Feb 2009 00:14:03 +0100 Subject: [PATCH] Do not eject USB flash drives (Closes: #457070). --- debian/init | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file 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)" -- 2.1.4