Compare commits
34 Commits
0.14
...
new-netmou
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8591a0ea73 | ||
|
|
6a42298257 | ||
|
|
f69833a1e1 | ||
|
|
eeadca0b8a | ||
|
|
dde339070b | ||
|
|
1736be3bc3 | ||
|
|
a36a635b01 | ||
|
|
9310ccc06b | ||
|
|
0c2e4eb3cd | ||
|
|
d2ce07e227 | ||
|
|
b209fe3859 | ||
|
|
c94c8288cd | ||
|
|
bcb9c44e73 | ||
|
|
bbabf546f9 | ||
|
|
a7fcc1e264 | ||
|
|
b79d058f16 | ||
|
|
ddce529c71 | ||
|
|
e372f97beb | ||
|
|
c2abf4b436 | ||
|
|
d247ac4cbb | ||
|
|
bb2d7becfd | ||
|
|
0f9354becf | ||
|
|
a15fa1a3b1 | ||
|
|
0198affc74 | ||
|
|
abef2fcb2d | ||
|
|
0b435ddd83 | ||
|
|
9f6427ea57 | ||
|
|
60488069c0 | ||
|
|
9225bfa691 | ||
|
|
7bd456ed7b | ||
|
|
c709e6077c | ||
|
|
a27d577da8 | ||
|
|
8b93492086 | ||
|
|
4b1b457cd1 |
231
ChangeLog
231
ChangeLog
@@ -1,3 +1,234 @@
|
|||||||
|
commit d2ce07e227ec95370e8aee5f1199edc6ad61aff9
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add rc-sstat script
|
||||||
|
|
||||||
|
The rc-sstat script is written to display status of s6 services and
|
||||||
|
run rc-status to display all services status.
|
||||||
|
|
||||||
|
This currently only works on Linux.
|
||||||
|
|
||||||
|
commit b209fe3859c05c286037843bb34058f849c54b15
|
||||||
|
Author: Mike Gilbert <floppym@gentoo.org>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
bootmisc: Don't call dmesg in systemd-nspawn containers
|
||||||
|
|
||||||
|
This fixes #57.
|
||||||
|
|
||||||
|
commit c94c8288cd5217b01c24d6f048c64ebbc30bee02
|
||||||
|
Author: Mike Frysinger <vapier@gentoo.org>
|
||||||
|
Commit: Mike Frysinger <vapier@gentoo.org>
|
||||||
|
|
||||||
|
fix link to s6 website
|
||||||
|
|
||||||
|
commit bcb9c44e73ccf332c7c961a6f82520699c6e776d
|
||||||
|
Author: Mike Gilbert <floppym@gentoo.org>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
man: Document the stopsig variable
|
||||||
|
|
||||||
|
This variable can be used to set the signal to send if the service is
|
||||||
|
using start-stop-daemon.
|
||||||
|
|
||||||
|
This fixes #56
|
||||||
|
|
||||||
|
commit bbabf546f9d72cbfc48bd839a6d01b402ee6cced
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Document bash's handling of ulimit options
|
||||||
|
|
||||||
|
When bash is used in posix mode for the shell, the ulimit command uses
|
||||||
|
a block size of 512 bytes for the -c and -f options.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 549238
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=549238
|
||||||
|
|
||||||
|
commit a7fcc1e264b035177b4e524a40b27145baa86969
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
S6: kick the scanner and sleep 1.5 seconds to avoid a race condition
|
||||||
|
|
||||||
|
commit b79d058f162d8b49ccc968744e7cb1b7a7ba729c
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
s6: Use s6-svc -Dd to stop services
|
||||||
|
|
||||||
|
This allows us to get rid of the sleep call in the stop function. Also,
|
||||||
|
we set a configurable timeout value for stopping daemons.
|
||||||
|
|
||||||
|
commit ddce529c71c2e9f01d8e5666e27050b6ed6c6761
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
More s6 fixes
|
||||||
|
|
||||||
|
- When no service link is in the scan directory, show the default
|
||||||
|
stopped message.
|
||||||
|
- Do not remove the service link when stopping the service.
|
||||||
|
|
||||||
|
commit e372f97bebd4866633ad56aa5d5b1ae59fa88118
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Fix the s6 handling
|
||||||
|
|
||||||
|
This changes the default s6 service directory to /var/svc.d, also
|
||||||
|
it changes the code to work with the individual services instead of
|
||||||
|
forcing a rescan when a service is started or stopped.
|
||||||
|
|
||||||
|
commit c2abf4b436b8cca8ebed395ff08f5fdc546eadac
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Start work on 0.17
|
||||||
|
|
||||||
|
commit d247ac4cbbe0ab62564ef82a5940b4f1a03973b3
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Update changelog
|
||||||
|
|
||||||
|
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
|
||||||
|
Author: Jakob Drexel <jake42@rommel.stw.uni-erlangen.de>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
librc: Fix crash if the service name is the same as the including runlevel
|
||||||
|
|
||||||
|
If a service has the same name as the runlevel it is in, openrc will
|
||||||
|
crash on changing to such runlevel. It goes in a recursive madness and
|
||||||
|
eventually gets a SEGV while in snprintf (don't know why).
|
||||||
|
|
||||||
|
This fixes two errors:
|
||||||
|
1. ls_dir stats files not with full path -> stat always returns != 0
|
||||||
|
2. ls_dir adds files to list if stat failed
|
||||||
|
|
||||||
|
This fixes #53.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 537304
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=537304
|
||||||
|
|
||||||
|
commit 9f6427ea57c6c950b4d1c356ad1bfb0aa8deb40b
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Start work on 0.16
|
||||||
|
|
||||||
|
commit 60488069c08201cbfbc661a3e7bd1fafa31fceed
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
update ChangeLog
|
||||||
|
|
||||||
|
commit 9225bfa6918cfd488c8f1055cf986b542f1f157e
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Build: make snapshot remove .git directory from tarball
|
||||||
|
|
||||||
|
commit 7bd456ed7bf35da2d7a53650baa33637e178064e
|
||||||
|
Author: Mike Gilbert <floppym@gentoo.org>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Disable service scripts for systemd-nspawn
|
||||||
|
|
||||||
|
This adds the -systemd-nspawn keyword to service scripts which are not
|
||||||
|
intended to run in systemd-nspawn containers.
|
||||||
|
|
||||||
|
This fixes #52.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 548058
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
|
||||||
|
|
||||||
|
commit c709e6077c6eda3f4f7e7222298213413254ee0f
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add support for systemd-nspawn containers
|
||||||
|
|
||||||
|
This adds support for running OpenRC in a container created by
|
||||||
|
the systemd-nspawn utility.
|
||||||
|
|
||||||
|
This fixes #52.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 548058
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=548058
|
||||||
|
|
||||||
|
commit a27d577da8cf4f1c7f9784a043ecf02d71a81ca6
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Build: fix the dist target
|
||||||
|
|
||||||
|
The dist target now creates an archive based on the version setting.
|
||||||
|
This makes it possible to create an archive identical to the ones github
|
||||||
|
generates once the release is tagged.
|
||||||
|
|
||||||
|
commit 8b9349208696e5caed1a8b34f066cec4ee642194
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
convert all references from runscript to openrc-run
|
||||||
|
|
||||||
|
commit 4b1b457cd15cc1609c101b99a49a5e4c67b62567
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Start work on 0.15
|
||||||
|
|
||||||
|
commit 1d6602bb8e7062323ead03eaa0c4ae307c517b9e
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add ChangeLog
|
||||||
|
|
||||||
commit a6391f44ee6c68d674ae8425983467b971710d5d
|
commit a6391f44ee6c68d674ae8425983467b971710d5d
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
NAME= openrc
|
NAME= openrc
|
||||||
VERSION= 0.14
|
VERSION= 0.18
|
||||||
PKG= ${NAME}-${VERSION}
|
PKG= ${NAME}-${VERSION}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
# "prefix" - Prefix
|
# "prefix" - Prefix
|
||||||
# "uml" - Usermode Linux
|
# "uml" - Usermode Linux
|
||||||
# "vserver" - Linux vserver
|
# "vserver" - Linux vserver
|
||||||
|
# "systemd-nspawn" - Container created by the systemd-nspawn utility
|
||||||
# "xen0" - Xen0 Domain
|
# "xen0" - Xen0 Domain
|
||||||
# "xenU" - XenU Domain
|
# "xenU" - XenU Domain
|
||||||
# If this is commented out, automatic detection will be used.
|
# If this is commented out, automatic detection will be used.
|
||||||
|
|||||||
@@ -116,6 +116,9 @@
|
|||||||
#SSD_NICELEVEL="-19"
|
#SSD_NICELEVEL="-19"
|
||||||
|
|
||||||
# Pass ulimit parameters
|
# Pass ulimit parameters
|
||||||
|
# If you are using bash in POSIX mode for your shell, note that the
|
||||||
|
# ulimit command uses a block size of 512 bytes for the -c and -f
|
||||||
|
# options
|
||||||
#rc_ulimit="-u 30"
|
#rc_ulimit="-u 30"
|
||||||
|
|
||||||
# It's possible to define extra dependencies for services like so
|
# It's possible to define extra dependencies for services like so
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ 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 ${SRCS-${OS}}
|
tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}}
|
||||||
BIN= ${OBJS}
|
BIN= ${OBJS}
|
||||||
|
|
||||||
# Are we installing our network scripts?
|
# Are we installing our network scripts?
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
after procfs
|
after procfs
|
||||||
use modules devfs
|
use modules devfs
|
||||||
keyword -openvz -prefix -vserver -lxc
|
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -214,10 +214,13 @@ start()
|
|||||||
if yesno $log_dmesg; then
|
if yesno $log_dmesg; then
|
||||||
if $logw || checkpath -W /var/log; then
|
if $logw || checkpath -W /var/log; then
|
||||||
# Create an 'after-boot' dmesg log
|
# Create an 'after-boot' dmesg log
|
||||||
if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ -a "$RC_SYS" != LXC ]; then
|
case "$RC_SYS" in
|
||||||
|
VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;;
|
||||||
|
*)
|
||||||
dmesg > /var/log/dmesg
|
dmesg > /var/log/dmesg
|
||||||
chmod 640 /var/log/dmesg
|
chmod 640 /var/log/dmesg
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount termencoding
|
need localmount termencoding
|
||||||
after hotplug bootmisc
|
after hotplug bootmisc
|
||||||
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
provide dev-mount
|
provide dev-mount
|
||||||
before dev
|
before dev
|
||||||
keyword -prefix -vserver -lxc
|
keyword -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
mount_dev()
|
mount_dev()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Set the dmesg level for a cleaner boot"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before dev modules
|
before dev modules
|
||||||
keyword -lxc -prefix -vserver
|
keyword -lxc -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ _IFS="
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
use dev clock modules
|
use dev clock modules
|
||||||
keyword -jail -openvz -prefix -timeout -vserver -lxc -uml
|
keyword -jail -openvz -prefix -systemd-nspawn -timeout -vserver -lxc -uml
|
||||||
}
|
}
|
||||||
|
|
||||||
_abort() {
|
_abort() {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
description="Sets the hostname of the machine."
|
description="Sets the hostname of the machine."
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
keyword -prefix -lxc
|
keyword -prefix -systemd-nspawn -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ depend()
|
|||||||
else
|
else
|
||||||
before *
|
before *
|
||||||
fi
|
fi
|
||||||
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
setupopts()
|
setupopts()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
need localmount termencoding
|
need localmount termencoding
|
||||||
after bootmisc
|
after bootmisc
|
||||||
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ depend()
|
|||||||
need fsck
|
need fsck
|
||||||
use lvm modules mtab
|
use lvm modules mtab
|
||||||
after lvm modules
|
after lvm modules
|
||||||
keyword -jail -prefix -vserver -lxc
|
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description="Configures the loopback interface."
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword -jail -prefix -vserver
|
keyword -jail -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
use isapnp
|
use isapnp
|
||||||
keyword -openvz -prefix -vserver -lxc
|
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need killprocs savecache
|
need killprocs savecache
|
||||||
keyword -openvz -prefix -vserver -lxc
|
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Update /etc/mtab to match what the kernel knows about"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need root
|
need root
|
||||||
keyword -prefix
|
keyword -prefix -systemd-nspawn
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -4,12 +4,25 @@
|
|||||||
|
|
||||||
description="Mounts network shares according to /etc/fstab."
|
description="Mounts network shares according to /etc/fstab."
|
||||||
|
|
||||||
|
get_fs_services()
|
||||||
|
{
|
||||||
|
local fsclient fstype list=$(ls $RC_LIBEXECDIR/netfs/*) services
|
||||||
|
local x
|
||||||
|
for x in $list; do
|
||||||
|
fstype=${x##*/}
|
||||||
|
fstabinfo -q -t ${fstype} && services="${services} $(cat x)"
|
||||||
|
done
|
||||||
|
printf "%s\n" $services
|
||||||
|
}
|
||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
config /etc/fstab
|
config /etc/fstab
|
||||||
use afc-client amd nfsclient autofs openvpn
|
use afc-client amd nfsclient autofs openvpn
|
||||||
use dns
|
use dns
|
||||||
keyword -jail -prefix -vserver -lxc
|
local fs_services ="$(get_fs_services)"
|
||||||
|
[ -n "$fs_services" ] && use $fs_services
|
||||||
|
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -openvz -prefix -vserver -lxc
|
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
_setleds()
|
_setleds()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
use modules devfs
|
use modules devfs
|
||||||
need localmount
|
need localmount
|
||||||
keyword -openvz -prefix -vserver -lxc
|
keyword -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need fsck
|
need fsck
|
||||||
keyword -jail -openvz -prefix -vserver -lxc
|
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
31
init.d/s6-svscan.in
Normal file
31
init.d/s6-svscan.in
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
#!@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 $?
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@ start()
|
|||||||
if yesno "${RC_GOINGDOWN}"; then
|
if yesno "${RC_GOINGDOWN}"; then
|
||||||
rc=0
|
rc=0
|
||||||
fi
|
fi
|
||||||
eend $rc "Unable to create $RC_SVCDIR/cache"
|
eend $rc "Unable to create $RC_LIBEXECDIR/cache"
|
||||||
return $rc
|
return $rc
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before localmount
|
before localmount
|
||||||
keyword -jail -openvz -prefix -vserver -lxc
|
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -jail -openvz -prefix -vserver -lxc
|
keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ depend()
|
|||||||
{
|
{
|
||||||
before *
|
before *
|
||||||
provide clock
|
provide clock
|
||||||
keyword -openvz -prefix -uml -vserver -xenu -lxc
|
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
# swclock is an OpenRC built in
|
# swclock is an OpenRC built in
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!@PREFIX@/sbin/runscript
|
#!@PREFIX@/sbin/openrc-run
|
||||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
||||||
# Released under the 2-clause BSD license.
|
# Released under the 2-clause BSD license.
|
||||||
#FIXME: Modify for GNU/Hurd
|
#FIXME: Modify for GNU/Hurd
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
before bootmisc logger
|
before bootmisc logger
|
||||||
keyword -prefix -vserver
|
keyword -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
start()
|
start()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ sysfs_opts=nodev,noexec,nosuid
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword -lxc -prefix -vserver
|
keyword -lxc -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
mount_sys()
|
mount_sys()
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
keyword -lxc -openvz -prefix -uml -vserver -xenu
|
keyword -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
|
||||||
use root
|
use root
|
||||||
after bootmisc
|
after bootmisc
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ description="Initializes the random number generator."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
need localmount
|
||||||
keyword -jail -lxc -openvz -prefix
|
keyword -jail -lxc -openvz -prefix -systemd-nspawn
|
||||||
}
|
}
|
||||||
|
|
||||||
save_seed()
|
save_seed()
|
||||||
|
|||||||
10
man/Makefile
10
man/Makefile
@@ -1,9 +1,17 @@
|
|||||||
|
MK= ../mk
|
||||||
|
include ${MK}/sys.mk
|
||||||
|
include ${MK}/os.mk
|
||||||
|
|
||||||
MAN3= einfo.3 \
|
MAN3= einfo.3 \
|
||||||
rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \
|
rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \
|
||||||
rc_runlevel.3 rc_service.3 rc_stringlist.3
|
rc_runlevel.3 rc_service.3 rc_stringlist.3
|
||||||
MAN8= rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \
|
MAN8= rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \
|
||||||
service.8 start-stop-daemon.8
|
service.8 start-stop-daemon.8
|
||||||
|
|
||||||
|
ifeq (${OS},Linux)
|
||||||
|
MAN8 += rc-sstat.8
|
||||||
|
endif
|
||||||
|
|
||||||
# Handy macro to create symlinks
|
# Handy macro to create symlinks
|
||||||
# This does rely on correctly formatting our manpages!
|
# This does rely on correctly formatting our manpages!
|
||||||
MAKE_LINKS= suffix=$${man\#*.}; \
|
MAKE_LINKS= suffix=$${man\#*.}; \
|
||||||
@@ -16,8 +24,6 @@ MAKE_LINKS= suffix=$${man\#*.}; \
|
|||||||
fi; \
|
fi; \
|
||||||
done;
|
done;
|
||||||
|
|
||||||
MK= ../mk
|
|
||||||
include ${MK}/sys.mk
|
|
||||||
include ${MK}/gitignore.mk
|
include ${MK}/gitignore.mk
|
||||||
|
|
||||||
all:
|
all:
|
||||||
|
|||||||
@@ -107,6 +107,19 @@ the service has already been stopped.
|
|||||||
String describing the service.
|
String describing the service.
|
||||||
.It Ar description_$command
|
.It Ar description_$command
|
||||||
String describing the extra 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 /var/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_service_timeout_stop
|
||||||
|
The amount of time, in milliseconds, s6-svc should wait for the service
|
||||||
|
to go down when stopping the service. The default is 10000.
|
||||||
.It Ar start_stop_daemon_args
|
.It Ar start_stop_daemon_args
|
||||||
List of arguments passed to start-stop-daemon when starting the daemon.
|
List of arguments passed to start-stop-daemon when starting the daemon.
|
||||||
.It Ar command
|
.It Ar command
|
||||||
@@ -114,7 +127,8 @@ Daemon to start or stop via
|
|||||||
.Nm start-stop-daemon
|
.Nm start-stop-daemon
|
||||||
if no start or stop function is defined by the service.
|
if no start or stop function is defined by the service.
|
||||||
.It Ar command_args
|
.It Ar command_args
|
||||||
List of arguments to pass to the daemon when starting.
|
List of arguments to pass to the daemon when starting via
|
||||||
|
.Nm start-stop-daemon .
|
||||||
.It Ar command_background
|
.It Ar command_background
|
||||||
Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into
|
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
|
the background. This implies the "--make-pidfile" and "--pidfile" option of
|
||||||
@@ -127,6 +141,8 @@ will chroot into this path before writing the pid file or starting the daemon.
|
|||||||
Pidfile to use for the above defined command.
|
Pidfile to use for the above defined command.
|
||||||
.It Ar name
|
.It Ar name
|
||||||
Display name used for the above defined command.
|
Display name used for the above defined command.
|
||||||
|
.It Ar stopsig
|
||||||
|
Signal to send when stopping the daemon.
|
||||||
.It Ar retry
|
.It Ar retry
|
||||||
Retry schedule to use when stopping the daemon. It can either be a
|
Retry schedule to use when stopping the daemon. It can either be a
|
||||||
timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5).
|
timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5).
|
||||||
|
|||||||
46
man/rc-sstat.8
Normal file
46
man/rc-sstat.8
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
.\" Copyright (c) 2015 William Hubbs
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
.\" SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.Dd April 24, 2008
|
||||||
|
.Dt RC-sstat 8 SMM
|
||||||
|
.Os OpenRC
|
||||||
|
.Sh NAME
|
||||||
|
.Nm rc-sstat
|
||||||
|
.Nd show status info about services supervised by s6 then rc-status
|
||||||
|
info
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Nm
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm
|
||||||
|
gathers and displays information about the status of services supervised
|
||||||
|
by s6 then runs rc-status to show info about nnormal OpenRC services.
|
||||||
|
.Pp
|
||||||
|
.Sh EXIT STATUS
|
||||||
|
.Nm
|
||||||
|
exits 1 if there is an internal error or exits with the same exit codes
|
||||||
|
as rc-status.
|
||||||
|
.Sh SEE ALSO
|
||||||
|
.Xr rc-status 8 ,
|
||||||
|
.Xr rc-update 8
|
||||||
|
.Sh AUTHORS
|
||||||
|
.An William Hubbs <w.d.hubbs@gmail.com>
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
# Copyright (c) 2008 Roy Marples <roy@marples.name>
|
# Copyright (c) 2008 Roy Marples <roy@marples.name>
|
||||||
# Released under the 2-clause BSD license.
|
# Released under the 2-clause BSD license.
|
||||||
|
|
||||||
GITREF?= HEAD
|
GITREF?= ${VERSION}
|
||||||
DISTPREFIX?= ${NAME}-${VERSION}
|
DISTPREFIX?= ${NAME}-${VERSION}
|
||||||
DISTFILE?= ${DISTPREFIX}.tar.bz2
|
DISTFILE?= ${DISTPREFIX}.tar.bz2
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ snapshot:
|
|||||||
mkdir /tmp/${SNAPDIR}
|
mkdir /tmp/${SNAPDIR}
|
||||||
cp -RPp * /tmp/${SNAPDIR}
|
cp -RPp * /tmp/${SNAPDIR}
|
||||||
(cd /tmp/${SNAPDIR}; make clean)
|
(cd /tmp/${SNAPDIR}; make clean)
|
||||||
find /tmp/${SNAPDIR} -name .svn -exec rm -rf -- {} \; 2>/dev/null || true
|
rm -rf /tmp/${SNAPDIR}/.git 2>/dev/null || true
|
||||||
tar -cvjpf ${SNAPFILE} -C /tmp ${SNAPDIR}
|
tar -cvjpf ${SNAPFILE} -C /tmp ${SNAPDIR}
|
||||||
rm -rf /tmp/${SNAPDIR}
|
rm -rf /tmp/${SNAPDIR}
|
||||||
ls -l ${SNAPFILE}
|
ls -l ${SNAPFILE}
|
||||||
|
|||||||
48
s6-guide.md
Normal file
48
s6-guide.md
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
# 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. The default is
|
||||||
|
/var/svc.d/$RC_SVCNAME.
|
||||||
|
|
||||||
|
s6_svwait_options_start - the options to pass to s6-svwait when starting
|
||||||
|
the service. If this is not set, s6-svwait will not be called.
|
||||||
|
|
||||||
|
s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc
|
||||||
|
should wait for a service to go down when stopping.
|
||||||
|
|
||||||
|
This is very early support, so feel free to file bugs if you have
|
||||||
|
issues.
|
||||||
|
|
||||||
|
[1] http://www.skarnet.org/software/s6
|
||||||
1
scripts/.gitignore
vendored
Normal file
1
scripts/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
rc-sstat
|
||||||
@@ -1,5 +1,19 @@
|
|||||||
|
MK= ../mk
|
||||||
|
include ${MK}/os.mk
|
||||||
|
|
||||||
DIR= ${LIBEXECDIR}/bin
|
DIR= ${LIBEXECDIR}/bin
|
||||||
BIN= on_ac_power
|
BIN= on_ac_power
|
||||||
|
INSTALLAFTER = _installafter
|
||||||
|
|
||||||
|
ifeq (${OS},Linux)
|
||||||
|
SRCS+= rc-sstat.in
|
||||||
|
BIN+= rc-sstat
|
||||||
|
endif
|
||||||
|
|
||||||
|
_installafter:
|
||||||
|
ifeq (${OS},Linux)
|
||||||
|
${INSTALL} -d ${DESTDIR}${SBINDIR}
|
||||||
|
ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
|
||||||
|
endif
|
||||||
|
|
||||||
MK= ../mk
|
|
||||||
include ${MK}/scripts.mk
|
include ${MK}/scripts.mk
|
||||||
|
|||||||
140
scripts/rc-sstat.in
Normal file
140
scripts/rc-sstat.in
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
#!@SHELL@
|
||||||
|
|
||||||
|
# Define variables
|
||||||
|
scandir="/run/openrc/s6-scan"
|
||||||
|
statfile=/dev/shm/s6-svstat.${USER}
|
||||||
|
|
||||||
|
color_red='\E[01;31m'
|
||||||
|
color_green='\E[32m'
|
||||||
|
color_yellow='\E[01;33m'
|
||||||
|
|
||||||
|
# Time Modules
|
||||||
|
uptimeModules() {
|
||||||
|
# Given a single integer argument representing seconds of uptime...
|
||||||
|
# convert uptime to a friendly human readable string: '2d 16h 58m 46s'
|
||||||
|
# define a variable to keep track of the longest length uptime string
|
||||||
|
uSec=${1:-0}
|
||||||
|
|
||||||
|
uDay=$(( $uSec / 86400 ))
|
||||||
|
uSec=$(( $uSec % 86400 ))
|
||||||
|
uHour=$(( $uSec / 3600 ))
|
||||||
|
uSec=$(( $uSec % 3600 ))
|
||||||
|
uMin=$(( $uSec / 60 ))
|
||||||
|
uSec=$(( $uSec % 60 ))
|
||||||
|
|
||||||
|
[ $uDay -ne 0 ] && pDay="${uDay}d " || pDay=""
|
||||||
|
[ $uHour -ne 0 ] && pHour="${uHour}h " || pHour=""
|
||||||
|
[ $uMin -ne 0 ] && pMin="${uMin}m " || pMin=""
|
||||||
|
[ $uSec -ne 0 ] && pSec="${uSec}s " || pSec=""
|
||||||
|
|
||||||
|
parsedUptime="$( echo ${pDay}${pHour}${pMin}${pSec} | sed 's#[ \t]*$##' )"
|
||||||
|
uCharCount=${#parsedUptime}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make sure we are running as root
|
||||||
|
if [ $(id -u) != 0 ]; then
|
||||||
|
printf "This command must be run as root\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure scandir exists
|
||||||
|
if [ ! -d $scandir ]; then
|
||||||
|
printf "%s\n" "$scandir does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make sure s6-svscan is running
|
||||||
|
if ! pgrep s6-svscan >/dev/null ; then
|
||||||
|
printf "s6-svscan is not running\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If TERM is undefined (launching sstat through an ssh command) then make it vt100
|
||||||
|
if [ -z $TERM -o $TERM = "dumb" ]; then
|
||||||
|
export TERM=vt100
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Gather list of candidate services s6-supervise may be supervising
|
||||||
|
# filter for folders and symlinks at /run/openrc/s6-scan/* ommiting output starting with '.'
|
||||||
|
services="$(find $scandir -maxdepth 1 -mindepth 1 \( -type d -or -type l \) | awk -F'/' '{ if ( $NF !~ "^\\." ) print $NF}')"
|
||||||
|
if [ -z "$services" ]; then
|
||||||
|
printf "s6 found no services configured for supervision\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Gather status for each service from s6-svstat
|
||||||
|
# write to tmp file in memory for non I/O bound repeatative access
|
||||||
|
rm -f $statfile 2>/dev/null
|
||||||
|
for service in $services ; do
|
||||||
|
echo "$service $(s6-svstat ${scandir}/${service})" >> $statfile
|
||||||
|
done
|
||||||
|
|
||||||
|
# Define longest string from parsed uptime (default to 7 to match string length of 'Up Time')
|
||||||
|
timeStringLength=7
|
||||||
|
for uptime in $(awk '$2 == "up" {print $5}' $statfile | sort -run)
|
||||||
|
do
|
||||||
|
uptimeModules $uptime
|
||||||
|
[ ${uCharCount} -gt $timeStringLength ] && timeStringLength=$uCharCount
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# Print the status header like so...
|
||||||
|
# Service Name State PID Up Time Start Time
|
||||||
|
#---------------------------- ----- ----- -------------- -------------------
|
||||||
|
printf "\n"
|
||||||
|
printf "%28s %5s %5s %${timeStringLength}s %19s\n" "Service Name" "State" "PID" "Up Time" "Start Time"
|
||||||
|
for dashes in 28 5 5 $timeStringLength 19 ; do
|
||||||
|
printf "%0.s-" $(seq 1 $dashes) ; echo -n ' '
|
||||||
|
done && printf "\n"
|
||||||
|
|
||||||
|
|
||||||
|
# sshd up (pid 26300) 80373 seconds
|
||||||
|
cat $statfile | \
|
||||||
|
while read line
|
||||||
|
do
|
||||||
|
set $line
|
||||||
|
|
||||||
|
service=$1
|
||||||
|
state=$2
|
||||||
|
pid=${4/)/}
|
||||||
|
time=$5
|
||||||
|
|
||||||
|
# call function to convert time in seconds and define additional variables
|
||||||
|
uptimeModules $time
|
||||||
|
|
||||||
|
if [ "$state" = up ]; then
|
||||||
|
if [ $time -lt 30 ]; then
|
||||||
|
# uptime < 30 seconds, color the whole line yellow
|
||||||
|
echo -en "$color_yellow"
|
||||||
|
# 1st 4 columns are printed with printf for space padding
|
||||||
|
printf "%28s %5s %5s %${timeStringLength}s" $service $state $pid "$parsedUptime"
|
||||||
|
# 4th column is output from date -d
|
||||||
|
echo -e " $(date -d "${time} seconds ago" "+%F %T")"
|
||||||
|
# reset terminal colors
|
||||||
|
tput sgr0
|
||||||
|
else
|
||||||
|
printf "%28s" $service
|
||||||
|
# uptime > 30 seconds, color just the "state" value green
|
||||||
|
echo -en "$color_green"
|
||||||
|
printf " %5s" $state
|
||||||
|
# reset terminal colors
|
||||||
|
tput sgr0
|
||||||
|
printf " %5s" $pid
|
||||||
|
printf " %${timeStringLength}s" "$parsedUptime"
|
||||||
|
echo -e " $(date -d "${time} seconds ago" "+%F %T")"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "%28s" $service
|
||||||
|
echo -en "$color_red"
|
||||||
|
printf " %5s" $state
|
||||||
|
tput sgr0
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm -f $statfile 2>/dev/null
|
||||||
|
|
||||||
|
printf "\n\n"
|
||||||
|
|
||||||
|
rc-status
|
||||||
2
sh/.gitignore
vendored
2
sh/.gitignore
vendored
@@ -1,7 +1,7 @@
|
|||||||
functions.sh
|
functions.sh
|
||||||
gendepends.sh
|
gendepends.sh
|
||||||
rc-functions.sh
|
rc-functions.sh
|
||||||
runscript.sh
|
openrc-run.sh
|
||||||
cgroup-release-agent.sh
|
cgroup-release-agent.sh
|
||||||
init.sh
|
init.sh
|
||||||
init-early.sh
|
init-early.sh
|
||||||
|
|||||||
@@ -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 \
|
||||||
rc-functions.sh.in runscript.sh.in tmpfiles.sh.in ${SRCS-${OS}}
|
openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
|
||||||
INC= rc-mount.sh functions.sh rc-functions.sh
|
INC= rc-mount.sh functions.sh rc-functions.sh s6.sh start-stop-daemon.sh
|
||||||
BIN= gendepends.sh init.sh runscript.sh tmpfiles.sh ${BIN-${OS}}
|
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
||||||
|
|
||||||
INSTALLAFTER= _installafter
|
INSTALLAFTER= _installafter
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!@SHELL@
|
#!@SHELL@
|
||||||
# Shell wrapper for runscript
|
# Shell wrapper for openrc-run
|
||||||
|
|
||||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
|
||||||
# Released under the 2-clause BSD license.
|
# Released under the 2-clause BSD license.
|
||||||
@@ -34,7 +34,10 @@ sourcex()
|
|||||||
|
|
||||||
sourcex "@LIBEXECDIR@/sh/functions.sh"
|
sourcex "@LIBEXECDIR@/sh/functions.sh"
|
||||||
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
|
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
|
||||||
[ "$RC_SYS" != "PREFIX" ] && sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh"
|
case $RC_SYS in
|
||||||
|
PREFIX|SYSTEMD-NSPAWN) ;;
|
||||||
|
*) sourcex -e "@LIBEXECDIR@/sh/rc-cgroup.sh";;
|
||||||
|
esac
|
||||||
|
|
||||||
# Support LiveCD foo
|
# Support LiveCD foo
|
||||||
if sourcex -e "/sbin/livecd-functions.sh"; then
|
if sourcex -e "/sbin/livecd-functions.sh"; then
|
||||||
@@ -123,69 +126,42 @@ _status()
|
|||||||
}
|
}
|
||||||
|
|
||||||
# Template start / stop / status functions
|
# Template start / stop / status functions
|
||||||
|
# These functions select the appropriate function to call from the
|
||||||
|
# supervisor modules
|
||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
[ -n "$command" ] || return 0
|
local func=ssd_start
|
||||||
local _background=
|
case "$supervisor" in
|
||||||
ebegin "Starting ${name:-$RC_SVCNAME}"
|
s6) func=s6_start ;;
|
||||||
if yesno "${command_background}"; then
|
?*)
|
||||||
if [ -z "${pidfile}" ]; then
|
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||||
eend 1 "command_background option used but no pidfile specified"
|
;;
|
||||||
return 1
|
esac
|
||||||
fi
|
$func
|
||||||
_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()
|
stop()
|
||||||
{
|
{
|
||||||
local startcommand="$(service_get_value "command")"
|
local func=ssd_stop
|
||||||
local startchroot="$(service_get_value "chroot")"
|
case "$supervisor" in
|
||||||
local startpidfile="$(service_get_value "pidfile")"
|
s6) func=s6_stop ;;
|
||||||
local startprocname="$(service_get_value "procname")"
|
?*)
|
||||||
command="${startcommand:-$command}"
|
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||||
chroot="${startchroot:-$chroot}"
|
;;
|
||||||
pidfile="${startpidfile:-$pidfile}"
|
esac
|
||||||
procname="${startprocname:-$procname}"
|
$func
|
||||||
[ -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()
|
status()
|
||||||
{
|
{
|
||||||
_status
|
local func=ssd_status
|
||||||
|
case "$supervisor" in
|
||||||
|
s6) func=s6_status ;;
|
||||||
|
?*)
|
||||||
|
ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
$func
|
||||||
}
|
}
|
||||||
|
|
||||||
yesno $RC_DEBUG && set -x
|
yesno $RC_DEBUG && set -x
|
||||||
@@ -209,6 +185,10 @@ unset _conf_d
|
|||||||
# Load any system overrides
|
# Load any system overrides
|
||||||
sourcex -e "@SYSCONFDIR@/rc.conf"
|
sourcex -e "@SYSCONFDIR@/rc.conf"
|
||||||
|
|
||||||
|
# load service supervisor functions
|
||||||
|
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
||||||
|
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
|
||||||
|
|
||||||
# Set verbose mode
|
# Set verbose mode
|
||||||
if yesno "${rc_verbose:-$RC_VERBOSE}"; then
|
if yesno "${rc_verbose:-$RC_VERBOSE}"; then
|
||||||
EINFO_VERBOSE=yes
|
EINFO_VERBOSE=yes
|
||||||
@@ -85,7 +85,7 @@ get_bootparam()
|
|||||||
return 1
|
return 1
|
||||||
}
|
}
|
||||||
|
|
||||||
# Called from runscript.sh or gendepends.sh
|
# Called from openrc-run.sh or gendepends.sh
|
||||||
_depend() {
|
_depend() {
|
||||||
depend
|
depend
|
||||||
local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=
|
local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=
|
||||||
|
|||||||
50
sh/s6.sh
Normal file
50
sh/s6.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
# 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="/var/svc.d/${RC_SVCNAME}"
|
||||||
|
|
||||||
|
s6_start()
|
||||||
|
{
|
||||||
|
if [ ! -d "${s6_service_path}" ]; then
|
||||||
|
eerror "${s6_service_path} does not exist."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
|
||||||
|
ebegin "Starting ${name:-$RC_SVCNAME}"
|
||||||
|
ln -sf "${s6_service_path}" "${s6_service_link}"
|
||||||
|
s6-svscanctl -na "${RC_SVCDIR}"/s6-scan
|
||||||
|
sleep 1.5
|
||||||
|
s6-svc -u "${s6_service_link}"
|
||||||
|
if [ -n "$s6_svwait_options_start" ]; then
|
||||||
|
s6-svwait ${s6_svwait_options_start} "${s6_service_link}"
|
||||||
|
fi
|
||||||
|
sleep 1.5
|
||||||
|
set -- $(s6-svstat "${s6_service_link}")
|
||||||
|
[ "$1" = "up" ]
|
||||||
|
eend $? "Failed to start $RC_SVCNAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
s6_stop()
|
||||||
|
{
|
||||||
|
if [ ! -d "${s6_service_path}" ]; then
|
||||||
|
eerror "${s6_service_path} does not exist."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
|
||||||
|
ebegin "Stopping ${name:-$RC_SVCNAME}"
|
||||||
|
s6-svc -Dd -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
|
||||||
|
set -- $(s6-svstat "${s6_service_link}")
|
||||||
|
[ "$1" = "down" ]
|
||||||
|
eend $? "Failed to stop $RC_SVCNAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
s6_status()
|
||||||
|
{
|
||||||
|
s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}"
|
||||||
|
if [ -L "${s6_service_link}" ]; then
|
||||||
|
s6-svstat "${s6_service_link}"
|
||||||
|
else
|
||||||
|
_status
|
||||||
|
fi
|
||||||
|
}
|
||||||
71
sh/start-stop-daemon.sh
Normal file
71
sh/start-stop-daemon.sh
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
# 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
|
||||||
|
}
|
||||||
23
sh/tmpfiles.sh.in
Executable file → Normal file
23
sh/tmpfiles.sh.in
Executable file → Normal file
@@ -53,10 +53,18 @@ relabel() {
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
splitpath() {
|
||||||
|
local path=$1
|
||||||
|
while [ -n "$path" ]; do
|
||||||
|
echo $path
|
||||||
|
path=${path%/*}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
_restorecon() {
|
_restorecon() {
|
||||||
local path=$1
|
local path=$1
|
||||||
if [ -x /sbin/restorecon ]; then
|
if [ -x /sbin/restorecon ]; then
|
||||||
dryrun_or_real restorecon -F "$path"
|
dryrun_or_real restorecon -F $(splitpath "$path")
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -122,6 +130,7 @@ _d() {
|
|||||||
|
|
||||||
if [ ! -d "$path" ]; then
|
if [ ! -d "$path" ]; then
|
||||||
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
||||||
|
_restorecon "$path"
|
||||||
dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
|
dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -137,10 +146,18 @@ _D() {
|
|||||||
|
|
||||||
if [ $CREATE -gt 0 ]; then
|
if [ $CREATE -gt 0 ]; then
|
||||||
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
dryrun_or_real mkdir -p "$path" 2>/dev/null
|
||||||
|
_restorecon "$path"
|
||||||
dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
|
dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_v() {
|
||||||
|
# Create a subvolume if the path does not exist yet and the file system
|
||||||
|
# supports this (btrfs). Otherwise create a normal directory.
|
||||||
|
# TODO: Implement btrfs subvol creation.
|
||||||
|
_d "$@"
|
||||||
|
}
|
||||||
|
|
||||||
_L() {
|
_L() {
|
||||||
# Create a symlink if it doesn't exist yet
|
# Create a symlink if it doesn't exist yet
|
||||||
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
|
||||||
@@ -336,7 +353,7 @@ for FILE in $tmpfiles_d ; do
|
|||||||
|
|
||||||
# whine about invalid entries
|
# whine about invalid entries
|
||||||
case $cmd in
|
case $cmd in
|
||||||
f|F|w|d|D|p|L|c|C|b|x|X|r|R|z|Z) ;;
|
f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;;
|
||||||
*) warninvalid ; continue ;;
|
*) warninvalid ; continue ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -344,7 +361,7 @@ for FILE in $tmpfiles_d ; do
|
|||||||
if [ "$mode" = '-' -o "$mode" = '' ]; then
|
if [ "$mode" = '-' -o "$mode" = '' ]; then
|
||||||
case "$cmd" in
|
case "$cmd" in
|
||||||
p|f|F) mode=0644 ;;
|
p|f|F) mode=0644 ;;
|
||||||
d|D) mode=0755 ;;
|
d|D|v) mode=0755 ;;
|
||||||
C|z|Z|x|r|R|L) ;;
|
C|z|Z|x|r|R|L) ;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
|||||||
pid_t p;
|
pid_t p;
|
||||||
char buffer[PATH_MAX];
|
char buffer[PATH_MAX];
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
pid_t runscript_pid = 0;
|
pid_t openrc_pid = 0;
|
||||||
char *pp;
|
char *pp;
|
||||||
RC_PIDLIST *pids = NULL;
|
RC_PIDLIST *pids = NULL;
|
||||||
RC_PID *pi;
|
RC_PID *pi;
|
||||||
@@ -108,7 +108,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
We never match RC_RUNSCRIPT_PID if present so we avoid the below
|
We never match RC_OPENRC_PID if present so we avoid the below
|
||||||
scenario
|
scenario
|
||||||
|
|
||||||
/etc/init.d/ntpd stop does
|
/etc/init.d/ntpd stop does
|
||||||
@@ -118,9 +118,9 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
|||||||
nasty
|
nasty
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if ((pp = getenv("RC_RUNSCRIPT_PID"))) {
|
if ((pp = getenv("RC_OPENRC_PID"))) {
|
||||||
if (sscanf(pp, "%d", &runscript_pid) != 1)
|
if (sscanf(pp, "%d", &openrc_pid) != 1)
|
||||||
runscript_pid = 0;
|
openrc_pid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -146,7 +146,7 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
|||||||
while ((entry = readdir(procdir)) != NULL) {
|
while ((entry = readdir(procdir)) != NULL) {
|
||||||
if (sscanf(entry->d_name, "%d", &p) != 1)
|
if (sscanf(entry->d_name, "%d", &p) != 1)
|
||||||
continue;
|
continue;
|
||||||
if (runscript_pid != 0 && runscript_pid == p)
|
if (openrc_pid != 0 && openrc_pid == p)
|
||||||
continue;
|
continue;
|
||||||
if (pid != 0 && pid != p)
|
if (pid != 0 && pid != p)
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -101,7 +101,9 @@ ls_dir(const char *dir, int options)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (options & LS_DIR) {
|
if (options & LS_DIR) {
|
||||||
if (stat(d->d_name, &buf) == 0 &&
|
snprintf(file, sizeof(file), "%s/%s",
|
||||||
|
dir, d->d_name);
|
||||||
|
if (stat(file, &buf) != 0 ||
|
||||||
!S_ISDIR(buf.st_mode))
|
!S_ISDIR(buf.st_mode))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -294,6 +296,8 @@ rc_sys_v1(void)
|
|||||||
return RC_SYS_OPENVZ; /* old test */
|
return RC_SYS_OPENVZ; /* old test */
|
||||||
else if (file_regex("/proc/1/environ", "container=lxc"))
|
else if (file_regex("/proc/1/environ", "container=lxc"))
|
||||||
return RC_SYS_LXC;
|
return RC_SYS_LXC;
|
||||||
|
else if (file_regex("/proc/1/environ", "container=systemd-nspawn"))
|
||||||
|
return RC_SYS_SYSTEMD_NSPAWN;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -332,6 +332,7 @@ bool rc_service_daemons_crashed(const char *);
|
|||||||
#define RC_SYS_OPENVZ "OPENVZ"
|
#define RC_SYS_OPENVZ "OPENVZ"
|
||||||
#define RC_SYS_LXC "LXC"
|
#define RC_SYS_LXC "LXC"
|
||||||
#define RC_SYS_PREFIX "PREFIX"
|
#define RC_SYS_PREFIX "PREFIX"
|
||||||
|
#define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN"
|
||||||
#define RC_SYS_UML "UML"
|
#define RC_SYS_UML "UML"
|
||||||
#define RC_SYS_VSERVER "VSERVER"
|
#define RC_SYS_VSERVER "VSERVER"
|
||||||
#define RC_SYS_XEN0 "XEN0"
|
#define RC_SYS_XEN0 "XEN0"
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
PROG= openrc
|
PROG= openrc
|
||||||
SRCS= checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
|
SRCS= checkpath.c fstabinfo.c mountinfo.c openrc-run.c \
|
||||||
rc-applets.c rc-depend.c rc-logger.c \
|
rc-applets.c rc-depend.c rc-logger.c \
|
||||||
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
||||||
runscript.c rc.c swclock.c
|
rc.c start-stop-daemon.c swclock.c
|
||||||
|
|
||||||
ifeq (${MKSELINUX},yes)
|
ifeq (${MKSELINUX},yes)
|
||||||
SRCS+= rc-selinux.c
|
SRCS+= rc-selinux.c
|
||||||
|
|||||||
@@ -347,7 +347,7 @@ get_regex(const char *string)
|
|||||||
|
|
||||||
#include "_usage.h"
|
#include "_usage.h"
|
||||||
#define extraopts "[mount1] [mount2] ..."
|
#define extraopts "[mount1] [mount2] ..."
|
||||||
#define getoptstring "f:F:n:N:o:O:p:P:ist" getoptstring_COMMON
|
#define getoptstring "f:F:n:N:o:O:p:P:iste:E:" getoptstring_COMMON
|
||||||
static const struct option longopts[] = {
|
static const struct option longopts[] = {
|
||||||
{ "fstype-regex", 1, NULL, 'f'},
|
{ "fstype-regex", 1, NULL, 'f'},
|
||||||
{ "skip-fstype-regex", 1, NULL, 'F'},
|
{ "skip-fstype-regex", 1, NULL, 'F'},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* runscript.c
|
* openrc-run.c
|
||||||
* Handle launching of init scripts.
|
* Handle launching of init scripts.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -370,18 +370,18 @@ svc_exec(const char *arg1, const char *arg2)
|
|||||||
dup2(slave_tty, STDERR_FILENO);
|
dup2(slave_tty, STDERR_FILENO);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exists(RC_SVCDIR "/runscript.sh")) {
|
if (exists(RC_SVCDIR "/openrc-run.sh")) {
|
||||||
execl(RC_SVCDIR "/runscript.sh",
|
execl(RC_SVCDIR "/openrc-run.sh",
|
||||||
RC_SVCDIR "/runscript.sh",
|
RC_SVCDIR "/openrc-run.sh",
|
||||||
service, arg1, arg2, (char *) NULL);
|
service, arg1, arg2, (char *) NULL);
|
||||||
eerror("%s: exec `" RC_SVCDIR "/runscript.sh': %s",
|
eerror("%s: exec `" RC_SVCDIR "/openrc-run.sh': %s",
|
||||||
service, strerror(errno));
|
service, strerror(errno));
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
} else {
|
} else {
|
||||||
execl(RC_LIBEXECDIR "/sh/runscript.sh",
|
execl(RC_LIBEXECDIR "/sh/openrc-run.sh",
|
||||||
RC_LIBEXECDIR "/sh/runscript.sh",
|
RC_LIBEXECDIR "/sh/openrc-run.sh",
|
||||||
service, arg1, arg2, (char *) NULL);
|
service, arg1, arg2, (char *) NULL);
|
||||||
eerror("%s: exec `" RC_LIBEXECDIR "/sh/runscript.sh': %s",
|
eerror("%s: exec `" RC_LIBEXECDIR "/sh/openrc-run.sh': %s",
|
||||||
service, strerror(errno));
|
service, strerror(errno));
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@@ -1162,6 +1162,11 @@ openrc_run(int argc, char **argv)
|
|||||||
subshells the init script may create so that our mark_service_*
|
subshells the init script may create so that our mark_service_*
|
||||||
functions can always instruct us of this change */
|
functions can always instruct us of this change */
|
||||||
snprintf(pidstr, sizeof(pidstr), "%d", (int) getpid());
|
snprintf(pidstr, sizeof(pidstr), "%d", (int) getpid());
|
||||||
|
setenv("RC_OPENRC_PID", pidstr, 1);
|
||||||
|
/*
|
||||||
|
* RC_RUNSCRIPT_PID is deprecated, but we will keep it for a while
|
||||||
|
* for safety.
|
||||||
|
*/
|
||||||
setenv("RC_RUNSCRIPT_PID", pidstr, 1);
|
setenv("RC_RUNSCRIPT_PID", pidstr, 1);
|
||||||
|
|
||||||
/* eprefix is kinda klunky, but it works for our purposes */
|
/* eprefix is kinda klunky, but it works for our purposes */
|
||||||
@@ -329,7 +329,7 @@ do_mark_service(int argc, char **argv)
|
|||||||
bool ok = false;
|
bool ok = false;
|
||||||
char *svcname = getenv("RC_SVCNAME");
|
char *svcname = getenv("RC_SVCNAME");
|
||||||
char *service = NULL;
|
char *service = NULL;
|
||||||
char *runscript_pid;
|
char *openrc_pid;
|
||||||
/* char *mtime; */
|
/* char *mtime; */
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
RC_SERVICE bit;
|
RC_SERVICE bit;
|
||||||
@@ -350,7 +350,7 @@ do_mark_service(int argc, char **argv)
|
|||||||
eerrorx("%s: unknown applet", applet);
|
eerrorx("%s: unknown applet", applet);
|
||||||
|
|
||||||
/* If we're marking ourselves then we need to inform our parent
|
/* If we're marking ourselves then we need to inform our parent
|
||||||
runscript process so they do not mark us based on our exit code */
|
openrc-run process so they do not mark us based on our exit code */
|
||||||
/*
|
/*
|
||||||
* FIXME: svcname and service are almost always equal except called from a
|
* FIXME: svcname and service are almost always equal except called from a
|
||||||
* shell with just argv[1] - So that doesn't seem to do what Roy initially
|
* shell with just argv[1] - So that doesn't seem to do what Roy initially
|
||||||
@@ -359,8 +359,8 @@ do_mark_service(int argc, char **argv)
|
|||||||
* openrc@gentoo.org).
|
* openrc@gentoo.org).
|
||||||
*/
|
*/
|
||||||
if (ok && svcname && strcmp(svcname, service) == 0) {
|
if (ok && svcname && strcmp(svcname, service) == 0) {
|
||||||
runscript_pid = getenv("RC_RUNSCRIPT_PID");
|
openrc_pid = getenv("RC_OPENRC_PID");
|
||||||
if (runscript_pid && sscanf(runscript_pid, "%d", &pid) == 1)
|
if (openrc_pid && sscanf(openrc_pid, "%d", &pid) == 1)
|
||||||
if (kill(pid, SIGHUP) != 0)
|
if (kill(pid, SIGHUP) != 0)
|
||||||
eerror("%s: failed to signal parent %d: %s",
|
eerror("%s: failed to signal parent %d: %s",
|
||||||
applet, pid, strerror(errno));
|
applet, pid, strerror(errno));
|
||||||
@@ -369,10 +369,10 @@ do_mark_service(int argc, char **argv)
|
|||||||
in control as well */
|
in control as well */
|
||||||
/*
|
/*
|
||||||
l = strlen(RC_SVCDIR "/exclusive") + strlen(svcname) +
|
l = strlen(RC_SVCDIR "/exclusive") + strlen(svcname) +
|
||||||
strlen(runscript_pid) + 4;
|
strlen(openrc_pid) + 4;
|
||||||
mtime = xmalloc(l);
|
mtime = xmalloc(l);
|
||||||
snprintf(mtime, l, RC_SVCDIR "/exclusive/%s.%s",
|
snprintf(mtime, l, RC_SVCDIR "/exclusive/%s.%s",
|
||||||
svcname, runscript_pid);
|
svcname, openrc_pid);
|
||||||
if (exists(mtime) && unlink(mtime) != 0)
|
if (exists(mtime) && unlink(mtime) != 0)
|
||||||
eerror("%s: unlink: %s", applet, strerror(errno));
|
eerror("%s: unlink: %s", applet, strerror(errno));
|
||||||
free(mtime);
|
free(mtime);
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ static const char *const env_whitelist[] = {
|
|||||||
"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS",
|
"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS",
|
||||||
"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL",
|
"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL",
|
||||||
"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG",
|
"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG",
|
||||||
|
"EERROR_QUIET", "EINFO_QUIET",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user