Your message dated Tue, 26 Jun 2012 23:57:41 +0100
with message-id <[email protected]>
and subject line Close
has caused the Debian Bug report #671284,
regarding support for upstart in invoke-rc.d
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
671284: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=671284
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: sysv-rc
Version: 2.88dsf-23
Severity: wishlist
Tags: patch
Hi again,
The policy proposal currently on the table for integration of alternate init
systems also requires invoke-rc.d implementations to correctly handle native
jobs in preference over sysvinit scripts. I'm attaching an implementation
herewith.
This is a more or less direct port to invoke-rc.d of the
/lib/init/upstart-job script that's been in use in Ubuntu for a couple of
years, providing LSB initscript-like semantics on top of the upstart
control interface. I have also thoroughly tested this with an
upstart-enabled service and a non-upstart-enabled service, confirming that
invoke-rc.d still works with this change applied.
I'd be grateful to have this included in the 2.88dsf-24 upload.
Thanks,
--
Steve Langasek Give me a lever long enough and a Free OS
Debian Developer to set it on, and I can move the world.
Ubuntu Developer http://www.debian.org/
[email protected] [email protected]
From bd18a1da90184eb0f30222d9708a7b86aa358b64 Mon Sep 17 00:00:00 2001
From: Steve Langasek <[email protected]>
Date: Wed, 2 May 2012 16:43:14 -0700
Subject: [PATCH] Add upstart support to invoke-rc.d, per the policy
discussion in bug #591791.
---
debian/changelog | 2 +
debian/src/sysv-rc/sbin/invoke-rc.d | 75 ++++++++++++++++++++++++++++++++---
2 files changed, 71 insertions(+), 6 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index ce63f74..d7d4f6f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -28,6 +28,8 @@ sysvinit (2.88dsf-24) experimental; urgency=low
[ Steve Langasek ]
* Install the startpar bridge now that dh_installinit in Debian handles
this. Closes: #660824.
+ * Add upstart support to invoke-rc.d, per the policy discussion in bug
+ #591791.
-- Roger Leigh <[email protected]> Sun, 29 Apr 2012 23:52:14 +0100
diff --git a/debian/src/sysv-rc/sbin/invoke-rc.d b/debian/src/sysv-rc/sbin/invoke-rc.d
index e5887ee..7712098 100644
--- a/debian/src/sysv-rc/sbin/invoke-rc.d
+++ b/debian/src/sysv-rc/sbin/invoke-rc.d
@@ -24,6 +24,7 @@
RUNLEVEL=/sbin/runlevel
POLICYHELPER=/usr/sbin/policy-rc.d
INITDPREFIX=/etc/init.d/
+UPSTARTDIR=/etc/init/
RCDPREFIX=/etc/rc
# Options
@@ -36,6 +37,7 @@ FORCE=
RETRY=
RETURNFAILURE=
RC=
+is_upstart=
# Shell options
set +e
@@ -265,9 +267,15 @@ case ${ACTION} in
;;
esac
-## Verifies if the given initscript ID is known
-## For sysvinit, this error is critical
-if test ! -f "${INITDPREFIX}${INITSCRIPTID}" ; then
+# If we're running on upstart and there's an upstart job of this name, do
+# the rest with upstart instead of calling the init script.
+if which initctl >/dev/null && initctl version | grep -q upstart \
+ && [ -e "$UPSTARTDIR/${INITSCRIPTID}.conf" ]
+then
+ is_upstart=1
+elif test ! -f "${INITDPREFIX}${INITSCRIPTID}" ; then
+ ## Verifies if the given initscript ID is known
+ ## For sysvinit, this error is critical
printerror unknown initscript, ${INITDPREFIX}${INITSCRIPTID} not found.
exit 100
fi
@@ -375,7 +383,7 @@ case ${ACTION} in
esac
# test if /etc/init.d/initscript is actually executable
-if testexec "${INITDPREFIX}${INITSCRIPTID}" ; then
+if [ -n "$is_upstart" ] || testexec "${INITDPREFIX}${INITSCRIPTID}" ; then
if test x${RC} = x && test x${MODE} = xquery ; then
RC=105
fi
@@ -422,11 +430,25 @@ getnextaction () {
ACTION="$@"
}
+if [ -n "$is_upstart" ]; then
+ RUNNING=
+ DISABLED=
+ if status "$INITSCRIPTID" 2>/dev/null | grep -q ' start/'; then
+ RUNNING=1
+ fi
+ UPSTART_VERSION_RUNNING=$(initctl version|awk '{print $3}'|tr -d ')')
+
+ if dpkg --compare-versions "$UPSTART_VERSION_RUNNING" ge 0.9.7
+ then
+ initctl show-config -e "$INITSCRIPTID"|grep -q '^ start on' || DISABLED=1
+ fi
+fi
+
## Executes initscript
## note that $ACTION is a space-separated list of actions
## to be attempted in order until one suceeds.
if test x${FORCE} != x || test ${RC} -eq 104 ; then
- if testexec "${INITDPREFIX}${INITSCRIPTID}" ; then
+ if [ -n "$is_upstart" ] || testexec "${INITDPREFIX}${INITSCRIPTID}" ; then
RC=102
setechoactions ${ACTION}
while test ! -z "${ACTION}" ; do
@@ -435,7 +457,48 @@ if test x${FORCE} != x || test ${RC} -eq 104 ; then
printerror executing initscript action \"${saction}\"...
fi
- "${INITDPREFIX}${INITSCRIPTID}" "${saction}" "$@" && exit 0
+ if [ -n "$is_upstart" ]; then
+ case $saction in
+ status)
+ "$saction" "$INITSCRIPTID" && exit 0
+ ;;
+ start|stop)
+ if [ -z "$RUNNING" ] && [ "$saction" = "stop" ]; then
+ exit 0
+ elif [ -n "$RUNNING" ] && [ "$saction" = "start" ]; then
+ exit 0
+ elif [ -n "$DISABLED" ] && [ "$saction" = "start" ]; then
+ exit 0
+ fi
+ $saction "$INITSCRIPTID" && exit 0
+ ;;
+ restart)
+ if [ -n "$RUNNING" ] ; then
+ stop "$INITSCRIPTID"
+ fi
+
+ # If the job is disabled and is not currently
+ # running, the job is not restarted. However, if
+ # the job is disabled but has been forced into
+ # the running state, we *do* stop and restart it
+ # since this is expected behaviour
+ # for the admin who forced the start.
+ if [ -n "$DISABLED" ] && [ -z "$RUNNING" ]; then
+ exit 0
+ fi
+ start "$INITSCRIPTID" && exit 0
+ ;;
+ reload|force-reload)
+ reload "$INITSCRIPTID" && exit 0
+ ;;
+ *)
+ # This will almost certainly fail, but give it a try
+ initctl "$saction" "$INITSCRIPTID" && exit 0
+ ;;
+ esac
+ else
+ "${INITDPREFIX}${INITSCRIPTID}" "${saction}" "$@" && exit 0
+ fi
RC=$?
if test ! -z "${ACTION}" ; then
--
1.7.9.5
signature.asc
Description: Digital signature
--- End Message ---
--- Begin Message ---
Version: 2.88dsf-25
--
.''`. Roger Leigh
: :' : Debian GNU/Linux http://people.debian.org/~rleigh/
`. `' schroot and sbuild http://alioth.debian.org/projects/buildd-tools
`- GPG Public Key F33D 281D 470A B443 6756 147C 07B3 C8BC 4083 E800
--- End Message ---
_______________________________________________
Pkg-sysvinit-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-sysvinit-devel