[oe] [PATCH v2] upstart: fix sysvinit compat
Anatoly Shipitsin
norguhtar at gmail.com
Wed Aug 25 16:49:17 UTC 2010
* change PR = "r2"
* add example-jobs for sysvinit compat
* add update-alternatives for proper switch
* add native tty service generate
* add rc rcS scripts for run sysvinit scripts
* change reboot halt poweroff shutdown for compatible with update-alternatives
* move runlevel to upstart-sysvinit
* change upstart-sysvtools-doc to upstart-sysvcompat-doc
Signed-off-by: Anatoly Shipitsin <norguhtar at gmail.com>
---
recipes/upstart/upstart.inc | 111 ++++++++++++++++++++++++++++-
recipes/upstart/upstart/init/rc | 102 +++++++++++++++++++++++++++
recipes/upstart/upstart/init/rcS | 113 ++++++++++++++++++++++++++++++
recipes/upstart/upstart/init/rcS-default | 25 +++++++
recipes/upstart/upstart_0.3.11.bb | 15 +++-
recipes/upstart/upstart_0.3.8.bb | 14 +++--
6 files changed, 367 insertions(+), 13 deletions(-)
create mode 100755 recipes/upstart/upstart/init/rc
create mode 100755 recipes/upstart/upstart/init/rcS
create mode 100644 recipes/upstart/upstart/init/rcS-default
diff --git a/recipes/upstart/upstart.inc b/recipes/upstart/upstart.inc
index e67774a..7512133 100644
--- a/recipes/upstart/upstart.inc
+++ b/recipes/upstart/upstart.inc
@@ -4,7 +4,7 @@ DEPENDS = ""
DESCRIPTION = "Event driven system init"
LICENSE = "GPL"
-inherit autotools pkgconfig
+inherit autotools pkgconfig update-alternatives
# --enable-compat builds halt, reboot, shutdown tools
EXTRA_OECONF += "--enable-compat"
@@ -17,6 +17,109 @@ FILES_libupstart-dev += "${libdir}/libupstart.* ${includedir}/upstart/"
# upstart-sysvcompat provides Sys V Init compatible tools: halt, reboot,
# shutdown, telinit. These might be needed by other scripts.
-PACKAGES =+ "upstart-sysvcompat upstart-sysvtools-doc"
-FILES_upstart-sysvcompat += "${sbindir}/reboot ${sbindir}/halt ${sbindir}/shutdown ${sbindir}/telinit"
-FILES_upstart-sysvcompat-doc += "${mandir}/*/reboot.* ${mandir}/*/halt.* ${mandir}/*/shutdown.* ${mandir}/*/telinit.*"
+PACKAGES =+ "upstart-sysvcompat upstart-sysvcompat-doc"
+FILES_upstart-sysvcompat += " \
+ ${base_sbindir}/reboot.* ${base_sbindir}/halt.* ${base_sbindir}/poweroff.* \
+ ${base_sbindir}/shutdown.* ${base_sbindir}/telinit ${base_sbindir}/runlevel \
+ ${sysconfdir}/event.d/control-alt-delete \
+ ${sysconfdir}/event.d/rc* \
+ ${sysconfdir}/event.d/sulogin \
+ ${sysconfdir}/init.d \
+ ${sysconfdir}/default/rcS \
+"
+FILES_upstart-sysvcompat-doc += " \
+ ${mandir}/*/reboot.* ${mandir}/*/halt.* ${mandir}/*/poweroff.* \
+ ${mandir}/*/shutdown.* ${mandir}/*/telinit.* ${mandir}/*/runlevel.* \
+"
+
+ALTERNATIVE_NAME = "init"
+ALTERNATIVE_LINK = "${base_sbindir}/init"
+ALTERNATIVE_PATH = "${base_sbindir}/init.${PN}"
+ALTERNATIVE_PRIORITY = "60"
+
+EXTRA_OEMAKE += "'bindir=${base_bindir}' \
+ 'sbindir=${base_sbindir}' \
+ 'usrbindir=${bindir}' \
+ 'usrsbindir=${sbindir}' \
+ 'includedir=${includedir}' \
+ 'mandir=${mandir}'"
+
+do_install () {
+ oe_runmake 'DESTDIR=${D}' install
+ install -d ${D}${sysconfdir}
+ install -d ${D}${sysconfdir}/default
+ install -d ${D}${sysconfdir}/init.d
+
+ install -m 0644 ${WORKDIR}/init/rcS-default ${D}${sysconfdir}/default/rcS
+ install -m 0755 ${WORKDIR}/init/rc ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/init/rcS ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/rc* ${D}${sysconfdir}/event.d
+ install -m 0644 ${WORKDIR}/control-alt-delete ${D}${sysconfdir}/event.d
+ install -m 0644 ${WORKDIR}/sulogin ${D}${sysconfdir}/event.d
+
+ if [ ! -z "${SERIAL_CONSOLE}" ]; then
+ cat <<EOF >> ${D}${sysconfdir}/event.d/tty-serial
+# tty-serial - getty
+#
+# This service maintains a getty on tty-serial from the point the system is
+# started until it is shut down again.
+
+start on runlevel 2
+start on runlevel 3
+start on runlevel 4
+start on runlevel 5
+
+stop on runlevel 0
+stop on runlevel 1
+stop on runlevel 6
+
+respawn
+exec ${base_sbindir}/getty ${SERIAL_CONSOLE}
+EOF
+ fi
+ if [ "${USE_VT}" = "1" ]; then
+ for n in ${SYSVINIT_ENABLED_GETTYS}
+ do
+ cat <<EOF >> ${D}${sysconfdir}/event.d/tty$n
+# tty$n - getty
+#
+# This service maintains a getty on tty$n from the point the system is
+# started until it is shut down again.
+
+start on runlevel 2
+start on runlevel 3
+start on runlevel 4
+start on runlevel 5
+
+stop on runlevel 0
+stop on runlevel 1
+stop on runlevel 6
+
+respawn
+exec ${base_sbindir}/getty 38400 tty$n
+EOF
+ done
+ fi
+
+ mv ${D}${base_sbindir}/init ${D}${base_sbindir}/init.${PN}
+ mv ${D}${base_sbindir}/halt ${D}${base_sbindir}/halt.${PN}
+ mv ${D}${base_sbindir}/reboot ${D}${base_sbindir}/reboot.${PN}
+ mv ${D}${base_sbindir}/shutdown ${D}${base_sbindir}/shutdown.${PN}
+ mv ${D}${base_sbindir}/poweroff ${D}${base_sbindir}/poweroff.${PN}
+}
+
+pkg_postinst_${PN}-sysvcompat () {
+#!/bin/sh
+update-alternatives --install ${base_sbindir}/reboot reboot reboot.${PN} 200
+update-alternatives --install ${base_sbindir}/halt halt halt.${PN} 200
+update-alternatives --install ${base_sbindir}/poweroff poweroff poweroff.${PN} 200
+update-alternatives --install ${base_sbindir}/shutdown shutdown shutdown.${PN} 200
+}
+
+pkg_prerm_${PN}-sysvcompat () {
+#!/bin/sh
+update-alternatives --remove reboot reboot.${PN}
+update-alternatives --remove halt halt.${PN}
+update-alternatives --remove poweroff reboot.${PN}
+update-alternatives --remove shutdown shutdown.${PN}
+}
diff --git a/recipes/upstart/upstart/init/rc b/recipes/upstart/upstart/init/rc
new file mode 100755
index 0000000..fdb0fce
--- /dev/null
+++ b/recipes/upstart/upstart/init/rc
@@ -0,0 +1,102 @@
+#!/bin/sh
+#
+# rc This file is responsible for starting/stopping
+# services when the runlevel changes.
+#
+# Optimization feature:
+# A startup script is _not_ run when the service was
+# running in the previous runlevel and it wasn't stopped
+# in the runlevel transition (most Debian services don't
+# have K?? links in rc{1,2,3,4,5} )
+#
+# Author: Miquel van Smoorenburg <miquels at cistron.nl>
+# Bruce Perens <Bruce at Pixar.com>
+#
+# Version: @(#)rc 2.78 07-Nov-1999 miquels at cistron.nl
+#
+
+. /etc/default/rcS
+export VERBOSE
+
+#
+# Start script or program.
+#
+startup() {
+ case "$1" in
+ *.sh)
+ sh "$@"
+ ;;
+ *)
+ "$@"
+ ;;
+ esac
+}
+
+ # Ignore CTRL-C only in this shell, so we can interrupt subprocesses.
+ trap ":" INT QUIT TSTP
+
+ # Set onlcr to avoid staircase effect.
+ stty onlcr 0>&1
+
+ # Now find out what the current and what the previous runlevel are.
+
+ runlevel=$RUNLEVEL
+ # Get first argument. Set new runlevel to this argument.
+ [ "$1" != "" ] && runlevel=$1
+ if [ "$runlevel" = "" ]
+ then
+ echo "Usage: $0 <runlevel>" >&2
+ exit 1
+ fi
+ previous=$PREVLEVEL
+ [ "$previous" = "" ] && previous=N
+
+ export runlevel previous
+
+ # Is there an rc directory for this new runlevel?
+ if [ -d /etc/rc$runlevel.d ]
+ then
+ # First, run the KILL scripts.
+ if [ $previous != N ]
+ then
+ for i in /etc/rc$runlevel.d/K[0-9][0-9]*
+ do
+ # Check if the script is there.
+ [ ! -f $i ] && continue
+
+ # Stop the service.
+ startup $i stop
+ done
+ fi
+ # Now run the START scripts for this runlevel.
+ for i in /etc/rc$runlevel.d/S*
+ do
+ [ ! -f $i ] && continue
+
+ if [ $previous != N ] && [ $previous != S ]
+ then
+ #
+ # Find start script in previous runlevel and
+ # stop script in this runlevel.
+ #
+ suffix=${i#/etc/rc$runlevel.d/S[0-9][0-9]}
+ stop=/etc/rc$runlevel.d/K[0-9][0-9]$suffix
+ previous_start=/etc/rc$previous.d/S[0-9][0-9]$suffix
+ #
+ # If there is a start script in the previous level
+ # and _no_ stop script in this level, we don't
+ # have to re-start the service.
+ #
+ [ -f $previous_start ] && [ ! -f $stop ] && continue
+ fi
+ case "$runlevel" in
+ 0|6)
+ startup $i stop
+ ;;
+ *)
+ startup $i start
+ ;;
+ esac
+ done
+ fi
+# eof /etc/init.d/rc
diff --git a/recipes/upstart/upstart/init/rcS b/recipes/upstart/upstart/init/rcS
new file mode 100755
index 0000000..15b90f7
--- /dev/null
+++ b/recipes/upstart/upstart/init/rcS
@@ -0,0 +1,113 @@
+#!/bin/sh
+#
+# rcS Call all S??* scripts in /etc/rcS.d in
+# numerical/alphabetical order.
+#
+# Version: @(#)/etc/init.d/rcS 2.76 19-Apr-1999 miquels at cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+runlevel=S
+prevlevel=N
+umask 022
+export PATH runlevel prevlevel
+
+# Make sure proc is mounted
+#
+[ -d "/proc/1" ] || mount proc /proc -t proc
+
+# Make sure sys is mounted
+[ -d "/sys/kernel" ] || mount sysfs /sys -t sysfs
+
+#
+# See if system needs to be setup. This is ONLY meant to
+# be used for the initial setup after a fresh installation!
+#
+if [ -x /sbin/unconfigured.sh ]
+then
+ /sbin/unconfigured.sh
+fi
+
+#
+# Source defaults.
+#
+. /etc/default/rcS
+
+#
+# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
+#
+trap ":" INT QUIT TSTP
+
+#
+# Do we have /proc/progress and set VERBOSE to "no" ?
+# If so, calculate the number of scripts and the incremental step
+#
+if [ "$VERBOSE" = no ]; then
+ if [ -e /proc/progress ]; then
+ set `ls -1 /etc/rc$runlevel.d/S* | wc`
+ numscripts=$1
+ PROGRESS_incstep=`expr 90 / $1`
+ PROGRESS_value=10
+ PROGRESS=yes
+ export PROGRESS_value PROGRESS_incstep
+ fi
+fi
+export VERBOSE PROGRESS
+
+#
+# Call all parts in order.
+#
+for i in /etc/rcS.d/S??*
+do
+ # Ignore dangling symlinks for now.
+ [ ! -f "$i" ] && continue
+
+ # Handle verbosity
+ [ "$VERBOSE" = very ] && echo "INIT: Running $i..."
+ if [ "$PROGRESS" = yes ]; then
+ export PROGRESS_value=`expr $PROGRESS_value + $PROGRESS_incstep`
+ echo "$PROGRESS_value Starting $i..." >/proc/progress
+ fi
+
+ case "$i" in
+ *.sh)
+ # Source shell script for speed.
+ (
+ trap - INT QUIT TSTP
+ set start
+ . $i
+ )
+ ;;
+ *)
+ # No sh extension, so fork subprocess.
+ $i start
+ ;;
+ esac
+
+ #
+ # Report status based on result code
+ #
+ result=$?
+ if [ "$PROGRESS" = yes ]; then
+ if [ "$result" = 0 ]; then
+ echo "=s" >/proc/progress
+ else
+ echo "=f" >/proc/progress
+ fi
+ fi
+done
+
+#
+# For compatibility, run the files in /etc/rc.boot too.
+#
+[ -d /etc/rc.boot ] && run-parts /etc/rc.boot
+
+#
+# Finish setup if needed. The comment above about
+# /sbin/unconfigured.sh applies here as well!
+#
+if [ -x /sbin/setup.sh ]
+then
+ /sbin/setup.sh
+fi
+
diff --git a/recipes/upstart/upstart/init/rcS-default b/recipes/upstart/upstart/init/rcS-default
new file mode 100644
index 0000000..7ad3c7b
--- /dev/null
+++ b/recipes/upstart/upstart/init/rcS-default
@@ -0,0 +1,25 @@
+#
+# Defaults for the boot scripts in /etc/rcS.d
+#
+
+# Time files in /tmp are kept in days.
+TMPTIME=0
+# Set to yes if you want sulogin to be spawned on bootup
+SULOGIN=no
+# Set to no if you want to be able to login over telnet/rlogin
+# before system startup is complete (as soon as inetd is started)
+DELAYLOGIN=no
+# Set UTC=yes if your system clock is set to UTC (GMT), and UTC=no if not.
+# UTC=yes
+# Set VERBOSE to "no" if you would like a more quiet bootup.
+VERBOSE=no
+# Set EDITMOTD to "no" if you don't want /etc/motd to be editted automatically
+EDITMOTD=no
+# Whether to fsck root on boot
+ENABLE_ROOTFS_FSCK=no
+# Set FSCKFIX to "yes" if you want to add "-y" to the fsck at startup.
+FSCKFIX=yes
+# Set TICKADJ to the correct tick value for this specific machine
+#TICKADJ=10000
+# Enable caching in populate-volatile.sh
+VOLATILE_ENABLE_CACHE=yes
diff --git a/recipes/upstart/upstart_0.3.11.bb b/recipes/upstart/upstart_0.3.11.bb
index c4db01b..a0bd17e 100644
--- a/recipes/upstart/upstart_0.3.11.bb
+++ b/recipes/upstart/upstart_0.3.11.bb
@@ -1,11 +1,18 @@
require upstart.inc
-SRC_URI = "http://upstart.ubuntu.com/download/0.3/upstart-${PV}.tar.bz2 \
+SRC_URI = "http://upstart.ubuntu.com/download/0.3/upstart-${PV}.tar.bz2;name=upstart \
+ http://upstart.ubuntu.com/download/example-jobs/0.3/example-jobs-${PV}.tar.gz;name=compat \
+ file://init/rcS-default file://init/rc file://init/rcS \
"
RRECOMMENDS_${PN} = "libupstart upstart-sysvcompat"
-PR = "r1"
+PR = "r2"
-SRC_URI[md5sum] = "a9e475e1458c876add0441d9d4cfe9c0"
-SRC_URI[sha256sum] = "d4f7fff9112049eab318518719735d0ac66ff558ed91c2d7c7c41124de2832b6"
+USE_VT ?= "1"
+SYSVINIT_ENABLED_GETTYS ?= "1"
+
+SRC_URI[upstart.md5sum] = "a9e475e1458c876add0441d9d4cfe9c0"
+SRC_URI[upstart.sha256sum] = "d4f7fff9112049eab318518719735d0ac66ff558ed91c2d7c7c41124de2832b6"
+SRC_URI[compat.md5sum] = "22d66ef8bc9d167eb822bbfecb584107"
+SRC_URI[compat.sha256sum] = "f53fae7258fcf67cb29d344e53e1548171e4781af11ff4ba92b8b81caab3c315"
diff --git a/recipes/upstart/upstart_0.3.8.bb b/recipes/upstart/upstart_0.3.8.bb
index 1b2cfb5..baf00d2 100644
--- a/recipes/upstart/upstart_0.3.8.bb
+++ b/recipes/upstart/upstart_0.3.8.bb
@@ -1,10 +1,14 @@
require upstart.inc
-SRC_URI = "http://upstart.ubuntu.com/download/0.3/upstart-${PV}.tar.bz2 \
-file://autoconf_version.patch"
+SRC_URI = "http://upstart.ubuntu.com/download/0.3/upstart-${PV}.tar.bz2;name=upstart \
+ http://upstart.ubuntu.com/download/example-jobs/0.3/example-jobs-${PV}.tar.gz;name=compat \
+ file://init/rcS-default file://init/rc file://init/rcS \
+ file://autoconf_version.patch \
+"
PR = "r1"
-
-SRC_URI[md5sum] = "5cdd2dc3a3f02089c9450edf4e8f4941"
-SRC_URI[sha256sum] = "9a2a37455ad4e9dd2856b5a0f15adb1a3f84439f60d0f63b041584a2666e9835"
+SRC_URI[upstart.md5sum] = "5cdd2dc3a3f02089c9450edf4e8f4941"
+SRC_URI[upstart.sha256sum] = "9a2a37455ad4e9dd2856b5a0f15adb1a3f84439f60d0f63b041584a2666e9835"
+SRC_URI[compat.md5sum] = "22d66ef8bc9d167eb822bbfecb584107"
+SRC_URI[compat.sha256sum] = "f53fae7258fcf67cb29d344e53e1548171e4781af11ff4ba92b8b81caab3c315"
--
1.6.0.6
More information about the Openembedded-devel
mailing list