Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d8e4da5e5d | ||
|
|
b7b7d6990e | ||
|
|
a31008d197 | ||
|
|
a177d15641 | ||
|
|
2b4c486043 | ||
|
|
ed24d28163 | ||
|
|
1bc96141e6 | ||
|
|
c7000aeaab | ||
|
|
5c5129b534 | ||
|
|
0dabda6f6f | ||
|
|
92de9a693b | ||
|
|
a71aebcae1 | ||
|
|
61596b16d2 | ||
|
|
104eb3420b | ||
|
|
70b8df3e9c | ||
|
|
cac41092e4 | ||
|
|
7ddc281ab6 | ||
|
|
c092ff6da1 | ||
|
|
54780a4582 | ||
|
|
44f5a72d1a | ||
|
|
0d378974bf | ||
|
|
028da5c2e3 | ||
|
|
d8dbb890aa |
1
AUTHORS
1
AUTHORS
@@ -82,6 +82,7 @@ Semen Maryasin <marsoft@ya.ru>
|
||||
Sergei Trofimovich <slyfox@gentoo.org>
|
||||
Seth Robertson <in-gentoo@baka.org>
|
||||
S. Gilles <sgilles@umd.edu>
|
||||
Sony Interactive Entertainment, llc.
|
||||
Stefan Knoblich <s.knoblich@axsentis.de>
|
||||
Stef Simoens <stef.simoens@scarlet.be>
|
||||
Steve L <slong@rathaus.eclipse.co.uk>
|
||||
|
||||
824
ChangeLog
824
ChangeLog
@@ -1,3 +1,180 @@
|
||||
commit a31008d19726a6c659a4bdc693a3496ae1208448
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
fix clang build
|
||||
|
||||
commit a177d15641b438fc9998642df9dc81c67babe62e
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
version 0.42
|
||||
|
||||
commit 2b4c4860432d07015358bff895cd14c35618ba03
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Update ChangeLog
|
||||
|
||||
commit ed24d281631d564321d099a0d5e78be232d7de78
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
update sysvinit support files
|
||||
|
||||
commit 1bc96141e6846a5f9b3cf2c2bcaf53f2ed9ca33d
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
fix single user mode
|
||||
|
||||
commit c7000aeaabf34262375a2a96b5d5b8f7fcd8a793
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
optimize loops for installing gettys
|
||||
|
||||
commit 5c5129b534bd8a0ebd0e525c87241d6c6ef0ec8c
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Remove "single" runlevel directory
|
||||
|
||||
Single user mode should be handled in the init process directly.
|
||||
|
||||
commit 0dabda6f6ff3744c6f1b1d2afd57845554384977
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
fix sysvinit compatibility
|
||||
|
||||
This allows openrc to direct sysvinit to shut down the system by setting
|
||||
the INIT_HALT environment variable appropriately. Also, we do not try to
|
||||
communicate with sysvinit if its fifo does not exist.
|
||||
|
||||
commit 92de9a693b0e4156e404bc69ab230fe2355c22ca
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Add documentation for openrc-init and update the NEWS file
|
||||
|
||||
commit a71aebcae123d2684c4a326559749bc94b2796be
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
init.d/agetty: provide the getty virtual service
|
||||
|
||||
commit 61596b16d228c15888033da3b4138c1e405e1cb9
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Install gettys if the MKSYSVINIT switch is set to yes
|
||||
|
||||
The default is to put one getty in the "single" runlevel and 6 in the
|
||||
"default" runlevel.
|
||||
|
||||
commit 104eb3420b9332b441ce9965ef69ba5b099519ae
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Add the "single" runlevel
|
||||
|
||||
commit 70b8df3e9c7fed156e1a81ee7efe8a51c1010cb6
|
||||
Author: Chloe Kudryavtsev <toast@toast.cafe>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
clarify supervise-daemon-guide
|
||||
|
||||
1. The given default for respawn_max is wrong.
|
||||
2. The example for respawn_period is nonsensical.
|
||||
|
||||
This fixes #311.
|
||||
|
||||
commit cac41092e4180a8d16edacab0c8552585d94328b
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
add ability for openrc-shutdown to communicate with sysvinit
|
||||
|
||||
This fixes #315.
|
||||
|
||||
commit 7ddc281ab6fd11b63f41059818b0de4748e2821f
|
||||
Author: Martin Wilke <miwi@ixsystems.com>
|
||||
Commit: William Hubbs <william.hubbs@sony.com>
|
||||
|
||||
Fix build with Clang
|
||||
|
||||
This fixes #313.
|
||||
|
||||
commit c092ff6da174c12b913027ffa33d32622d39b9a0
|
||||
Author: William Hubbs <william.hubbs@sony.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add Sony Interactive Entertainment as an author
|
||||
|
||||
commit 54780a45826f789f1291742eb2c99be369bfe64c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
supervise-daemon: allow --respawn-max to be zero
|
||||
|
||||
commit 44f5a72d1aeb131cc2cb464a53809a5a8d90c46e
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
remove hidden-visibility.h
|
||||
|
||||
I am removing this on the advice of a member of the Gentoo toolchain
|
||||
team. It was explained to me that this doesn't offer any significant
|
||||
benefits to OpenRC.
|
||||
|
||||
If anyone ffeels differently, please open a pull request reverting
|
||||
this and adding an explanation of what it does and how to know which
|
||||
functions to mark hidden in the future.
|
||||
|
||||
This fixes #301.
|
||||
|
||||
commit 0d378974bfbd69c5427d44c0a43a9f36389aa235
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc-init: fix waitpid checks
|
||||
|
||||
The do_openrc() function was not waiting properly for the child process
|
||||
which started the runlevel to return. We need to repeatedly call
|
||||
waitpid() until its return value matches the pid of the child process or
|
||||
the child process does not exist.
|
||||
|
||||
This fixes #216.
|
||||
This fixes #300.
|
||||
|
||||
commit 028da5c2e37d81d4e242a546eb48a20eafe0cc56
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc: fix potential buffer overflow in pid_is_argv
|
||||
|
||||
This fixes #299.
|
||||
|
||||
commit d8dbb890aaca34fc9b342772de0f23a7ea3efaaa
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Revert "src/librc/librc-daemon.c: fix buffer overrun in pid_is_argv"
|
||||
|
||||
This reverts commit 084877eb52971faf8f52c780ddd08ed9af140eb6.
|
||||
The mentioned commit caused some systems to have some services reported
|
||||
as crashed.
|
||||
|
||||
This fixes #297.
|
||||
This fixes #298.
|
||||
|
||||
commit 56c006ebd68d572e303c01c38291a1f5f4fc1c30
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Update ChangeLog
|
||||
|
||||
commit 067088bbff42ca2fb9106acf309f1d9ce3e78ada
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
@@ -825,650 +1002,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Nanosleep is the safer call to use in case we need to use alarms
|
||||
eventually.
|
||||
|
||||
commit 7cb8d943236fe651ac54c64f8167f7c4369f649c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Stop mounting efivarfs read-only
|
||||
|
||||
We do not need to do this any longer since all supported linux kernels
|
||||
make efivarfs immutable and the tools that manipulate it are aware of
|
||||
this feature.
|
||||
|
||||
This fixes https://github.com/openrc/openrc/issues/238.
|
||||
|
||||
commit 84ed570eaefcbb55b99ba425030bf7d1d1d46137
|
||||
Author: Zac Medico <zmedico@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc: fix EACCES errno false-positive crash
|
||||
|
||||
Use errno != EACCES to fix false-positive for non-root users
|
||||
with grsecurity kernels.
|
||||
|
||||
Fixes: 37e29442721a ("librc: Add check for crashed state")
|
||||
This fixes #237
|
||||
|
||||
commit 2eea73bfd5ce2f9993d52293fe7d25c0c804d592
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc-functions.sh: Remove addon support
|
||||
|
||||
This is an old relic from Gentoo baselayout-1.x which should not be used
|
||||
any longer.
|
||||
|
||||
commit a571a42421b337380b6f5751635c55906bb8b508
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
modules: remove the ability to rename modules on the fly
|
||||
|
||||
Kmod doesn't support the -o switch, so if you have been using this your
|
||||
module loads have been failing.
|
||||
|
||||
commit 79648ac1c6355975abca6acf6076e7022037523f
|
||||
Author: Holger Hoffstätte <holger@applied-asynchrony.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc-status: initialize uptime pointer to prevent memory corruption
|
||||
|
||||
This fixes #231.
|
||||
|
||||
commit 02af762e83640ec23bf64c5b814f0d3424d90e10
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
version 0.39
|
||||
|
||||
commit 01c34c28e6d6d7bfecc0f88bdf1fb15e97ab8823
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Update ChangeLog
|
||||
|
||||
commit 56ddda54b5aa01474bf563d5a662075c35152858
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
supervise-daemon.c: clean up memory leaks
|
||||
|
||||
commit 3a803b3135837665d51ef4dd7a8b913c78e71ff6
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc-daemon.c: fix memory leaks
|
||||
|
||||
commit 72df51e17ba0e1a0f94451b4bbfb338288c4625c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc-daemon: convert most snprintf calls to xasprintf
|
||||
|
||||
commit b2f5531194e33c229462e9f52fa1d9388463f7b7
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc-misc: convert snprintf calls to xasprintf
|
||||
|
||||
commit 19bf49a710f27d4774ed4c6372d87d6ba15f189e
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
libeinfo: convert remaining snprintf calls to xasprintf
|
||||
|
||||
commit 64354831da2adeba5cb2f91a81fa0f56e1ce4ed9
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc: convert snprintf calls to xasprintf
|
||||
|
||||
commit e14edd765fdc4ed43356d2eef35fa99228e5d461
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
supervise-daemon: convert snprintf calls to xasprintf
|
||||
|
||||
commit f9d41243d8499c5d7027177d5aa716d5b5859cd6
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
start-stop-daemon: convert snprintf calls to xasprintf
|
||||
|
||||
commit be7ad06d4a0efce2a1144b2cf6f0cc361f2a81e4
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc-status: convert snprintf calls to xasprintf
|
||||
|
||||
commit a6165168953b9c7a62c089ce946476b23b73fb12
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc-status: fix gcc 7 warnings
|
||||
|
||||
commit 04721ece03b15503aa220f60e7c6159d01ee75e1
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
start-stop-daemon: fix gcc 7 warnings
|
||||
|
||||
commit c7e8f1133a42152cc293e6b637985f81bcf8b310
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
checkpath: fix gcc 7 warnings
|
||||
|
||||
commit 47e4bfae57402eedd017d6098b432c2c411cd374
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
fix gcc 7 warnings in pipe routines
|
||||
|
||||
commit 8a945194afb106428bc700e751078ef9944ee617
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
libeinfo: clean up gcc 7 compiler warnings
|
||||
|
||||
commit aa4a004c297ec7a1fb794ad2e53ef3ac8b3f4fd1
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
version 0.38
|
||||
|
||||
commit 9ec5d36bdddf5bb0e96b0c561bc5d013a8a2da2a
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Update ChangeLog
|
||||
|
||||
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
|
||||
Author: Jason Zaman <jason@perfinion.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
init.sh: apply SELinux label for /run early in boot
|
||||
|
||||
Some initramfs mount /run which then ends up with the wrong labels.
|
||||
Force relabel all of /run right after its mounted to fix.
|
||||
|
||||
commit 1ab8541a6ccb9d72c6faeaf2d616fc49f6cdfaf6
|
||||
Author: Jason Zaman <jason@perfinion.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
init-early.sh.Linux.in: apply the selinux label to /dev/console early
|
||||
|
||||
/dev/console is relabelled later in the devfs init script, but by then we
|
||||
have already missed some of the messages, so fix that label early.
|
||||
|
||||
commit 038c03bef315314ddb1e460c67d29b2599b494ad
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
supervise-daemon: make an error message more verbose
|
||||
|
||||
commit e51dc29e2f3b2718a62347e8588115e786a9f3c8
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
cgroups: fix indentation
|
||||
|
||||
commit c6047f887a362cb8d96624fbd73484ca703acf53
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
cgroups: add rc_cgroup_memory_use_hierarchy setting for cgroups v1
|
||||
|
||||
commit 0506d68427e342366d826aae4bfbbc6cc0adecc2
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
fstabinfo: fix an error message
|
||||
|
||||
commit c3d666acaf51c771671b0fa54bd8ec0f5d29859e
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc: remove unused #define's.
|
||||
|
||||
commit e93b1d76d150c4477015052fc3df9b94647e5b5d
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc: convert another execl() call to execlp()
|
||||
|
||||
commit acf1e43f815898c4a4957db352f71f3fb629edf3
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc-init: convert execl calls to execlp
|
||||
|
||||
commit f383fd87b121492a04362ca9041f686d981718f1
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
kill_all: change execl call to execlp
|
||||
|
||||
commit cfded513cd9b7febe4b7cf39a80411e4303f0655
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc-init: set a default path
|
||||
|
||||
The default path provided by the system if one isn't set only includes
|
||||
"/bin:/usr/bin". This adds the default path setting from sysvinit.
|
||||
|
||||
commit 16ff3cd8df6169f73e3d7cf00758a4703f62cbf0
|
||||
Author: Christian Brauner <christian.brauner@ubuntu.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
check whether /sys/fs/cgroup is a mountpoint
|
||||
|
||||
The current check only tries to detect whether /sys/fs/cgroup exists and
|
||||
whether it is writable or not. But when the init system doesn't mount
|
||||
cgroups then /sys/fs/cgroup will just be an empty directory. When paired
|
||||
with unprivileged containers that mount sysfs this will cause misleading
|
||||
errors to be printed since /sys/fs/cgroup will be owned by user
|
||||
nobody:nogroup in this case. Independent of this specific problem this
|
||||
check will also be misleading when the /sys/fs/cgroup exists and is in
|
||||
fact writable by the init system but isn't actually a mountpoint.
|
||||
|
||||
Note from William. "grep -qs" doesn't need to redirect output to
|
||||
/dev/null since it is completely silent.
|
||||
|
||||
This fixes #209.
|
||||
|
||||
commit 38032626a6c2f8e869197999f32ac3634667cc86
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
improve cgroup configuration checks
|
||||
|
||||
make the base/controller functions return successfully if cgroups v1/v2
|
||||
are not configured in the kernel
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
NAME= openrc
|
||||
VERSION= 0.41
|
||||
VERSION= 0.42.1
|
||||
PKG= ${NAME}-${VERSION}
|
||||
|
||||
7
NEWS.md
7
NEWS.md
@@ -4,6 +4,13 @@ OpenRC NEWS
|
||||
This file will contain a list of notable changes for each release. Note
|
||||
the information in this file is in reverse order.
|
||||
|
||||
## OpenRC 0.42
|
||||
|
||||
openrc-shutdown now has the ability to shut down sysvinit-based systems.
|
||||
|
||||
A guide has been added for migrating systems using another init system
|
||||
to openrc-init.
|
||||
|
||||
## OpenRC 0.41.
|
||||
|
||||
This version adds the ability to format the output of rc-status when
|
||||
|
||||
50
init-guide.md
Normal file
50
init-guide.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# OpenRC init process guide
|
||||
|
||||
OpenRC now includes an init process which can be used on Linux systems
|
||||
in place of sysvinit.
|
||||
|
||||
## migrating a live system to openrc-init
|
||||
|
||||
Configuring a live system to use this init process is very
|
||||
straight-forward, but the steps must be completed in this order.
|
||||
|
||||
* have your boot loader add "init=/sbin/openrc-init" to the kernel command line
|
||||
|
||||
The details of how to do this will vary from distro to distro, so they are
|
||||
out of scope for this document.
|
||||
|
||||
* Install gettys into the runlevels where you need them.
|
||||
|
||||
If you are using the provided /etc/init.d/agetty script,, you should
|
||||
first create symlinks in /etc/init.d to it for the ports where you
|
||||
want gettys to run, e.g. the following will work if you want gettys on
|
||||
tty1-tty6.
|
||||
|
||||
```
|
||||
# cd /etc/init.d
|
||||
# for x in tty1 tty2 tty3 tty4 tty5 tty6; do
|
||||
ln -snf agetty agetty.$x
|
||||
done
|
||||
```
|
||||
|
||||
Once this is done, use ```rc-update``` as normal to install the agetty
|
||||
services in the appropriate runlevels.
|
||||
|
||||
* Reboot your system.
|
||||
|
||||
At this point you are running under openrc-init, and you should use
|
||||
openrc-shutdown to handle shutting down, powering off, rebooting etc.
|
||||
|
||||
## optional sysvinit compatibility
|
||||
|
||||
If you build and install OpenRC with MKSYSVINIT=yes, you will build and install
|
||||
wrappers that make openrc-init compatible with sysvinit -- you will have
|
||||
commands like "halt" "shutdown" "reboot" and "poweroff".
|
||||
|
||||
If you want this functionality on a live system, you should first
|
||||
migrate the system to openrc-init, remove sysvinit, then rebuild and
|
||||
install this package with MKSYSVINIT=yes.
|
||||
|
||||
package.
|
||||
migrating your system to openrc-init.
|
||||
|
||||
@@ -21,6 +21,7 @@ pidfile="/run/${RC_SVCNAME}.pid"
|
||||
depend() {
|
||||
after local
|
||||
keyword -prefix
|
||||
provide getty
|
||||
}
|
||||
|
||||
start_pre() {
|
||||
|
||||
@@ -90,6 +90,12 @@ install:
|
||||
fi; \
|
||||
ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
|
||||
fi
|
||||
if test "${MKSYSVINIT}" = yes && test "${OS}" = Linux; then \
|
||||
for x in tty1 tty2 tty3 tty4 tty5 tty6; do \
|
||||
ln -snf ${INITDIR}/agetty ${DESTDIR}/${INITDIR}/"agetty.$$x" || exit $$?; \
|
||||
ln -snf ${INITDIR}/agetty.$$x ${DEFAULTDIR}/"agetty.$$x" || exit $$?; \
|
||||
done; \
|
||||
fi
|
||||
|
||||
check test::
|
||||
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Written by Mike Frysinger
|
||||
* Placed in the Public Domain
|
||||
*/
|
||||
|
||||
#ifndef _HIDDEN_VISIBILITY_H_
|
||||
#define _HIDDEN_VISIBILITY_H_
|
||||
|
||||
#if defined(__ELF__) && defined(__GNUC__)
|
||||
# define __hidden_asmname(name) __hidden_asmname1 (__USER_LABEL_PREFIX__, name)
|
||||
# define __hidden_asmname1(prefix, name) __hidden_asmname2(prefix, name)
|
||||
# define __hidden_asmname2(prefix, name) #prefix name
|
||||
# define __hidden_proto(name, internal) \
|
||||
extern __typeof (name) name __asm__ (__hidden_asmname (#internal)) \
|
||||
__attribute__ ((visibility ("hidden")));
|
||||
# define __hidden_ver(local, internal, name) \
|
||||
extern __typeof (name) __EI_##name __asm__(__hidden_asmname (#internal)); \
|
||||
extern __typeof (name) __EI_##name __attribute__((alias (__hidden_asmname1 (,#local))))
|
||||
# define hidden_proto(name) __hidden_proto(name, __RC_##name)
|
||||
# define hidden_def(name) __hidden_ver(__RC_##name, name, name);
|
||||
#else
|
||||
# define hidden_proto(name)
|
||||
# define hidden_def(name)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -15,7 +15,7 @@
|
||||
* except according to the terms contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
static const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
@@ -39,34 +39,6 @@ const char libeinfo_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
|
||||
#include "einfo.h"
|
||||
#include "helpers.h"
|
||||
#include "hidden-visibility.h"
|
||||
|
||||
hidden_proto(ecolor)
|
||||
hidden_proto(ebegin)
|
||||
hidden_proto(ebeginv)
|
||||
hidden_proto(ebracket)
|
||||
hidden_proto(eend)
|
||||
hidden_proto(eendv)
|
||||
hidden_proto(eerror)
|
||||
hidden_proto(eerrorn)
|
||||
hidden_proto(eerrorx)
|
||||
hidden_proto(eindent)
|
||||
hidden_proto(eindentv)
|
||||
hidden_proto(einfo)
|
||||
hidden_proto(einfon)
|
||||
hidden_proto(einfov)
|
||||
hidden_proto(einfovn)
|
||||
hidden_proto(elog)
|
||||
hidden_proto(eoutdent)
|
||||
hidden_proto(eoutdentv)
|
||||
hidden_proto(eprefix)
|
||||
hidden_proto(ewarn)
|
||||
hidden_proto(ewarnn)
|
||||
hidden_proto(ewarnv)
|
||||
hidden_proto(ewarnvn)
|
||||
hidden_proto(ewarnx)
|
||||
hidden_proto(ewend)
|
||||
hidden_proto(ewendv)
|
||||
|
||||
/* Incase we cannot work out how many columns from ioctl, supply a default */
|
||||
#define DEFAULT_COLS 80
|
||||
@@ -510,7 +482,6 @@ eprefix(const char *EINFO_RESTRICT prefix)
|
||||
{
|
||||
_eprefix = prefix;
|
||||
}
|
||||
hidden_def(eprefix)
|
||||
|
||||
static void EINFO_PRINTF(2, 0)
|
||||
elogv(int level, const char *EINFO_RESTRICT fmt, va_list ap)
|
||||
@@ -537,7 +508,6 @@ elog(int level, const char *EINFO_RESTRICT fmt, ...)
|
||||
elogv(level, fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
hidden_def(elog)
|
||||
|
||||
static int
|
||||
_eindent(FILE * EINFO_RESTRICT stream)
|
||||
@@ -576,7 +546,6 @@ _ecolor(FILE * EINFO_RESTRICT f, ECOLOR color)
|
||||
return ecolors_str[i];
|
||||
return "";
|
||||
}
|
||||
hidden_def(ecolor)
|
||||
|
||||
const char *
|
||||
ecolor(ECOLOR color)
|
||||
@@ -643,7 +612,6 @@ einfon(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("einfon");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(einfon)
|
||||
|
||||
int
|
||||
ewarnn(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -659,7 +627,6 @@ ewarnn(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewarnn");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewarnn)
|
||||
|
||||
int
|
||||
eerrorn(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -675,7 +642,6 @@ eerrorn(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("errorn");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(eerrorn)
|
||||
|
||||
int
|
||||
einfo(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -692,7 +658,6 @@ einfo(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("einfo");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(einfo)
|
||||
|
||||
int
|
||||
ewarn(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -710,7 +675,6 @@ ewarn(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewarn");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewarn)
|
||||
|
||||
void
|
||||
ewarnx(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -727,7 +691,6 @@ ewarnx(const char *EINFO_RESTRICT fmt, ...)
|
||||
}
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
hidden_def(ewarnx)
|
||||
|
||||
int
|
||||
eerror(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -745,7 +708,6 @@ eerror(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("eerror");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(eerror)
|
||||
|
||||
void
|
||||
eerrorx(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -761,7 +723,6 @@ eerrorx(const char *EINFO_RESTRICT fmt, ...)
|
||||
}
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
hidden_def(eerrorx)
|
||||
|
||||
int
|
||||
ebegin(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -780,7 +741,6 @@ ebegin(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ebegin");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ebegin)
|
||||
|
||||
static void
|
||||
_eend(FILE * EINFO_RESTRICT fp, int col, ECOLOR color, const char *msg)
|
||||
@@ -854,7 +814,6 @@ eend(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("eend");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(eend)
|
||||
|
||||
int
|
||||
ewend(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -869,14 +828,12 @@ ewend(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewend");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewend)
|
||||
|
||||
void
|
||||
ebracket(int col, ECOLOR color, const char *msg)
|
||||
{
|
||||
_eend(stdout, col, color, msg);
|
||||
}
|
||||
hidden_def(ebracket)
|
||||
|
||||
void
|
||||
eindent(void)
|
||||
@@ -898,7 +855,6 @@ eindent(void)
|
||||
setenv("EINFO_INDENT", num, 1);
|
||||
free(num);
|
||||
}
|
||||
hidden_def(eindent)
|
||||
|
||||
void eoutdent(void)
|
||||
{
|
||||
@@ -924,7 +880,6 @@ void eoutdent(void)
|
||||
}
|
||||
errno = serrno;
|
||||
}
|
||||
hidden_def(eoutdent)
|
||||
|
||||
int
|
||||
einfovn(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -940,7 +895,6 @@ einfovn(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("einfovn");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(einfovn)
|
||||
|
||||
int
|
||||
ewarnvn(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -956,7 +910,6 @@ ewarnvn(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewarnvn");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewarnvn)
|
||||
|
||||
int
|
||||
einfov(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -973,7 +926,6 @@ einfov(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("einfov");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(einfov)
|
||||
|
||||
int
|
||||
ewarnv(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -990,7 +942,6 @@ ewarnv(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewarnv");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewarnv)
|
||||
|
||||
int
|
||||
ebeginv(const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -1010,7 +961,6 @@ ebeginv(const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ebeginv");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ebeginv)
|
||||
|
||||
int
|
||||
eendv(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -1025,7 +975,6 @@ eendv(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("eendv");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(eendv)
|
||||
|
||||
int
|
||||
ewendv(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
@@ -1040,7 +989,6 @@ ewendv(int retval, const char *EINFO_RESTRICT fmt, ...)
|
||||
LASTCMD("ewendv");
|
||||
return retval;
|
||||
}
|
||||
hidden_def(ewendv)
|
||||
|
||||
void
|
||||
eindentv(void)
|
||||
@@ -1048,7 +996,6 @@ eindentv(void)
|
||||
if (is_verbose())
|
||||
eindent();
|
||||
}
|
||||
hidden_def(eindentv)
|
||||
|
||||
void
|
||||
eoutdentv(void)
|
||||
@@ -1056,4 +1003,3 @@ eoutdentv(void)
|
||||
if (is_verbose())
|
||||
eoutdent();
|
||||
}
|
||||
hidden_def(eoutdentv)
|
||||
|
||||
@@ -48,40 +48,34 @@ pid_is_exec(pid_t pid, const char *exec)
|
||||
static bool
|
||||
pid_is_argv(pid_t pid, const char *const *argv)
|
||||
{
|
||||
char *buffer = NULL;
|
||||
char *cmdline = NULL;
|
||||
int fd;
|
||||
char buffer[PATH_MAX];
|
||||
char *p;
|
||||
size_t bytes;
|
||||
bool rc;
|
||||
ssize_t bytes;
|
||||
|
||||
xasprintf(&cmdline, "/proc/%u/cmdline", pid);
|
||||
if (!rc_getfile(cmdline, &buffer, &bytes)) {
|
||||
if ((fd = open(cmdline, O_RDONLY)) < 0) {
|
||||
free(cmdline);
|
||||
return false;
|
||||
}
|
||||
bytes = read(fd, buffer, sizeof(buffer) - 1);
|
||||
close(fd);
|
||||
free(cmdline);
|
||||
if (bytes <= 0) {
|
||||
if (buffer)
|
||||
free(buffer);
|
||||
if (bytes == -1)
|
||||
return false;
|
||||
}
|
||||
p = buffer;
|
||||
rc = true;
|
||||
while (*argv) {
|
||||
if (strcmp(*argv, p) != 0) {
|
||||
rc = false;
|
||||
break;
|
||||
}
|
||||
|
||||
buffer[bytes] = '\0';
|
||||
p = buffer;
|
||||
while (*argv) {
|
||||
if (strcmp(*argv, p) != 0)
|
||||
return false;
|
||||
argv++;
|
||||
p += strlen(p) + 1;
|
||||
if ((unsigned)(p - buffer) >= bytes) {
|
||||
rc = false;
|
||||
break;
|
||||
}
|
||||
if ((unsigned)(p - buffer) > sizeof(buffer))
|
||||
return false;
|
||||
}
|
||||
free(buffer);
|
||||
return rc;
|
||||
return true;
|
||||
}
|
||||
|
||||
RC_PIDLIST *
|
||||
@@ -214,7 +208,6 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
||||
closedir(procdir);
|
||||
return pids;
|
||||
}
|
||||
librc_hidden_def(rc_find_pids)
|
||||
|
||||
#elif BSD
|
||||
|
||||
@@ -319,7 +312,6 @@ rc_find_pids(const char *exec, const char *const *argv, uid_t uid, pid_t pid)
|
||||
|
||||
return pids;
|
||||
}
|
||||
librc_hidden_def(rc_find_pids)
|
||||
|
||||
#else
|
||||
# error "Platform not supported!"
|
||||
@@ -461,7 +453,6 @@ rc_service_daemon_set(const char *service, const char *exec,
|
||||
free(dirpath);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_daemon_set)
|
||||
|
||||
bool
|
||||
rc_service_started_daemon(const char *service,
|
||||
@@ -501,7 +492,6 @@ rc_service_started_daemon(const char *service,
|
||||
free(dirpath);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_started_daemon)
|
||||
|
||||
bool
|
||||
rc_service_daemons_crashed(const char *service)
|
||||
@@ -621,7 +611,7 @@ rc_service_daemons_crashed(const char *service)
|
||||
i = 0;
|
||||
TAILQ_FOREACH(s, list, entries)
|
||||
argv[i++] = s->value;
|
||||
argv[i] = '\0';
|
||||
argv[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -659,4 +649,3 @@ rc_service_daemons_crashed(const char *service)
|
||||
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_daemons_crashed)
|
||||
|
||||
@@ -78,7 +78,6 @@ rc_deptree_free(RC_DEPTREE *deptree)
|
||||
}
|
||||
free(deptree);
|
||||
}
|
||||
librc_hidden_def(rc_deptree_free)
|
||||
|
||||
static RC_DEPINFO *
|
||||
get_depinfo(const RC_DEPTREE *deptree, const char *service)
|
||||
@@ -109,7 +108,6 @@ RC_DEPTREE *
|
||||
rc_deptree_load(void) {
|
||||
return rc_deptree_load_file(RC_DEPTREE_CACHE);
|
||||
}
|
||||
librc_hidden_def(rc_deptree_load)
|
||||
|
||||
RC_DEPTREE *
|
||||
rc_deptree_load_file(const char *deptree_file)
|
||||
@@ -173,7 +171,6 @@ rc_deptree_load_file(const char *deptree_file)
|
||||
|
||||
return deptree;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_load_file)
|
||||
|
||||
static bool
|
||||
valid_service(const char *runlevel, const char *service, const char *type)
|
||||
@@ -459,7 +456,6 @@ rc_deptree_depend(const RC_DEPTREE *deptree,
|
||||
rc_stringlist_add(svcs, svc->value);
|
||||
return svcs;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_depend)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_deptree_depends(const RC_DEPTREE *deptree,
|
||||
@@ -487,7 +483,6 @@ rc_deptree_depends(const RC_DEPTREE *deptree,
|
||||
rc_stringlist_free(visited);
|
||||
return sorted;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_depends)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_deptree_order(const RC_DEPTREE *deptree, const char *runlevel, int options)
|
||||
@@ -543,7 +538,6 @@ rc_deptree_order(const RC_DEPTREE *deptree, const char *runlevel, int options)
|
||||
rc_stringlist_free(types);
|
||||
return services;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_order)
|
||||
|
||||
|
||||
/* Given a time, recurse the target path to find out if there are
|
||||
@@ -633,7 +627,6 @@ rc_newer_than(const char *source, const char *target,
|
||||
|
||||
return mtime_check(source, target, true, newest, file);
|
||||
}
|
||||
librc_hidden_def(rc_newer_than)
|
||||
|
||||
bool
|
||||
rc_older_than(const char *source, const char *target,
|
||||
@@ -641,7 +634,6 @@ rc_older_than(const char *source, const char *target,
|
||||
{
|
||||
return mtime_check(source, target, false, oldest, file);
|
||||
}
|
||||
librc_hidden_def(rc_older_than)
|
||||
|
||||
typedef struct deppair
|
||||
{
|
||||
@@ -737,7 +729,6 @@ rc_deptree_update_needed(time_t *newest, char *file)
|
||||
|
||||
return newer;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_update_needed)
|
||||
|
||||
/* This is a 7 phase operation
|
||||
Phase 1 is a shell script which loads each init script and config in turn
|
||||
@@ -1084,4 +1075,3 @@ rc_deptree_update(void)
|
||||
rc_deptree_free(deptree);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_deptree_update)
|
||||
|
||||
@@ -43,7 +43,6 @@ rc_yesno(const char *value)
|
||||
|
||||
return false;
|
||||
}
|
||||
librc_hidden_def(rc_yesno)
|
||||
|
||||
|
||||
/**
|
||||
@@ -91,7 +90,6 @@ rc_getfile(const char *file, char **buffer, size_t *len)
|
||||
fclose(fp);
|
||||
return ret;
|
||||
}
|
||||
librc_hidden_def(rc_getfile)
|
||||
|
||||
ssize_t
|
||||
rc_getline(char **line, size_t *len, FILE *fp)
|
||||
@@ -116,7 +114,6 @@ rc_getline(char **line, size_t *len, FILE *fp)
|
||||
}
|
||||
return last;
|
||||
}
|
||||
librc_hidden_def(rc_getline)
|
||||
|
||||
char *
|
||||
rc_proc_getent(const char *ent _unused)
|
||||
@@ -163,7 +160,6 @@ rc_proc_getent(const char *ent _unused)
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
librc_hidden_def(rc_proc_getent)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_config_list(const char *file)
|
||||
@@ -202,7 +198,6 @@ rc_config_list(const char *file)
|
||||
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_config_list)
|
||||
|
||||
static void rc_config_set_value(RC_STRINGLIST *config, char *value)
|
||||
{
|
||||
@@ -373,7 +368,6 @@ rc_config_load(const char *file)
|
||||
|
||||
return config;
|
||||
}
|
||||
librc_hidden_def(rc_config_load)
|
||||
|
||||
char *
|
||||
rc_config_value(RC_STRINGLIST *list, const char *entry)
|
||||
@@ -392,7 +386,6 @@ rc_config_value(RC_STRINGLIST *list, const char *entry)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
librc_hidden_def(rc_config_value)
|
||||
|
||||
/* Global for caching the strings loaded from rc.conf to avoid reparsing for
|
||||
* each rc_conf_value call */
|
||||
@@ -438,4 +431,3 @@ rc_conf_value(const char *setting)
|
||||
|
||||
return rc_config_value(rc_conf, setting);
|
||||
}
|
||||
librc_hidden_def(rc_conf_value)
|
||||
|
||||
@@ -25,7 +25,6 @@ rc_stringlist_new(void)
|
||||
TAILQ_INIT(l);
|
||||
return l;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_new)
|
||||
|
||||
RC_STRING *
|
||||
rc_stringlist_add(RC_STRINGLIST *list, const char *value)
|
||||
@@ -36,7 +35,6 @@ rc_stringlist_add(RC_STRINGLIST *list, const char *value)
|
||||
TAILQ_INSERT_TAIL(list, s, entries);
|
||||
return s;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_add)
|
||||
|
||||
RC_STRING *
|
||||
rc_stringlist_addu(RC_STRINGLIST *list, const char *value)
|
||||
@@ -51,7 +49,6 @@ rc_stringlist_addu(RC_STRINGLIST *list, const char *value)
|
||||
|
||||
return rc_stringlist_add(list, value);
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_addu)
|
||||
|
||||
bool
|
||||
rc_stringlist_delete(RC_STRINGLIST *list, const char *value)
|
||||
@@ -69,7 +66,6 @@ rc_stringlist_delete(RC_STRINGLIST *list, const char *value)
|
||||
errno = EEXIST;
|
||||
return false;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_delete)
|
||||
|
||||
RC_STRING *
|
||||
rc_stringlist_find(RC_STRINGLIST *list, const char *value)
|
||||
@@ -83,7 +79,6 @@ rc_stringlist_find(RC_STRINGLIST *list, const char *value)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_find)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_stringlist_split(const char *value, const char *sep)
|
||||
@@ -98,7 +93,6 @@ rc_stringlist_split(const char *value, const char *sep)
|
||||
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_split)
|
||||
|
||||
void
|
||||
rc_stringlist_sort(RC_STRINGLIST **list)
|
||||
@@ -128,7 +122,6 @@ rc_stringlist_sort(RC_STRINGLIST **list)
|
||||
free(l);
|
||||
*list = new;
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_sort)
|
||||
|
||||
void
|
||||
rc_stringlist_free(RC_STRINGLIST *list)
|
||||
@@ -148,4 +141,3 @@ rc_stringlist_free(RC_STRINGLIST *list)
|
||||
}
|
||||
free(list);
|
||||
}
|
||||
librc_hidden_def(rc_stringlist_free)
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* except according to the terms contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
const char librc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
static const char librc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
|
||||
#include "queue.h"
|
||||
#include "librc.h"
|
||||
@@ -351,7 +351,6 @@ rc_sys(void)
|
||||
|
||||
return sys;
|
||||
}
|
||||
librc_hidden_def(rc_sys)
|
||||
|
||||
static const char *
|
||||
rc_parse_service_state(RC_SERVICE state)
|
||||
@@ -426,20 +425,17 @@ rc_runlevel_starting(void)
|
||||
{
|
||||
return exists(RC_STARTING);
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_starting)
|
||||
|
||||
bool
|
||||
rc_runlevel_stopping(void)
|
||||
{
|
||||
return exists(RC_STOPPING);
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_stopping)
|
||||
|
||||
RC_STRINGLIST *rc_runlevel_list(void)
|
||||
{
|
||||
return ls_dir(RC_RUNLEVELDIR, LS_DIR);
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_list)
|
||||
|
||||
char *
|
||||
rc_runlevel_get(void)
|
||||
@@ -466,7 +462,6 @@ rc_runlevel_get(void)
|
||||
|
||||
return runlevel;
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_get)
|
||||
|
||||
bool
|
||||
rc_runlevel_set(const char *runlevel)
|
||||
@@ -479,7 +474,6 @@ rc_runlevel_set(const char *runlevel)
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_set)
|
||||
|
||||
bool
|
||||
rc_runlevel_exists(const char *runlevel)
|
||||
@@ -494,7 +488,6 @@ rc_runlevel_exists(const char *runlevel)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_exists)
|
||||
|
||||
bool
|
||||
rc_runlevel_stack(const char *dst, const char *src)
|
||||
@@ -507,7 +500,6 @@ rc_runlevel_stack(const char *dst, const char *src)
|
||||
snprintf(d, sizeof(s), "%s/%s/%s", RC_RUNLEVELDIR, dst, src);
|
||||
return (symlink(s, d) == 0 ? true : false);
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_stack)
|
||||
|
||||
bool
|
||||
rc_runlevel_unstack(const char *dst, const char *src)
|
||||
@@ -517,7 +509,6 @@ rc_runlevel_unstack(const char *dst, const char *src)
|
||||
snprintf(path, sizeof(path), "%s/%s/%s", RC_RUNLEVELDIR, dst, src);
|
||||
return (unlink(path) == 0 ? true : false);
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_unstack)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_runlevel_stacks(const char *runlevel)
|
||||
@@ -530,7 +521,6 @@ rc_runlevel_stacks(const char *runlevel)
|
||||
rc_stringlist_free(ancestor_list);
|
||||
return stack;
|
||||
}
|
||||
librc_hidden_def(rc_runlevel_stacks)
|
||||
|
||||
/* Resolve a service name to its full path */
|
||||
char *
|
||||
@@ -584,7 +574,6 @@ rc_service_resolve(const char *service)
|
||||
|
||||
return NULL;
|
||||
}
|
||||
librc_hidden_def(rc_service_resolve)
|
||||
|
||||
bool
|
||||
rc_service_exists(const char *service)
|
||||
@@ -623,7 +612,6 @@ rc_service_exists(const char *service)
|
||||
free(file);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_exists)
|
||||
|
||||
#define OPTSTR \
|
||||
". '%s'; echo $extra_commands $extra_started_commands $extra_stopped_commands"
|
||||
@@ -665,7 +653,6 @@ rc_service_extra_commands(const char *service)
|
||||
free(cmd);
|
||||
return commands;
|
||||
}
|
||||
librc_hidden_def(rc_service_extra_commands)
|
||||
|
||||
#define DESCSTR ". '%s'; echo \"${description%s%s}\""
|
||||
char *
|
||||
@@ -695,7 +682,6 @@ rc_service_description(const char *service, const char *option)
|
||||
free(cmd);
|
||||
return desc;
|
||||
}
|
||||
librc_hidden_def(rc_service_description)
|
||||
|
||||
bool
|
||||
rc_service_in_runlevel(const char *service, const char *runlevel)
|
||||
@@ -706,7 +692,6 @@ rc_service_in_runlevel(const char *service, const char *runlevel)
|
||||
runlevel, basename_c(service));
|
||||
return exists(file);
|
||||
}
|
||||
librc_hidden_def(rc_service_in_runlevel)
|
||||
|
||||
bool
|
||||
rc_service_mark(const char *service, const RC_SERVICE state)
|
||||
@@ -826,7 +811,6 @@ rc_service_mark(const char *service, const RC_SERVICE state)
|
||||
free(init);
|
||||
return true;
|
||||
}
|
||||
librc_hidden_def(rc_service_mark)
|
||||
|
||||
RC_SERVICE
|
||||
rc_service_state(const char *service)
|
||||
@@ -869,7 +853,6 @@ rc_service_state(const char *service)
|
||||
|
||||
return state;
|
||||
}
|
||||
librc_hidden_def(rc_service_state)
|
||||
|
||||
char *
|
||||
rc_service_value_get(const char *service, const char *option)
|
||||
@@ -884,7 +867,6 @@ rc_service_value_get(const char *service, const char *option)
|
||||
|
||||
return buffer;
|
||||
}
|
||||
librc_hidden_def(rc_service_value_get)
|
||||
|
||||
bool
|
||||
rc_service_value_set(const char *service, const char *option,
|
||||
@@ -909,7 +891,6 @@ rc_service_value_set(const char *service, const char *option,
|
||||
}
|
||||
return true;
|
||||
}
|
||||
librc_hidden_def(rc_service_value_set)
|
||||
|
||||
|
||||
bool
|
||||
@@ -936,7 +917,6 @@ rc_service_schedule_start(const char *service, const char *service_to_start)
|
||||
free(init);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_schedule_start)
|
||||
|
||||
bool
|
||||
rc_service_schedule_clear(const char *service)
|
||||
@@ -949,7 +929,6 @@ rc_service_schedule_clear(const char *service)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
librc_hidden_def(rc_service_schedule_clear)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_services_in_runlevel(const char *runlevel)
|
||||
@@ -987,7 +966,6 @@ rc_services_in_runlevel(const char *runlevel)
|
||||
list = rc_stringlist_new();
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_services_in_runlevel)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_services_in_runlevel_stacked(const char *runlevel)
|
||||
@@ -1004,7 +982,6 @@ rc_services_in_runlevel_stacked(const char *runlevel)
|
||||
}
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_services_in_runlevel_stacked)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_services_in_state(RC_SERVICE state)
|
||||
@@ -1038,7 +1015,6 @@ rc_services_in_state(RC_SERVICE state)
|
||||
rc_stringlist_free(dirs);
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_services_in_state)
|
||||
|
||||
bool
|
||||
rc_service_add(const char *runlevel, const char *service)
|
||||
@@ -1084,7 +1060,6 @@ rc_service_add(const char *runlevel, const char *service)
|
||||
free(init);
|
||||
return retval;
|
||||
}
|
||||
librc_hidden_def(rc_service_add)
|
||||
|
||||
bool
|
||||
rc_service_delete(const char *runlevel, const char *service)
|
||||
@@ -1097,7 +1072,6 @@ rc_service_delete(const char *runlevel, const char *service)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
librc_hidden_def(rc_service_delete)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_services_scheduled_by(const char *service)
|
||||
@@ -1116,7 +1090,6 @@ rc_services_scheduled_by(const char *service)
|
||||
rc_stringlist_free(dirs);
|
||||
return list;
|
||||
}
|
||||
librc_hidden_def(rc_services_scheduled_by)
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_services_scheduled(const char *service)
|
||||
@@ -1127,4 +1100,3 @@ rc_services_scheduled(const char *service)
|
||||
basename_c(service));
|
||||
return ls_dir(dir, LS_INITD);
|
||||
}
|
||||
librc_hidden_def(rc_services_scheduled)
|
||||
|
||||
@@ -56,67 +56,4 @@
|
||||
#include "rc.h"
|
||||
#include "rc-misc.h"
|
||||
|
||||
#include "hidden-visibility.h"
|
||||
#define librc_hidden_proto(x) hidden_proto(x)
|
||||
#define librc_hidden_def(x) hidden_def(x)
|
||||
|
||||
librc_hidden_proto(rc_conf_value)
|
||||
librc_hidden_proto(rc_config_list)
|
||||
librc_hidden_proto(rc_config_load)
|
||||
librc_hidden_proto(rc_config_value)
|
||||
librc_hidden_proto(rc_deptree_depend)
|
||||
librc_hidden_proto(rc_deptree_depends)
|
||||
librc_hidden_proto(rc_deptree_free)
|
||||
librc_hidden_proto(rc_deptree_load)
|
||||
librc_hidden_proto(rc_deptree_load_file)
|
||||
librc_hidden_proto(rc_deptree_order)
|
||||
librc_hidden_proto(rc_deptree_update)
|
||||
librc_hidden_proto(rc_deptree_update_needed)
|
||||
librc_hidden_proto(rc_find_pids)
|
||||
librc_hidden_proto(rc_getfile)
|
||||
librc_hidden_proto(rc_getline)
|
||||
librc_hidden_proto(rc_newer_than)
|
||||
librc_hidden_proto(rc_proc_getent)
|
||||
librc_hidden_proto(rc_older_than)
|
||||
librc_hidden_proto(rc_runlevel_exists)
|
||||
librc_hidden_proto(rc_runlevel_get)
|
||||
librc_hidden_proto(rc_runlevel_list)
|
||||
librc_hidden_proto(rc_runlevel_set)
|
||||
librc_hidden_proto(rc_runlevel_stack)
|
||||
librc_hidden_proto(rc_runlevel_stacks)
|
||||
librc_hidden_proto(rc_runlevel_starting)
|
||||
librc_hidden_proto(rc_runlevel_stopping)
|
||||
librc_hidden_proto(rc_runlevel_unstack)
|
||||
librc_hidden_proto(rc_service_add)
|
||||
librc_hidden_proto(rc_service_daemons_crashed)
|
||||
librc_hidden_proto(rc_service_daemon_set)
|
||||
librc_hidden_proto(rc_service_delete)
|
||||
librc_hidden_proto(rc_service_description)
|
||||
librc_hidden_proto(rc_service_exists)
|
||||
librc_hidden_proto(rc_service_extra_commands)
|
||||
librc_hidden_proto(rc_service_in_runlevel)
|
||||
librc_hidden_proto(rc_service_mark)
|
||||
librc_hidden_proto(rc_service_resolve)
|
||||
librc_hidden_proto(rc_service_schedule_clear)
|
||||
librc_hidden_proto(rc_service_schedule_start)
|
||||
librc_hidden_proto(rc_services_in_runlevel)
|
||||
librc_hidden_proto(rc_services_in_runlevel_stacked)
|
||||
librc_hidden_proto(rc_services_in_state)
|
||||
librc_hidden_proto(rc_services_scheduled)
|
||||
librc_hidden_proto(rc_services_scheduled_by)
|
||||
librc_hidden_proto(rc_service_started_daemon)
|
||||
librc_hidden_proto(rc_service_state)
|
||||
librc_hidden_proto(rc_service_value_get)
|
||||
librc_hidden_proto(rc_service_value_set)
|
||||
librc_hidden_proto(rc_stringlist_add)
|
||||
librc_hidden_proto(rc_stringlist_addu)
|
||||
librc_hidden_proto(rc_stringlist_delete)
|
||||
librc_hidden_proto(rc_stringlist_find)
|
||||
librc_hidden_proto(rc_stringlist_free)
|
||||
librc_hidden_proto(rc_stringlist_new)
|
||||
librc_hidden_proto(rc_stringlist_split)
|
||||
librc_hidden_proto(rc_stringlist_sort)
|
||||
librc_hidden_proto(rc_sys)
|
||||
librc_hidden_proto(rc_yesno)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -14,7 +14,8 @@ SRCS+= rc-selinux.c
|
||||
endif
|
||||
|
||||
ifeq (${OS},Linux)
|
||||
SRCS+= kill_all.c openrc-init.c openrc-shutdown.c broadcast.c rc-wtmp.c
|
||||
SRCS+= kill_all.c openrc-init.c openrc-shutdown.c rc-sysvinit.c broadcast.c \
|
||||
rc-wtmp.c
|
||||
endif
|
||||
|
||||
CLEANFILES= version.h rc-selinux.o
|
||||
@@ -112,7 +113,7 @@ veinfo vewarn vebegin veend vewend veindent veoutdent: do_e.o rc-misc.o
|
||||
fstabinfo: fstabinfo.o _usage.o rc-misc.o
|
||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||
|
||||
openrc-init: openrc-init.o rc-wtmp.o
|
||||
openrc-init: openrc-init.o rc-plugin.o rc-wtmp.o
|
||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||
|
||||
is_newer_than: is_newer_than.o rc-misc.o
|
||||
@@ -134,7 +135,7 @@ mountinfo: mountinfo.o _usage.o rc-misc.o
|
||||
openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o
|
||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||
|
||||
openrc-shutdown: openrc-shutdown.o rc-misc.o _usage.o broadcast.o rc-wtmp.o
|
||||
openrc-shutdown: openrc-shutdown.o rc-misc.o _usage.o broadcast.o rc-wtmp.o rc-sysvinit.o
|
||||
${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD}
|
||||
|
||||
openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o
|
||||
|
||||
@@ -35,9 +35,9 @@
|
||||
|
||||
const char *applet = NULL;
|
||||
|
||||
static int syslog_decode(char *name, CODE *codetab)
|
||||
static int syslog_decode(char *name, const CODE *codetab)
|
||||
{
|
||||
CODE *c;
|
||||
const CODE *c;
|
||||
|
||||
if (isdigit((unsigned char)*name))
|
||||
return atoi(name);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <pwd.h>
|
||||
#include <signal.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
@@ -37,46 +38,52 @@
|
||||
|
||||
#include "helpers.h"
|
||||
#include "rc.h"
|
||||
#include "rc-plugin.h"
|
||||
#include "rc-wtmp.h"
|
||||
#include "version.h"
|
||||
|
||||
static const char *path_default = "/sbin:/usr/sbin:/bin:/usr/bin";
|
||||
static const char *rc_default_runlevel = "default";
|
||||
|
||||
static pid_t do_openrc(const char *runlevel)
|
||||
static void do_openrc(const char *runlevel)
|
||||
{
|
||||
pid_t pid;
|
||||
sigset_t signals;
|
||||
sigset_t all_signals;
|
||||
sigset_t our_signals;
|
||||
|
||||
sigfillset(&all_signals);
|
||||
/* block all signals */
|
||||
sigprocmask(SIG_BLOCK, &all_signals, &our_signals);
|
||||
pid = fork();
|
||||
switch (pid) {
|
||||
case -1:
|
||||
perror("fork");
|
||||
exit(1);
|
||||
break;
|
||||
case 0:
|
||||
setsid();
|
||||
/* unblock all signals */
|
||||
sigemptyset(&signals);
|
||||
sigprocmask(SIG_SETMASK, &signals, NULL);
|
||||
sigprocmask(SIG_UNBLOCK, &all_signals, NULL);
|
||||
printf("Starting %s runlevel\n", runlevel);
|
||||
execlp("openrc", "openrc", runlevel, NULL);
|
||||
perror("exec");
|
||||
exit(1);
|
||||
break;
|
||||
default:
|
||||
/* restore our signal mask */
|
||||
sigprocmask(SIG_SETMASK, &our_signals, NULL);
|
||||
while (waitpid(pid, NULL, 0) != pid)
|
||||
if (errno == ECHILD)
|
||||
break;
|
||||
break;
|
||||
}
|
||||
return pid;
|
||||
}
|
||||
|
||||
static void init(const char *default_runlevel)
|
||||
{
|
||||
const char *runlevel = NULL;
|
||||
pid_t pid;
|
||||
|
||||
pid = do_openrc("sysinit");
|
||||
waitpid(pid, NULL, 0);
|
||||
pid = do_openrc("boot");
|
||||
waitpid(pid, NULL, 0);
|
||||
do_openrc("sysinit");
|
||||
do_openrc("boot");
|
||||
if (default_runlevel)
|
||||
runlevel = default_runlevel;
|
||||
else
|
||||
@@ -87,8 +94,7 @@ static void init(const char *default_runlevel)
|
||||
printf("%s is an invalid runlevel\n", runlevel);
|
||||
runlevel = rc_default_runlevel;
|
||||
}
|
||||
pid = do_openrc(runlevel);
|
||||
waitpid(pid, NULL, 0);
|
||||
do_openrc(runlevel);
|
||||
log_wtmp("reboot", "~~", 0, RUN_LVL, "~~");
|
||||
}
|
||||
|
||||
@@ -100,11 +106,9 @@ static void handle_reexec(char *my_name)
|
||||
|
||||
static void handle_shutdown(const char *runlevel, int cmd)
|
||||
{
|
||||
pid_t pid;
|
||||
struct timespec ts;
|
||||
|
||||
pid = do_openrc(runlevel);
|
||||
while (waitpid(pid, NULL, 0) != pid);
|
||||
do_openrc(runlevel);
|
||||
printf("Sending the final term signal\n");
|
||||
kill(-1, SIGTERM);
|
||||
ts.tv_sec = 3;
|
||||
@@ -116,12 +120,68 @@ static void handle_shutdown(const char *runlevel, int cmd)
|
||||
reboot(cmd);
|
||||
}
|
||||
|
||||
static void handle_single(void)
|
||||
static void run_program(const char *prog)
|
||||
{
|
||||
sigset_t full;
|
||||
sigset_t old;
|
||||
pid_t pid;
|
||||
|
||||
pid = do_openrc("single");
|
||||
while (waitpid(pid, NULL, 0) != pid);
|
||||
/* We need to block signals until we have forked */
|
||||
sigfillset(&full);
|
||||
sigprocmask(SIG_SETMASK, &full, &old);
|
||||
pid = fork();
|
||||
if (pid == -1) {
|
||||
perror("init");
|
||||
return;
|
||||
}
|
||||
if (pid == 0) {
|
||||
/* Unmask signals */
|
||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||
execl(prog, prog, (char *)NULL);
|
||||
perror("init");
|
||||
exit(1);
|
||||
}
|
||||
/* Unmask signals and wait for child */
|
||||
sigprocmask(SIG_SETMASK, &old, NULL);
|
||||
if (rc_waitpid(pid) == -1)
|
||||
perror("init");
|
||||
}
|
||||
|
||||
static void open_shell(void)
|
||||
{
|
||||
const char *shell;
|
||||
struct passwd *pw;
|
||||
|
||||
#ifdef __linux__
|
||||
const char *sys = rc_sys();
|
||||
|
||||
/* VSERVER systems cannot really drop to shells */
|
||||
if (sys && strcmp(sys, RC_SYS_VSERVER) == 0)
|
||||
{
|
||||
execlp("halt", "halt", "-f", (char *) NULL);
|
||||
perror("init");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
shell = rc_conf_value("rc_shell");
|
||||
/* No shell set, so obey env, then passwd, then default to /bin/sh */
|
||||
if (!shell) {
|
||||
shell = getenv("SHELL");
|
||||
if (!shell) {
|
||||
pw = getpwuid(getuid());
|
||||
if (pw)
|
||||
shell = pw->pw_shell;
|
||||
if (!shell)
|
||||
shell = "/bin/sh";
|
||||
}
|
||||
}
|
||||
run_program(shell);
|
||||
}
|
||||
|
||||
static void handle_single(void)
|
||||
{
|
||||
do_openrc("single");
|
||||
}
|
||||
|
||||
static void reap_zombies(void)
|
||||
@@ -249,8 +309,11 @@ int main(int argc, char **argv)
|
||||
handle_shutdown("reboot", RB_AUTOBOOT);
|
||||
else if (strcmp(buf, "reexec") == 0)
|
||||
handle_reexec(argv[0]);
|
||||
else if (strcmp(buf, "single") == 0)
|
||||
else if (strcmp(buf, "single") == 0) {
|
||||
handle_single();
|
||||
open_shell();
|
||||
init(default_runlevel);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -35,8 +35,9 @@
|
||||
#include "rc.h"
|
||||
#include "helpers.h"
|
||||
#include "rc-misc.h"
|
||||
#include "_usage.h"
|
||||
#include "rc-sysvinit.h"
|
||||
#include "rc-wtmp.h"
|
||||
#include "_usage.h"
|
||||
|
||||
const char *applet = NULL;
|
||||
const char *extraopts = NULL;
|
||||
@@ -328,15 +329,30 @@ int main(int argc, char **argv)
|
||||
syslog(LOG_NOTICE, "The system will %s now", state);
|
||||
unlink(nologin_file);
|
||||
unlink(shutdown_pid);
|
||||
if (do_halt)
|
||||
send_cmd("halt");
|
||||
else if (do_kexec)
|
||||
if (do_halt) {
|
||||
if (exists("/run/initctl")) {
|
||||
sysvinit_setenv("INIT_HALT", "HALT");
|
||||
sysvinit_runlevel('0');
|
||||
} else
|
||||
send_cmd("halt");
|
||||
} else if (do_kexec)
|
||||
send_cmd("kexec");
|
||||
else if (do_poweroff)
|
||||
send_cmd("poweroff");
|
||||
else if (do_reboot)
|
||||
send_cmd("reboot");
|
||||
else if (do_single)
|
||||
send_cmd("single");
|
||||
else if (do_poweroff) {
|
||||
if (exists("/run/initctl")) {
|
||||
sysvinit_setenv("INIT_HALT", "POWEROFF");
|
||||
sysvinit_runlevel('0');
|
||||
} else
|
||||
send_cmd("poweroff");
|
||||
} else if (do_reboot) {
|
||||
if (exists("/run/initctl"))
|
||||
sysvinit_runlevel('6');
|
||||
else
|
||||
send_cmd("reboot");
|
||||
} else if (do_single) {
|
||||
if (exists("/run/initctl"))
|
||||
sysvinit_runlevel('S');
|
||||
else
|
||||
send_cmd("single");
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
102
src/rc/rc-sysvinit.c
Normal file
102
src/rc/rc-sysvinit.c
Normal file
@@ -0,0 +1,102 @@
|
||||
/*
|
||||
* rc-sysvinit.c
|
||||
* Helper to send a runlevel change to sysvinit
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 The OpenRC Authors.
|
||||
* See the Authors file at the top-level directory of this distribution and
|
||||
* https://github.com/OpenRC/openrc/blob/master/AUTHORS
|
||||
*
|
||||
* This file is part of OpenRC. It is subject to the license terms in
|
||||
* the LICENSE file found in the top-level directory of this
|
||||
* distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
|
||||
* This file may not be copied, modified, propagated, or distributed
|
||||
* except according to the terms contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "einfo.h"
|
||||
#include "rc-sysvinit.h"
|
||||
|
||||
static void sysvinit_send_cmd(struct init_request *request)
|
||||
{
|
||||
int fd;
|
||||
char *p;
|
||||
size_t bytes;
|
||||
ssize_t r;
|
||||
|
||||
fd = open("/run/initctl", O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY);
|
||||
if (fd < 0) {
|
||||
if (errno != ENOENT)
|
||||
eerror("Failed to open initctl fifo: %s", strerror(errno));
|
||||
return;
|
||||
}
|
||||
p = (char *) request;
|
||||
bytes = sizeof(*request);
|
||||
do {
|
||||
r = write(fd, p, bytes);
|
||||
if (r < 0) {
|
||||
if ((errno == EAGAIN) || (errno == EINTR))
|
||||
continue;
|
||||
eerror("Failed to write to /run/initctl: %s", strerror(errno));
|
||||
return;
|
||||
}
|
||||
p += r;
|
||||
bytes -= r;
|
||||
} while (bytes > 0);
|
||||
}
|
||||
|
||||
void sysvinit_runlevel(char rl)
|
||||
{
|
||||
struct init_request request;
|
||||
|
||||
if (!rl)
|
||||
return;
|
||||
|
||||
request = (struct init_request) {
|
||||
.magic = INIT_MAGIC,
|
||||
.sleeptime = 0,
|
||||
.cmd = INIT_CMD_RUNLVL,
|
||||
.runlevel = rl,
|
||||
};
|
||||
sysvinit_send_cmd(&request);
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set environment variables in the init process.
|
||||
*/
|
||||
void sysvinit_setenv(const char *name, const char *value)
|
||||
{
|
||||
struct init_request request;
|
||||
size_t nl;
|
||||
size_t vl;
|
||||
|
||||
memset(&request, 0, sizeof(request));
|
||||
request.magic = INIT_MAGIC;
|
||||
request.cmd = INIT_CMD_SETENV;
|
||||
nl = strlen(name);
|
||||
if (value)
|
||||
vl = strlen(value);
|
||||
else
|
||||
vl = 0;
|
||||
|
||||
if (nl + vl + 3 >= (int)sizeof(request.i.data))
|
||||
return;
|
||||
|
||||
memcpy(request.i.data, name, nl);
|
||||
if (value) {
|
||||
request.i.data[nl] = '=';
|
||||
memcpy(request.i.data + nl + 1, value, vl);
|
||||
}
|
||||
sysvinit_send_cmd(&request);
|
||||
return;
|
||||
}
|
||||
72
src/rc/rc-sysvinit.h
Normal file
72
src/rc/rc-sysvinit.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/*
|
||||
* rc-sysvinit.h - Interface to communicate with sysvinit via /run/initctl.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright (c) 2019 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_SYSVINIT_H
|
||||
#define _RC_SYSVINIT_H
|
||||
|
||||
/*
|
||||
* The #defines and structures below are taken from initreq.h in
|
||||
* sysvinit and must be used by any program wishing to communicate with
|
||||
* it.
|
||||
*/
|
||||
|
||||
#define INIT_MAGIC 0x03091969
|
||||
#define INIT_CMD_START 0
|
||||
#define INIT_CMD_RUNLVL 1
|
||||
#define INIT_CMD_POWERFAIL 2
|
||||
#define INIT_CMD_POWERFAILNOW 3
|
||||
#define INIT_CMD_POWEROK 4
|
||||
#define INIT_CMD_BSD 5
|
||||
#define INIT_CMD_SETENV 6
|
||||
#define INIT_CMD_UNSETENV 7
|
||||
|
||||
/*
|
||||
* This is what BSD 4.4 uses when talking to init.
|
||||
* Linux doesn't use this right now.
|
||||
*/
|
||||
struct init_request_bsd {
|
||||
char gen_id[8]; /* Beats me.. telnetd uses "fe" */
|
||||
char tty_id[16]; /* Tty name minus /dev/tty */
|
||||
char host[64]; /* Hostname */
|
||||
char term_type[16]; /* Terminal type */
|
||||
int signal; /* Signal to send */
|
||||
int pid; /* Process to send to */
|
||||
char exec_name[128]; /* Program to execute */
|
||||
char reserved[128]; /* For future expansion. */
|
||||
};
|
||||
|
||||
/*
|
||||
* Because of legacy interfaces, "runlevel" and "sleeptime"
|
||||
* aren't in a seperate struct in the union.
|
||||
*
|
||||
* The weird sizes are because init expects the whole
|
||||
* struct to be 384 bytes.
|
||||
*/
|
||||
struct init_request {
|
||||
int magic; /* Magic number */
|
||||
int cmd; /* What kind of request */
|
||||
int runlevel; /* Runlevel to change to */
|
||||
int sleeptime; /* Time between TERM and KILL */
|
||||
union {
|
||||
struct init_request_bsd bsd;
|
||||
char data[368];
|
||||
} i;
|
||||
};
|
||||
|
||||
void sysvinit_runlevel(char rl);
|
||||
void sysvinit_setenv(const char *name, const char *value);
|
||||
|
||||
#endif
|
||||
@@ -20,7 +20,7 @@
|
||||
* except according to the terms contained in the LICENSE file.
|
||||
*/
|
||||
|
||||
const char rc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
static const char rc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
@@ -669,7 +669,7 @@ int main(int argc, char **argv)
|
||||
nav[len++] = p;
|
||||
for (i = 0; i < opt; i++)
|
||||
nav[i + len] = argv[i];
|
||||
nav[i + len] = '\0';
|
||||
nav[i + len] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -835,7 +835,7 @@ int main(int argc, char **argv)
|
||||
|
||||
case 'm': /* --respawn-max count */
|
||||
n = sscanf(optarg, "%d", &respawn_max);
|
||||
if (n != 1 || respawn_max < 1)
|
||||
if (n != 1 || respawn_max < 0)
|
||||
eerrorx("Invalid respawn-max value '%s'", optarg);
|
||||
break;
|
||||
|
||||
|
||||
@@ -92,7 +92,8 @@ respawn_max=x
|
||||
```
|
||||
|
||||
This is the maximum number of times to respawn a supervised process
|
||||
during the given respawn period. The default is unlimited.
|
||||
during the given respawn period.
|
||||
The default is 10. 0 means unlimited.
|
||||
|
||||
``` sh
|
||||
respawn_period=seconds
|
||||
@@ -101,6 +102,10 @@ respawn_period=seconds
|
||||
This works in conjunction with respawn_max and respawn_delay above to
|
||||
decide if a process should not be respawned for some reason.
|
||||
|
||||
For example, if respawn_period is 60, respawn_max is 2 and respawn_delay
|
||||
is 3 and a process dies more than 4 times, the process will not be
|
||||
respawned and the supervisor will terminate.
|
||||
For example, if respawn period is 10 and respawn_max is 2, the process
|
||||
would need to die 3 times within 10 seconds to no longer be respawned.
|
||||
Note that respawn_delay will delay all of this, so in the above scenario
|
||||
a respawn_delay of greater than 5 will cause infinite respawns.
|
||||
|
||||
By default, this is unset and respawn_max applies to the entire lifetime
|
||||
of the service.
|
||||
|
||||
@@ -2,7 +2,7 @@ MK= ../../mk
|
||||
include ${MK}/os.mk
|
||||
|
||||
DIR= ${DATADIR}/support/sysvinit
|
||||
INC= inittab README.md
|
||||
INC= halt.sh inittab README.md
|
||||
|
||||
|
||||
include ${MK}/scripts.mk
|
||||
|
||||
6
support/sysvinit/halt.sh
Normal file
6
support/sysvinit/halt.sh
Normal file
@@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
if [ "$INIT_HALT" = HALT ]; then
|
||||
exec /sbin/halt -dhn
|
||||
else
|
||||
exec /sbin/poweroff -dhn
|
||||
fi
|
||||
@@ -10,13 +10,15 @@ si::sysinit:/sbin/openrc sysinit
|
||||
# Further system initialization, brings up the boot runlevel.
|
||||
rc::bootwait:/sbin/openrc boot
|
||||
|
||||
l0u:0:wait:/sbin/telinit u
|
||||
l0:0:wait:/sbin/openrc shutdown
|
||||
l0s:0:wait:/sbin/halt -dhip
|
||||
l0s:0:wait:/sbin/halt.sh
|
||||
l1:S1:wait:/sbin/openrc single
|
||||
l2:2:wait:/sbin/openrc nonetwork
|
||||
l3:3:wait:/sbin/openrc default
|
||||
l4:4:wait:/sbin/openrc default
|
||||
l5:5:wait:/sbin/openrc default
|
||||
l6u:6:wait:/sbin/telinit u
|
||||
l6:6:wait:/sbin/openrc reboot
|
||||
l6r:6:wait:/sbin/reboot -d
|
||||
#z6:6:respawn:/sbin/sulogin
|
||||
@@ -34,8 +36,8 @@ c5:2345:respawn:/sbin/agetty 38400 tty5 linux
|
||||
c6:2345:respawn:/sbin/agetty 38400 tty6 linux
|
||||
|
||||
# SERIAL CONSOLES
|
||||
#s0:12345:respawn:/sbin/agetty 9600 ttyS0 vt100
|
||||
#s1:12345:respawn:/sbin/agetty 9600 ttyS1 vt100
|
||||
#s0:12345:respawn:/sbin/agetty -L 9600 ttyS0 vt100
|
||||
#s1:12345:respawn:/sbin/agetty -L 9600 ttyS1 vt100
|
||||
|
||||
# What to do at the "Three Finger Salute".
|
||||
ca:12345:ctrlaltdel:/sbin/shutdown -r now
|
||||
|
||||
Reference in New Issue
Block a user