Adapt grml-reboot init script for new live-boot live directory
[grml-etc.git] / etc / init.d / grml-reboot
index 637630b..21ccf6c 100755 (executable)
@@ -1,10 +1,17 @@
-#!/bin/sh
+#!/bin/bash
 # Filename:      grml-reboot
 # Purpose:       reboot grml system
 # Authors:       grml-team (grml.org)
 # Bug-Reports:   see http://grml.org/bugs/
 # License:       This file is licensed under the GPL v2.
 ################################################################################
+### BEGIN INIT INFO
+# Provides:          grml-reboot
+# Required-Start:
+# Required-Stop:
+# Default-Start:
+# Default-Stop:
+### END INIT INFO
 
 export PATH=/sbin:/bin:/usr/bin:/usr/sbin
 
@@ -14,7 +21,8 @@ export PATH=/sbin:/bin:/usr/bin:/usr/sbin
 cd /
 
 # Clean input/output
-exec >/dev/console 2>&1 </dev/console
+CONSOLE=/dev/console
+[ -c "$CONSOLE" ] && exec >"$CONSOLE" 2>&1 <"$CONSOLE"
 
 # default variables
 INSTALLED=false
@@ -35,20 +43,24 @@ grep -qe 'toram' -qe '2ram' -qe 'usb' -qe 'serial' \
 
 # detect cdrom device
 if ! $INSTALLED ; then
-   # new live-initramfs layout:
-   if [ -d /live/image ] ; then
-      CDROM="$(awk '/ \/live\/image /{print $1;exit 0;}' /proc/mounts)"
-      MOUNTPATH="/live/image"
-   else # old unionfs layout:
-      CDROM="$(awk '/ \/cdrom /{print $1;exit 0;}' /proc/mounts)"
-      MOUNTPATH="/cdrom"
+   # live-boot layout since December 2012:
+   if [ -d /lib/live/mount/medium ] ; then
+     CDROM="$(awk '/ \/lib\/live\/mount\/medium /{print $1;exit 0;}' /proc/mounts)"
+     MOUNTPATH="/lib/live/mount/medium"
+   # live-boot layout until December 2012:
+   elif [ -d /live/image ] ; then
+     CDROM="$(awk '/ \/live\/image /{print $1;exit 0;}' /proc/mounts)"
+     MOUNTPATH="/live/image"
+   else # old layout:
+     CDROM="$(awk '/ \/cdrom /{print $1;exit 0;}' /proc/mounts)"
+     MOUNTPATH="/cdrom"
    fi
 
    # try to remove only removable devices
    DEVICE=""
    if [ -n "$CDROM" ] ; then
      DEVICE="${CDROM##/dev/}"
-     DEVICE="${DEVICE%%[0-9]*}"
+     [ -d /sys/block/${DEVICE} ] || DEVICE="${DEVICE%%[0-9]*}"
 
      if [ -n "$DEVICE" ] ; then
        # is it a removable device?
@@ -78,8 +90,8 @@ case "$0" in
 esac
 
 mysleep() {
-  for i in $(seq 1 40) ; do
-    usleep 75000
+  for i in $(seq 1 30) ; do
+    sleep 0.1
     echo -n "$1.${NORMAL}"
   done
   echo ""
@@ -148,6 +160,13 @@ esac
 [ -r /etc/noprompt ] && NOPROMPT=true
 [ -r /etc/noeject ]  && NOPROMPT=true && NOEJECT=true
 
+VIRT_WHAT=$(/usr/sbin/virt-what 2>/dev/null)
+if [ -n "$VIRT_WHAT" ] ; then
+  log_begin_msg "System seems to be a virtual machine, assuming noprompt as default."
+  NOPROMPT=true
+  log_end_msg 0
+fi
+
 # Turn on autoeject of CD-ROMs
 if $NOEJECT ; then
    for dev in /proc/sys/dev/cdrom*/lock;      do [ -f "$dev" ] && echo 0 > "$dev"; done
@@ -195,7 +214,7 @@ $INSTALLED && mount -n -o remount,ro / 2>/dev/null
 # Prompt for removal of live system device
 if ! $INSTALLED && ! $NOPROMPT ; then
    # do not prompt for removal when running in grml2ram mode:
-   if ! mount | grep -qe 'on /cdrom' -qe 'on /live/image' ; then
+   if ! mount | grep -qe 'on /cdrom' -qe 'on /live/image' -qe 'on /lib/live/mount/medium' ; then
       echo "Live System not mounted, nothing to eject therefore."
    else
       [ -d "$MOUNTPATH" ] && umount -l "$MOUNTPATH"