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
71 changed files with 243 additions and 1714 deletions

673
ChangeLog
View File

@@ -1,496 +1,10 @@
commit fe5567bb04b3bacfb473d707e3eb936571c06661
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
fix argument parsing for the sysvinit shutdown wrapper
This fixes #140.
commit 88e995482855356b79dc670420d31642162aaddb
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
scripts/shutdown: fix arguments to be sysvinit shutdown compatible
This fixes #140.
commit a4b9c972828089dccea16aa92371ccda02717fab
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Fix link to shutdown for MKSYSVINIT=yes
commit d47288d838a45b89abf944f7ddf969372b54a8e1
Author: udeved <artoo@manjaro.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
scripts/Makefile: make symlinks absolute instead of relative
This closes #142.
commit 1cf0c98514c6b08dd56c363e89007e791dbc0589
Author: udeved <artoo@manjaro.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
scripts/Makefile: respect SBINDIR with MKSYSVINIT
This is for #142.
commit 0cded681e8759f05a22a60095353bf8b2196906f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.27.2
commit 03e61ccd30122cb2be169335cb02c412ea56625f
Author: Jory A. Pratt <anarchy@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
kill_all: include limits.h for PATH_MAX
commit 7067f7670e96363530ce362974e1f1e31f66ef6e
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
fix compile issue for musl
commit 3c198185b25d1cb4528461f34a8f8b552f23331c
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.27.1
commit e84366fd232a41c3ba79ed351e93c74cef8d7c8d
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Update ChangeLog
commit caacedc0a82285fb2d25c6d3473f154044c7ad66
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
man: update openrc-shutdown man page
Add the new wtmp options and fix some cross references.
commit 84d140a1f6abf95a4170d13527152d3ab14e6613
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
scripts/shutdown: pass --single to openrc-shutdown
Sysvinit shutdown has a default of single user mode, but openrc-shutdown
makes you choose a default action. Because of this, the shutdown wrapper
needs to pass --single to openrc-shutdown.
commit ee886c44824b1dd892eaff2c6da666286e61bc73
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-shutdown: add --single option and clean up option processing
commit 1801561c2d36c330df7fd02c7508f503a61ff5ba
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init.d/bootmisc: use openrc-shutdown instead of halt to write halt record
This fixes #139 and fixes #128.
and fixes #124.
commit 7689106aa10f7852b707b4c21ec080ccb2767280
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
add support for writing reboot and shutdown records to wtmp
commit 1564e155b726308200ecd5df315c002bd8b16952
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-init: add optional sysvinit compatibility
commit 44bac3c3798f7eb9186c3ea8774552aa191bfae7
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
Change killprocs to use kill_all instead of killall5
X-Gentoo-Bug:376977
X-Gentoo-Bug-URL:https://bugs.gentoo.org/show_bug.cgi?id=376977
commit 0ddee9b7d2b8dea810e252ca6a95c457876df120
Author: Sergei Trofimovich <slyfox@gentoo.org>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-init: fix buffer overflow in init.ctl
How to reproduce 1-byte overflow:
```
$ FEATURES=-test CFLAGS="-fsanitize=address -O0 -ggdb3" emerge -1 openrc
=================================================================
==1==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7fff0efd8710
at pc 0x000000402076 bp 0x7fff0efd7d50 sp 0x7fff0efd7d40
WRITE of size 1 at 0x7fff0efd8710 thread T0
#0 0x402075 (/sbin/openrc-init+0x402075)
#1 0x3cf6e2070f in __libc_start_main (/lib64/libc.so.6+0x3cf6e2070f)
#2 0x4013b8 (/sbin/openrc-init+0x4013b8)
Address 0x7fff0efd8710 is located in stack of thread T0 at offset 2432 in frame
#0 0x401cfb (/sbin/openrc-init+0x401cfb)
This frame has 3 object(s):
[32, 160) 'signals'
[192, 344) 'sa'
[384, 2432) 'buf' <== Memory access at offset 2432 overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism or swapcontext
(longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow ??:0 ??
```
The problem here is in the code handling reads from 'init.ctl':
```
int main(int argc, char **argv) {
...
char buf[2048];
for (;;) {
/* This will block until a command is sent down the pipe... */
fifo = fopen(RC_INIT_FIFO, "r");
count = fread(buf, 1, 2048, fifo);
buf[count] = 0;
...
}
```
`buf[count] = 0;` writes outside the buffer when `fread()` returns non-truncated read.
This fixes #138.
commit 688566c535111a141f77caf88db12a4338544f7b
Author: Sergei Trofimovich <slyfox@inbox.ru>
Commit: Doug Freed <dwfreed@mtu.edu>
mk/cc.mk: make implicit function declarations fatal (#136)
Avoids issues with missing prototypes causing truncation of pointers.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
commit 7185e242ffaa8cd1b672fe4726502a196fd779c2
Author: Sergei Trofimovich <slyfox@inbox.ru>
Commit: Doug Freed <dwfreed@mtu.edu>
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 ec27299f4b88daa80261298fafea76ae634744d9
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
typo fix
X-Gentoo-Bug: 618888
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=618888
commit 1ece16bfcd0ab71d2f9fe17a75ee6184e0fa4828
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-shutdown: add dry-run option
commit 0cfd0dd9ef580ed9dc563ccc164d70efe8f299db
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
openrc-shutdown: move to single user mode by default
To be more compatible with sysvinit, move to single user mode if no
options are specified on the command line.
commit a77ee2e94191ba1a286b8a6835f76556481566ba
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
init: add ability to switch to single user mode
commit 49b8a573a195f4b2cee992cd10678694da0a6f4f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
add kill_all helper
This is similar to the sysvinit killall5 utility. It should only be used
in service scripts, so it will not be installed in the path.
This closes #129.
commit a2055af90054f5125cc07d4851b1dc9d16815e7c
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 cbf96967f1b6dc72ae16203dfbbb844bd08e8b6b
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 f1013037b47cdd6344f1b3ed92b7f84d7fcca01f
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
version 0.27
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>
@@ -502,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>
@@ -514,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>
@@ -1632,3 +1146,180 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
X-Gentoo-Bug:583634
X-Gentoo-Bug-URL:https://bugs.gentoo.org/show_bug.cgi?id=583634
commit b2c92b88cc6ce6d81444667efbc6d44542db1788
Author: William Hubbs <w.d.hubbs@gmail.com>
Commit: William Hubbs <w.d.hubbs@gmail.com>
fstabinfo/mountinfo: ensure /etc/fstab exists before calling setmntent
This is based on a patch by A. Wilcox <awilfox.gentoo@foxkit.us>.
X-Gentoo-Bug: 478226
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=478226
X-Gentoo-Bug: 478226
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=478226
commit 1b32af17225a4b18ced7f4326727cbe8265e7fd2
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.27.2
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

@@ -28,7 +28,6 @@ MKPREFIX=yes
MKPKGCONFIG=no
MKSELINUX=yes
MKSTATICLIBS=no
MKSYSVINIT=yes
MKTERMCAP=ncurses
MKTERMCAP=termcap
PKG_PREFIX=/usr/pkg

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

@@ -2,7 +2,7 @@
#baud=""
# set the terminal type
#term_type="linux"
#termtype="linux"
# extra options to pass to agetty for this port
#agetty_options=""

View File

@@ -1,6 +1,3 @@
# If you wish to pass any options to kill_all during shutdown,
# If you wish to pass any options to killall5 during shutdown,
# you should do so here.
#
# The setting is called killall5_opts because the options here are meant
# to be identical to those you could pass to killall5.
killall5_opts=""

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

@@ -14,12 +14,11 @@ supervisor=supervise-daemon
port="${RC_SVCNAME#*.}"
term_type="${term_type:-linux}"
command=/sbin/agetty
command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
command_args_foreground="${agetty_options} ${port} ${baud} ${termtype}"
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
@@ -241,7 +240,7 @@ stop()
{
# Write a halt record if we're shutting down
if [ "$RC_RUNLEVEL" = shutdown ]; then
[ "$RC_UNAME" = Linux ] && openrc-shutdown -w
[ "$RC_UNAME" = Linux ] && halt -w
if [ "$RC_SYS" = OPENVZ ]; then
yesno $RC_REBOOT && printf "" >/reboot
fi

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

@@ -19,9 +19,9 @@ depend()
start()
{
ebegin "Terminating remaining processes"
kill_all 15 ${killall5_opts}
killall5 -15 ${killall5_opts}
eend 0
ebegin "Killing remaining processes"
kill_all 9 ${killall5_opts}
killall5 -9 ${killall5_opts}
eend 0
}

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,62 +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 May 22, 2017
.Dt openrc-shutdown 8 SMM
.Os OpenRC
.Sh NAME
.Nm openrc-shutdown
.Nd bring the system down
.Sh SYNOPSIS
.Nm
.Op Fl d , -no-write
.Op Fl D , -dry-run
.Op Fl H , -halt
.Op Fl k , -kexec
.Op Fl p , -poweroff
.Op Fl R , -reexec
.Op Fl r , -reboot
.Op Fl s , -single
.Op Fl w , -write-only
.Sh DESCRIPTION
.Nm
is the utility that communicates with
.Xr 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 d , -no-write
Do not write the wtmp boot record.
.It Fl D , -dry-run
Print the action that would be taken without executing it. This is to
allow testing.
.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
.Xr 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.
.It Fl s , -single
Stop all services, kill all processes and move to single user mode.
.It Fl w , -write-only
Stop all services, kill all processes and move to single user mode.
.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

@@ -26,8 +26,7 @@ _CCFLAGS= -Wall -Wextra -Wimplicit -Wshadow -Wformat=2 \
-Wnested-externs \
-Winline -Wwrite-strings -Wcast-align -Wcast-qual \
-Wpointer-arith \
-Wdeclaration-after-statement -Wsequence-point \
-Werror=implicit-function-declaration
-Wdeclaration-after-statement -Wsequence-point
# We should be using -Wredundant-decls, but our library hidden proto stuff
# gives loads of warnings. I don't fully understand it (the hidden proto,

4
scripts/.gitignore vendored
View File

@@ -1,5 +1 @@
halt
poweroff
rc-sstat
reboot
shutdown

View File

@@ -8,23 +8,12 @@ INSTALLAFTER = _installafter
ifeq (${OS},Linux)
SRCS+= rc-sstat.in
BIN+= rc-sstat
ifeq (${MKSYSVINIT},yes)
SRCS+= halt.in poweroff.in reboot.in shutdown.in
BIN+= halt poweroff reboot shutdown
endif
endif
_installafter:
ifeq (${OS},Linux)
${INSTALL} -d ${DESTDIR}${SBINDIR}
ln -sf ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
ifeq (${MKSYSVINIT},yes)
ln -sf ${DIR}/halt ${DESTDIR}/${SBINDIR}/halt
ln -sf ${DIR}/poweroff ${DESTDIR}/${SBINDIR}/poweroff
ln -sf ${DIR}/reboot ${DESTDIR}/${SBINDIR}/reboot
ln -sf ${DIR}/shutdown ${DESTDIR}/${SBINDIR}/shutdown
ln -sf openrc-init ${DESTDIR}/${SBINDIR}/init
endif
endif
include ${MK}/scripts.mk

View File

@@ -1,3 +0,0 @@
#!@SHELL@
exec @SBINDIR@/openrc-shutdown --halt "$@"

View File

@@ -1,3 +0,0 @@
#!@SHELL@
exec @SBINDIR@/openrc-shutdown --poweroff "$@"

View File

@@ -1,3 +0,0 @@
#!@SHELL@
exec @SBINDIR@/openrc-shutdown --reboot "$@"

View File

@@ -1,21 +0,0 @@
#!@SHELL@
poweroff_arg=
while getopts :HhPr opt; do
case "$opt" in
h|P) poweroff_arg=--poweroff ;;
H) poweroff_arg=--halt ;;
r) poweroff_arg=--reboot ;;
\?) printf "${0##*/}: invalid option ${optarg}\n" >&2
exit 1
;;
esac
done
shift $((OPTIND-1))
if [ -z "${poweroff_arg}" ]; then
poweroff_arg=--single
fi
echo @SBINDIR@/openrc-shutdown ${poweroff_arg} ${@}
exec @SBINDIR@/openrc-shutdown ${poweroff_arg} ${@}

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

@@ -1,26 +0,0 @@
/*
* rc-wtmp.h
* This is private to us and not for user consumption
*/
/*
* 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.
*/
#ifndef __RC_WTMP_H__
#define __RC_WTMP_H__
#include <utmp.h>
void log_wtmp(const char *user, const char *id, pid_t pid, int type,
const char *line);
#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"

3
src/rc/.gitignore vendored
View File

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

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+= kill_all.c openrc-init.c openrc-shutdown.c rc-wtmp.c
endif
CLEANFILES= version.h rc-selinux.o
BINDIR= ${PREFIX}/bin
@@ -42,12 +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)
RC_BINPROGS+= kill_all
SBINPROGS+= openrc-init openrc-shutdown
endif
ALL_PROGS= ${BINPROGS} ${SBINPROGS} ${RC_BINPROGS} ${RC_SBINPROGS}
CLEANFILES+= ${ALL_PROGS}
@@ -55,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
@@ -100,9 +88,6 @@ checkpath: rc-selinux.o
endif
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
kill_all: kill_all.o _usage.o
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
einfon einfo ewarnn ewarn eerrorn eerror ebegin eend ewend \
eindent eoutdent esyslog eval_ecolors ewaitfile \
veinfo vewarn vebegin veend vewend veindent veoutdent: do_e.o rc-misc.o
@@ -111,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 rc-wtmp.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}
@@ -132,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 rc-wtmp.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,251 +0,0 @@
/*
* kill_all.c
* Sends a signal to all processes on the system.
*/
/*
* 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 <dirent.h>
#include <errno.h>
#include <getopt.h>
#include <limits.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <syslog.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include "einfo.h"
#include "rc.h"
#include "rc-misc.h"
#include "_usage.h"
const char *applet = NULL;
const char *extraopts = "[signal number]";
const char *getoptstring = "do:" getoptstring_COMMON;
const struct option longopts[] = {
{ "dry-run", 0, NULL, 'd' },
{ "omit", 1, NULL, 'o' },
longopts_COMMON
};
const char * const longopts_help[] = {
"print what would be done",
"omit this pid (can be repeated)",
longopts_help_COMMON
};
const char *usagestring = NULL;
static int mount_proc(void)
{
pid_t pid;
pid_t rc;
int status;
if (exists("/proc/version"))
return 0;
pid = fork();
switch(pid) {
case -1:
syslog(LOG_ERR, "Unable to fork");
return -1;
break;
case 0:
/* attempt to mount /proc */
execl("mount", "mount", "-t", "proc", "proc", "/proc", NULL);
syslog(LOG_ERR, "Unable to execute mount");
exit(1);
break;
default:
/* wait for child process */
while ((rc = wait(&status)) != pid)
if (rc < 0 && errno == ECHILD)
break;
if (rc != pid || WEXITSTATUS(status) != 0)
syslog(LOG_ERR, "mount returned non-zero exit status");
break;
}
if (! exists("/proc/version")) {
syslog(LOG_ERR, "Could not mount /proc");
return -1;
}
return 0;
}
static bool is_user_process(pid_t pid)
{
char buf[PATH_MAX+1];
FILE *fp;
char path[PATH_MAX+1];
pid_t temp_pid;
bool user_process = true;
while (pid >0 && user_process) {
if (pid == 2) {
user_process = false;
continue;
}
snprintf(path, sizeof(path), "/proc/%d/status", pid);
fp = fopen(path, "r");
/*
* if we could not open the file, the process disappeared, which
* leaves us no way to determine for sure whether it was a user
* process or kernel thread, so we say it is a kernel thread to
* avoid accidentally killing it.
*/
if (!fp) {
user_process = false;
continue;
}
temp_pid = -1;
while (! feof(fp)) {
buf[0] = 0;
if (fgets(buf, sizeof(buf), fp))
sscanf(buf, "PPid: %d", &temp_pid);
else
break;
}
fclose(fp);
if (temp_pid == -1) {
syslog(LOG_ERR, "Unable to read pid from /proc/%d/status", pid);
user_process = false;
continue;
}
pid = temp_pid;
}
return user_process;
}
static int signal_processes(int sig, RC_STRINGLIST *omits, bool dryrun)
{
sigset_t signals;
sigset_t oldsigs;
DIR *dir;
struct dirent *d;
char buf[PATH_MAX+1];
pid_t pid;
int sendcount = 0;
kill(-1, SIGSTOP);
sigfillset(&signals);
sigemptyset(&oldsigs);
sigprocmask(SIG_SETMASK, &signals, &oldsigs);
/*
* Open the /proc directory.
* CWD must be /proc to avoid problems if / is affected by the killing
* (i.e. depends on fuse).
*/
if (chdir("/proc") == -1) {
syslog(LOG_ERR, "chdir /proc failed");
sigprocmask(SIG_SETMASK, &oldsigs, NULL);
kill(-1, SIGCONT);
return -1;
}
dir = opendir(".");
if (!dir) {
syslog(LOG_ERR, "cannot opendir(/proc)");
sigprocmask(SIG_SETMASK, &oldsigs, NULL);
kill(-1, SIGCONT);
return -1;
}
/* Walk through the directory. */
while ((d = readdir(dir)) != NULL) {
/* Is this a process? */
pid = (pid_t) atoi(d->d_name);
if (pid == 0)
continue;
/* Is this a process we have been requested to omit? */
sprintf(buf, "%d", pid);
if (rc_stringlist_find(omits, buf))
continue;
/* Is this process in our session? */
if (getsid(getpid()) == getsid(pid))
continue;
/* Is this a kernel thread? */
if (!is_user_process(pid))
continue;
if (dryrun)
einfo("Would send signal %d to process %d", sig, pid);
else if (kill(pid, sig) == 0)
sendcount++;
}
closedir(dir);
sigprocmask(SIG_SETMASK, &oldsigs, NULL);
kill(-1, SIGCONT);
return sendcount;
}
int main(int argc, char **argv)
{
char *arg = NULL;
int opt;
bool dryrun = false;
RC_STRINGLIST *omits = rc_stringlist_new();
int sig = SIGKILL;
char *here;
char *token;
/* Ensure that we are only quiet when explicitly told to be */
unsetenv("EINFO_QUIET");
applet = basename_c(argv[0]);
rc_stringlist_addu(omits, "1");
while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'd':
dryrun = true;
break;
case 'o':
here = optarg;
while ((token = strsep(&here, ",;:"))) {
if ((pid_t) atoi(token) > 0)
rc_stringlist_addu(omits, token);
else {
eerror("Invalid omit pid value %s", token);
usage(EXIT_FAILURE);
}
}
break;
case_RC_COMMON_GETOPT
}
}
if (argc > optind) {
arg = argv[optind];
sig = atoi(arg);
if (sig <= 0 || sig > 31) {
rc_stringlist_free(omits);
eerror("Invalid signal %s", arg);
usage(EXIT_FAILURE);
}
}
openlog(applet, LOG_CONS|LOG_PID, LOG_DAEMON);
if (mount_proc() != 0) {
rc_stringlist_free(omits);
eerrorx("Unable to mount /proc file system");
}
signal_processes(sig, omits, dryrun);
rc_stringlist_free(omits);
return 0;
}

View File

@@ -1,218 +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 "rc-wtmp.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);
log_wtmp("reboot", "~~", 0, RUN_LVL, "~~");
}
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 handle_single(void)
{
pid_t pid;
pid = do_openrc("single");
while (waitpid(pid, NULL, 0) != pid);
}
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, sizeof(buf) - 1, 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]);
else if (strcmp(buf, "single") == 0)
handle_single();
}
return 0;
}

View File

@@ -1,170 +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 <sys/utsname.h>
#include "einfo.h"
#include "rc.h"
#include "helpers.h"
#include "_usage.h"
#include "rc-wtmp.h"
const char *applet = NULL;
const char *extraopts = NULL;
const char *getoptstring = "dDHKpRrsw" getoptstring_COMMON;
const struct option longopts[] = {
{ "no-write", no_argument, NULL, 'd'},
{ "dry-run", no_argument, NULL, 'D'},
{ "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'},
{ "single", no_argument, NULL, 's'},
{ "write-only", no_argument, NULL, 'w'},
longopts_COMMON
};
const char * const longopts_help[] = {
"do not write wtmp record",
"print actions instead of executing them",
"halt the system",
"reboot the system using kexec",
"power off the system",
"re-execute init (use after upgrading)",
"reboot the system",
"single user mode",
"write wtmp boot record and exit",
longopts_help_COMMON
};
const char *usagestring = NULL;
const char *exclusive = "Select one of "
"--halt, --kexec, --poweroff, --reexec, --reboot, --single or --write-only";
static bool do_dryrun = false;
static bool do_halt = false;
static bool do_kexec = false;
static bool do_poweroff = false;
static bool do_reboot = false;
static bool do_reexec = false;
static bool do_single = false;
static bool do_wtmp = true;
static bool do_wtmp_only = false;
static void send_cmd(const char *cmd)
{
FILE *fifo;
size_t ignored;
if (do_dryrun) {
einfo("Would send %s to init", cmd);
return;
}
if (do_wtmp && (do_halt || do_kexec || do_reboot || do_poweroff))
log_wtmp("shutdown", "~~", 0, RUN_LVL, "~~");
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;
applet = basename_c(argv[0]);
while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'd':
do_wtmp = false;
break;
case 'D':
do_dryrun = true;
break;
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 's':
do_single = true;
cmd_count++;
break;
case 'w':
do_wtmp_only = true;
cmd_count++;
break;
case_RC_COMMON_GETOPT
}
}
if (geteuid() != 0 && ! do_dryrun)
eerrorx("%s: you must be root\n", applet);
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");
else if (do_wtmp_only)
log_wtmp("shutdown", "~~", 0, RUN_LVL, "~~");
else if (do_single)
send_cmd("single");
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

@@ -1,51 +0,0 @@
/*
* rc-wtmp.c
* This file contains routines to deal with the wtmp file.
*/
/*
* 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 <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/utsname.h>
#include "rc-wtmp.h"
void log_wtmp(const char *user, const char *id, pid_t pid, int type,
const char *line)
{
struct timeval tv;
struct utmp utmp;
struct utsname uname_buf;
memset(&utmp, 0, sizeof(utmp));
gettimeofday(&tv, NULL);
utmp.ut_tv.tv_sec = tv.tv_sec;
utmp.ut_tv.tv_usec = tv.tv_usec;
utmp.ut_pid = pid;
utmp.ut_type = type;
strncpy(utmp.ut_name, user, sizeof(utmp.ut_name));
strncpy(utmp.ut_id , id , sizeof(utmp.ut_id ));
strncpy(utmp.ut_line, line, sizeof(utmp.ut_line));
/* Put the OS version in place of the hostname */
if (uname(&uname_buf) == 0)
strncpy(utmp.ut_host, uname_buf.release, sizeof(utmp.ut_host));
updwtmp(WTMP_FILE, &utmp);
}

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);
}