Releasing debian version 3.0~a24-1.
[live-boot-grml.git] / debian / live-boot.init
index 03bc390..5799c44 100644 (file)
@@ -21,12 +21,13 @@ PATH=/usr/sbin:/usr/bin:/sbin:/bin
 NAME=live-boot
 SCRIPTNAME=/etc/init.d/${NAME}
 DO_SNAPSHOT=/sbin/live-snapshot
+SNAPSHOT_CONF="/etc/live/boot.d/snapshot.conf"
 
 # Exit if system was not booted by live-boot
 grep -qs boot=live /proc/cmdline || exit 0
 
-# Read configuration variable file if it is present
-[ -r /etc/live.conf ] && . /etc/live.conf
+# Read snapshot configuration variables
+[ -r ${SNAPSHOT_CONF} ] && . ${SNAPSHOT_CONF}
 
 # Load the VERBOSE setting and other rcS variables
 [ -f /etc/default/rcS ] && . /etc/default/rcS
@@ -46,15 +47,28 @@ cache_path()
                find "${path}" -type f | xargs cat > /dev/null 2>&1
        elif [ -f "${path}" ]
        then
-               if [ -x "${path}" ]
+               if file -L "${path}" | grep -q 'dynamically linked'
                then
-                       if file "${path}" | grep -q 'dynamically linked'
-                       then
-                               for lib in $(ldd "${path}" | awk '{ print $3 }')
-                               do
-                                       cache_path "${lib}"
-                               done
-                       fi
+                       # ldd output can be of three forms:
+                       # 1. linux-vdso.so.1 =>  (0x00007fffe3fb4000)
+                       #    This is a virtual, kernel shared library and we want to skip it
+                       # 2. libc.so.6 => /lib/libc.so.6 (0x00007f5e9dc0c000)
+                       #    We want to cache the third word.
+                       # 3. /lib64/ld-linux-x86-64.so.2 (0x00007f5e9df8b000)
+                       #    We want to cache the first word.
+                       ldd "${path}" | while read line
+                       do
+                               if echo "$line" | grep -qs ' =>  '
+                               then
+                                       continue
+                               elif echo "$line" | grep -qs ' => '
+                               then
+                                       lib=$(echo "${line}" | awk '{ print $3 }')
+                               else
+                                       lib=$(echo "${line}" | awk '{ print $1 }')
+                               fi
+                               cache_path "${lib}"
+                       done
                fi
 
                cat "${path}" >/dev/null 2>&1
@@ -95,6 +109,7 @@ do_stop ()
 {
        if ! grep -qs nopersistent /proc/cmdline && grep -qs persistent /proc/cmdline
        then
+               # ROOTSNAP and HOMESNAP are defined in ${SNAPSHOT_CONF} file
                if [ ! -z "${ROOTSNAP}" ]
                then
                        ${DO_SNAPSHOT} --resync-string="${ROOTSNAP}"
@@ -112,6 +127,12 @@ do_stop ()
                return 0
        fi
 
+       # check for toram
+       if grep -qs toram /proc/cmdline
+       then
+               return 0
+       fi
+
        # Don't prompt to eject the SD card on Babbage board, where we reuse it
        # as a quasi-boot-floppy. Technically this uses a bit of ubiquity
        # (archdetect), but since this is mostly only relevant for
@@ -128,7 +149,7 @@ do_stop ()
        fi
 
        prompt=1
-       if grep -qs noprompt /proc/cmdline
+       if [ "${NOPROMPT}" = "Yes" ]
        then
                prompt=
        fi
@@ -147,6 +168,8 @@ do_stop ()
                esac
        done
 
+       mount -o remount,ro /live/cow
+
        if [ -z ${QUICKREBOOT} ]
        then
 
@@ -162,15 +185,26 @@ do_stop ()
                        # failes because they actually remember the
                        # "ejected" state even after reboot
                        MESSAGE="Please remove the USB flash drive"
+
+                       if [ "${NOPROMPT}" = "usb" ]
+                       then
+                               prompt=
+                       fi
+
                else
                        # ejecting is a very good idea here
-                       MESSAGE="Please remove the disc, close the the tray (if any)"
+                       MESSAGE="Please remove the disc, close the tray (if any)"
 
                        if [ -x /usr/bin/eject ]
                        then
                                eject -p -m /live/image >/dev/null 2>&1
                        fi
 
+                       if [ ${NOPROMPT} = "cd" ]
+                       then
+                               prompt=
+                       fi
+
                fi
 
                [ "$prompt" ] || return 0
@@ -190,16 +224,9 @@ do_stop ()
 }
 
 case "${1}" in
-       restart|reload|force-reload|status)
+       start|restart|reload|force-reload|status)
                [ "${VERBOSE}" != no ] && log_end_msg 0
                ;;
-       start)
-               log_begin_msg "${NAME} is configuring sendsigs..."
-               if [ -f /live/root.pid ] ; then
-                       cat /live/root.pid >> /var/run/sendsigs.omit
-               fi
-               log_end_msg 0
-               ;;
 
        stop)
                log_begin_msg "${NAME} is resyncing snapshots and caching reboot files..."
@@ -214,8 +241,6 @@ case "${1}" in
                                [ "${VERBOSE}" != no ] && log_end_msg 1
                                ;;
                esac
-
-               mount -o remount,ro /live/cow
                ;;
 
        *)