Compare commits
50 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ec5d36bdd | ||
|
|
a097933eda | ||
|
|
a6f5b1bb63 | ||
|
|
e6d01471fe | ||
|
|
d4501a9f06 | ||
|
|
ec8abea460 | ||
|
|
e4ddfa38e0 | ||
|
|
21d30bc6d9 | ||
|
|
2a1ff6e49c | ||
|
|
6762cb875c | ||
|
|
6edf516a1f | ||
|
|
7e56a49e23 | ||
|
|
fa5aea80c5 | ||
|
|
0f4fa41574 | ||
|
|
5d6dd97bba | ||
|
|
37e2944272 | ||
|
|
4e0eace837 | ||
|
|
faa8318b3b | ||
|
|
08da36149c | ||
|
|
56870d0db1 | ||
|
|
4d47ce440c | ||
|
|
958f57d895 | ||
|
|
04886efd85 | ||
|
|
d980798d64 | ||
|
|
414a9aae6c | ||
|
|
a7f475ca04 | ||
|
|
3c53680018 | ||
|
|
f0ad647303 | ||
|
|
b35e03b6b1 | ||
|
|
2b1392af2f | ||
|
|
a3d0e293ee | ||
|
|
0200002b8c | ||
|
|
f4e2142089 | ||
|
|
49a90f27a8 | ||
|
|
2ae60ca041 | ||
|
|
6b475ab269 | ||
|
|
b302b0c094 | ||
|
|
40aa69cf3a | ||
|
|
5346fbf2c9 | ||
|
|
92e6bdee12 | ||
|
|
71f275b2aa | ||
|
|
6dc0d0af33 | ||
|
|
59a9e53378 | ||
|
|
122768d339 | ||
|
|
fa3c60c0d8 | ||
|
|
61905bfcf5 | ||
|
|
3e68013631 | ||
|
|
b46123f2e1 | ||
|
|
109869641f | ||
|
|
e8a2305de0 |
971
ChangeLog
971
ChangeLog
@@ -1,3 +1,388 @@
|
|||||||
|
commit a097933edab9d7221df1831e098415d604437c98
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
sh/start-stop-daemon.sh: fix processing of the logger arguments
|
||||||
|
|
||||||
|
commit a6f5b1bb63070c24145df72040fa7b465948003c
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Update ChangeLog
|
||||||
|
|
||||||
|
commit e6d01471fe2a8eb8a15bb906d7c91c11805d1bef
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
start-stop-daemon: add ability to log stdout or stderr to processes
|
||||||
|
|
||||||
|
commit d4501a9f06c807f87be04f128e535a74b370fdb4
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
fix a typo
|
||||||
|
|
||||||
|
commit ec8abea4605395a2a59b26906ce4677a578e3c60
|
||||||
|
Author: Mike Gilbert <floppym@gentoo.org>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add helper to spawn process with stdin connected to a pipe
|
||||||
|
|
||||||
|
commit e4ddfa38e0e0318abf442b7aa07e0d8206191dd7
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
user-guide.md: small cleanups
|
||||||
|
|
||||||
|
commit 21d30bc6d9caca31d007631717a480a552b89701
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
service-script-guide.md: small cleanups
|
||||||
|
|
||||||
|
commit 2a1ff6e49c6603bb81eec3cafe2c587fa734289f
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
version 0.37
|
||||||
|
|
||||||
|
commit 6762cb875c9c039b79dcc447b9d0eb65356a7708
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Update ChangeLog
|
||||||
|
|
||||||
|
commit 6edf516a1fe0ad4f4e8738f9fdd1bf0bc7718361
|
||||||
|
Author: Austin English <austinenglish@gmail.com>
|
||||||
|
Commit: Doug Freed <dwfreed@mtu.edu>
|
||||||
|
|
||||||
|
sh/supervise-daemon.sh: use start_stop_daemon_args if supervise_daemon_args is undefined
|
||||||
|
|
||||||
|
commit 7e56a49e23c810673b83e48eb9ca36229bb4016e
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Logger: only log printable characters and newlines
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 651412
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=651412
|
||||||
|
|
||||||
|
commit fa5aea80c50fb724d2c98a6542307adbafd0e62d
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
openrc-run.sh: move crashed test outside started test
|
||||||
|
|
||||||
|
This is handled inside librc, so we don't need the nesting in this
|
||||||
|
script.
|
||||||
|
|
||||||
|
commit 0f4fa41574a4ebf8117493e5411f8ab522010467
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add mark_service_crashed binary
|
||||||
|
|
||||||
|
commit 5d6dd97bba3559b57fb1c1de35e644c6dbd6baa7
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
rc-misc: add the crashed state
|
||||||
|
|
||||||
|
commit 37e29442721af0dc3846e87ef2b85a474af3cf2b
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
librc: Add check for crashed state
|
||||||
|
|
||||||
|
In rc_service_state,, call rc_service_daemons_crashed to check for
|
||||||
|
a crashed daemon if the service is started.
|
||||||
|
|
||||||
|
commit 4e0eace837287845504c9895429dc9f64872d075
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
librc: Add crashed state
|
||||||
|
|
||||||
|
commit faa8318b3ba278544413a39d4a5ae4457711793f
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Remove the _rc_can_find_pids function
|
||||||
|
|
||||||
|
This test to find if we could see pid 1 was being used inconsistently in
|
||||||
|
rc-status and mark_service_crashed to decide whether we could test to
|
||||||
|
see if the daemon for the service was crashed, and it was not part of
|
||||||
|
the librc library.
|
||||||
|
|
||||||
|
I am removing it from the executables because of inconsistent usage. I
|
||||||
|
will add it to the library if it is needed there.
|
||||||
|
|
||||||
|
commit 08da36149c0b41c64a09369c3eef5e2f5a6fa39c
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
rc-service: add --ifstarted and --ifstopped options
|
||||||
|
|
||||||
|
commit 56870d0db18209396f8276bdc05d413fe4dd7a88
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Man: rc-service man page cleanups
|
||||||
|
|
||||||
|
commit 4d47ce440c3e8f193cff82a77e6691ee6e7fac33
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
rc-service: add -d/--debug and -D/--nodeps options
|
||||||
|
|
||||||
|
commit 958f57d895b6573b39e62097e5e9881f16174715
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
openrc-run: respect the RC_NODEPS environment variable
|
||||||
|
|
||||||
|
commit 04886efd85328988657c34440da9ba6aa2841cfd
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add RC_DEBUG and RC_NODEPS to environment whitelist
|
||||||
|
|
||||||
|
These are needed so rc-service can pass debug and nodeps options to
|
||||||
|
openrc-run.
|
||||||
|
|
||||||
|
commit d980798d6444bbfc508796a233e962bf4dd61275
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
openrc-run: respect the IN_DRYRUN environment variable
|
||||||
|
|
||||||
|
This allows rc-service to pass the tryrun option to openrc-run.
|
||||||
|
|
||||||
|
This is for #225.
|
||||||
|
|
||||||
|
commit 414a9aae6ce066d2a6ad42e7e24d1c12a7b46409
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
rc-misc.c: Add IN_DRYRUN to environment whitelist
|
||||||
|
|
||||||
|
This allows rc-service to pass the dryrun option to openrc-run.
|
||||||
|
|
||||||
|
This is for #225.
|
||||||
|
|
||||||
|
commit a7f475ca04856ef8232364c5b0c3191566b0696c
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
rc-service: add a --dry-run option
|
||||||
|
|
||||||
|
This is for #225.
|
||||||
|
|
||||||
|
commit 3c53680018c1799d0d804e241a9fa4d3b9423896
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
build: standardize installation modes
|
||||||
|
|
||||||
|
Gentoo was changing some of our installation modes from 0444 to 0644.
|
||||||
|
There isn't a reason to install things 0444, so we are switching these
|
||||||
|
to 0644 so the Gentoo ebuild doesn't need this extra step.
|
||||||
|
|
||||||
|
commit f0ad647303daca528cb9b75f9a07d422318635c2
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Revert "savecache: stop saving the dependency tree"
|
||||||
|
|
||||||
|
It is safe to save the deptree, but we also need to regenerate it at
|
||||||
|
boot time.
|
||||||
|
|
||||||
|
commit b35e03b6b1acc841ac33f601dd39c1152523621e
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Revert "Logger: only log printable characters and newlines"
|
||||||
|
|
||||||
|
This reverts commit 2b1392af2fe9e5dfc8eda2f19d896efdc41840bf.
|
||||||
|
This seems to create issues shutting down, so I need to look into it
|
||||||
|
further.
|
||||||
|
|
||||||
|
commit 2b1392af2fe9e5dfc8eda2f19d896efdc41840bf
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Logger: only log printable characters and newlines
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 651412
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=651412
|
||||||
|
|
||||||
|
commit a3d0e293eebcb92564c473e61ca42724844fb279
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Remove localmount from dependencies for linux-only services
|
||||||
|
|
||||||
|
This removes localmount from the dependencies of the consolefont,
|
||||||
|
keymaps, numlock and procfs services.
|
||||||
|
|
||||||
|
These services are Linux only and the default modern linux system has /
|
||||||
|
and /usr on the same file system.
|
||||||
|
|
||||||
|
This also fixes the following issue.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 651998
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=651998
|
||||||
|
|
||||||
|
commit 0200002b8cbd061ac79b6aed4024220cd0386d2c
|
||||||
|
Author: Andrey Utkin <andrey_utkin@gentoo.org>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
start-stop-daemon: don't fail stopping if pidfile is gone
|
||||||
|
|
||||||
|
If pidfile does not exist when we are stopping the daemon, assume it is
|
||||||
|
already stopped, and report success.
|
||||||
|
|
||||||
|
hostapd is an example of a daemon which removes its pidfile when it is
|
||||||
|
exiting. If this daemon terminates prematurely, that is, without s-s-d
|
||||||
|
involvement, then openrc fails to restart it, because s-s-d "stop"
|
||||||
|
command fails when pidfile is missing.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 646274
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/646274
|
||||||
|
|
||||||
|
commit f4e2142089487b7f5c99da949d7bf8d038724df7
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add _POSIX_C_SOURCE definition to Linux build
|
||||||
|
|
||||||
|
We need this to allow builds on uclibc-ng based systems.
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 650908
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=650908
|
||||||
|
|
||||||
|
commit 49a90f27a848ba02a363fc0c844d6284728bdd73
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
typo fix
|
||||||
|
|
||||||
|
commit 2ae60ca0419d60c86904a8e15e71e902549e18d4
|
||||||
|
Author: Scall <Scall@users.noreply.github.com>
|
||||||
|
Commit: Doug Freed <dwfreed@mtu.edu>
|
||||||
|
|
||||||
|
rc-update: fix typo
|
||||||
|
|
||||||
|
commit 6b475ab26992f1dd8815700828df46abc4b71d27
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
init.d/modules: add code from modules-load service
|
||||||
|
|
||||||
|
There is no reason for these to be separate services. I did add a
|
||||||
|
provide so that we don't break backward compatibility.
|
||||||
|
|
||||||
|
commit b302b0c094c2c99b810aec9c8877adcd1effabac
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
net-online: always start after net
|
||||||
|
|
||||||
|
X-Gentoo-Bug: 650600
|
||||||
|
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=650600
|
||||||
|
|
||||||
|
commit 40aa69cf3a99fa080375a702631da4d2311ebf3e
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
agetty.in: allow status to be displayed
|
||||||
|
|
||||||
|
commit 5346fbf2c90b33b3abc01588e4727d4402f8db62
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
supervise-daemon: fix off-by-one error
|
||||||
|
|
||||||
|
commit 92e6bdee12fa9d87a2535446ceccee261305e87c
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Use _BSD_SOURCE on FreeBSD
|
||||||
|
|
||||||
|
commit 71f275b2aa04d9a9323a49d1421796c4d50b1436
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
typo fix
|
||||||
|
|
||||||
|
commit 6dc0d0af333592203fabd4746279bb15d2801c0b
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Remove _XOPEN_SOURCE macros from builds
|
||||||
|
|
||||||
|
commit 59a9e53378891be7b12ed304ccb609e27da70751
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Add _POSIX_C_SOURCE macro to FreeBSD build
|
||||||
|
|
||||||
|
commit 122768d339175c925a1a228792f4725b7c802f46
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
man: document default retry specification for supervise-daemon
|
||||||
|
|
||||||
|
commit fa3c60c0d8fd2267be5c1b156530b136a2503088
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
man: document default retry sppecification for start-stop-daemon
|
||||||
|
|
||||||
|
commit 61905bfcf560219939c902dbb8fe9bc5088a42cf
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Clean up cgroups v2 code
|
||||||
|
|
||||||
|
Remove the IFS manipulation and simplify the loop that processes the
|
||||||
|
settings.
|
||||||
|
|
||||||
|
commit 3e68013631765e00eddf118bc24e38254e7f6d64
|
||||||
|
Author: Scall <Scall@users.noreply.github.com>
|
||||||
|
Commit: Doug Freed <dwfreed@mtu.edu>
|
||||||
|
|
||||||
|
init.d: swap should always be started after root
|
||||||
|
|
||||||
|
Otherwise if a swap file is being used, and swap is started before
|
||||||
|
root, swapon may fail because of a read-only filesystem.
|
||||||
|
|
||||||
|
commit b46123f2e19a5eb8dc02b898e8c20a2ccc211615
|
||||||
|
Author: Chris Cromer <cromerc@users.noreply.github.com>
|
||||||
|
Commit: Doug Freed <dwfreed@mtu.edu>
|
||||||
|
|
||||||
|
openrc-run: fix memory size (#213)
|
||||||
|
|
||||||
|
Fixes #212
|
||||||
|
|
||||||
|
commit 109869641f7b58d07819f6b65d7b085abf75083b
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
fix build on FreeBSD
|
||||||
|
|
||||||
|
commit e8a2305de0320dc98bf187bb97f936e2dc4a4554
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
version 0.36
|
||||||
|
|
||||||
|
commit f62975a1f8c4d5d4abdf78d8cad5509216138f03
|
||||||
|
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
|
|
||||||
|
Update ChangeLog
|
||||||
|
|
||||||
commit 5bb6f9aa318a6d0507971b74d88c3fd2803bae4b
|
commit 5bb6f9aa318a6d0507971b74d88c3fd2803bae4b
|
||||||
Author: Jason Zaman <jason@perfinion.com>
|
Author: Jason Zaman <jason@perfinion.com>
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||||
@@ -1258,589 +1643,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|||||||
man: fix missing .Pp warnings
|
man: fix missing .Pp warnings
|
||||||
|
|
||||||
This fixes #151.
|
This fixes #151.
|
||||||
|
|
||||||
commit f87a9eec3d23ea01578500972f1df993d5d24fba
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
init.d/sysfs: mount efivars read only
|
|
||||||
|
|
||||||
This fixes #134.
|
|
||||||
|
|
||||||
commit 1e837d596e483ceb5cec177a6c7faff24a42384b
|
|
||||||
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 dcc686e42b406d63d52ef75de9a326f67d0a06c9
|
|
||||||
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 2f81c100afdf45ebf787dfc5d3261aa6055640e4
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
Fix link to shutdown for MKSYSVINIT=yes
|
|
||||||
|
|
||||||
commit a511a48d77b1dcb8a3fb0dd1abddb750a152869b
|
|
||||||
Author: Nuno Silva <nuno.m.ribeiro.silva@tecnico.ulisboa.pt>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
init.d/hostname: fix default parameter syntax
|
|
||||||
|
|
||||||
The syntax for expanding a variable with a default value is
|
|
||||||
${parameter:-word}
|
|
||||||
not
|
|
||||||
${parameter-word}
|
|
||||||
although the latter still works for a reason I could not explain.
|
|
||||||
|
|
||||||
This fixes #143.
|
|
||||||
|
|
||||||
commit 1e5322e5c55ec744a2cdcc3342ef6547eab7c46f
|
|
||||||
Author: Nuno Silva <nuno.m.ribeiro.silva@tecnico.ulisboa.pt>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
init.d/hostname: fix indentation
|
|
||||||
|
|
||||||
This is for #143.
|
|
||||||
|
|
||||||
commit 199a210d2fbc524c9c400a06f832dabffd7ed1b3
|
|
||||||
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 5b7667af32effddf867a5d021c66d43f0645d374
|
|
||||||
Author: udeved <artoo@manjaro.org>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
scripts/Makefile: respect SBINDIR with MKSYSVINIT
|
|
||||||
|
|
||||||
This is for #142.
|
|
||||||
|
|
||||||
commit 11243f85b67e5f450ddf50346ffd4a1b2c6faeb5
|
|
||||||
Author: Jory A. Pratt <anarchy@gentoo.org>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
kill_all: include limits.h for PATH_MAX
|
|
||||||
|
|
||||||
commit 3c40826d3466cdda1a46abcd5c86b661b8185f46
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
version 0.28
|
|
||||||
|
|
||||||
commit 560d874d2fee63bf7ca11f17cf9933021b639a1d
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
fix compile issue for musl
|
|
||||||
|
|
||||||
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
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
update news file
|
|
||||||
|
|
||||||
commit c333707cba356f4cacfd58a6fcc78f7c073dddcd
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
commit 5f5b1f7cbefd0bc14352e86a9c33260266f98d9b
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
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.
|
|
||||||
|
|
||||||
commit cfdf56475e600f79a433cd721cadf39114c6c58d
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
version 0.25
|
|
||||||
|
|
||||||
commit fde3902d069dfdce9c59555186a5541d6d99c8aa
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
update ChangeLog
|
|
||||||
|
|
||||||
commit d7bbb0f5830e1ec4df1ec52714d70ac6b0a81878
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
add agetty service
|
|
||||||
|
|
||||||
The agetty service is an alternate way to manage gettys with agetty
|
|
||||||
under Linux which is separate from an external init system.
|
|
||||||
|
|
||||||
commit 21ca2b746cce67e2b3578fb7015c9d4c243e3a0c
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
init.d/sysfs: drop modules completely from the dependencies
|
|
||||||
|
|
||||||
This is for #112.
|
|
||||||
|
|
||||||
commit 6a79aef0159d7035778fd852b26ecfac903cd029
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
init.d/sysfs: Do not load efivarfs module
|
|
||||||
|
|
||||||
My understanding is that the kernel can autoload this module. If it
|
|
||||||
doesn't, the module should be built in or loaded from an initramfs.
|
|
||||||
|
|
||||||
This fixes https://github.com/openrc/openrc/pulls/112.
|
|
||||||
|
|
||||||
commit 4a269674b765e5267f024fa55c8644480a7304ea
|
|
||||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
|
||||||
|
|
||||||
make sure netmount and localmount start after root
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
NAME= openrc
|
NAME= openrc
|
||||||
VERSION= 0.35
|
VERSION= 0.37
|
||||||
PKG= ${NAME}-${VERSION}
|
PKG= ${NAME}-${VERSION}
|
||||||
|
|||||||
23
NEWS.md
23
NEWS.md
@@ -4,6 +4,29 @@ OpenRC NEWS
|
|||||||
This file will contain a list of notable changes for each release. Note
|
This file will contain a list of notable changes for each release. Note
|
||||||
the information in this file is in reverse order.
|
the information in this file is in reverse order.
|
||||||
|
|
||||||
|
## OpenRC 0.37
|
||||||
|
|
||||||
|
start-stop-daemon now supports logging stdout and stderr of daemons to
|
||||||
|
processes instead of files. These processes are defined by the
|
||||||
|
output_logger and error_logger variables in standard service scripts, or
|
||||||
|
by the -3/--output-logger or -4/--error-logger switches if you use
|
||||||
|
start-stop-daemon directly. For more information on this, see the
|
||||||
|
start-stop-daemon man page.
|
||||||
|
|
||||||
|
## OpenRC 0.36
|
||||||
|
|
||||||
|
In this release, the modules-load service has been combined into the
|
||||||
|
modules service since there is no reason I know of to keep them
|
||||||
|
separate. However, modules also provides modules-load in case you were
|
||||||
|
using modules-load in your dependencies.
|
||||||
|
|
||||||
|
The consolefont, keymaps, numlock and procfs service scripts no longer
|
||||||
|
have a dependency on localmount.
|
||||||
|
If you are a linux user and are still separaating / from /usr,
|
||||||
|
you will need to add the following line to the appropriate conf.d files:
|
||||||
|
|
||||||
|
rc_need="localmount"
|
||||||
|
|
||||||
## OpenRC 0.35
|
## OpenRC 0.35
|
||||||
|
|
||||||
In this version, the cgroups mounting logic has been moved from the
|
In this version, the cgroups mounting logic has been moved from the
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ SRCS-FreeBSD= hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \
|
|||||||
rc-enabled.in rpcbind.in savecore.in syslogd.in
|
rc-enabled.in rpcbind.in savecore.in syslogd.in
|
||||||
# These are FreeBSD specific
|
# These are FreeBSD specific
|
||||||
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
|
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
|
||||||
modules-load.in mixer.in nscd.in powerd.in syscons.in
|
mixer.in nscd.in powerd.in syscons.in
|
||||||
|
|
||||||
SRCS-Linux= agetty.in binfmt.in devfs.in cgroups.in dmesg.in hwclock.in \
|
SRCS-Linux= agetty.in binfmt.in devfs.in cgroups.in dmesg.in hwclock.in \
|
||||||
consolefont.in keymaps.in killprocs.in modules.in modules-load.in \
|
consolefont.in keymaps.in killprocs.in modules.in \
|
||||||
mount-ro.in mtab.in numlock.in procfs.in net-online.in sysfs.in \
|
mount-ro.in mtab.in numlock.in procfs.in net-online.in sysfs.in \
|
||||||
termencoding.in
|
termencoding.in
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ term_type="${term_type:-linux}"
|
|||||||
command=/sbin/agetty
|
command=/sbin/agetty
|
||||||
command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
|
command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
|
||||||
pidfile="/run/${RC_SVCNAME}.pid"
|
pidfile="/run/${RC_SVCNAME}.pid"
|
||||||
export EINFO_QUIET="${quiet:-yes}"
|
|
||||||
|
|
||||||
depend() {
|
depend() {
|
||||||
after local
|
after local
|
||||||
@@ -29,5 +28,12 @@ start_pre() {
|
|||||||
eerror "symbolic links to it for the ports you want to start"
|
eerror "symbolic links to it for the ports you want to start"
|
||||||
eerror "agetty on and add those to the appropriate runlevels."
|
eerror "agetty on and add those to the appropriate runlevels."
|
||||||
return 1
|
return 1
|
||||||
|
else
|
||||||
|
export EINFO_QUIET="${quiet:-yes}"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
stop_pre()
|
||||||
|
{
|
||||||
|
export EINFO_QUIET="${quiet:-yes}"
|
||||||
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ description="Sets a font for the consoles."
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount termencoding
|
need termencoding
|
||||||
after hotplug bootmisc modules
|
after hotplug bootmisc modules
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
|
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ description="Applies a keymap for the consoles."
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount termencoding
|
need termencoding
|
||||||
after bootmisc clock
|
after bootmisc clock
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
|
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
#!@SBINDIR@/openrc-run
|
|
||||||
# Copyright (c) 2016 The OpenRC Authors.
|
|
||||||
# See the Authors file at the top-level directory of this distribution and
|
|
||||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
|
|
||||||
#
|
|
||||||
# This file is part of OpenRC. It is subject to the license terms in
|
|
||||||
# the LICENSE file found in the top-level directory of this
|
|
||||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
|
|
||||||
# This file may not be copied, modified, propagated, or distributed
|
|
||||||
# except according to the terms contained in the LICENSE file.
|
|
||||||
|
|
||||||
description="Loads a list of modules from systemd-compatible locations."
|
|
||||||
|
|
||||||
depend()
|
|
||||||
{
|
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
|
||||||
}
|
|
||||||
|
|
||||||
find_modfiles()
|
|
||||||
{
|
|
||||||
local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
|
|
||||||
local basenames files fn x y
|
|
||||||
for x in $dirs; do
|
|
||||||
[ ! -d $x ] && continue
|
|
||||||
for y in $x/*.conf; do
|
|
||||||
[ -f $y ] && basenames="${basenames}\n${y##*/}"
|
|
||||||
done
|
|
||||||
done
|
|
||||||
basenames=$(printf "$basenames" | sort -u)
|
|
||||||
for x in $basenames; do
|
|
||||||
for y in $dirs; do
|
|
||||||
[ -r $y/$x ] &&
|
|
||||||
fn=$y/$x
|
|
||||||
done
|
|
||||||
files="$files $fn"
|
|
||||||
done
|
|
||||||
echo $files
|
|
||||||
}
|
|
||||||
|
|
||||||
load_modules()
|
|
||||||
{
|
|
||||||
local file m modules rc x
|
|
||||||
file=$1
|
|
||||||
[ -z "$file" ] && return 0
|
|
||||||
while read m x; do
|
|
||||||
case $m in
|
|
||||||
\;*) continue ;;
|
|
||||||
\#*) continue ;;
|
|
||||||
*) modules="$modules $m"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done < $file
|
|
||||||
for x in $modules; do
|
|
||||||
ebegin "Loading module $x"
|
|
||||||
case "$RC_UNAME" in
|
|
||||||
FreeBSD) kldload "$x"; rc=$? ;;
|
|
||||||
Linux) modprobe --use-blacklist -q "$x"; rc=$? ;;
|
|
||||||
*) ;;
|
|
||||||
esac
|
|
||||||
eend $rc "Failed to load $x"
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
start()
|
|
||||||
{
|
|
||||||
local x
|
|
||||||
files=$(find_modfiles)
|
|
||||||
for x in $files; do
|
|
||||||
load_modules $x
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
@@ -14,10 +14,65 @@ description="Loads a user defined list of kernel modules."
|
|||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
use isapnp
|
use isapnp
|
||||||
want modules-load
|
provide modules-load
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
find_modfiles()
|
||||||
|
{
|
||||||
|
local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
|
||||||
|
local basenames files fn x y
|
||||||
|
for x in $dirs; do
|
||||||
|
[ ! -d $x ] && continue
|
||||||
|
for y in $x/*.conf; do
|
||||||
|
[ -f $y ] && basenames="${basenames}\n${y##*/}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
basenames=$(printf "$basenames" | sort -u)
|
||||||
|
for x in $basenames; do
|
||||||
|
for y in $dirs; do
|
||||||
|
[ -r $y/$x ] &&
|
||||||
|
fn=$y/$x
|
||||||
|
done
|
||||||
|
files="$files $fn"
|
||||||
|
done
|
||||||
|
echo $files
|
||||||
|
}
|
||||||
|
|
||||||
|
load_modules()
|
||||||
|
{
|
||||||
|
local file m modules rc x
|
||||||
|
file=$1
|
||||||
|
[ -z "$file" ] && return 0
|
||||||
|
while read m x; do
|
||||||
|
case $m in
|
||||||
|
\;*) continue ;;
|
||||||
|
\#*) continue ;;
|
||||||
|
*) modules="$modules $m"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done < $file
|
||||||
|
for x in $modules; do
|
||||||
|
ebegin "Loading module $x"
|
||||||
|
case "$RC_UNAME" in
|
||||||
|
FreeBSD) kldload "$x"; rc=$? ;;
|
||||||
|
Linux) modprobe --use-blacklist -q "$x"; rc=$? ;;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
eend $rc "Failed to load $x"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
modules_load_d()
|
||||||
|
{
|
||||||
|
local x
|
||||||
|
files=$(find_modfiles)
|
||||||
|
for x in $files; do
|
||||||
|
load_modules $x
|
||||||
|
done
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
FreeBSD_modules()
|
FreeBSD_modules()
|
||||||
{
|
{
|
||||||
local cnt=0 x
|
local cnt=0 x
|
||||||
@@ -82,7 +137,10 @@ Linux_modules()
|
|||||||
start()
|
start()
|
||||||
{
|
{
|
||||||
case "$RC_UNAME" in
|
case "$RC_UNAME" in
|
||||||
FreeBSD|Linux) ${RC_UNAME}_modules ;;
|
FreeBSD|Linux)
|
||||||
|
modules_load_d
|
||||||
|
${RC_UNAME}_modules
|
||||||
|
;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ description="Delays until the network is online or a specific timeout"
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after modules
|
after modules net
|
||||||
need sysfs
|
need sysfs
|
||||||
provide network-online
|
provide network-online
|
||||||
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
|
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
|
||||||
|
|||||||
@@ -15,7 +15,6 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
need localmount
|
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ depend()
|
|||||||
after clock
|
after clock
|
||||||
use devfs
|
use devfs
|
||||||
want modules
|
want modules
|
||||||
need localmount
|
|
||||||
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ start()
|
|||||||
fi
|
fi
|
||||||
ebegin "Saving dependency cache"
|
ebegin "Saving dependency cache"
|
||||||
local rc=0 save=
|
local rc=0 save=
|
||||||
for x in shutdowntime softlevel rc.log; do
|
for x in depconfig deptree rc.log shutdowntime softlevel; do
|
||||||
[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
|
[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
|
||||||
done
|
done
|
||||||
if [ -n "$save" ]; then
|
if [ -n "$save" ]; then
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
depend()
|
depend()
|
||||||
{
|
{
|
||||||
after clock
|
after clock root
|
||||||
before localmount
|
before localmount
|
||||||
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
|
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -119,6 +119,9 @@ The amount of time, in milliseconds, s6-svc should wait for the service
|
|||||||
to go down when stopping the service. The default is 60000.
|
to go down when stopping the service. The default is 60000.
|
||||||
.It Ar start_stop_daemon_args
|
.It Ar start_stop_daemon_args
|
||||||
List of arguments passed to start-stop-daemon when starting the daemon.
|
List of arguments passed to start-stop-daemon when starting the daemon.
|
||||||
|
.It Ar supervise_daemon_args
|
||||||
|
List of arguments passed to supervise-daemon when starting the daemon.
|
||||||
|
If undefined, start_stop_daemon_args is used as a fallback.
|
||||||
.It Ar command
|
.It Ar command
|
||||||
Daemon to start or stop via
|
Daemon to start or stop via
|
||||||
.Nm start-stop-daemon
|
.Nm start-stop-daemon
|
||||||
@@ -170,6 +173,23 @@ variable is set.
|
|||||||
The same thing as
|
The same thing as
|
||||||
.Pa output_log
|
.Pa output_log
|
||||||
but for the standard error output.
|
but for the standard error output.
|
||||||
|
.It Ar output_logger
|
||||||
|
This is a process which will be used to log the standard output from the
|
||||||
|
service. If you are starting this service with
|
||||||
|
.Xr start-stop-daemon 8 ,
|
||||||
|
, you must set
|
||||||
|
.Pa command_background
|
||||||
|
to true. Keep in mind that this command must be executable as a shell
|
||||||
|
command inside the chroot if the
|
||||||
|
.Pa chroot
|
||||||
|
variable is set. Keep in mind also that this command works by accepting
|
||||||
|
the stdout of the service on stdin.
|
||||||
|
An example of a command that can be run this way is logger if you want
|
||||||
|
your service output to go to syslog.
|
||||||
|
.It Ar error_logger
|
||||||
|
The same thing as
|
||||||
|
.Pa output_logger
|
||||||
|
but for the standard error output.
|
||||||
.It Ar directory
|
.It Ar directory
|
||||||
.Xr start-stop-daemon 8
|
.Xr start-stop-daemon 8
|
||||||
and
|
and
|
||||||
@@ -594,7 +614,7 @@ rc_net_tap1_provide="!net"
|
|||||||
# It's also possible to negate keywords. This is mainly useful for prefix
|
# It's also possible to negate keywords. This is mainly useful for prefix
|
||||||
# users testing OpenRC.
|
# users testing OpenRC.
|
||||||
rc_keyword="!-prefix"
|
rc_keyword="!-prefix"
|
||||||
# This can also be used to block a script from runining in all
|
# This can also be used to block a script from running in all
|
||||||
# containers except one or two
|
# containers except one or two
|
||||||
rc_keyword="!-containers !-docker"
|
rc_keyword="!-containers !-docker"
|
||||||
.Ed
|
.Ed
|
||||||
|
|||||||
@@ -20,6 +20,14 @@
|
|||||||
.Ar service cmd
|
.Ar service cmd
|
||||||
.Op Ar ...
|
.Op Ar ...
|
||||||
.Nm
|
.Nm
|
||||||
|
.Fl d , -debug
|
||||||
|
.Ar service cmd
|
||||||
|
.Op Ar ...
|
||||||
|
.Nm
|
||||||
|
.Fl D , -nodeps
|
||||||
|
.Ar service cmd
|
||||||
|
.Op Ar ...
|
||||||
|
.Nm
|
||||||
.Op Fl i , -ifexists
|
.Op Fl i , -ifexists
|
||||||
.Ar service cmd
|
.Ar service cmd
|
||||||
.Op Ar ...
|
.Op Ar ...
|
||||||
@@ -32,9 +40,21 @@
|
|||||||
.Ar service cmd
|
.Ar service cmd
|
||||||
.Op Ar ...
|
.Op Ar ...
|
||||||
.Nm
|
.Nm
|
||||||
|
.Op Fl s , -ifstarted
|
||||||
|
.Ar service cmd
|
||||||
|
.Op Ar ...
|
||||||
|
.Nm
|
||||||
|
.Op Fl S , -ifstopped
|
||||||
|
.Ar service cmd
|
||||||
|
.Op Ar ...
|
||||||
|
.Nm
|
||||||
.Fl e , -exists
|
.Fl e , -exists
|
||||||
.Ar service
|
.Ar service
|
||||||
.Nm
|
.Nm
|
||||||
|
.Fl Z , -dry-run
|
||||||
|
.Ar service cmd
|
||||||
|
.Op Ar ...
|
||||||
|
.Nm
|
||||||
.Fl l , -list
|
.Fl l , -list
|
||||||
.Nm
|
.Nm
|
||||||
.Fl r , -resolve
|
.Fl r , -resolve
|
||||||
@@ -68,6 +88,15 @@ return 0 if it can find
|
|||||||
otherwise -1.
|
otherwise -1.
|
||||||
.Fl r , -resolve
|
.Fl r , -resolve
|
||||||
does the same and also prints the full path of the service to stdout.
|
does the same and also prints the full path of the service to stdout.
|
||||||
|
.Pp
|
||||||
|
.Fl d , -debug
|
||||||
|
sets -x when running the service script(s).
|
||||||
|
.Pp
|
||||||
|
.Fl D , -nodeps
|
||||||
|
ignores dependencies when running the service.
|
||||||
|
.Pp
|
||||||
|
.Fl Z , -dry-run
|
||||||
|
displays commands rather than executing them.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr openrc 8 ,
|
.Xr openrc 8 ,
|
||||||
.Xr stdout 3
|
.Xr stdout 3
|
||||||
|
|||||||
@@ -131,9 +131,34 @@ Modifies the scheduling priority of the daemon.
|
|||||||
.It Fl 1 , -stdout Ar logfile
|
.It Fl 1 , -stdout Ar logfile
|
||||||
Redirect the standard output of the process to logfile when started with
|
Redirect the standard output of the process to logfile when started with
|
||||||
.Fl background .
|
.Fl background .
|
||||||
Must be an absolute pathname, but relative to the path optionally given with
|
The logfile Must be an absolute pathname, but relative to the path
|
||||||
|
optionally given with
|
||||||
.Fl r , -chroot .
|
.Fl r , -chroot .
|
||||||
The logfile can also be a named pipe.
|
The logfile can also be a named pipe.
|
||||||
|
.It Fl 2 , -stderr Ar logfile
|
||||||
|
Redirect the standard error of the process to logfile when started with
|
||||||
|
.Fl background .
|
||||||
|
The logfile must be an absolute pathname, but relative to the path
|
||||||
|
optionally given with
|
||||||
|
.Fl r , -chroot .
|
||||||
|
The logfile can also be a named pipe.
|
||||||
|
.It Fl 3 , -stdout-logger Ar cmd
|
||||||
|
Run cmd as a child process redirecting the standard output to the
|
||||||
|
standard input of cmd when started with
|
||||||
|
.Fl background .
|
||||||
|
Cmd must be an absolute pathname, but relative to the path optionally given with
|
||||||
|
.Fl r , -chroot .
|
||||||
|
This process must be prepared to accept input on stdin and be able to
|
||||||
|
log it or send it to another location.
|
||||||
|
.It Fl 4 , -stderr-logger Ar cmd
|
||||||
|
Run cmd as a child process and
|
||||||
|
Redirect the standard error of the process to the standard input of cmd
|
||||||
|
when started with
|
||||||
|
.Fl background .
|
||||||
|
Cmd must be an absolute pathname, but relative to the path optionally given with
|
||||||
|
.Fl r , -chroot .
|
||||||
|
This process must be prepared to accept input on stdin and be able to
|
||||||
|
log it or send it to another location.
|
||||||
.It Fl w , -wait Ar milliseconds
|
.It Fl w , -wait Ar milliseconds
|
||||||
Wait
|
Wait
|
||||||
.Ar milliseconds
|
.Ar milliseconds
|
||||||
@@ -151,6 +176,7 @@ These options are only used for stopping daemons:
|
|||||||
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
|
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
|
||||||
The retry specification can be either a timeout in seconds or multiple
|
The retry specification can be either a timeout in seconds or multiple
|
||||||
signal/timeout pairs (like SIGTERM/5).
|
signal/timeout pairs (like SIGTERM/5).
|
||||||
|
If this option is not given, the default is SIGTERM/5.
|
||||||
.El
|
.El
|
||||||
.Sh ENVIRONMENT
|
.Sh ENVIRONMENT
|
||||||
.Va SSD_IONICELEVEL
|
.Va SSD_IONICELEVEL
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ description of --respawn-max for more information.
|
|||||||
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
|
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
|
||||||
The retry specification can be either a timeout in seconds or multiple
|
The retry specification can be either a timeout in seconds or multiple
|
||||||
signal/timeout pairs (like SIGTERM/5).
|
signal/timeout pairs (like SIGTERM/5).
|
||||||
|
If this option is not given, the default is SIGTERM/5.
|
||||||
.It Fl r , -chroot Ar path
|
.It Fl r , -chroot Ar path
|
||||||
chroot to this directory before starting the daemon. All other paths, such
|
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.
|
as the path to the daemon, chdir and pidfile, should be relative to the chroot.
|
||||||
|
|||||||
@@ -11,3 +11,5 @@
|
|||||||
# Generic definitions
|
# Generic definitions
|
||||||
|
|
||||||
include ${MK}/os-BSD.mk
|
include ${MK}/os-BSD.mk
|
||||||
|
|
||||||
|
CPPFLAGS+= -D_BSD_SOURCE
|
||||||
|
|||||||
@@ -13,6 +13,6 @@
|
|||||||
SFX= .GNU-kFreeBSD.in
|
SFX= .GNU-kFreeBSD.in
|
||||||
PKG_PREFIX?= /usr
|
PKG_PREFIX?= /usr
|
||||||
|
|
||||||
CPPFLAGS+= -D_BSD_SOURCE -D_XOPEN_SOURCE=700
|
CPPFLAGS+= -D_BSD_SOURCE
|
||||||
LIBDL= -Wl,-Bdynamic -ldl
|
LIBDL= -Wl,-Bdynamic -ldl
|
||||||
LIBKVM?=
|
LIBKVM?=
|
||||||
|
|||||||
@@ -11,5 +11,5 @@
|
|||||||
SFX= .GNU.in
|
SFX= .GNU.in
|
||||||
PKG_PREFIX?= /usr
|
PKG_PREFIX?= /usr
|
||||||
|
|
||||||
CPPFLAGS+= -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
|
CPPFLAGS+= -D_DEFAULT_SOURCE -DMAXPATHLEN=4096 -DPATH_MAX=4096
|
||||||
LIBDL= -Wl,-Bdynamic -ldl
|
LIBDL= -Wl,-Bdynamic -ldl
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
SFX= .Linux.in
|
SFX= .Linux.in
|
||||||
PKG_PREFIX?= /usr
|
PKG_PREFIX?= /usr
|
||||||
|
|
||||||
CPPFLAGS+= -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
|
CPPFLAGS+= -D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L
|
||||||
LIBDL= -Wl,-Bdynamic -ldl
|
LIBDL= -Wl,-Bdynamic -ldl
|
||||||
|
|
||||||
ifeq (${MKSELINUX},yes)
|
ifeq (${MKSELINUX},yes)
|
||||||
|
|||||||
@@ -45,20 +45,20 @@ SBINDIR?= ${PREFIX}/sbin
|
|||||||
SBINMODE?= 0755
|
SBINMODE?= 0755
|
||||||
|
|
||||||
INCDIR?= ${UPREFIX}/include
|
INCDIR?= ${UPREFIX}/include
|
||||||
INCMODE?= 0444
|
INCMODE?= 0644
|
||||||
|
|
||||||
_LIBNAME_SH= case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac
|
_LIBNAME_SH= case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac
|
||||||
_LIBNAME:= $(shell ${_LIBNAME_SH})
|
_LIBNAME:= $(shell ${_LIBNAME_SH})
|
||||||
LIBNAME?= ${_LIBNAME}
|
LIBNAME?= ${_LIBNAME}
|
||||||
LIBDIR?= ${UPREFIX}/${LIBNAME}
|
LIBDIR?= ${UPREFIX}/${LIBNAME}
|
||||||
LIBMODE?= 0444
|
LIBMODE?= 0644
|
||||||
SHLIBDIR?= ${PREFIX}/${LIBNAME}
|
SHLIBDIR?= ${PREFIX}/${LIBNAME}
|
||||||
|
|
||||||
LIBEXECDIR?= ${PREFIX}/libexec/rc
|
LIBEXECDIR?= ${PREFIX}/libexec/rc
|
||||||
|
|
||||||
MANPREFIX?= ${UPREFIX}/share
|
MANPREFIX?= ${UPREFIX}/share
|
||||||
MANDIR?= ${MANPREFIX}/man
|
MANDIR?= ${MANPREFIX}/man
|
||||||
MANMODE?= 0444
|
MANMODE?= 0644
|
||||||
|
|
||||||
BASHCOMPDIR?= ${UPREFIX}/share/bash-completion/completions
|
BASHCOMPDIR?= ${UPREFIX}/share/bash-completion/completions
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,9 @@ Not using this interpreter will break the use of dependencies and is not
|
|||||||
supported. (iow: if you insist on using `#!/bin/sh` you're on your own)
|
supported. (iow: if you insist on using `#!/bin/sh` you're on your own)
|
||||||
|
|
||||||
A `depend` function declares the dependencies of this service script.
|
A `depend` function declares the dependencies of this service script.
|
||||||
All scripts must have start/stop/status functions, but defaults are provided and should be used unless you have a very strong reason not to use them.
|
All scripts must have start/stop/status functions, but defaults are
|
||||||
|
provided and should be used unless you have a very strong reason not to
|
||||||
|
use them.
|
||||||
|
|
||||||
Extra functions can be added easily:
|
Extra functions can be added easily:
|
||||||
|
|
||||||
|
|||||||
@@ -133,11 +133,10 @@ _status()
|
|||||||
elif service_inactive; then
|
elif service_inactive; then
|
||||||
ewarn "status: inactive"
|
ewarn "status: inactive"
|
||||||
return 16
|
return 16
|
||||||
|
elif service_crashed; then
|
||||||
|
eerror "status: crashed"
|
||||||
|
return 32
|
||||||
elif service_started; then
|
elif service_started; then
|
||||||
if service_crashed; then
|
|
||||||
eerror "status: crashed"
|
|
||||||
return 32
|
|
||||||
fi
|
|
||||||
einfo "status: started"
|
einfo "status: started"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -184,18 +184,17 @@ cgroup2_set_limits()
|
|||||||
cgroup_path="$(cgroup2_find_path)"
|
cgroup_path="$(cgroup2_find_path)"
|
||||||
[ -d "${cgroup_path}" ] || return 0
|
[ -d "${cgroup_path}" ] || return 0
|
||||||
rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}"
|
rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}"
|
||||||
local OIFS="$IFS"
|
|
||||||
IFS="
|
|
||||||
"
|
|
||||||
[ ! -d "${rc_cgroup_path}" ] && mkdir "${rc_cgroup_path}"
|
[ ! -d "${rc_cgroup_path}" ] && mkdir "${rc_cgroup_path}"
|
||||||
printf "%d" 0 > "${rc_cgroup_path}/cgroup.procs"
|
[ -f "${rc_cgroup_path}"/cgroup.procs ] &&
|
||||||
echo "${rc_cgroup_settings}" | while IFS="$OIFS" read -r key value; do
|
printf 0 > "${rc_cgroup_path}"/cgroup.procs
|
||||||
[ -z "${key}" ] || [ -z "${value}" ] && continue
|
[ -z "${rc_cgroup_settings}" ] && return 0
|
||||||
[ ! -e "${rc_cgroup_path}/${key}" ] && continue
|
echo "${rc_cgroup_settings}" | while read -r key value; do
|
||||||
veinfo "${RC_SVCNAME}: cgroups: ${key} ${value}"
|
[ -z "${key}" ] && continue
|
||||||
printf "%s" "${value}" > "${rc_cgroup_path}/${key}"
|
[ -z "${value}" ] && continue
|
||||||
|
[ ! -f "${rc_cgroup_path}/${key}" ] && continue
|
||||||
|
veinfo "${RC_SVCNAME}: cgroups: setting ${key} to ${value}"
|
||||||
|
printf "%s\n" "${value}" > "${rc_cgroup_path}/${key}"
|
||||||
done
|
done
|
||||||
IFS="$OIFS"
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,10 @@ ssd_start()
|
|||||||
service_inactive && _inactive=true
|
service_inactive && _inactive=true
|
||||||
mark_service_inactive
|
mark_service_inactive
|
||||||
fi
|
fi
|
||||||
|
[ -n "$output_logger" ] &&
|
||||||
|
output_logger_arg="--stdout-logger \"$output_logger\""
|
||||||
|
[ -n "$error_logger" ] &&
|
||||||
|
error_logger_arg="--stderr-logger \"$error_logger\""
|
||||||
#the eval call is necessary for cases like:
|
#the eval call is necessary for cases like:
|
||||||
# command_args="this \"is a\" test"
|
# command_args="this \"is a\" test"
|
||||||
# to work properly.
|
# to work properly.
|
||||||
@@ -47,6 +51,8 @@ ssd_start()
|
|||||||
${directory:+--chdir} $directory \
|
${directory:+--chdir} $directory \
|
||||||
${output_log+--stdout} $output_log \
|
${output_log+--stdout} $output_log \
|
||||||
${error_log+--stderr} $error_log \
|
${error_log+--stderr} $error_log \
|
||||||
|
${output_logger_arg} \
|
||||||
|
${error_logger_arg} \
|
||||||
${procname:+--name} $procname \
|
${procname:+--name} $procname \
|
||||||
${pidfile:+--pidfile} $pidfile \
|
${pidfile:+--pidfile} $pidfile \
|
||||||
${command_user+--user} $command_user \
|
${command_user+--user} $command_user \
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ supervise_start()
|
|||||||
${respawn_period:+--respawn-period} $respawn_period \
|
${respawn_period:+--respawn-period} $respawn_period \
|
||||||
${command_user+--user} $command_user \
|
${command_user+--user} $command_user \
|
||||||
${umask+--umask} $umask \
|
${umask+--umask} $umask \
|
||||||
$supervise_daemon_args \
|
${supervise_daemon_args:-${start_stop_daemon_args}} \
|
||||||
$command \
|
$command \
|
||||||
-- $command_args $command_args_foreground
|
-- $command_args $command_args_foreground
|
||||||
rc=$?
|
rc=$?
|
||||||
|
|||||||
@@ -66,9 +66,6 @@ int parse_mode(mode_t *, char *);
|
|||||||
/* Handy function so we can wrap einfo around our deptree */
|
/* Handy function so we can wrap einfo around our deptree */
|
||||||
RC_DEPTREE *_rc_deptree_load (int, int *);
|
RC_DEPTREE *_rc_deptree_load (int, int *);
|
||||||
|
|
||||||
/* Test to see if we can see pid 1 or not */
|
|
||||||
bool _rc_can_find_pids(void);
|
|
||||||
|
|
||||||
RC_SERVICE lookup_service_state(const char *service);
|
RC_SERVICE lookup_service_state(const char *service);
|
||||||
void from_time_t(char *time_string, time_t tv);
|
void from_time_t(char *time_string, time_t tv);
|
||||||
time_t to_time_t(char *timestring);
|
time_t to_time_t(char *timestring);
|
||||||
|
|||||||
@@ -50,6 +50,7 @@ static const rc_service_state_name_t rc_service_state_names[] = {
|
|||||||
{ RC_SERVICE_HOTPLUGGED, "hotplugged" },
|
{ RC_SERVICE_HOTPLUGGED, "hotplugged" },
|
||||||
{ RC_SERVICE_FAILED, "failed" },
|
{ RC_SERVICE_FAILED, "failed" },
|
||||||
{ RC_SERVICE_SCHEDULED, "scheduled"},
|
{ RC_SERVICE_SCHEDULED, "scheduled"},
|
||||||
|
{ RC_SERVICE_CRASHED, "crashed"},
|
||||||
{ 0, NULL}
|
{ 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -848,6 +849,10 @@ rc_service_state(const char *service)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (state & RC_SERVICE_STARTED) {
|
||||||
|
if (rc_service_daemons_crashed(service))
|
||||||
|
state |= RC_SERVICE_CRASHED;
|
||||||
|
}
|
||||||
if (state & RC_SERVICE_STOPPED) {
|
if (state & RC_SERVICE_STOPPED) {
|
||||||
dirs = ls_dir(RC_SVCDIR "/scheduled", 0);
|
dirs = ls_dir(RC_SVCDIR "/scheduled", 0);
|
||||||
TAILQ_FOREACH(dir, dirs, entries) {
|
TAILQ_FOREACH(dir, dirs, entries) {
|
||||||
|
|||||||
@@ -188,7 +188,8 @@ typedef enum
|
|||||||
/* Optional states service could also be in */
|
/* Optional states service could also be in */
|
||||||
RC_SERVICE_FAILED = 0x0200,
|
RC_SERVICE_FAILED = 0x0200,
|
||||||
RC_SERVICE_SCHEDULED = 0x0400,
|
RC_SERVICE_SCHEDULED = 0x0400,
|
||||||
RC_SERVICE_WASINACTIVE = 0x0800
|
RC_SERVICE_WASINACTIVE = 0x0800,
|
||||||
|
RC_SERVICE_CRASHED = 0x1000,
|
||||||
} RC_SERVICE;
|
} RC_SERVICE;
|
||||||
|
|
||||||
/*! Add the service to the runlevel
|
/*! Add the service to the runlevel
|
||||||
|
|||||||
1
src/rc/.gitignore
vendored
1
src/rc/.gitignore
vendored
@@ -56,6 +56,7 @@ mark_service_inactive
|
|||||||
mark_service_wasinactive
|
mark_service_wasinactive
|
||||||
mark_service_hotplugged
|
mark_service_hotplugged
|
||||||
mark_service_failed
|
mark_service_failed
|
||||||
|
mark_service_crashed
|
||||||
rc-abort
|
rc-abort
|
||||||
rc
|
rc
|
||||||
openrc
|
openrc
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ include ${MK}/os.mk
|
|||||||
SRCS= checkpath.c do_e.c do_mark_service.c do_service.c \
|
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 \
|
do_value.c fstabinfo.c is_newer_than.c is_older_than.c \
|
||||||
mountinfo.c openrc-run.c rc-abort.c rc.c \
|
mountinfo.c openrc-run.c rc-abort.c rc.c \
|
||||||
rc-depend.c rc-logger.c rc-misc.c rc-plugin.c \
|
rc-depend.c rc-logger.c rc-misc.c rc-pipes.c \
|
||||||
rc-service.c rc-status.c rc-update.c \
|
rc-plugin.c rc-service.c rc-status.c rc-update.c \
|
||||||
shell_var.c start-stop-daemon.c supervise-daemon.c swclock.c _usage.c
|
shell_var.c start-stop-daemon.c supervise-daemon.c swclock.c _usage.c
|
||||||
|
|
||||||
ifeq (${MKSELINUX},yes)
|
ifeq (${MKSELINUX},yes)
|
||||||
@@ -41,6 +41,7 @@ RC_SBINPROGS= mark_service_starting mark_service_started \
|
|||||||
mark_service_stopping mark_service_stopped \
|
mark_service_stopping mark_service_stopped \
|
||||||
mark_service_inactive mark_service_wasinactive \
|
mark_service_inactive mark_service_wasinactive \
|
||||||
mark_service_hotplugged mark_service_failed \
|
mark_service_hotplugged mark_service_failed \
|
||||||
|
mark_service_crashed \
|
||||||
rc-abort swclock
|
rc-abort swclock
|
||||||
|
|
||||||
ifeq (${OS},Linux)
|
ifeq (${OS},Linux)
|
||||||
@@ -123,7 +124,8 @@ is_older_than: is_older_than.o rc-misc.o
|
|||||||
mark_service_starting mark_service_started \
|
mark_service_starting mark_service_started \
|
||||||
mark_service_stopping mark_service_stopped \
|
mark_service_stopping mark_service_stopped \
|
||||||
mark_service_inactive mark_service_wasinactive \
|
mark_service_inactive mark_service_wasinactive \
|
||||||
mark_service_hotplugged mark_service_failed: do_mark_service.o rc-misc.o
|
mark_service_hotplugged mark_service_failed \
|
||||||
|
mark_service_crashed: do_mark_service.o rc-misc.o
|
||||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||||
|
|
||||||
mountinfo: mountinfo.o _usage.o rc-misc.o
|
mountinfo: mountinfo.o _usage.o rc-misc.o
|
||||||
@@ -156,7 +158,7 @@ rc-service: rc-service.o _usage.o rc-misc.o
|
|||||||
rc-update: rc-update.o _usage.o rc-misc.o
|
rc-update: rc-update.o _usage.o rc-misc.o
|
||||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||||
|
|
||||||
start-stop-daemon: start-stop-daemon.o _usage.o rc-misc.o rc-schedules.o
|
start-stop-daemon: start-stop-daemon.o _usage.o rc-misc.o rc-pipes.o rc-schedules.o
|
||||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||||
|
|
||||||
supervise-daemon: supervise-daemon.o _usage.o rc-misc.o rc-schedules.o
|
supervise-daemon: supervise-daemon.o _usage.o rc-misc.o rc-schedules.o
|
||||||
|
|||||||
@@ -68,9 +68,7 @@ int main(int argc, char **argv)
|
|||||||
ok = rc_service_started_daemon(service, exec, NULL, idx);
|
ok = rc_service_started_daemon(service, exec, NULL, idx);
|
||||||
|
|
||||||
} else if (strcmp(applet, "service_crashed") == 0) {
|
} else if (strcmp(applet, "service_crashed") == 0) {
|
||||||
ok = (_rc_can_find_pids() &&
|
ok = ( rc_service_daemons_crashed(service) && errno != EACCES);
|
||||||
rc_service_daemons_crashed(service) &&
|
|
||||||
errno != EACCES);
|
|
||||||
} else
|
} else
|
||||||
eerrorx("%s: unknown applet", applet);
|
eerrorx("%s: unknown applet", applet);
|
||||||
|
|
||||||
|
|||||||
@@ -1152,7 +1152,7 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
lnk = xmalloc(4096);
|
lnk = xmalloc(4096);
|
||||||
memset(lnk, 0, 4096);
|
memset(lnk, 0, 4096);
|
||||||
if (readlink(argv[1], lnk, sizeof(lnk)-1)) {
|
if (readlink(argv[1], lnk, 4096)) {
|
||||||
dir = dirname(path);
|
dir = dirname(path);
|
||||||
if (strchr(lnk, '/')) {
|
if (strchr(lnk, '/')) {
|
||||||
save = xstrdup(dir);
|
save = xstrdup(dir);
|
||||||
@@ -1268,6 +1268,9 @@ int main(int argc, char **argv)
|
|||||||
case_RC_COMMON_GETOPT
|
case_RC_COMMON_GETOPT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rc_yesno(getenv("RC_NODEPS")))
|
||||||
|
deps = false;
|
||||||
|
|
||||||
/* If we're changing runlevels and not called by rc then we cannot
|
/* If we're changing runlevels and not called by rc then we cannot
|
||||||
work with any dependencies */
|
work with any dependencies */
|
||||||
if (deps && getenv("RC_PID") == NULL &&
|
if (deps && getenv("RC_PID") == NULL &&
|
||||||
@@ -1282,6 +1285,8 @@ int main(int argc, char **argv)
|
|||||||
unsetenv("IN_BACKGROUND");
|
unsetenv("IN_BACKGROUND");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rc_yesno(getenv("IN_DRYRUN")))
|
||||||
|
dry_run = true;
|
||||||
if (rc_yesno(getenv("IN_HOTPLUG"))) {
|
if (rc_yesno(getenv("IN_HOTPLUG"))) {
|
||||||
if (!service_plugable())
|
if (!service_plugable())
|
||||||
eerrorx("%s: not allowed to be hotplugged", applet);
|
eerrorx("%s: not allowed to be hotplugged", applet);
|
||||||
|
|||||||
@@ -87,6 +87,8 @@ write_log(int logfd, const char *buffer, size_t bytes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!in_escape) {
|
if (!in_escape) {
|
||||||
|
if (!isprint((int) *p) && *p != '\n')
|
||||||
|
goto cont;
|
||||||
if (write(logfd, p++, 1) == -1)
|
if (write(logfd, p++, 1) == -1)
|
||||||
eerror("write: %s", strerror(errno));
|
eerror("write: %s", strerror(errno));
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -51,7 +51,8 @@ rc_conf_yesno(const char *setting)
|
|||||||
|
|
||||||
static const char *const env_whitelist[] = {
|
static const char *const env_whitelist[] = {
|
||||||
"EERROR_QUIET", "EINFO_QUIET",
|
"EERROR_QUIET", "EINFO_QUIET",
|
||||||
"IN_BACKGROUND", "IN_HOTPLUG",
|
"IN_BACKGROUND", "IN_DRYRUN", "IN_HOTPLUG",
|
||||||
|
"RC_DEBUG", "RC_NODEPS",
|
||||||
"LANG", "LC_MESSAGES", "TERM",
|
"LANG", "LC_MESSAGES", "TERM",
|
||||||
"EINFO_COLOR", "EINFO_VERBOSE",
|
"EINFO_COLOR", "EINFO_VERBOSE",
|
||||||
NULL
|
NULL
|
||||||
@@ -410,34 +411,6 @@ RC_DEPTREE * _rc_deptree_load(int force, int *regen)
|
|||||||
return rc_deptree_load();
|
return rc_deptree_load();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _rc_can_find_pids(void)
|
|
||||||
{
|
|
||||||
RC_PIDLIST *pids;
|
|
||||||
RC_PID *pid;
|
|
||||||
RC_PID *pid2;
|
|
||||||
bool retval = false;
|
|
||||||
|
|
||||||
if (geteuid() == 0)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
/* If we cannot see process 1, then we don't test to see if
|
|
||||||
* services crashed or not */
|
|
||||||
pids = rc_find_pids(NULL, NULL, 0, 1);
|
|
||||||
if (pids) {
|
|
||||||
pid = LIST_FIRST(pids);
|
|
||||||
if (pid) {
|
|
||||||
retval = true;
|
|
||||||
while (pid) {
|
|
||||||
pid2 = LIST_NEXT(pid, entries);
|
|
||||||
free(pid);
|
|
||||||
pid = pid2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(pids);
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct {
|
static const struct {
|
||||||
const char * const name;
|
const char * const name;
|
||||||
RC_SERVICE bit;
|
RC_SERVICE bit;
|
||||||
@@ -450,6 +423,7 @@ static const struct {
|
|||||||
{ "service_hotplugged", RC_SERVICE_HOTPLUGGED, },
|
{ "service_hotplugged", RC_SERVICE_HOTPLUGGED, },
|
||||||
{ "service_wasinactive", RC_SERVICE_WASINACTIVE, },
|
{ "service_wasinactive", RC_SERVICE_WASINACTIVE, },
|
||||||
{ "service_failed", RC_SERVICE_FAILED, },
|
{ "service_failed", RC_SERVICE_FAILED, },
|
||||||
|
{ "service_crashed", RC_SERVICE_CRASHED, },
|
||||||
};
|
};
|
||||||
|
|
||||||
RC_SERVICE lookup_service_state(const char *service)
|
RC_SERVICE lookup_service_state(const char *service)
|
||||||
|
|||||||
57
src/rc/rc-pipes.c
Normal file
57
src/rc/rc-pipes.c
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*
|
||||||
|
* rc-pipes.c
|
||||||
|
* Helper to handle spawning processes and connecting them to pipes.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2018 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 <stdlib.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include "rc-pipes.h"
|
||||||
|
|
||||||
|
static const int pipe_read_end = 0;
|
||||||
|
static const int pipe_write_end = 1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Starts a command with stdin redirected from a pipe
|
||||||
|
* Returns the write end of the pipe or -1
|
||||||
|
*/
|
||||||
|
int rc_pipe_command(char *cmd)
|
||||||
|
{
|
||||||
|
int pfd[2];
|
||||||
|
pid_t pid;
|
||||||
|
|
||||||
|
if (pipe(pfd) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
pid = fork();
|
||||||
|
if (pid < 0)
|
||||||
|
return -1;
|
||||||
|
else if (pid > 0) {
|
||||||
|
/* parent */
|
||||||
|
close(pfd[0]);
|
||||||
|
return pfd[pipe_write_end];
|
||||||
|
} else if (pid == 0) {
|
||||||
|
/* child */
|
||||||
|
close(pfd[pipe_write_end]);
|
||||||
|
if (pfd[0] != STDIN_FILENO) {
|
||||||
|
if (dup2(pfd[0], STDIN_FILENO) < 0)
|
||||||
|
exit(1);
|
||||||
|
close(pfd[0]);
|
||||||
|
}
|
||||||
|
execl("/bin/sh", "sh", "-c", cmd, NULL);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/rc/rc-pipes.h
Normal file
18
src/rc/rc-pipes.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018 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_PIPES_H
|
||||||
|
#define RC_PIPES_H
|
||||||
|
|
||||||
|
int rc_pipe_command(char *cmd);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -29,18 +29,25 @@
|
|||||||
|
|
||||||
const char *applet = NULL;
|
const char *applet = NULL;
|
||||||
const char *extraopts = NULL;
|
const char *extraopts = NULL;
|
||||||
const char *getoptstring = "ce:ilr:IN" getoptstring_COMMON;
|
const char *getoptstring = "cdDe:ilr:INsSZ" getoptstring_COMMON;
|
||||||
const struct option longopts[] = {
|
const struct option longopts[] = {
|
||||||
|
{ "debug", 0, NULL, 'd' },
|
||||||
|
{ "nodeps", 0, NULL, 'D' },
|
||||||
{ "exists", 1, NULL, 'e' },
|
{ "exists", 1, NULL, 'e' },
|
||||||
{ "ifcrashed", 0, NULL, 'c' },
|
{ "ifcrashed", 0, NULL, 'c' },
|
||||||
{ "ifexists", 0, NULL, 'i' },
|
{ "ifexists", 0, NULL, 'i' },
|
||||||
{ "ifinactive", 0, NULL, 'I' },
|
{ "ifinactive", 0, NULL, 'I' },
|
||||||
{ "ifnotstarted", 0, NULL, 'N' },
|
{ "ifnotstarted", 0, NULL, 'N' },
|
||||||
|
{ "ifstarted", 0, NULL, 's' },
|
||||||
|
{ "ifstopped", 0, NULL, 'S' },
|
||||||
{ "list", 0, NULL, 'l' },
|
{ "list", 0, NULL, 'l' },
|
||||||
{ "resolve", 1, NULL, 'r' },
|
{ "resolve", 1, NULL, 'r' },
|
||||||
|
{ "dry-run", 0, NULL, 'Z' },
|
||||||
longopts_COMMON
|
longopts_COMMON
|
||||||
};
|
};
|
||||||
const char * const longopts_help[] = {
|
const char * const longopts_help[] = {
|
||||||
|
"set xtrace when running the command",
|
||||||
|
"ignore dependencies",
|
||||||
"tests if the service exists or not",
|
"tests if the service exists or not",
|
||||||
"if the service is crashed then run the command",
|
"if the service is crashed then run the command",
|
||||||
"if the service exists then run the command",
|
"if the service exists then run the command",
|
||||||
@@ -48,6 +55,7 @@ const char * const longopts_help[] = {
|
|||||||
"if the service is not started then run the command",
|
"if the service is not started then run the command",
|
||||||
"list all available services",
|
"list all available services",
|
||||||
"resolve the service name to an init script",
|
"resolve the service name to an init script",
|
||||||
|
"dry run (show what would happen)",
|
||||||
longopts_help_COMMON
|
longopts_help_COMMON
|
||||||
};
|
};
|
||||||
const char *usagestring = "" \
|
const char *usagestring = "" \
|
||||||
@@ -67,6 +75,8 @@ int main(int argc, char **argv)
|
|||||||
bool if_exists = false;
|
bool if_exists = false;
|
||||||
bool if_inactive = false;
|
bool if_inactive = false;
|
||||||
bool if_notstarted = false;
|
bool if_notstarted = false;
|
||||||
|
bool if_started = false;
|
||||||
|
bool if_stopped = false;
|
||||||
|
|
||||||
applet = basename_c(argv[0]);
|
applet = basename_c(argv[0]);
|
||||||
/* Ensure that we are only quiet when explicitly told to be */
|
/* Ensure that we are only quiet when explicitly told to be */
|
||||||
@@ -76,6 +86,12 @@ int main(int argc, char **argv)
|
|||||||
longopts, (int *) 0)) != -1)
|
longopts, (int *) 0)) != -1)
|
||||||
{
|
{
|
||||||
switch (opt) {
|
switch (opt) {
|
||||||
|
case 'd':
|
||||||
|
setenv("RC_DEBUG", "yes", 1);
|
||||||
|
break;
|
||||||
|
case 'D':
|
||||||
|
setenv("RC_NODEPS", "yes", 1);
|
||||||
|
break;
|
||||||
case 'e':
|
case 'e':
|
||||||
service = rc_service_resolve(optarg);
|
service = rc_service_resolve(optarg);
|
||||||
opt = service ? EXIT_SUCCESS : EXIT_FAILURE;
|
opt = service ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
@@ -112,6 +128,15 @@ int main(int argc, char **argv)
|
|||||||
free(service);
|
free(service);
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
|
case 's':
|
||||||
|
if_started = true;
|
||||||
|
break;
|
||||||
|
case 'S':
|
||||||
|
if_stopped = true;
|
||||||
|
break;
|
||||||
|
case 'Z':
|
||||||
|
setenv("IN_DRYRUN", "yes", 1);
|
||||||
|
break;
|
||||||
|
|
||||||
case_RC_COMMON_GETOPT
|
case_RC_COMMON_GETOPT
|
||||||
}
|
}
|
||||||
@@ -133,6 +158,10 @@ int main(int argc, char **argv)
|
|||||||
return 0;
|
return 0;
|
||||||
if (if_notstarted && (state & RC_SERVICE_STARTED))
|
if (if_notstarted && (state & RC_SERVICE_STARTED))
|
||||||
return 0;
|
return 0;
|
||||||
|
if (if_started && ! (state & RC_SERVICE_STARTED))
|
||||||
|
return 0;
|
||||||
|
if (if_stopped && ! (state & RC_SERVICE_STOPPED))
|
||||||
|
return 0;
|
||||||
*argv = service;
|
*argv = service;
|
||||||
execv(*argv, argv);
|
execv(*argv, argv);
|
||||||
eerrorx("%s: %s", applet, strerror(errno));
|
eerrorx("%s: %s", applet, strerror(errno));
|
||||||
|
|||||||
@@ -54,7 +54,6 @@ const char *usagestring = "" \
|
|||||||
"Usage: rc-status [options] <runlevel>...\n" \
|
"Usage: rc-status [options] <runlevel>...\n" \
|
||||||
" or: rc-status [options] [-a | -c | -l | -m | -r | -s | -u]";
|
" or: rc-status [options] [-a | -c | -l | -m | -r | -s | -u]";
|
||||||
|
|
||||||
static bool test_crashed = false;
|
|
||||||
static RC_DEPTREE *deptree;
|
static RC_DEPTREE *deptree;
|
||||||
static RC_STRINGLIST *types;
|
static RC_STRINGLIST *types;
|
||||||
|
|
||||||
@@ -145,9 +144,7 @@ print_service(const char *service)
|
|||||||
color = ECOLOR_WARN;
|
color = ECOLOR_WARN;
|
||||||
} else if (state & RC_SERVICE_STARTED) {
|
} else if (state & RC_SERVICE_STARTED) {
|
||||||
errno = 0;
|
errno = 0;
|
||||||
if (test_crashed &&
|
if (rc_service_daemons_crashed(service) && errno != EACCES)
|
||||||
rc_service_daemons_crashed(service) &&
|
|
||||||
errno != EACCES)
|
|
||||||
{
|
{
|
||||||
child_pid = rc_service_value_get(service, "child_pid");
|
child_pid = rc_service_value_get(service, "child_pid");
|
||||||
start_time = rc_service_value_get(service, "start_time");
|
start_time = rc_service_value_get(service, "start_time");
|
||||||
@@ -240,8 +237,6 @@ int main(int argc, char **argv)
|
|||||||
char *p, *runlevel = NULL;
|
char *p, *runlevel = NULL;
|
||||||
int opt, retval = 0;
|
int opt, retval = 0;
|
||||||
|
|
||||||
test_crashed = _rc_can_find_pids();
|
|
||||||
|
|
||||||
applet = basename_c(argv[0]);
|
applet = basename_c(argv[0]);
|
||||||
while ((opt = getopt_long(argc, argv, getoptstring, longopts,
|
while ((opt = getopt_long(argc, argv, getoptstring, longopts,
|
||||||
(int *) 0)) != -1)
|
(int *) 0)) != -1)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ add(const char *runlevel, const char *service)
|
|||||||
|
|
||||||
if (!rc_service_exists(service)) {
|
if (!rc_service_exists(service)) {
|
||||||
if (errno == ENOEXEC)
|
if (errno == ENOEXEC)
|
||||||
eerror("%s: service `%s' is not executeable",
|
eerror("%s: service `%s' is not executable",
|
||||||
applet, service);
|
applet, service);
|
||||||
else
|
else
|
||||||
eerror("%s: service `%s' does not exist",
|
eerror("%s: service `%s' does not exist",
|
||||||
|
|||||||
@@ -59,13 +59,14 @@ static struct pam_conv conv = { NULL, NULL};
|
|||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "rc.h"
|
#include "rc.h"
|
||||||
#include "rc-misc.h"
|
#include "rc-misc.h"
|
||||||
|
#include "rc-pipes.h"
|
||||||
#include "rc-schedules.h"
|
#include "rc-schedules.h"
|
||||||
#include "_usage.h"
|
#include "_usage.h"
|
||||||
#include "helpers.h"
|
#include "helpers.h"
|
||||||
|
|
||||||
const char *applet = NULL;
|
const char *applet = NULL;
|
||||||
const char *extraopts = NULL;
|
const char *extraopts = NULL;
|
||||||
const char *getoptstring = "I:KN:PR:Sa:bc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:" \
|
const char *getoptstring = "I:KN:PR:Sa:bc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:3:4:" \
|
||||||
getoptstring_COMMON;
|
getoptstring_COMMON;
|
||||||
const struct option longopts[] = {
|
const struct option longopts[] = {
|
||||||
{ "ionice", 1, NULL, 'I'},
|
{ "ionice", 1, NULL, 'I'},
|
||||||
@@ -93,6 +94,8 @@ const struct option longopts[] = {
|
|||||||
{ "exec", 1, NULL, 'x'},
|
{ "exec", 1, NULL, 'x'},
|
||||||
{ "stdout", 1, NULL, '1'},
|
{ "stdout", 1, NULL, '1'},
|
||||||
{ "stderr", 1, NULL, '2'},
|
{ "stderr", 1, NULL, '2'},
|
||||||
|
{ "stdout-logger",1, NULL, '3'},
|
||||||
|
{ "stderr-logger",1, NULL, '4'},
|
||||||
{ "progress", 0, NULL, 'P'},
|
{ "progress", 0, NULL, 'P'},
|
||||||
longopts_COMMON
|
longopts_COMMON
|
||||||
};
|
};
|
||||||
@@ -122,6 +125,8 @@ const char * const longopts_help[] = {
|
|||||||
"Binary to start/stop",
|
"Binary to start/stop",
|
||||||
"Redirect stdout to file",
|
"Redirect stdout to file",
|
||||||
"Redirect stderr to file",
|
"Redirect stderr to file",
|
||||||
|
"Redirect stdout to process",
|
||||||
|
"Redirect stderr to process",
|
||||||
"Print dots each second while waiting",
|
"Print dots each second while waiting",
|
||||||
longopts_help_COMMON
|
longopts_help_COMMON
|
||||||
};
|
};
|
||||||
@@ -276,6 +281,8 @@ int main(int argc, char **argv)
|
|||||||
int tid = 0;
|
int tid = 0;
|
||||||
char *redirect_stderr = NULL;
|
char *redirect_stderr = NULL;
|
||||||
char *redirect_stdout = NULL;
|
char *redirect_stdout = NULL;
|
||||||
|
char *stderr_process = NULL;
|
||||||
|
char *stdout_process = NULL;
|
||||||
int stdin_fd;
|
int stdin_fd;
|
||||||
int stdout_fd;
|
int stdout_fd;
|
||||||
int stderr_fd;
|
int stderr_fd;
|
||||||
@@ -500,6 +507,14 @@ int main(int argc, char **argv)
|
|||||||
redirect_stderr = optarg;
|
redirect_stderr = optarg;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case '3': /* --stdout-logger "command to run for stdout logging" */
|
||||||
|
stdout_process = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '4': /* --stderr-logger "command to run for stderr logging" */
|
||||||
|
stderr_process = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
case_RC_COMMON_GETOPT
|
case_RC_COMMON_GETOPT
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -551,6 +566,9 @@ int main(int argc, char **argv)
|
|||||||
if (redirect_stdout || redirect_stderr)
|
if (redirect_stdout || redirect_stderr)
|
||||||
eerrorx("%s: --stdout and --stderr are only relevant"
|
eerrorx("%s: --stdout and --stderr are only relevant"
|
||||||
" with --start", applet);
|
" with --start", applet);
|
||||||
|
if (stdout_process || stderr_process)
|
||||||
|
eerrorx("%s: --stdout-logger and --stderr-logger are only relevant"
|
||||||
|
" with --start", applet);
|
||||||
if (start_wait)
|
if (start_wait)
|
||||||
ewarn("using --wait with --stop has no effect,"
|
ewarn("using --wait with --stop has no effect,"
|
||||||
" use --retry instead");
|
" use --retry instead");
|
||||||
@@ -563,6 +581,15 @@ int main(int argc, char **argv)
|
|||||||
if ((redirect_stdout || redirect_stderr) && !background)
|
if ((redirect_stdout || redirect_stderr) && !background)
|
||||||
eerrorx("%s: --stdout and --stderr are only relevant"
|
eerrorx("%s: --stdout and --stderr are only relevant"
|
||||||
" with --background", applet);
|
" with --background", applet);
|
||||||
|
if ((stdout_process || stderr_process) && !background)
|
||||||
|
eerrorx("%s: --stdout-logger and --stderr-logger are only relevant"
|
||||||
|
" with --background", applet);
|
||||||
|
if (redirect_stdout && stdout_process)
|
||||||
|
eerrorx("%s: do not use --stdout and --stdout-logger together",
|
||||||
|
applet);
|
||||||
|
if (redirect_stderr && stderr_process)
|
||||||
|
eerrorx("%s: do not use --stderr and --stderr-logger together",
|
||||||
|
applet);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Expand ~ */
|
/* Expand ~ */
|
||||||
@@ -603,7 +630,6 @@ int main(int argc, char **argv)
|
|||||||
*exec_file ? exec_file : exec);
|
*exec_file ? exec_file : exec);
|
||||||
free(exec_file);
|
free(exec_file);
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (start && retry)
|
if (start && retry)
|
||||||
ewarn("using --retry with --start has no effect,"
|
ewarn("using --retry with --start has no effect,"
|
||||||
@@ -661,7 +687,7 @@ int main(int argc, char **argv)
|
|||||||
parse_schedule(applet, NULL, sig);
|
parse_schedule(applet, NULL, sig);
|
||||||
if (pidfile) {
|
if (pidfile) {
|
||||||
pid = get_pid(applet, pidfile);
|
pid = get_pid(applet, pidfile);
|
||||||
if (pid == -1)
|
if (pid == -1 && errno != ENOENT)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
} else {
|
} else {
|
||||||
pid = 0;
|
pid = 0;
|
||||||
@@ -886,6 +912,12 @@ int main(int argc, char **argv)
|
|||||||
eerrorx("%s: unable to open the logfile"
|
eerrorx("%s: unable to open the logfile"
|
||||||
" for stdout `%s': %s",
|
" for stdout `%s': %s",
|
||||||
applet, redirect_stdout, strerror(errno));
|
applet, redirect_stdout, strerror(errno));
|
||||||
|
}else if (stdout_process) {
|
||||||
|
stdout_fd = rc_pipe_command(stdout_process);
|
||||||
|
if (stdout_fd == -1)
|
||||||
|
eerrorx("%s: unable to open the logging process"
|
||||||
|
" for stdout `%s': %s",
|
||||||
|
applet, stdout_process, strerror(errno));
|
||||||
}
|
}
|
||||||
if (redirect_stderr) {
|
if (redirect_stderr) {
|
||||||
if ((stderr_fd = open(redirect_stderr,
|
if ((stderr_fd = open(redirect_stderr,
|
||||||
@@ -894,13 +926,21 @@ int main(int argc, char **argv)
|
|||||||
eerrorx("%s: unable to open the logfile"
|
eerrorx("%s: unable to open the logfile"
|
||||||
" for stderr `%s': %s",
|
" for stderr `%s': %s",
|
||||||
applet, redirect_stderr, strerror(errno));
|
applet, redirect_stderr, strerror(errno));
|
||||||
|
}else if (stderr_process) {
|
||||||
|
stderr_fd = rc_pipe_command(stderr_process);
|
||||||
|
if (stderr_fd == -1)
|
||||||
|
eerrorx("%s: unable to open the logging process"
|
||||||
|
" for stderr `%s': %s",
|
||||||
|
applet, stderr_process, strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (background)
|
if (background)
|
||||||
dup2(stdin_fd, STDIN_FILENO);
|
dup2(stdin_fd, STDIN_FILENO);
|
||||||
if (background || redirect_stdout || rc_yesno(getenv("EINFO_QUIET")))
|
if (background || redirect_stdout || stdout_process
|
||||||
|
|| rc_yesno(getenv("EINFO_QUIET")))
|
||||||
dup2(stdout_fd, STDOUT_FILENO);
|
dup2(stdout_fd, STDOUT_FILENO);
|
||||||
if (background || redirect_stderr || rc_yesno(getenv("EINFO_QUIET")))
|
if (background || redirect_stderr || stderr_process
|
||||||
|
|| rc_yesno(getenv("EINFO_QUIET")))
|
||||||
dup2(stderr_fd, STDERR_FILENO);
|
dup2(stderr_fd, STDERR_FILENO);
|
||||||
|
|
||||||
for (i = getdtablesize() - 1; i >= 3; --i)
|
for (i = getdtablesize() - 1; i >= 3; --i)
|
||||||
|
|||||||
@@ -232,8 +232,8 @@ static char *make_cmdline(char **argv)
|
|||||||
|
|
||||||
for (c = argv; c && *c; c++)
|
for (c = argv; c && *c; c++)
|
||||||
len += (strlen(*c) + 1);
|
len += (strlen(*c) + 1);
|
||||||
cmdline = xmalloc(len);
|
cmdline = xmalloc(len+1);
|
||||||
memset(cmdline, 0, len);
|
memset(cmdline, 0, len+1);
|
||||||
for (c = argv; c && *c; c++) {
|
for (c = argv; c && *c; c++) {
|
||||||
strcat(cmdline, *c);
|
strcat(cmdline, *c);
|
||||||
strcat(cmdline, " ");
|
strcat(cmdline, " ");
|
||||||
|
|||||||
@@ -90,8 +90,8 @@ the service script by hand.
|
|||||||
|
|
||||||
FIXME: Document stacked runlevels
|
FIXME: Document stacked runlevels
|
||||||
|
|
||||||
The default startup uses the runlevels `boot`, `sysinit` and `default`, in that
|
The default startup uses the runlevels `sysinit`, `boot`, and `default`,
|
||||||
order. Shutdown uses the `shutdown` runlevel.
|
in that order. Shutdown uses the `shutdown` runlevel.
|
||||||
|
|
||||||
# The Magic of `conf.d`
|
# The Magic of `conf.d`
|
||||||
|
|
||||||
@@ -162,7 +162,6 @@ stopped, by using:
|
|||||||
The `rc_cgroup_cleanup` setting can be changed to yes to make this
|
The `rc_cgroup_cleanup` setting can be changed to yes to make this
|
||||||
happen automatically when the service is stopped.
|
happen automatically when the service is stopped.
|
||||||
|
|
||||||
|
|
||||||
# Caching
|
# Caching
|
||||||
|
|
||||||
For performance reasons OpenRC keeps a cache of pre-parsed service metadata
|
For performance reasons OpenRC keeps a cache of pre-parsed service metadata
|
||||||
|
|||||||
Reference in New Issue
Block a user