Add support for runit
X-Gentoo-Bug: 501364 X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=501364
This commit is contained in:
parent
f2c2e2dd5a
commit
f62253b833
@ -3,7 +3,8 @@ 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 runsvdir.in urandom.in \
|
||||
s6-svscan.in ${SRCS-${OS}}
|
||||
BIN= ${OBJS}
|
||||
|
||||
# Are we installing our network scripts?
|
||||
|
20
init.d/runsvdir.in
Normal file
20
init.d/runsvdir.in
Normal file
@ -0,0 +1,20 @@
|
||||
#!@SBINDIR@/openrc-run
|
||||
# Copyright (c) 2016 The OpenRC Authors.
|
||||
# See the Authors file at the top-level directory of this distribution and
|
||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
|
||||
#
|
||||
# This file is part of OpenRC. It is subject to the license terms in
|
||||
# the LICENSE file found in the top-level directory of this
|
||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
|
||||
# This file may not be copied, modified, propagated, or distributed
|
||||
# except according to the terms contained in the LICENSE file.
|
||||
|
||||
command=/usr/bin/runsvdir
|
||||
command_background=yes
|
||||
pidfile=/var/run/runsvdir.pid
|
||||
command_args="-P $RC_SVCDIR/sv 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'"
|
||||
|
||||
start_pre()
|
||||
{
|
||||
checkpath -m 0755 -o root:root -d ${RC_SVCDIR}/sv
|
||||
}
|
41
runit-guide.md
Normal file
41
runit-guide.md
Normal file
@ -0,0 +1,41 @@
|
||||
# Using runit with OpenRC
|
||||
|
||||
Beginning with OpenRC-0.21, we support using runit [1] in place of
|
||||
start-stop-daemon for monitoring and restarting daemons.
|
||||
|
||||
## Setup
|
||||
|
||||
Documenting runit in detail is beyond the scope of this guide. It will
|
||||
document how to set up OpenRC services to communicate with runit.
|
||||
|
||||
### 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 runit
|
||||
should have the following line added to their dependencies to make sure
|
||||
the runit scan directory is being monitored.
|
||||
|
||||
need runsvdir
|
||||
|
||||
### 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=runit
|
||||
|
||||
The second variable you need is runit_service. This is the path to the
|
||||
runit service you wish to control via OpenRC. The default is
|
||||
/etc/sv/${RC_SVCNAME}. This means that for an OpenRC service
|
||||
/etc/init.d/foo, you will need to create the same runit service in
|
||||
/etc/sv/foo.
|
||||
|
||||
This is very early support, so feel free to file bugs if you have
|
||||
issues.
|
||||
|
||||
[1] http://www.smarden.org/runit
|
@ -1,8 +1,8 @@
|
||||
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= functions.sh rc-mount.sh rc-functions.sh s6.sh start-stop-daemon.sh \
|
||||
supervise-daemon.sh
|
||||
INC= rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \
|
||||
start-stop-daemon.sh supervise-daemon.sh
|
||||
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
||||
|
||||
INSTALLAFTER= _installafter
|
||||
|
@ -153,6 +153,7 @@ start()
|
||||
{
|
||||
local func=ssd_start
|
||||
case "$supervisor" in
|
||||
runit) func=runit_start ;;
|
||||
s6) func=s6_start ;;
|
||||
supervise-daemon) func=supervise_start ;;
|
||||
?*)
|
||||
@ -166,6 +167,7 @@ stop()
|
||||
{
|
||||
local func=ssd_stop
|
||||
case "$supervisor" in
|
||||
runit) func=runit_stop ;;
|
||||
s6) func=s6_stop ;;
|
||||
supervise-daemon) func=supervise_stop ;;
|
||||
?*)
|
||||
@ -179,6 +181,7 @@ status()
|
||||
{
|
||||
local func=ssd_status
|
||||
case "$supervisor" in
|
||||
runit) func=runit_status ;;
|
||||
s6) func=s6_status ;;
|
||||
supervise-daemon) func=supervise_status ;;
|
||||
?*)
|
||||
@ -216,6 +219,7 @@ fi
|
||||
|
||||
|
||||
# load service supervisor functions
|
||||
sourcex "@LIBEXECDIR@/sh/runit.sh"
|
||||
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
||||
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
|
||||
sourcex "@LIBEXECDIR@/sh/supervise-daemon.sh"
|
||||
|
52
sh/runit.sh
Normal file
52
sh/runit.sh
Normal file
@ -0,0 +1,52 @@
|
||||
# Copyright (c) 2016 The OpenRC Authors.
|
||||
# See the Authors file at the top-level directory of this distribution and
|
||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
|
||||
#
|
||||
# This file is part of OpenRC. It is subject to the license terms in
|
||||
# the LICENSE file found in the top-level directory of this
|
||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
|
||||
# This file may not be copied, modified, propagated, or distributed
|
||||
# except according to the terms contained in the LICENSE file.
|
||||
# Released under the 2-clause BSD license.
|
||||
|
||||
runit_start()
|
||||
{
|
||||
local service_path service_link
|
||||
service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
|
||||
if [ ! -d "${service_path}" ]; then
|
||||
eerror "Runit service ${service_path} not found"
|
||||
return 1
|
||||
fi
|
||||
service_link="${RC_SVCDIR}/sv/${service_path##*/}"
|
||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||
ln -snf "${service_path}" "${service_link}"
|
||||
sv start "${service_link}" > /dev/null 2>&1
|
||||
eend $? "Failed to start $RC_SVCNAME"
|
||||
}
|
||||
|
||||
runit_stop()
|
||||
{
|
||||
local service_path service_link
|
||||
service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
|
||||
if [ ! -d "${service_path}" ]; then
|
||||
eerror "Runit service ${service_path} not found"
|
||||
return 1
|
||||
fi
|
||||
service_link="${RC_SVCDIR}/sv/${service_path##*/}"
|
||||
ebegin "Stopping ${name:-$RC_SVCNAME}"
|
||||
sv stop "${service_link}" > /dev/null 2>&1 &&
|
||||
rm "${service_link}"
|
||||
eend $? "Failed to stop $RC_SVCNAME"
|
||||
}
|
||||
|
||||
runit_status()
|
||||
{
|
||||
local service_path service_link
|
||||
service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
|
||||
if [ ! -d "${service_path}" ]; then
|
||||
eerror "Runit service ${service_path} not found"
|
||||
return 1
|
||||
fi
|
||||
service_link="${RC_SVCDIR}/sv/${service_path##*/}"
|
||||
sv status "${service_link}"
|
||||
}
|
Loading…
Reference in New Issue
Block a user