X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=debian%2Flive-boot.init;h=373df1bc621e69ec65875780cc052e6396ae538b;hb=a39a1678776b1bfe92e717f5abd5f55b6404b525;hp=548abcaed468f26c7eba6b217ad9e05c9254622a;hpb=73a0e6fc999ff71da4e0e84a2def026219f411ef;p=live-boot-grml.git diff --git a/debian/live-boot.init b/debian/live-boot.init index 548abca..373df1b 100644 --- a/debian/live-boot.init +++ b/debian/live-boot.init @@ -1,226 +1,36 @@ #!/bin/sh +## live-boot contains the scripts that configure a Debian Live system during +## the boot process (early userspace). +## +## This is the sysvinit script for live-boot. + + ### BEGIN INIT INFO # Provides: live-boot # Required-Start: $syslog bootmisc # Required-Stop: # Should-Start: $local_fs # Should-Stop: halt reboot -# X-Stop-After: umountroot # Default-Start: S # Default-Stop: 0 6 -# Short-Description: live-boot init script -# Description: Resyncs snapshots, evantually caches files in order to -# let remove the media. +# Short-Description: Debian Live - System Configuration Scripts +# Description: live-boot contains the scripts that configure a Debian +# Live system during the boot process (early userspace). +# X-Start-Before: +# X-Stop-After: umountroot +# X-Interactive: true ### END INIT INFO -# Authors: Tollef Fog Heen -# Marco Amadori - -PATH=/usr/sbin:/usr/bin:/sbin:/bin -NAME=live-boot -SCRIPTNAME=/etc/init.d/${NAME} -DO_SNAPSHOT=/sbin/live-snapshot - -# 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 - -# Load the VERBOSE setting and other rcS variables -[ -f /etc/default/rcS ] && . /etc/default/rcS - -# Define LSB log_* functions. -# Depend on lsb-base (>= 3.0-6) to ensure that this file is present. -. /lib/lsb/init-functions - -# Try to cache everything we're likely to need after ejecting. This -# is fragile and simple-minded, but our options are limited. -cache_path() -{ - path="${1}" - - if [ -d "${path}" ] - then - find "${path}" -type f | xargs cat > /dev/null 2>&1 - elif [ -f "${path}" ] - then - if [ -x "${path}" ] - then - if file "${path}" | grep -q 'dynamically linked' - then - for lib in $(ldd "${path}" | awk '{ print $3 }') - do - cache_path "${lib}" - done - fi - fi - - cat "${path}" >/dev/null 2>&1 - 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} | grep -q usb || - readlink /sys/block/${DEVICE}/device | grep -q usb # linux < 2.6.29 - then - return 0 - fi - - return 1 -} - -do_stop () -{ - if ! grep -qs nopersistent /proc/cmdline && grep -qs persistent /proc/cmdline - then - if [ ! -z "${ROOTSNAP}" ] - then - ${DO_SNAPSHOT} --resync-string="${ROOTSNAP}" - fi - - if [ ! -z "${HOMESNAP}" ] - then - ${DO_SNAPSHOT} --resync-string="${HOMESNAP}" - fi - fi - - # check for netboot - if [ ! -z "${NETBOOT}" ] || grep -qs netboot /proc/cmdline || grep -qsi root=/dev/nfs /proc/cmdline || grep -qsi root=/dev/cifs /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 - # installations, who cares ... - if type archdetect >/dev/null 2>&1 - then - subarch="$(archdetect)" - - case $subarch in - arm*/imx51) - return 0 - ;; - esac - fi - - prompt=1 - if grep -qs noprompt /proc/cmdline - then - prompt= - fi - - for path in $(which halt) $(which reboot) /etc/rc?.d /etc/default $(which stty) /bin/plymouth - do - cache_path "${path}" - done - - for x in $(cat /proc/cmdline) - do - case ${x} in - quickreboot) - QUICKREBOOT="Yes" - ;; - esac - done - - if [ -z ${QUICKREBOOT} ] - then - - # Exit if the system was booted from an ISO image rather than a physical CD - grep -qs find_iso= /proc/cmdline && return 0 - # TODO: i18n - 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 - MESSAGE="Please remove the disc, close the the tray (if any)" - - if [ -x /usr/bin/eject ] - then - eject -p -m /live/image >/dev/null 2>&1 - fi - - fi - - [ "$prompt" ] || return 0 - - if [ -x /bin/plymouth ] && plymouth --ping - then - plymouth message --text="${MESSAGE} and press ENTER to continue:" - plymouth watch-keystroke > /dev/null - else - stty sane < /dev/console - - printf "\n\n${MESSAGE} and press ENTER to continue:" > /dev/console - - read x < /dev/console - fi - fi -} - case "${1}" in - 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 + stop) + if [ -e /lib/live/boot.sh ] + then + /lib/live/boot.sh fi - log_end_msg 0 ;; - stop) - log_begin_msg "${NAME} is resyncing snapshots and caching reboot files..." - do_stop - - case "${?}" in - 0|1) - [ "${VERBOSE}" != no ] && log_end_msg 0 - ;; - - 2) - [ "${VERBOSE}" != no ] && log_end_msg 1 - ;; - esac - - mount -o remount,ro /live/cow - ;; + start|force-reload|restart) - *) - log_success_msg "Usage: ${SCRIPTNAME} {start|stop|restart|force-reload}" >&2 - exit 3 ;; esac