[SCM] live-config branch, debian, updated. debian/3.0_a36-1

Daniel Baumann daniel at debian.org
Fri Apr 6 08:14:45 UTC 2012


The following commit has been merged in the debian branch:
commit ec3f57b347e47562600c059d59f877d48ee20af6
Author: Daniel Baumann <daniel at debian.org>
Date:   Fri Apr 6 03:00:08 2012 +0200

    Adding live-boot initscript.
    
    The name, location and form of /lib/live/boot.sh will chance
    at some later point, however, this is just the 'original'
    script from live-boot and will work as before.

diff --git a/Makefile b/Makefile
index 9c60d5a..9af1961 100644
--- a/Makefile
+++ b/Makefile
@@ -53,6 +53,8 @@ install:
 	cp -r scripts/config.sh scripts/config $(DESTDIR)/lib/live
 	mkdir -p $(DESTDIR)/var/lib/live/config
 
+	cp bin/boot-init.sh $(DESTDIR)/lib/live
+
 	# Installing docs
 	mkdir -p $(DESTDIR)/usr/share/doc/live-config
 	cp -r COPYING examples $(DESTDIR)/usr/share/doc/live-config
@@ -75,6 +77,8 @@ install:
 
 uninstall:
 	# Uninstalling scripts
+	rm -f $(DESTDIR)/lib/live/boot-init.sh
+
 	rm -rf $(DESTDIR)/lib/live/config.sh $(DESTDIR)/lib/live/config
 	rmdir --ignore-fail-on-non-empty $(DESTDIR)/lib/live > /dev/null 2>&1 || true
 	rmdir --ignore-fail-on-non-empty $(DESTDIR)/lib > /dev/null 2>&1 || true
diff --git a/bin/boot-init.sh b/bin/boot-init.sh
new file mode 100755
index 0000000..a61499c
--- /dev/null
+++ b/bin/boot-init.sh
@@ -0,0 +1,198 @@
+#!/bin/sh
+
+# Exit if system was not booted by live-boot
+grep -qs boot=live /proc/cmdline || exit 0
+
+DO_SNAPSHOT=/sbin/live-snapshot
+SNAPSHOT_CONF="/etc/live/boot.d/snapshot.conf"
+
+# Read snapshot configuration variables
+[ -r ${SNAPSHOT_CONF} ] && . ${SNAPSHOT_CONF}
+
+# 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 file -L "${path}" | grep -q 'dynamically linked'
+		then
+			# 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
+	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
+	then
+		return 0
+	fi
+
+	return 1
+}
+
+log_begin_msg "live-boot: resyncing snapshots and caching reboot files..."
+
+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}"
+	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
+
+# 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
+# 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 [ "${NOPROMPT}" = "Yes" ]
+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
+
+mount -o remount,ro /live/cow
+
+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"
+
+		if [ "${NOPROMPT}" = "usb" ]
+		then
+			prompt=
+		fi
+
+	else
+		# ejecting is a very good idea here
+		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
+
+	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
diff --git a/debian/live-config-sysvinit.live.init b/debian/live-config-sysvinit.live.init
new file mode 100644
index 0000000..7506103
--- /dev/null
+++ b/debian/live-config-sysvinit.live.init
@@ -0,0 +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
+# Default-Start:	S
+# Default-Stop:		0 6
+# 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
+
+case "${1}" in
+	stop)
+		if [ -e /lib/live/boot-init.sh ]
+		then
+			/lib/live/boot-init.sh
+		fi
+		;;
+
+	start|force-reload|restart)
+
+		;;
+esac
diff --git a/debian/rules b/debian/rules
index 5c75d8e..40d83a2 100755
--- a/debian/rules
+++ b/debian/rules
@@ -35,4 +35,6 @@ override_dh_install:
 
 override_dh_installinit:
 	dh_installinit -p live-config-sysvinit --no-restart-on-upgrade --no-start --update-rcd-params='start 00 S .' --name live-config
+	dh_installinit -p live-config-sysvinit --no-restart-on-upgrade --no-start --update-rcd-params='start 89 0 6 .' --name live
+
 	dh_installinit -p live-config-upstart --no-restart-on-upgrade --no-start --name live-config

-- 
live-config



More information about the debian-live-changes mailing list