Compare commits

..

23 Commits
0.41 ... 0.42.x

Author SHA1 Message Date
William Hubbs
d8e4da5e5d version 0.42.1 2019-08-20 16:23:37 -05:00
William Hubbs
b7b7d6990e Update ChangeLog 2019-08-20 16:18:33 -05:00
William Hubbs
a31008d197 fix clang build 2019-08-20 16:13:50 -05:00
William Hubbs
a177d15641 version 0.42 2019-08-20 13:13:30 -05:00
William Hubbs
2b4c486043 Update ChangeLog 2019-08-20 13:09:50 -05:00
William Hubbs
ed24d28163 update sysvinit support files 2019-08-20 13:08:44 -05:00
William Hubbs
1bc96141e6 fix single user mode 2019-08-19 14:55:54 -05:00
William Hubbs
c7000aeaab optimize loops for installing gettys 2019-08-15 18:40:51 -05:00
William Hubbs
5c5129b534 Remove "single" runlevel directory
Single user mode should be handled in the init process directly.
2019-08-15 18:40:51 -05:00
William Hubbs
0dabda6f6f 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.
2019-08-15 12:02:30 -05:00
William Hubbs
92de9a693b Add documentation for openrc-init and update the NEWS file 2019-08-02 16:29:03 -05:00
William Hubbs
a71aebcae1 init.d/agetty: provide the getty virtual service 2019-07-29 17:39:11 -05:00
William Hubbs
61596b16d2 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.
2019-07-29 17:38:47 -05:00
William Hubbs
104eb3420b Add the "single" runlevel 2019-07-29 16:27:14 -05:00
Chloe Kudryavtsev
70b8df3e9c clarify supervise-daemon-guide
1. The given default for respawn_max is wrong.
2. The example for respawn_period is nonsensical.

This fixes #311.
2019-07-26 12:52:52 -05:00
William Hubbs
cac41092e4 add ability for openrc-shutdown to communicate with sysvinit
This fixes #315.
2019-07-25 14:47:18 -05:00
Martin Wilke
7ddc281ab6 Fix build with Clang
This fixes #313.
2019-07-24 12:32:23 -05:00
William Hubbs
c092ff6da1 Add Sony Interactive Entertainment as an author 2019-07-22 10:46:32 -05:00
William Hubbs
54780a4582 supervise-daemon: allow --respawn-max to be zero 2019-03-29 14:09:08 -05:00
William Hubbs
44f5a72d1a 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.
2019-02-26 17:47:55 -06:00
William Hubbs
0d378974bf 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.
2019-02-25 18:55:13 -06:00
William Hubbs
028da5c2e3 librc: fix potential buffer overflow in pid_is_argv
This fixes #299.
2019-02-23 17:44:07 -06:00
William Hubbs
d8dbb890aa Revert "src/librc/librc-daemon.c: fix buffer overrun in pid_is_argv"
This reverts commit 084877eb52.
The mentioned commit caused some systems to have some services reported
as crashed.

This fixes #297.
This fixes #298.
2019-02-23 16:24:55 -06:00
28 changed files with 574 additions and 920 deletions

View File

@@ -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
View File

@@ -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

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.41
VERSION= 0.42.1
PKG= ${NAME}-${VERSION}

View File

@@ -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
View 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.

View File

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

View File

@@ -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::

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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

View File

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

View File

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

View File

@@ -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
View 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
View 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

View File

@@ -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>

View File

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

View File

@@ -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;

View File

@@ -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.

View File

@@ -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
View File

@@ -0,0 +1,6 @@
#!/bin/sh
if [ "$INIT_HALT" = HALT ]; then
exec /sbin/halt -dhn
else
exec /sbin/poweroff -dhn
fi

View File

@@ -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