Compare commits
27 Commits
0.15
...
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 |
169
ChangeLog
169
ChangeLog
@@ -1,3 +1,172 @@
|
|||||||
|
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
|
commit 9225bfa6918cfd488c8f1055cf986b542f1f157e
|
||||||
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.15
|
VERSION= 0.18
|
||||||
PKG= ${NAME}-${VERSION}
|
PKG= ${NAME}-${VERSION}
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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
|
||||||
dmesg > /var/log/dmesg
|
VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;;
|
||||||
chmod 640 /var/log/dmesg
|
*)
|
||||||
fi
|
dmesg > /var/log/dmesg
|
||||||
|
chmod 640 /var/log/dmesg
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -4,11 +4,24 @@
|
|||||||
|
|
||||||
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
|
||||||
|
local fs_services ="$(get_fs_services)"
|
||||||
|
[ -n "$fs_services" ] && use $fs_services
|
||||||
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
keyword -jail -prefix -systemd-nspawn -vserver -lxc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
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
|
||||||
|
|||||||
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>
|
||||||
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
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
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= 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 openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
BIN= gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
|
||||||
|
|
||||||
INSTALLAFTER= _installafter
|
INSTALLAFTER= _installafter
|
||||||
|
|||||||
@@ -126,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
|
||||||
@@ -212,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
|
||||||
|
|||||||
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
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'},
|
||||||
|
|||||||
@@ -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