5 # Required-Start: $syslog bootmisc
7 # Should-Start: $local_fs
8 # Should-Stop: halt reboot
9 # X-Stop-After: umountroot
12 # Short-Description: live-boot init script
13 # Description: Resyncs snapshots, evantually caches files in order to
14 # let remove the media.
17 # Authors: Tollef Fog Heen <tfheen@canonical.com>
18 # Marco Amadori <marco.amadori@gmail.com>
20 PATH
=/usr
/sbin
:/usr
/bin
:/sbin
:/bin
22 SCRIPTNAME
=/etc
/init.d
/${NAME}
23 DO_SNAPSHOT
=/sbin
/live-snapshot
25 # Exit if system was not booted by live-boot
26 grep -qs boot
=live
/proc
/cmdline ||
exit 0
28 # Read configuration variable file if it is present
29 [ -r /etc
/live.conf
] && .
/etc
/live.conf
31 # Load the VERBOSE setting and other rcS variables
32 [ -f /etc
/default
/rcS
] && .
/etc
/default
/rcS
34 # Define LSB log_* functions.
35 # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
36 .
/lib
/lsb
/init-functions
38 # Try to cache everything we're likely to need after ejecting. This
39 # is fragile and simple-minded, but our options are limited.
46 find "${path}" -type f |
xargs cat > /dev
/null
2>&1
51 if file "${path}" |
grep -q 'dynamically linked'
53 for lib
in $
(ldd
"${path}" |
awk '{ print $3 }')
60 cat "${path}" >/dev
/null
2>&1
66 # search in /proc/mounts for the device that is mounted at /live/image
67 while read DEVICE MOUNT REST
69 if [ "${MOUNT}" = "/live/image" ]
77 device_is_USB_flash_drive
()
79 # remove leading "/dev/" and all trailing numbers from input
80 DEVICE
=$
(expr substr
${1} 6 3)
82 # check that device starts with "sd"
83 [ "$(expr substr ${DEVICE} 1 2)" != "sd" ] && return 1
85 # check that the device is an USB device
86 if readlink
/sys
/block
/${DEVICE} |
grep -q usb ||
87 readlink
/sys
/block
/${DEVICE}/device |
grep -q usb
# linux < 2.6.29
97 if ! grep -qs nopersistent
/proc
/cmdline
&& grep -qs persistent
/proc
/cmdline
99 if [ ! -z "${ROOTSNAP}" ]
101 ${DO_SNAPSHOT} --resync-string="${ROOTSNAP}"
104 if [ ! -z "${HOMESNAP}" ]
106 ${DO_SNAPSHOT} --resync-string="${HOMESNAP}"
111 if [ ! -z "${NETBOOT}" ] ||
grep -qs netboot
/proc
/cmdline ||
grep -qsi root
=/dev
/nfs
/proc
/cmdline ||
grep -qsi root
=/dev
/cifs
/proc
/cmdline
116 # Don't prompt to eject the SD card on Babbage board, where we reuse it
117 # as a quasi-boot-floppy. Technically this uses a bit of ubiquity
118 # (archdetect), but since this is mostly only relevant for
119 # installations, who cares ...
120 if type archdetect
>/dev
/null
2>&1
122 subarch
="$(archdetect)"
132 if grep -qs noprompt
/proc
/cmdline
137 for path
in $
(which halt
) $
(which reboot
) /etc
/rc?.d
/etc
/default $
(which stty
) /bin
/plymouth
/sbin
/usplash_write
142 for x
in $
(cat /proc
/cmdline
)
151 if [ -z ${QUICKREBOOT} ]
154 # Exit if the system was booted from an ISO image rather than a physical CD
155 grep -qs find_iso
= /proc
/cmdline
&& return 0
157 BOOT_DEVICE
="$(get_boot_device)"
159 if device_is_USB_flash_drive
${BOOT_DEVICE}
161 # do NOT eject USB flash drives!
162 # otherwise rebooting with most USB flash drives
163 # failes because they actually remember the
164 # "ejected" state even after reboot
165 MESSAGE
="Please remove the USB flash drive"
167 # ejecting is a very good idea here
168 MESSAGE
="Please remove the disc, close the the tray (if any)"
170 if [ -x /usr
/bin
/eject
]
172 eject
-p -m /live
/image
>/dev
/null
2>&1
177 [ "$prompt" ] ||
return 0
179 if [ -x /bin
/plymouth
] && plymouth
--ping
181 plymouth message
--text="${MESSAGE} and press ENTER to continue:"
182 plymouth watch-keystroke
> /dev
/null
184 stty sane
< /dev
/console
186 printf "\n\n${MESSAGE} and press ENTER to continue:" > /dev
/console
188 if [ -x /sbin
/usplash_write
]
190 /sbin
/usplash_write
"TIMEOUT 86400"
191 /sbin
/usplash_write
"TEXT-URGENT ${MESSAGE}"
192 /sbin
/usplash_write
"TEXT-URGENT and press ENTER to continue"
195 read x
< /dev
/console
201 restart|reload|force-reload|status
)
202 [ "${VERBOSE}" != no
] && log_end_msg
0
205 log_begin_msg
"${NAME} is configuring sendsigs..."
206 if [ -f /live
/image
/root.pid
] ; then
207 cat /live
/image
/root.pid
>> /var
/run
/sendsigs.omit
212 log_begin_msg
"${NAME} is resyncing snapshots and caching reboot files..."
217 [ "${VERBOSE}" != no
] && log_end_msg
0
221 [ "${VERBOSE}" != no
] && log_end_msg
1
225 mount
-o remount
,ro
/live
/cow
229 log_success_msg
"Usage: ${SCRIPTNAME} {start|stop|restart|force-reload}" >&2