Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
454e09d1d6 | ||
|
|
1969be04e5 | ||
|
|
ae60393561 |
49
ChangeLog
49
ChangeLog
@@ -1,47 +1,4 @@
|
||||
commit bb2d7becfd3008379f8f69b5d036922281aa211f
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add support for the s6 supervision suite
|
||||
|
||||
commit 0f9354becfbd54f9800c93092aa26be859dcf16a
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
man: Clarify the documentation for command_args
|
||||
|
||||
The command_args variable only works if using start-stop-daemon to start
|
||||
the daemon.
|
||||
|
||||
commit a15fa1a3b12a5372c1b3c8d5df7e489648bef913
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Rework supervisor integration framework
|
||||
|
||||
The original way of doing this allowed users to change the supervisor in
|
||||
conf.d/*. This changes this so that the supervisor setup can be done in
|
||||
the service script itself.
|
||||
|
||||
commit 0198affc742297b6e203bbcecc14436682119cc7
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
The rc_supervisor variable is a service configuration variable
|
||||
|
||||
This variable should not be changed globally unless you really know what
|
||||
you are doing.
|
||||
|
||||
commit abef2fcb2dbcc277bb05f0d9c674d4b47826f17f
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Make the default start, stop and status functions overridable
|
||||
|
||||
This will make it possible to add support for supervision suites such as
|
||||
runit and s6.
|
||||
|
||||
commit 0b435ddd834bd18254c4d3341acdebf0829921f5
|
||||
commit 1969be04e54ad162329001d4b09ebfcf162a6808
|
||||
Author: Jakob Drexel <jake42@rommel.stw.uni-erlangen.de>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -60,11 +17,11 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
X-Gentoo-Bug: 537304
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=537304
|
||||
|
||||
commit 9f6427ea57c6c950b4d1c356ad1bfb0aa8deb40b
|
||||
commit ae6039356177a9030adc93b025f487e7a4df05aa
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Start work on 0.16
|
||||
Start work on 0.15.1
|
||||
|
||||
commit 60488069c08201cbfbc661a3e7bd1fafa31fceed
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
NAME= openrc
|
||||
VERSION= 0.16
|
||||
VERSION= 0.15.1
|
||||
PKG= ${NAME}-${VERSION}
|
||||
|
||||
@@ -3,7 +3,7 @@ include ../mk/net.mk
|
||||
DIR= ${INITDIR}
|
||||
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
|
||||
netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \
|
||||
tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}}
|
||||
tmpfiles.setup.in swclock.in sysctl.in urandom.in ${SRCS-${OS}}
|
||||
BIN= ${OBJS}
|
||||
|
||||
# Are we installing our network scripts?
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
#!@SBINDIR@/openrc-run
|
||||
# Copyright (C) 2015 William Hubbs <w.d.hubbs@gmail.com>
|
||||
# Released under the 2-clause BSD license.
|
||||
|
||||
command=/bin/s6-svscan
|
||||
command_args="${RC_SVCDIR}"/s6-scan
|
||||
command_background=yes
|
||||
pidfile=/var/run/s6-svscan.pid
|
||||
|
||||
depend()
|
||||
{
|
||||
need localmount
|
||||
}
|
||||
|
||||
start_pre()
|
||||
{
|
||||
einfo "Creating s6 scan directory"
|
||||
checkpath -d -m 0755 "$RC_SVCDIR"/s6-scan
|
||||
return $?
|
||||
}
|
||||
|
||||
stop_post()
|
||||
{
|
||||
ebegin "Stopping any remaining s6 services"
|
||||
s6-svc -dx "${RC_SVCDIR}"/s6-scan/* 2>/dev/null || true
|
||||
eend $?
|
||||
|
||||
ebegin "Stopping any remaining s6 service loggers"
|
||||
s6-svc -dx "${RC_SVCDIR}"/s6-scan/*/log 2>/dev/null || true
|
||||
eend $?
|
||||
}
|
||||
@@ -107,18 +107,6 @@ the service has already been stopped.
|
||||
String describing the service.
|
||||
.It Ar description_$command
|
||||
String describing the extra command.
|
||||
.It Ar supervisor
|
||||
Supervisor to use to monitor this daemon. If this is unset,
|
||||
start-stop-daemon will be used. The only alternate supervisor we support
|
||||
in this release is S6 from Skarnet software. To use this, set
|
||||
supervisor=s6.
|
||||
.It Ar s6_service_path
|
||||
The path to the s6 service directory if you are monitoring this service
|
||||
with S6. The default is /etc/svc.d/${RC_SVCNAME}.
|
||||
.It Ar s6_svwait_options_start
|
||||
The options to pass to s6-svwait when starting the service via s6.
|
||||
.It Ar s6_svwait_options_stop
|
||||
The options to pass to s6-svwait when stopping the service via s6.
|
||||
.It Ar start_stop_daemon_args
|
||||
List of arguments passed to start-stop-daemon when starting the daemon.
|
||||
.It Ar command
|
||||
@@ -126,8 +114,7 @@ Daemon to start or stop via
|
||||
.Nm start-stop-daemon
|
||||
if no start or stop function is defined by the service.
|
||||
.It Ar command_args
|
||||
List of arguments to pass to the daemon when starting via
|
||||
.Nm start-stop-daemon .
|
||||
List of arguments to pass to the daemon when starting.
|
||||
.It Ar command_background
|
||||
Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into
|
||||
the background. This implies the "--make-pidfile" and "--pidfile" option of
|
||||
|
||||
56
s6-guide.md
56
s6-guide.md
@@ -1,56 +0,0 @@
|
||||
# Using S6 with OpenRC
|
||||
|
||||
Beginning with OpenRC-0.16, we support using the s6 supervision suite
|
||||
from Skarmet Software in place of start-stop-daemon for monitoring
|
||||
daemons [1].
|
||||
|
||||
## Setup
|
||||
|
||||
Documenting s6 in detail is beyond the scope of this guide. It will
|
||||
document how to set up OpenRC services to communicate with s6.
|
||||
|
||||
### Use Default start, stop and status functions
|
||||
|
||||
If you write your own start, stop and status functions in your service
|
||||
script, none of this will work. You must allow OpenRC to use the default
|
||||
functions.
|
||||
|
||||
### Dependencies
|
||||
|
||||
All OpenRC service scripts that want their daemons monitored by s6
|
||||
should have the following line added to their dependencies to make sure
|
||||
the s6 scan directory is being monitored.
|
||||
|
||||
need s6-svscan
|
||||
|
||||
### Variable Settings
|
||||
|
||||
The most important setting is the supervisor variable. At the top of
|
||||
your service script, you should set this variable as follows:
|
||||
|
||||
supervisor=s6
|
||||
|
||||
Several other variables affect s6 services. They are documented on the
|
||||
openrc-run man page, but I will list them here for convenience:
|
||||
|
||||
s6_service_path - the path to the s6 service directory
|
||||
s6_svwait_options_start - the options to pass to s6-svwait when starting
|
||||
s6_svwait_options_stop - the options to pass to s6-svwait when stopping.
|
||||
|
||||
The s6_service_path variable defaults to /etc/svc.d/${RC_SVCNAME} if it
|
||||
is not set in the service script. For example, if you want a service
|
||||
script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6
|
||||
service should be the directory /etc/svc.d/foobar.
|
||||
|
||||
See the documentation for s6 for more information about s6 service
|
||||
directories.
|
||||
|
||||
The s6_svwait_options_* variables set command line options to pass to
|
||||
s6-svwait when starting or stopping the s6 service. These can be very
|
||||
useful for waiting for s6 services to signal when they are up, timing out
|
||||
when an s6 service doesn't come up, etc.
|
||||
|
||||
This is very early support, so feel free to file bugs if you have
|
||||
issues.
|
||||
|
||||
[1] https://www.skarnet.org/software/s6
|
||||
@@ -1,7 +1,7 @@
|
||||
DIR= ${LIBEXECDIR}/sh
|
||||
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
|
||||
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
|
||||
INC= rc-mount.sh functions.sh rc-functions.sh s6.sh start-stop-daemon.sh
|
||||
INC= rc-mount.sh functions.sh rc-functions.sh
|
||||
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
||||
|
||||
INSTALLAFTER= _installafter
|
||||
|
||||
@@ -126,42 +126,69 @@ _status()
|
||||
}
|
||||
|
||||
# Template start / stop / status functions
|
||||
# These functions select the appropriate function to call from the
|
||||
# supervisor modules
|
||||
start()
|
||||
{
|
||||
local func=ssd_start
|
||||
case "$supervisor" in
|
||||
s6) func=s6_start ;;
|
||||
?*)
|
||||
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||
;;
|
||||
esac
|
||||
$func
|
||||
[ -n "$command" ] || return 0
|
||||
local _background=
|
||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||
if yesno "${command_background}"; then
|
||||
if [ -z "${pidfile}" ]; then
|
||||
eend 1 "command_background option used but no pidfile specified"
|
||||
return 1
|
||||
fi
|
||||
_background="--background --make-pidfile"
|
||||
fi
|
||||
if yesno "$start_inactive"; then
|
||||
local _inactive=false
|
||||
service_inactive && _inactive=true
|
||||
mark_service_inactive
|
||||
fi
|
||||
eval start-stop-daemon --start \
|
||||
--exec $command \
|
||||
${chroot:+--chroot} $chroot \
|
||||
${procname:+--name} $procname \
|
||||
${pidfile:+--pidfile} $pidfile \
|
||||
$_background $start_stop_daemon_args \
|
||||
-- $command_args
|
||||
if eend $? "Failed to start $RC_SVCNAME"; then
|
||||
service_set_value "command" "${command}"
|
||||
[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
|
||||
[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
|
||||
[ -n "${procname}" ] && service_set_value "procname" "${procname}"
|
||||
return 0
|
||||
fi
|
||||
if yesno "$start_inactive"; then
|
||||
if ! $_inactive; then
|
||||
mark_service_stopped
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
stop()
|
||||
{
|
||||
local func=ssd_stop
|
||||
case "$supervisor" in
|
||||
s6) func=s6_stop ;;
|
||||
?*)
|
||||
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||
;;
|
||||
esac
|
||||
$func
|
||||
local startcommand="$(service_get_value "command")"
|
||||
local startchroot="$(service_get_value "chroot")"
|
||||
local startpidfile="$(service_get_value "pidfile")"
|
||||
local startprocname="$(service_get_value "procname")"
|
||||
command="${startcommand:-$command}"
|
||||
chroot="${startchroot:-$chroot}"
|
||||
pidfile="${startpidfile:-$pidfile}"
|
||||
procname="${startprocname:-$procname}"
|
||||
[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
|
||||
ebegin "Stopping ${name:-$RC_SVCNAME}"
|
||||
start-stop-daemon --stop \
|
||||
${retry:+--retry} $retry \
|
||||
${command:+--exec} $command \
|
||||
${procname:+--name} $procname \
|
||||
${pidfile:+--pidfile} $chroot$pidfile \
|
||||
${stopsig:+--signal} $stopsig
|
||||
eend $? "Failed to stop $RC_SVCNAME"
|
||||
}
|
||||
|
||||
status()
|
||||
{
|
||||
local func=ssd_status
|
||||
case "$supervisor" in
|
||||
s6) func=s6_status ;;
|
||||
?*)
|
||||
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||
;;
|
||||
esac
|
||||
$func
|
||||
_status
|
||||
}
|
||||
|
||||
yesno $RC_DEBUG && set -x
|
||||
@@ -185,10 +212,6 @@ unset _conf_d
|
||||
# Load any system overrides
|
||||
sourcex -e "@SYSCONFDIR@/rc.conf"
|
||||
|
||||
# load service supervisor functions
|
||||
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
||||
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
|
||||
|
||||
# Set verbose mode
|
||||
if yesno "${rc_verbose:-$RC_VERBOSE}"; then
|
||||
EINFO_VERBOSE=yes
|
||||
|
||||
46
sh/s6.sh
46
sh/s6.sh
@@ -1,46 +0,0 @@
|
||||
# Start / stop / status functions for s6 support
|
||||
# Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com>
|
||||
# Released under the 2-clause BSD license.
|
||||
|
||||
[ -z "${s6_service_path}" ] && s6_service_path="/etc/svc.d/${RC_SVCNAME}"
|
||||
|
||||
s6_start()
|
||||
{
|
||||
if [ ! -d "${s6_service_path}" ]; then
|
||||
eerror "${s6_service_path} does not exist."
|
||||
return 1
|
||||
fi
|
||||
local rc
|
||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||
ln -sf "${s6_service_path}" "${RC_SVCDIR}"/s6-scan
|
||||
s6-svscanctl -an "${RC_SVCDIR}"/s6-scan
|
||||
rc=$?
|
||||
if [ -n "$s6_svwait_options_start" ]; then
|
||||
s6-svwait ${s6_svwait_options_start} "${s6_service_path}"
|
||||
rc=$?
|
||||
fi
|
||||
eend $rc "Failed to start $RC_SVCNAME"
|
||||
}
|
||||
|
||||
s6_stop()
|
||||
{
|
||||
if [ ! -d "${s6_service_path}" ]; then
|
||||
eerror "${s6_service_path} does not exist."
|
||||
return 1
|
||||
fi
|
||||
local rc
|
||||
ebegin "Stopping ${name:-$RC_SVCNAME}"
|
||||
rm -rf "${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
|
||||
s6-svscanctl -an "${RC_SVCDIR}"/s6-scan
|
||||
rc=$?
|
||||
if [ -n "$s6_svwait_options_stop" ]; then
|
||||
s6-svwait ${s6_svwait_options_stop} "${s6_service_path}"
|
||||
rc=$?
|
||||
fi
|
||||
eend $rc "Failed to stop $RC_SVCNAME"
|
||||
}
|
||||
|
||||
s6_status()
|
||||
{
|
||||
s6-svstat "${s6_service_path}"
|
||||
}
|
||||
@@ -1,71 +0,0 @@
|
||||
# start / stop / status functions for start-stop-daemon
|
||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
||||
# Released under the 2-clause BSD license.
|
||||
|
||||
ssd_start()
|
||||
{
|
||||
[ -n "$command" ] || return 0
|
||||
|
||||
local _background=
|
||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||
if yesno "${command_background}"; then
|
||||
if [ -z "${pidfile}" ]; then
|
||||
eend 1 "command_background option used but no pidfile specified"
|
||||
return 1
|
||||
fi
|
||||
if [ -n "${command_args_background}" ]; then
|
||||
eend 1 "command_background used with command_args_background"
|
||||
return 1
|
||||
fi
|
||||
_background="--background --make-pidfile"
|
||||
fi
|
||||
if yesno "$start_inactive"; then
|
||||
local _inactive=false
|
||||
service_inactive && _inactive=true
|
||||
mark_service_inactive
|
||||
fi
|
||||
eval start-stop-daemon --start \
|
||||
--exec $command \
|
||||
${procname:+--name} $procname \
|
||||
${pidfile:+--pidfile} $pidfile \
|
||||
${command_user+--user} $command_user \
|
||||
$_background $start_stop_daemon_args \
|
||||
-- $command_args $command_args_background
|
||||
if eend $? "Failed to start $RC_SVCNAME"; then
|
||||
service_set_value "command" "${command}"
|
||||
[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
|
||||
[ -n "${procname}" ] && service_set_value "procname" "${procname}"
|
||||
return 0
|
||||
fi
|
||||
if yesno "$start_inactive"; then
|
||||
if ! $_inactive; then
|
||||
mark_service_stopped
|
||||
fi
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
ssd_stop()
|
||||
{
|
||||
local startcommand="$(service_get_value "command")"
|
||||
local startpidfile="$(service_get_value "pidfile")"
|
||||
local startprocname="$(service_get_value "procname")"
|
||||
command="${startcommand:-$command}"
|
||||
pidfile="${startpidfile:-$pidfile}"
|
||||
procname="${startprocname:-$procname}"
|
||||
[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
|
||||
ebegin "Stopping ${name:-$RC_SVCNAME}"
|
||||
start-stop-daemon --stop \
|
||||
${retry:+--retry} $retry \
|
||||
${command:+--exec} $command \
|
||||
${procname:+--name} $procname \
|
||||
${pidfile:+--pidfile} $pidfile \
|
||||
${stopsig:+--signal} $stopsig
|
||||
|
||||
eend $? "Failed to stop $RC_SVCNAME"
|
||||
}
|
||||
|
||||
ssd_status()
|
||||
{
|
||||
_status
|
||||
}
|
||||
Reference in New Issue
Block a user