Compare commits

..

5 Commits

Author SHA1 Message Date
William Hubbs
b087a751de update ChangeLog 2017-03-14 19:58:26 -05:00
William Hubbs
bc05fb7551 update news file 2017-03-14 19:36:32 -05:00
William Hubbs
e5c2a378f3 Remove all occurances of 'before *' from dependencies
Using wildcards in dependencies causes issues when rc_parallel is set to
yes because it can lead to deadlocks.
All dependencies need to be explicit rather than implicit.

This is the first stage of moving this direction.
2017-03-14 19:36:01 -05:00
William Hubbs
3c1a71bd9d init.d/sysfs.in: efivarfs tweaks
Since we check for /sys/firmware/efi/efivars, we do not need to check
for /sys/firmware/efi

Since Failing to mount efivarfs is not critical, we silence the error
message from mount.
2017-03-14 19:35:51 -05:00
William Hubbs
fcb826a451 version 0.24.1 2017-03-14 19:35:35 -05:00
57 changed files with 216 additions and 1060 deletions

454
ChangeLog
View File

@@ -1,297 +1,10 @@
commit 809c205c356992145b8781ae07a5d3c98b79a8c9
Author: Sergei Trofimovich <slyfox@inbox.ru>
Commit: William Hubbs <w.d.hubbs@gmail.com>
rc-logger.c: fix crash on fclose(NULL) (#137)
Only close the log if we successfully opened it.
Reported-by: Brian Evans <grknight@gentoo.org>
Tested-by: Brian Evans <grknight@gentoo.org>
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
commit 238bffca9bbec8ed723b9e46fbc04407e5daddeb
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.26.3
commit da0ddd521ad15d030308fbf2017577acc422f1d6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update ChangeLog
commit 1967cd402caf6e229263f15aef40c6c4d8f60ce3
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
rc_status: calculate time differences in time_t and display seconds in uptime
commit a7f3eb466c750eee160c49ab728ad1f8cd3380ee
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.26.2
commit ae7490929d35322e1ce19daaa9f1edadbfe8dfd6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update ChangeLog
commit ddbd1caa35986b9f1be0070dad1cedfc427a1bf1
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: save start time and respawn count before dropping privs
commit a24965121834b64cc5e62c52c67b88886e5c5f5c
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.26.1
commit e4bfb4530a86a4ccdff312c857df37fa0da36fd6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update ChangeLog
commit 78e0042eccaf5a5554b195ad391b3ab0b8974cf6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
man/rc-status: document changes for supervised daemons
rc-status now shows the amount of time a supervised daemon has been
active as well as the number of times it has been respawned during the
current respawn period.
commit 82e12e309247bc84abf29aca04b3a2dd845fa11b
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
rc-status: show uptimes and respawn counts for supervised daemons
commit 1ebef0d7a38ec0a9635418b75c3aabb564c1577e
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
fix to_time_t to honor dst
commit 6b4050ab9cf9d678a1d6b7af7af7494f8533dbca
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
fix from_time_t function
commit cf5e9aa2bbcdf1783fadeab26586c1134929d928
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Move time_t conversions to rc-misc.c so they can be shared
commit a3250e77d412f2290e381b9e7569930d95e4fc5b
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: save start time and respawn count
This will allow rc-status to display an uptime and restart count for
supervised processes.
commit df027ca4722c8755b23a65db75728b835ccca807
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: fix our status when we give up on the child process
commit 4c89e3f5fa1c65ccd0c843f98e4013c2085f243f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon:create multiple options from --respawn-limit
This creates --respawn-delay, --respawn-max and --respawn-period. It was
suggested that it would be easier to follow if the options were
separated.
This is for #126.
commit 3673040722b75c0a4d06fbeb272f917c7d1ea7c4
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: add a --respawn-limit option
Allow limiting the number of times supervise-daemon will attempt to respawn a
daemon once it has died to prevent infinite respawning. Also, set a
reasonable default limit (10 times in a 5 second period).
This is for issue #126.
commit 96c8ba2fb5f91a711ef5bfcfd8affe0b74ad18fe
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: mark all open file descriptors FD_CLOEXEC
commit 47cf1d0c707dc88d216bebc15be3f39d5eb47fa9
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon:remove the controlling tty in the supervisor
commit 06a6a27e441372164872c7712b80728527a6ec05
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: fix access to tty_fd and devnull_fd
Both the child and supervisor need access to these file descriptors.
commit 5de3798afc55ce147e65926f863ec9c9cef60e79
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: mark the service started when the supervisor is active
commit 6ac094a59cf7b51d8527af15b07feca707a635c8
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.26
commit 84c81ca02d7077a619dc704ff654385846fcd2b4
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update ChangeLog
commit 0e3f8720984d7d5752a78a4135cd268e4f83b3d7
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init: send term/kill signals as final step of shutdown
commit 5fd3747b190887d094225547f23007d25e2d9592
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
reword the bugs section of the openrc-init man page
commit 4694900190a9078397bb9083328b68b489af92f4
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init: fix signal handling
The only signals we handle are SIGINT and SIGCHLD, so block all others
and unblock them in the child process before we start a rurnlevel.
commit 05738bfce120114037d4f02c67ec740813f94b89
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init: add re-exec capability
This will allow the re-execution of the init process after upgrading
OpenRC.
commit 6f88ee4ec6f59e545346a7422facc3e5b6adac04
Author: i.Dark_Templar <darktemplar@dark-templar-archives.net>
Commit: William Hubbs <w.d.hubbs@gmail.com>
bootmisc: do not remove ld-elf32.so.hints
File /var/run/ld-elf32.so.hints is used on FreeBSD 64bit multilib
This fixes #125.
commit cc51bdca3bac963878141da047e92f125772e14f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Add attribution to openrc-init.c and openrc-shutdown.c
commit 13ca79856e5836117e469c3edbcfd4bf47b6bab0
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
add init process
openrc-init.c and openrc-shutdown.c are based on code which was written by
James Hammons <jlhamm@acm.org>, so I would like to publically
thank him for his work.
commit 79a9edc73068244ad843f2edbe4206ce696c91c8
Author: i.Dark_Templar <darktemplar@dark-templar-archives.net>
Commit: i.Dark_Templar <darktemplar@dark-templar-archives.net>
Fix make install on FreeBSD: don't try to install /etc/init.d/modules twice
commit 9eb669591e16c5ee0ca07babe058d0b7b2396077
Author: Austin English <austinenglish@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
start-stop-daemon: warn if calling --start with --retry or --stop with --wait
This fixes #122
commit 55a87a30ec845eb725e8a923c8f8eb7aa75baa72
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init.d/agetty.in: add -prefix keyword
commit a912029462ae988ab4e2a96a0958e54a3c2e822f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init.d/mount-ro: change dependency on killprocs and savecache to after
killprocs always succeeds and savecache is not required by mount-ro, so
we can just start after both of these have run.
commit 1e9078279709df2a3617bf1460890ceb1ddfcf59
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
agetty-guide: typo fix
commit 51a292e09b9362f13d5747d4eedaa521ddf9ce72
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init.d: add agetty to ignore patterns
commit 50fccf47d4bd2ed6e7ea6ff7f72577c8e7b95d0d
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
sh/gendepends.sh.in: fix detection of service scripts
We do not need to care about the path on the shebang line of a service
script as long as the shebang line ends with "openrc-run".
This fixes #119 and #120.
commit 9bd63b5d4a16601712a65eb8962214cdd4d26ce5
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update dependencies for clock service
The clock services had a very long list of "before" dependencies that
referred to other services within OpenRC. For ease of maintenance,
convert these to "after clock" dependencies in the individual services.
commit 48db17a93f5e60c0d241f8fb06bfbdd01206fb9c
commit bc05fb75515b3f65f3c63ae5972c749fac00924f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update news file
commit c333707cba356f4cacfd58a6fcc78f7c073dddcd
commit e5c2a378f3000cd20826ec6b59ecca15d31190ae
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -303,7 +16,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
This is the first stage of moving this direction.
commit 5f5b1f7cbefd0bc14352e86a9c33260266f98d9b
commit 3c1a71bd9db50fd410eb64e715a99911c8fad978
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
@@ -315,11 +28,11 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
Since Failing to mount efivarfs is not critical, we silence the error
message from mount.
commit cfdf56475e600f79a433cd721cadf39114c6c58d
commit fcb826a45137fec589bf945fe23deeba55879a34
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.25
version 0.24.1
commit fde3902d069dfdce9c59555186a5541d6d99c8aa
Author: William Hubbs <w.d.hubbs@gmail.com>
@@ -1453,3 +1166,160 @@ Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
increment version to 0.22
commit 5bfb7d6c77ff533e34e2bbfe5b6e57410d961d70
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Update ChangeLog
commit 12c8248b5f53879935d4e62ef42023f703c7b636
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
update news for 0.21
commit 820ef6dab674c2878d72edc8ea21e7250b1b5aec
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: clarify documentation about configuring daemon not to fork
commit 87884db66767eba6317b506a4d7270dd22721831
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Make deprecation warnings for rc and runscript more visible
These warnings were inserted in verbose only mode in OpenRC-0.13.A
Now, we are making them more visible in preparation for removing these
compatibility binaries in the future.
commit 94077d264e14783e6ca5603d64e9d579fb206c20
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: log the exit code or signal when a child process dies
commit 3351c8b4c3027f09003f8ba33e43f46762f5c453
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon.sh: add support for chroot variable
commit a8214af2fe3aa91930e3270af99cf1d9b7ef5b0a
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
start-stop-daemon.sh: fix regression in chroot support
The support for the chroot variable was broken in 0.16, this fixes that
breakage.
commit 9a372812c78ea8efc55b3dea6a39c2d0559bca45
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
guide.md: typo fix
This fixes #86.
commit 3fa9015b8e5610d38366f781a08789e34159b0dc
Author: Jason Zaman <jason@perfinion.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
rc-selinux: access check was backwards
commit 3b5a8b331e81ecd9a9362553c16f4527291d5528
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
supervise-daemon: add pam service file
commit b3a04e797e5e459842c2c239886ab6ea08a8dc29
Author: Anthony G. Basile <blueness@gentoo.org>
Commit: Anthony G. Basile <blueness@gentoo.org>
runlevels/Makefile: add support for runlevel nonetwork
Traditional System V reserves runlevel 2 for multiuser with no
networking. We add support for this which is already defined in
the inittab as
l2:2:wait:/sbin/rc nonetwork
X-Gentoo-Bug: 533828
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=533828
Signed-off-by: Anthony G. Basile <blueness@gentoo.org>
commit 92e2f2c7cc958effcec0ef773dda954a153d8e42
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
killprocs: remove calls to sleep
X-Gentoo-Bug: 487084
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=487084
commit ad23d5b8dbee70815c02271c78f415bcd7088076
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-run: clean up runscript deprecation message
commit 62410eaf4ba92516a58a550717d7f3faf63bb79f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
add daemon supervisor
The supervise-daemon process is meant to be a lightweight supervisor
which can monitor and restart a daemon if it crashes.
commit fd80b6fc67ec6a0fe4853167fb67ee40bb51b742
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
localmount/netmount: clean up critical mount processing
Fix a typo and do not fail if a path in critical_mounts is not listed as
a critical mount does not get mounted.
commit 5d130cc45cd334fd38b0c6874bcc81ac74636217
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
localmount/netmount: allow mount points to be marked critical
In previous releases, we either treated no mount points as critical or
all of them.
Now both localmount and netmount support a critical_mounts setting. If
mount points listed in this setting fail to mount, localmount and
netmount will fail.
commit 1c3c2cf6d8cb060d03919297f5fe706f6027a4c6
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
netmount: fix mounting on Linux
Before this commit, on Linux, we were always trying to mount file
systems marked with _netdev, even when the previous mount command
failed. Now, we do not run the second mount if the first fails.
X-Gentoo-Bug: 579876
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=579876
commit 171e856ec8a0a64504b4b4a47ab6181d37fc3dbe
Author: Mike Gilbert <floppym@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
start-stop-daemon: Allow group read/write when creating output files
This allows for better interaction with inherited ACL entries.
This fixes #84.
X-Gentoo-Bug: 577362
X-Gentoo-Bug-URL: https://bugs.gentoo.org/577362

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.26.3
VERSION= 0.24.1
PKG= ${NAME}-${VERSION}

View File

@@ -3,13 +3,6 @@
This file will contain a list of notable changes for each release. Note
the information in this file is in reverse order.
## OpenRC-0.25
This version contains an OpenRC-specific implementation of init for
Linux which can be used in place of sysvinit or any other init process.
For information on its usage, see the man pages for openrc-init (8) and
openrc-shutdown (8).
## OpenRC-0.24.1
This version starts cleaning up the dependencies so that rc_parallel

View File

@@ -5,9 +5,10 @@ getty, using agetty, on Linux. To use this method, make sure you aren't
spawning a getty manager for this port some other way (such as through
sysvinit/inittab), then run the following commands as root.
Note that [port] refers to the port you are spawning the getty on, for
example, tty1 or ttyS0. The full path to it, for example, /dev/tty1
should not be used.
Note that [port] refers to the port you are spawning the getty on, and
not the full path to it. For example, tty0 or ttyS0instead of /dev/tty0
or /dev/ttyS0.
tty0 or ttyS0, not the full path to it (for example, tty0 or ttyS0 and
```
# cd /etc/init.d

View File

@@ -178,11 +178,6 @@
# "xenU" - XenU Domain (Linux and NetBSD)
#rc_sys=""
# if you use openrc-init, which is currently only available on Linux,
# this is the default runlevel to activate after "sysinit" and "boot"
# when booting.
#rc_default_runlevel="default"
# on Linux and Hurd, this is the number of ttys allocated for logins
# It is used in the consolefont, keymaps, numlock and termencoding
# service scripts.

1
init.d/.gitignore vendored
View File

@@ -1,4 +1,3 @@
agetty
binfmt
modules-load
bootmisc

View File

@@ -19,7 +19,7 @@ SRCS-FreeBSD= hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \
rc-enabled.in rpcbind.in savecore.in syslogd.in
# These are FreeBSD specific
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
modules-load.in mixer.in nscd.in powerd.in syscons.in
modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
SRCS-Linux= agetty.in binfmt.in devfs.in dmesg.in hwclock.in consolefont.in \
keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \

View File

@@ -23,7 +23,6 @@ fi
depend()
{
after swclock
provide clock
# BSD adjkerntz needs to be able to write to /etc
if [ "$clock" = "UTC" -a -e /etc/wall_cmos_clock ] ||

View File

@@ -19,7 +19,6 @@ pidfile="/run/${RC_SVCNAME}.pid"
depend() {
after local
keyword -prefix
}
start_pre() {

View File

@@ -13,7 +13,7 @@ description="Register misc binary format handlers"
depend()
{
after clock procfs
after procfs
use modules devfs
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -71,8 +71,7 @@ cleanup_var_run_dir()
ebegin "Cleaning /var/run"
for x in $(find /var/run ! -type d ! -name utmp \
! -name random-seed ! -name dev.db \
! -name ld-elf.so.hints ! -name ld-elf32.so.hints \
! -name ld.so.hints);
! -name ld-elf.so.hints ! -name ld.so.hints);
do
# Clean stale sockets
if [ -S "$x" ]; then

View File

@@ -13,7 +13,6 @@ description="Creates the dev database"
depend()
{
after clock
need localmount
}

View File

@@ -12,7 +12,6 @@
description="Configures a specific kernel dump device."
depend() {
after clock
need swap
keyword -jail -prefix
}

View File

@@ -15,7 +15,6 @@ _IFS="
depend()
{
after clock
use dev clock modules
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml
}

View File

@@ -15,7 +15,6 @@ extra_commands="reset"
depend()
{
use root
after clock
before devd net
keyword -jail -prefix
}

View File

@@ -12,7 +12,6 @@
description="Sets the hostname of the machine."
depend() {
after clock
keyword -docker -lxc -prefix -systemd-nspawn
}

View File

@@ -33,6 +33,9 @@ depend()
want modules
if yesno $clock_adjfile; then
use root
else
before binfmt bootmisc fsck hostname keymaps localmount loopback mtab
before procfs root swap sysctl termencoding urandom
fi
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -14,7 +14,7 @@ description="Applies a keymap for the consoles."
depend()
{
need localmount termencoding
after bootmisc clock
after bootmisc
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -15,7 +15,7 @@ depend()
{
need fsck
use lvm modules mtab root
after clock lvm modules root
after lvm modules root
keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
}

View File

@@ -13,7 +13,6 @@ description="Configures the loopback interface."
depend()
{
after clock
keyword -jail -prefix -systemd-nspawn -vserver
}

View File

@@ -13,7 +13,7 @@ description="Re-mount filesytems read-only for a clean reboot."
depend()
{
after killprocs savecache
need killprocs savecache
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -13,7 +13,6 @@ description="Update /etc/mtab to match what the kernel knows about"
depend()
{
after clock
need root
keyword -prefix -systemd-nspawn
}

View File

@@ -18,7 +18,7 @@ __nl="
depend()
{
need localmount
after bootmisc clock
after bootmisc
if [ -n "$(interfaces)" ]; then
provide net
fi

View File

@@ -13,7 +13,6 @@ required_files="/etc/newsyslog.conf"
depend()
{
after clock
need localmount
keyword -prefix
}

View File

@@ -13,7 +13,6 @@ description="Mounts misc filesystems in /proc."
depend()
{
after clock
use devfs
want modules
need localmount

View File

@@ -13,7 +13,6 @@ description="Mount the root fs read/write"
depend()
{
after clock
need fsck
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -14,7 +14,6 @@ description="Saves a kernel dump."
depend()
{
need dumpon localmount
after clock
before encswap
keyword -jail -prefix
}

View File

@@ -1,4 +1,4 @@
S#!@BINDIR@/openrc-run
#!@SBINDIR@/openrc-run
# Copyright (c) 2009-2015 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
@@ -14,9 +14,9 @@ S#!@BINDIR@/openrc-run
description="Configures static routes."
__nl="
"
depend()
{
after clock
provide net
use network
keyword -jail -prefix -vserver

View File

@@ -11,7 +11,6 @@
depend()
{
after clock
before fsck
keyword -jail -prefix
}

View File

@@ -11,7 +11,6 @@
depend()
{
after clock
before localmount
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -13,6 +13,10 @@ description="Sets the local clock to the mtime of a given file."
depend()
{
before adjkerntz binfmt bootmisc devdb dumpon fsck hostid hostname keymaps
before localmount loopback modules mtab network newsyslog procfs root
before savecore staticroute swap swap-blk syscons sysctl syslogd
before termencoding ttys urandom wscons
provide clock
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -10,7 +10,6 @@
# except according to the terms contained in the LICENSE file.
depend() {
after clock
need localmount
keyword -jail -prefix
}

View File

@@ -11,7 +11,6 @@
depend()
{
after clock
before bootmisc logger
keyword -prefix -systemd-nspawn -vserver
}

View File

@@ -22,6 +22,6 @@ depend()
provide logger
use net newsyslog
need localmount
after bootmisc clock
after bootmisc
keyword -prefix
}

View File

@@ -18,7 +18,7 @@ depend()
{
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
use root
after bootmisc clock
after bootmisc
}
start()

View File

@@ -11,7 +11,7 @@
depend()
{
after clock fsck
after fsck
keyword -prefix
}

View File

@@ -14,7 +14,6 @@ description="Initializes the random number generator."
depend()
{
after clock
need localmount
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn
}

View File

@@ -11,7 +11,6 @@
depend()
{
after clock
need localmount
keyword -prefix
}

View File

@@ -9,7 +9,7 @@ MAN8= rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \
service.8 start-stop-daemon.8 supervise-daemon.8
ifeq (${OS},Linux)
MAN8 += rc-sstat.8 openrc-init.8 openrc-shutdown.8
MAN8 += rc-sstat.8
endif
# Handy macro to create symlinks

View File

@@ -1,46 +0,0 @@
.\" Copyright (c) 2017 The OpenRC Authors.
.\" See the Authors file at the top-level directory of this distribution and
.\" https://github.com/OpenRC/openrc/blob/master/AUTHORS
.\"
.\" This file is part of OpenRC. It is subject to the license terms in
.\" the LICENSE file found in the top-level directory of this
.\" distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
.\" This file may not be copied, modified, propagated, or distributed
.\" except according to the terms contained in the LICENSE file.
.\"
.Dd April 6, 2017
.Dt openrc-init 8 SMM
.Os OpenRC
.Sh NAME
.Nm openrc-init
.Nd the parent of all processes
.Sh SYNOPSIS
.Nm
.Sh DESCRIPTION
.Nm
is an init process which can be an alternative to sysvinit or any other
init process.
.Pp
To use
.Nm
configure your boot loader to invoke it or symlink it to /sbin/init.
Also, you will need to use
.Xr openrc-shutdown 8 ,
to halt, reboot or poweroff the system.
.Pp
The default runlevel is read from the init command line, the
rc_default_runlevel setting in rc.conf, the kernel command line, or it is
assumed to be "default" if it is not set in any of these places.
.Pp
.Nm
doesn't manage getty's directly, so you will need to manage them another
way. For example, you can use the agetty service script as described in
agetty-guide.md in this distribution.
.Sh BUGS
This was first released as part of OpenRC 0.25.
I do not know of any specific issues. However, since this is the first
release of openrc-init, please test and report any issues you find.
.Sh SEE ALSO
.Xr openrc-shutdown 8 ,
.Sh AUTHORS
.An William Hubbs <w.d.hubbs@gmail.com>

View File

@@ -167,24 +167,6 @@ Display name used for the above defined command.
Process name to match when signaling the daemon.
.It Ar stopsig
Signal to send when stopping the daemon.
.It Ar respawn_delay
Respawn delay
.Xr supervise-daemon 8
will use for this daemon. See
.Xr supervise-daemon 8
for more information about this setting.
.It Ar respawn_max
Respawn max
.Xr supervise-daemon 8
will use for this daemon. See
.Xr supervise-daemon 8
for more information about this setting.
.It Ar respawn_period
Respawn period
.Xr supervise-daemon 8
will use for this daemon. See
.Xr supervise-daemon 8
for more information about this setting.
.It Ar retry
Retry schedule to use when stopping the daemon. It can either be a
timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5).

View File

@@ -1,47 +0,0 @@
.\" Copyright (c) 2017 The OpenRC Authors.
.\" See the Authors file at the top-level directory of this distribution and
.\" https://github.com/OpenRC/openrc/blob/master/AUTHORS
.\"
.\" This file is part of OpenRC. It is subject to the license terms in
.\" the LICENSE file found in the top-level directory of this
.\" distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
.\" This file may not be copied, modified, propagated, or distributed
.\" except according to the terms contained in the LICENSE file.
.\"
.Dd April 6, 2017
.Dt openrc-shutdown 8 SMM
.Os OpenRC
.Sh NAME
.Nm openrc-shutdown
.Nd bring the system down
.Sh SYNOPSIS
.Nm
.Op Fl H , -halt
.Op Fl k , -kexec
.Op Fl p , -poweroff
.Op Fl R , -reexec
.Op Fl r , -reboot
.Sh DESCRIPTION
.Nm
is the utility that communicates with openrc-init(8) to bring down the
system or instruct openrc-init to re-execute itself. It supports the
following options:
.Bl -tag -width "poweroff"
.It Fl H , -halt
Stop all services, kill all remaining processes and halt the system.
.It Fl k , -kexec
Stop all services, kill all processes and boot directly into a new
kernel loaded via kexec(8).
.It Fl p , -poweroff
Stop all services, kill all processes and power off the system.
.It Fl R , -reexec
instruct openrc-init to re-exec itself. This should be used after an
upgrade of OpenRC if you are using openrc-init as your init process.
.It Fl r , -reboot
Stop all services, kill all processes and reboot the system.
.El
.Sh SEE ALSO
.Xr openrc-init 8 ,
.Xr kexec 8 ,
.Sh AUTHORS
.An William Hubbs <w.d.hubbs@gmail.com>

View File

@@ -25,12 +25,6 @@ in different runlevels. The default behavior is to show information
about the current runlevel and any unassigned services that are not stopped,
but any runlevel can be quickly examined.
.Pp
If an active service is being supervised by
.Xr supervise-daemon 8,
the amount of time the daemon has been active along with the number of
times it has been respawned in the current respawn period will be
displayed.
.Pp
The options are as follows:
.Bl -tag -width ".Fl test , test string"
.It Fl a , -all
@@ -63,6 +57,5 @@ dependency order if the dependency tree is available.
.Sh SEE ALSO
.Xr openrc 8 ,
.Xr rc-update 8
.Xr supervise-daemon 8
.Sh AUTHORS
.An Roy Marples <roy@marples.name>

View File

@@ -16,8 +16,6 @@
.Nd starts a daemon and restarts it if it crashes
.Sh SYNOPSIS
.Nm
.Fl D , -respawn-delay
.Ar seconds
.Fl d , -chdir
.Ar path
.Fl e , -env
@@ -28,18 +26,14 @@
.Ar arg
.Fl k , -umask
.Ar value
.Fl m , -respawn-max
.Ar count
.Fl N , -nicelevel
.Ar level
.Fl p , -pidfile
.Ar pidfile
.Fl P , -respawn-period
.Ar seconds
.Fl r , -chroot
.Ar chrootpath
.Fl u , -user
.Ar user
.Fl r , -chroot
.Ar chrootpath
.Fl 1 , -stdout
.Ar logfile
.Fl 2 , -stderr
@@ -88,9 +82,6 @@ Print the action(s) that are taken just before doing them.
.Pp
The options are as follows:
.Bl -tag -width indent
.It Fl D , -respawn-delay Ar seconds
wait this number of seconds before restarting a daemon after it crashes.
The default is 0.
.It Fl d , -chdir Ar path
chdir to this directory before starting the daemon.
.It Fl e , -env Ar VAR=VALUE
@@ -103,18 +94,8 @@ Class can be 0 for none, 1 for real time, 2 for best effort and 3 for idle.
Data can be from 0 to 7 inclusive.
.It Fl k , -umask Ar mode
Set the umask of the daemon.
.It Fl m , -respawn-max Ar count
Sets the maximum number of times a daemon will be respawned during a
respawn period. If a daemon dies more than this number of times during a
respawn period,
.Nm
will give up trying to respawn it and exit. The default is 10, and 0
means unlimited.
.It Fl N , -nicelevel Ar level
Modifies the scheduling priority of the daemon.
.It Fl P , -respawn-period Ar seconds
Sets the length of a respawn period. The default is 10 seconds. See the
description of --respawn-max for more information.
.It Fl r , -chroot Ar path
chroot to this directory before starting the daemon. All other paths, such
as the path to the daemon, chdir and pidfile, should be relative to the chroot.
@@ -142,15 +123,6 @@ to parse its options, which allows it to accept the `--' option which will
cause it to stop processing options at that point. Any subsequent arguments
are passed as arguments to the daemon to start and used when finding a daemon
to stop or signal.
.Sh NOTE
If respawn-delay, respawn-max and respawn-period are not set correctly,
it is possible to trigger a situation in which the supervisor will
infinitely try to respawn a daemon. To avoid this, if you change the
values of --respawn-delay, --respawn-max or --respawn-period, always
make sure the settings mmake sense. For example, a respawn period of 5
seconds with a respawn max of 10 and a respawn delay of 1 second leads
to infinite respawning since there can never be 10 respawns within 5
seconds.
.Sh SEE ALSO
.Xr chdir 2 ,
.Xr chroot 2 ,

View File

@@ -74,22 +74,11 @@ do
# Only generate dependencies for OpenRC scripts
read one two three <"$RC_SERVICE"
case "$one" in
\#*/openrc-run) ;;
\#*/runscript) ;;
\#!)
case "$two" in
*/openrc-run) ;;
*/runscript) ;;
*)
continue
;;
esac
;;
*)
continue
;;
esac
[ "$one" = "#!@SBINDIR@/runscript" ] || \
[ "$one" = "#!@SBINDIR@/openrc-run" ] || \
[ "$one" = "#!" -a "$two" = "@SBINDIR@/runscript" ] || \
[ "$one" = "#!" -a "$two" = "@SBINDIR@/openrc-run" ] || \
continue
unset one two three
RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME

View File

@@ -25,9 +25,6 @@ supervise_start()
eval supervise-daemon --start \
${chroot:+--chroot} $chroot \
${pidfile:+--pidfile} $pidfile \
${respawn_delay:+--respawn-delay} $respawn_delay \
${respawn_max:+--respawn-max} $respawn_max \
${respawn_period:+--respawn-period} $respawn_period \
${command_user+--user} $command_user \
$supervise_daemon_args \
$command \

View File

@@ -23,7 +23,6 @@
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "helpers.h"
@@ -69,7 +68,5 @@ RC_DEPTREE *_rc_deptree_load (int, int *);
bool _rc_can_find_pids(void);
RC_SERVICE lookup_service_state(const char *service);
void from_time_t(char *time_string, time_t tv);
time_t to_time_t(char *timestring);
#endif

View File

@@ -39,7 +39,6 @@ extern "C" {
#define RC_CONFDIR RC_SYSCONFDIR "/conf.d"
#define RC_PLUGINDIR RC_LIBDIR "/plugins"
#define RC_INIT_FIFO RC_SVCDIR"/init.ctl"
#define RC_PROFILE_ENV RC_SYSCONFDIR "/profile.env"
#define RC_SYS_WHITELIST RC_LIBEXECDIR "/conf.d/env_whitelist"
#define RC_USR_WHITELIST RC_SYSCONFDIR "/conf.d/env_whitelist"

2
src/rc/.gitignore vendored
View File

@@ -59,6 +59,4 @@ mark_service_failed
rc-abort
rc
openrc
openrc-init
openrc-run
openrc-shutdown

View File

@@ -1,7 +1,3 @@
include ../../Makefile.inc
MK= ../../mk
include ${MK}/os.mk
SRCS= checkpath.c do_e.c do_mark_service.c do_service.c \
do_value.c fstabinfo.c is_newer_than.c is_older_than.c \
mountinfo.c openrc-run.c rc-abort.c rc.c \
@@ -13,10 +9,6 @@ ifeq (${MKSELINUX},yes)
SRCS+= rc-selinux.c
endif
ifeq (${OS},Linux)
SRCS+= openrc-init.c openrc-shutdown.c
endif
CLEANFILES= version.h rc-selinux.o
BINDIR= ${PREFIX}/bin
@@ -42,11 +34,6 @@ RC_SBINPROGS= mark_service_starting mark_service_started \
mark_service_inactive mark_service_wasinactive \
mark_service_hotplugged mark_service_failed \
rc-abort swclock
ifeq (${OS},Linux)
SBINPROGS+= openrc-init openrc-shutdown
endif
ALL_PROGS= ${BINPROGS} ${SBINPROGS} ${RC_BINPROGS} ${RC_SBINPROGS}
CLEANFILES+= ${ALL_PROGS}
@@ -54,6 +41,8 @@ LOCAL_CPPFLAGS=-I../includes -I../librc -I../libeinfo
LOCAL_LDFLAGS=-L../librc -L../libeinfo
LDADD+= -lutil -lrc -leinfo
include ../../Makefile.inc
MK= ../../mk
include ${MK}/prog.mk
include ${MK}/gitver.mk
include ${MK}/cc.mk
@@ -107,9 +96,6 @@ veinfo vewarn vebegin veend vewend veindent veoutdent: do_e.o rc-misc.o
fstabinfo: fstabinfo.o _usage.o rc-misc.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
openrc-init: openrc-init.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
is_newer_than: is_newer_than.o rc-misc.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
@@ -128,9 +114,6 @@ mountinfo: mountinfo.o _usage.o rc-misc.o
openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
openrc-shutdown: openrc-shutdown.o _usage.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o
ifeq (${MKSELINUX},yes)
openrc-run runscript: rc-selinux.o

View File

@@ -1,206 +0,0 @@
/*
* openrc-init.c
* This is the init process (pid 1) for OpenRC.
*
* This is based on code written by James Hammons <jlhamm@acm.org>, so
* I would like to publically thank him for his work.
*/
/*
* Copyright (c) 2017 The OpenRC Authors.
* See the Authors file at the top-level directory of this distribution and
* https://github.com/OpenRC/openrc/blob/master/AUTHORS
*
* This file is part of OpenRC. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file.
*/
#include <errno.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/reboot.h>
#include <sys/wait.h>
#include "helpers.h"
#include "rc.h"
#include "version.h"
static const char *rc_default_runlevel = "default";
static pid_t do_openrc(const char *runlevel)
{
pid_t pid;
sigset_t signals;
pid = fork();
switch(pid) {
case -1:
perror("fork");
break;
case 0:
setsid();
/* unblock all signals */
sigemptyset(&signals);
sigprocmask(SIG_SETMASK, &signals, NULL);
printf("Starting %s runlevel\n", runlevel);
execl("/sbin/openrc", "/sbin/openrc", runlevel, NULL);
perror("exec");
break;
default:
break;
}
return pid;
}
static void init(const char *default_runlevel)
{
const char *runlevel = NULL;
pid_t pid;
pid = do_openrc("sysinit");
waitpid(pid, NULL, 0);
pid = do_openrc("boot");
waitpid(pid, NULL, 0);
if (default_runlevel)
runlevel = default_runlevel;
else
runlevel = rc_conf_value("rc_default_runlevel");
if (!runlevel)
runlevel = rc_default_runlevel;
if (!rc_runlevel_exists(runlevel)) {
printf("%s is an invalid runlevel\n", runlevel);
runlevel = rc_default_runlevel;
}
pid = do_openrc(runlevel);
waitpid(pid, NULL, 0);
}
static void handle_reexec(char *my_name)
{
execl(my_name, my_name, "reexec", NULL);
return;
}
static void handle_shutdown(const char *runlevel, int cmd)
{
pid_t pid;
pid = do_openrc(runlevel);
while (waitpid(pid, NULL, 0) != pid);
printf("Sending the final term signal\n");
kill(-1, SIGTERM);
sleep(3);
printf("Sending the final kill signal\n");
kill(-1, SIGKILL);
sync();
reboot(cmd);
}
static void reap_zombies(void)
{
pid_t pid;
for (;;) {
pid = waitpid(-1, NULL, WNOHANG);
if (pid == 0)
break;
else if (pid == -1) {
if (errno == ECHILD)
break;
perror("waitpid");
continue;
}
}
}
static void signal_handler(int sig)
{
switch(sig) {
case SIGINT:
handle_shutdown("reboot", RB_AUTOBOOT);
break;
case SIGCHLD:
reap_zombies();
break;
default:
printf("Unknown signal received, %d\n", sig);
break;
}
}
int main(int argc, char **argv)
{
char *default_runlevel;
char buf[2048];
int count;
FILE *fifo;
bool reexec = false;
sigset_t signals;
struct sigaction sa;
if (getpid() != 1)
return 1;
printf("OpenRC init version %s starting\n", VERSION);
if (argc > 1)
default_runlevel = argv[1];
else
default_runlevel = NULL;
if (default_runlevel && strcmp(default_runlevel, "reexec") == 0)
reexec = true;
/* block all signals we do not handle */
sigfillset(&signals);
sigdelset(&signals, SIGCHLD);
sigdelset(&signals, SIGINT);
sigprocmask(SIG_SETMASK, &signals, NULL);
/* install signal handler */
memset(&sa, 0, sizeof(sa));
sa.sa_handler = signal_handler;
sigaction(SIGCHLD, &sa, NULL);
sigaction(SIGINT, &sa, NULL);
reboot(RB_DISABLE_CAD);
if (! reexec)
init(default_runlevel);
if (mkfifo(RC_INIT_FIFO, 0600) == -1 && errno != EEXIST)
perror("mkfifo");
for (;;) {
/* This will block until a command is sent down the pipe... */
fifo = fopen(RC_INIT_FIFO, "r");
if (!fifo) {
if (errno != EINTR)
perror("fopen");
continue;
}
count = fread(buf, 1, 2048, fifo);
buf[count] = 0;
fclose(fifo);
printf("PID1: Received \"%s\" from FIFO...\n", buf);
if (strcmp(buf, "halt") == 0)
handle_shutdown("shutdown", RB_HALT_SYSTEM);
else if (strcmp(buf, "kexec") == 0)
handle_shutdown("reboot", RB_KEXEC);
else if (strcmp(buf, "poweroff") == 0)
handle_shutdown("shutdown", RB_POWER_OFF);
else if (strcmp(buf, "reboot") == 0)
handle_shutdown("reboot", RB_AUTOBOOT);
else if (strcmp(buf, "reexec") == 0)
handle_reexec(argv[0]);
}
return 0;
}

View File

@@ -1,132 +0,0 @@
/*
* openrc-shutdown.c
* If you are using OpenRC's provided init, this will shut down or
* reboot your system.
*
* This is based on code written by James Hammons <jlhamm@acm.org>, so
* I would like to publically thank him for his work.
*/
/*
* Copyright 2017 The OpenRC Authors.
* See the Authors file at the top-level directory of this distribution and
* https://github.com/OpenRC/openrc/blob/master/AUTHORS
*
* This file is part of OpenRC. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file.
*/
#include <getopt.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include "einfo.h"
#include "rc.h"
#include "helpers.h"
#include "_usage.h"
const char *applet = NULL;
const char *extraopts = NULL;
const char *getoptstring = "HkpRr" getoptstring_COMMON;
const struct option longopts[] = {
{ "halt", no_argument, NULL, 'H'},
{ "kexec", no_argument, NULL, 'k'},
{ "poweroff", no_argument, NULL, 'p'},
{ "reexec", no_argument, NULL, 'R'},
{ "reboot", no_argument, NULL, 'r'},
longopts_COMMON
};
const char * const longopts_help[] = {
"halt the system",
"reboot the system using kexec",
"power off the system",
"re-execute init (use after upgrading)",
"reboot the system",
longopts_help_COMMON
};
const char *usagestring = NULL;
const char *exclusive = "Select one of "
"--halt, --kexec, --poweroff, --reexec or --reboot";
static void send_cmd(const char *cmd)
{
FILE *fifo;
size_t ignored;
fifo = fopen(RC_INIT_FIFO, "w");
if (!fifo) {
perror("fopen");
return;
}
ignored = fwrite(cmd, 1, strlen(cmd), fifo);
if (ignored != strlen(cmd))
printf("Error writing to init fifo\n");
fclose(fifo);
}
int main(int argc, char **argv)
{
int opt;
int cmd_count = 0;
bool do_halt = false;
bool do_kexec = false;
bool do_poweroff = false;
bool do_reboot = false;
bool do_reexec = false;
applet = basename_c(argv[0]);
if (geteuid() != 0)
eerrorx("%s: you must be root\n", applet);
while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'H':
do_halt = true;
cmd_count++;
break;
case 'k':
do_kexec = true;
cmd_count++;
break;
case 'p':
do_poweroff = true;
cmd_count++;
break;
case 'R':
do_reexec = true;
cmd_count++;
break;
case 'r':
do_reboot = true;
cmd_count++;
break;
case_RC_COMMON_GETOPT
}
}
if (cmd_count != 1) {
eerror("%s: %s\n", applet, exclusive);
usage(EXIT_FAILURE);
}
if (do_halt)
send_cmd("halt");
else if (do_kexec)
send_cmd("kexec");
else if (do_poweroff)
send_cmd("poweroff");
else if (do_reboot)
send_cmd("reboot");
else if (do_reexec)
send_cmd("reexec");
return 0;
}

View File

@@ -261,12 +261,12 @@ rc_logger_open(const char *level)
break;
}
}
fclose(log);
} else {
log_error = 1;
eerror("Error: fopen(%s) failed: %s", TMPLOG, strerror(errno));
}
fclose(log);
fclose(plog);
} else {
/*

View File

@@ -442,35 +442,3 @@ RC_SERVICE lookup_service_state(const char *service)
return service_bits[i].bit;
return 0;
}
void from_time_t(char *time_string, time_t tv)
{
strftime(time_string, 20, "%Y-%m-%d %H:%M:%S", localtime(&tv));
}
time_t to_time_t(char *timestring)
{
int check = 0;
int year = 0;
int month = 0;
int day = 0;
int hour = 0;
int min = 0;
int sec = 0;
struct tm breakdown = {0};
time_t result = -1;
check = sscanf(timestring, "%4d-%2d-%2d %2d:%2d:%2d",
&year, &month, &day, &hour, &min, &sec);
if (check == 6) {
breakdown.tm_year = year - 1900; /* years since 1900 */
breakdown.tm_mon = month - 1;
breakdown.tm_mday = day;
breakdown.tm_hour = hour;
breakdown.tm_min = min;
breakdown.tm_sec = sec;
breakdown.tm_isdst = -1;
result = mktime(&breakdown);
}
return result;
}

View File

@@ -76,58 +76,10 @@ print_level(const char *prefix, const char *level)
printf("%s\n", level);
}
static void get_uptime(const char *service, char *uptime, int uptime_size)
{
RC_SERVICE state = rc_service_state(service);
char *start_count;
time_t now;
char *start_time_string;
time_t start_time;
time_t time_diff;
time_t diff_days = (time_t) 0;
time_t diff_hours = (time_t) 0;
time_t diff_mins = (time_t) 0;
time_t diff_secs = (time_t) 0;
uptime[0] = '\0';
if (state & RC_SERVICE_STARTED) {
start_count = rc_service_value_get(service, "start_count");
start_time_string = rc_service_value_get(service, "start_time");
if (start_count && start_time_string) {
start_time = to_time_t(start_time_string);
now = time(NULL);
time_diff = (time_t) difftime(now, start_time);
diff_secs = time_diff;
if (diff_secs > (time_t) 86400) {
diff_days = diff_secs / (time_t) 86400;
diff_secs %= diff_days * (time_t) 86400;
}
if (diff_secs > (time_t) 3600) {
diff_hours = diff_secs / (time_t) 3600;
diff_secs %= diff_hours * (time_t) 3600;
}
if (diff_secs > (time_t) 60) {
diff_mins = diff_secs / (time_t) 60;
diff_secs %= diff_mins * (time_t) 60;
}
if (diff_days > 0)
snprintf(uptime, uptime_size,
"%ld day(s) %02ld:%02ld:%02ld (%s)",
diff_days, diff_hours, diff_mins, diff_secs,
start_count);
else
snprintf(uptime, uptime_size,
"%02ld:%02ld:%02ld (%s)",
diff_hours, diff_mins, diff_secs, start_count);
}
}
}
static void
print_service(const char *service)
{
char status[60];
char uptime [40];
char status[10];
int cols = printf(" %s", service);
const char *c = ecolor(ECOLOR_GOOD);
RC_SERVICE state = rc_service_state(service);
@@ -149,8 +101,7 @@ print_service(const char *service)
{
snprintf(status, sizeof(status), " crashed ");
} else {
get_uptime(service, uptime, 40);
snprintf(status, sizeof(status), " started %s", uptime);
snprintf(status, sizeof(status), " started ");
color = ECOLOR_GOOD;
}
} else if (state & RC_SERVICE_SCHEDULED) {

View File

@@ -960,9 +960,6 @@ int main(int argc, char **argv)
if (redirect_stdout || redirect_stderr)
eerrorx("%s: --stdout and --stderr are only relevant"
" with --start", applet);
if (start_wait)
ewarn("using --wait with --stop has no effect,"
" use --retry instead");
} else {
if (!exec)
eerrorx("%s: nothing to start", applet);
@@ -1015,11 +1012,7 @@ int main(int argc, char **argv)
eerror("%s: %s does not exist", applet,
*exec_file ? exec_file : exec);
exit(EXIT_FAILURE);
}
if (start && retry)
ewarn("using --retry with --start has no effect,"
" use --wait instead");
/* If we don't have a pidfile we should check if it's interpreted
* or not. If it we, we need to pass the interpreter through

View File

@@ -66,42 +66,36 @@ static struct pam_conv conv = { NULL, NULL};
const char *applet = NULL;
const char *extraopts = NULL;
const char *getoptstring = "D:d:e:g:I:Kk:m:N:p:r:Su:1:2:" \
const char *getoptstring = "d:e:g:I:Kk:N:p:r:Su:1:2:" \
getoptstring_COMMON;
const struct option longopts[] = {
{ "respawn-delay", 1, NULL, 'D'},
{ "chdir", 1, NULL, 'd'},
{ "env", 1, NULL, 'e'},
{ "group", 1, NULL, 'g'},
{ "ionice", 1, NULL, 'I'},
{ "stop", 0, NULL, 'K'},
{ "umask", 1, NULL, 'k'},
{ "respawn-max", 1, NULL, 'm'},
{ "nicelevel", 1, NULL, 'N'},
{ "pidfile", 1, NULL, 'p'},
{ "respawn-period", 1, NULL, 'P'},
{ "user", 1, NULL, 'u'},
{ "chroot", 1, NULL, 'r'},
{ "start", 0, NULL, 'S'},
{ "user", 1, NULL, 'u'},
{ "stdout", 1, NULL, '1'},
{ "stderr", 1, NULL, '2'},
longopts_COMMON
};
const char * const longopts_help[] = {
"Set a respawn delay",
"Change the PWD",
"Set an environment string",
"Change the process group",
"Set an ionice class:data when starting",
"Stop daemon",
"Set the umask for the daemon",
"set maximum number of respawn attempts",
"Set a nicelevel when starting",
"Match pid found in this file",
"Set respawn time period",
"Change the process user",
"Chroot to this directory",
"Start daemon",
"Change the process user",
"Redirect stdout to file",
"Redirect stderr to file",
longopts_help_COMMON
@@ -171,8 +165,7 @@ static pid_t get_pid(const char *pidfile)
return pid;
}
static void child_process(char *exec, char **argv, char *svcname,
int start_count)
static void child_process(char *exec, char **argv)
{
RC_STRINGLIST *env_list;
RC_STRING *env;
@@ -184,9 +177,6 @@ static void child_process(char *exec, char **argv, char *svcname,
char *np;
char **c;
char cmdline[PATH_MAX];
time_t start_time;
char start_count_string[20];
char start_time_string[20];
#ifdef HAVE_PAM
pam_handle_t *pamh = NULL;
@@ -196,14 +186,6 @@ static void child_process(char *exec, char **argv, char *svcname,
setsid();
if (svcname) {
start_time = time(NULL);
from_time_t(start_time_string, start_time);
rc_service_value_set(svcname, "start_time", start_time_string);
sprintf(start_count_string, "%i", start_count);
rc_service_value_set(svcname, "start_count", start_count_string);
}
if (nicelevel) {
if (setpriority(PRIO_PROCESS, getpid(), nicelevel) == -1)
eerrorx("%s: setpriority %d: %s", applet, nicelevel,
@@ -244,7 +226,6 @@ sprintf(start_count_string, "%i", start_count);
/* Close any fd's to the passwd database */
endpwent();
/* remove the controlling tty */
#ifdef TIOCNOTTY
ioctl(tty_fd, TIOCNOTTY, 0);
close(tty_fd);
@@ -340,7 +321,7 @@ sprintf(start_count_string, "%i", start_count);
dup2(stderr_fd, STDERR_FILENO);
for (i = getdtablesize() - 1; i >= 3; --i)
fcntl(i, F_SETFD, FD_CLOEXEC);
close(i);
*cmdline = '\0';
c = argv;
@@ -442,14 +423,7 @@ int main(int argc, char **argv)
char *p;
char *token;
int i;
int n;
char exec_file[PATH_MAX];
int respawn_count = 0;
int respawn_delay = 0;
int respawn_max = 10;
int respawn_period = 5;
time_t respawn_now= 0;
time_t first_spawn= 0;
struct passwd *pw;
struct group *gr;
FILE *fp;
@@ -486,12 +460,6 @@ int main(int argc, char **argv)
while ((opt = getopt_long(argc, argv, getoptstring, longopts,
(int *) 0)) != -1)
switch (opt) {
case 'D': /* --respawn-delay time */
n = sscanf(optarg, "%d", &respawn_delay);
if (n != 1 || respawn_delay < 1)
eerrorx("Invalid respawn-delay value '%s'", optarg);
break;
case 'I': /* --ionice */
if (sscanf(optarg, "%d:%d", &ionicec, &ioniced) == 0)
eerrorx("%s: invalid ionice `%s'",
@@ -513,12 +481,6 @@ int main(int argc, char **argv)
applet, optarg);
break;
case 'P': /* --respawn-period time */
n = sscanf(optarg, "%d", &respawn_period);
if (n != 1 || respawn_delay < 1)
eerrorx("Invalid respawn-delay value '%s'", optarg);
break;
case 'S': /* --start */
start = true;
break;
@@ -548,12 +510,6 @@ int main(int argc, char **argv)
applet, optarg);
break;
case 'm': /* --respawn-max count */
n = sscanf(optarg, "%d", &respawn_max);
if (n != 1 || respawn_max < 1)
eerrorx("Invalid respawn-max value '%s'", optarg);
break;
case 'p': /* --pidfile <pid-file> */
pidfile = optarg;
break;
@@ -624,11 +580,6 @@ int main(int argc, char **argv)
if (start) {
if (!exec)
eerrorx("%s: nothing to start", applet);
if (respawn_delay * respawn_max > respawn_period) {
ewarn("%s: Please increase the value of --respawn-period to more "
"than %d to avoid infinite respawning", applet,
respawn_delay * respawn_max);
}
}
/* Expand ~ */
@@ -688,12 +639,10 @@ int main(int argc, char **argv)
* result would be the same. */
if (pidfile && exists(pidfile))
unlink(pidfile);
if (svcname) {
if (svcname)
rc_service_daemon_set(svcname, exec,
(const char *const *)argv,
pidfile, false);
rc_service_mark(svcname, RC_SERVICE_STOPPED);
}
exit(EXIT_SUCCESS);
}
@@ -725,10 +674,6 @@ int main(int argc, char **argv)
if (child_pid != 0)
exit(EXIT_SUCCESS);
#ifdef TIOCNOTTY
tty_fd = open("/dev/tty", O_RDWR);
#endif
devnull_fd = open("/dev/null", O_RDWR);
child_pid = fork();
if (child_pid == -1)
eerrorx("%s: fork: %s", applet, strerror(errno));
@@ -737,22 +682,18 @@ int main(int argc, char **argv)
/* this is the supervisor */
umask(numask);
#ifdef TIOCNOTTY
tty_fd = open("/dev/tty", O_RDWR);
#endif
devnull_fd = open("/dev/null", O_RDWR);
fp = fopen(pidfile, "w");
if (! fp)
eerrorx("%s: fopen `%s': %s", applet, pidfile, strerror(errno));
fprintf(fp, "%d\n", getpid());
fclose(fp);
if (svcname)
rc_service_daemon_set(svcname, exec,
(const char * const *) argv, pidfile, true);
/* remove the controlling tty */
#ifdef TIOCNOTTY
ioctl(tty_fd, TIOCNOTTY, 0);
close(tty_fd);
#endif
/*
* Supervisor main loop
*/
@@ -763,23 +704,6 @@ int main(int argc, char **argv)
syslog(LOG_INFO, "stopping %s, pid %d", exec, child_pid);
kill(child_pid, SIGTERM);
} else {
sleep(respawn_delay);
if (respawn_max > 0 && respawn_period > 0) {
respawn_now = time(NULL);
if (first_spawn == 0)
first_spawn = respawn_now;
if (respawn_now - first_spawn > respawn_period) {
respawn_count = 0;
first_spawn = 0;
} else
respawn_count++;
if (respawn_count >= respawn_max) {
syslog(LOG_INFO, "respawned \"%s\" too many times, "
"exiting", exec);
exiting = true;
continue;
}
}
if (WIFEXITED(i))
syslog(LOG_INFO, "%s, pid %d, exited with return code %d",
exec, child_pid, WEXITSTATUS(i));
@@ -790,19 +714,15 @@ int main(int argc, char **argv)
if (child_pid == -1)
eerrorx("%s: fork: %s", applet, strerror(errno));
if (child_pid == 0)
child_process(exec, argv, svcname, respawn_count);
child_process(exec, argv);
}
}
if (pidfile && exists(pidfile))
unlink(pidfile);
if (svcname) {
if (svcname)
rc_service_daemon_set(svcname, exec,
(const char *const *)argv,
pidfile, false);
rc_service_mark(svcname, RC_SERVICE_STOPPED);
}
(const char * const *) argv, pidfile, true);
exit(EXIT_SUCCESS);
} else if (child_pid == 0)
child_process(exec, argv, svcname, respawn_count);
child_process(exec, argv);
}