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}
|
DIR= ${INITDIR}
|
||||||
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
|
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 \
|
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}
|
BIN= ${OBJS}
|
||||||
|
|
||||||
# Are we installing our network scripts?
|
# 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
|
DIR= ${LIBEXECDIR}/sh
|
||||||
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
|
SRCS= init.sh.in functions.sh.in gendepends.sh.in \
|
||||||
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
|
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 \
|
INC= rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \
|
||||||
supervise-daemon.sh
|
start-stop-daemon.sh supervise-daemon.sh
|
||||||
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
||||||
|
|
||||||
INSTALLAFTER= _installafter
|
INSTALLAFTER= _installafter
|
||||||
|
@ -153,6 +153,7 @@ start()
|
|||||||
{
|
{
|
||||||
local func=ssd_start
|
local func=ssd_start
|
||||||
case "$supervisor" in
|
case "$supervisor" in
|
||||||
|
runit) func=runit_start ;;
|
||||||
s6) func=s6_start ;;
|
s6) func=s6_start ;;
|
||||||
supervise-daemon) func=supervise_start ;;
|
supervise-daemon) func=supervise_start ;;
|
||||||
?*)
|
?*)
|
||||||
@ -166,6 +167,7 @@ stop()
|
|||||||
{
|
{
|
||||||
local func=ssd_stop
|
local func=ssd_stop
|
||||||
case "$supervisor" in
|
case "$supervisor" in
|
||||||
|
runit) func=runit_stop ;;
|
||||||
s6) func=s6_stop ;;
|
s6) func=s6_stop ;;
|
||||||
supervise-daemon) func=supervise_stop ;;
|
supervise-daemon) func=supervise_stop ;;
|
||||||
?*)
|
?*)
|
||||||
@ -179,6 +181,7 @@ status()
|
|||||||
{
|
{
|
||||||
local func=ssd_status
|
local func=ssd_status
|
||||||
case "$supervisor" in
|
case "$supervisor" in
|
||||||
|
runit) func=runit_status ;;
|
||||||
s6) func=s6_status ;;
|
s6) func=s6_status ;;
|
||||||
supervise-daemon) func=supervise_status ;;
|
supervise-daemon) func=supervise_status ;;
|
||||||
?*)
|
?*)
|
||||||
@ -216,6 +219,7 @@ fi
|
|||||||
|
|
||||||
|
|
||||||
# load service supervisor functions
|
# load service supervisor functions
|
||||||
|
sourcex "@LIBEXECDIR@/sh/runit.sh"
|
||||||
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
||||||
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
|
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
|
||||||
sourcex "@LIBEXECDIR@/sh/supervise-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