Go to file
Dominique Martinet a3c721b682 openrc-run: remove kludge in restart --no-deps
restarting a service with --no-deps ran into a "hairy workaround", which
had a few problems discussed in [1]:
 - it ignores --dry-run, really restarting the requested service
 - if the service was stopped, the program is started but the service
status stays stopped. This makes long-lived services impossible to
(re)start again (pid already exists and running), and the service also
won't stop on shutdown.

The kludge had a long comment describing the following situation:
 - openvpn needs net and dns
 - net restarts dns
 - dns needs net

If the restart in net handled deps, openrc would deadlock waiting for
net in dns' restart, as net won't be started until that is done.

Restarting with --nodeps works around the deadlock, but can display
errors without the kludge (note that the services did start properly
anyway, the problem is that the default service path tries to lock dns
twice from openvn's dep's start and net's start's restart):
---
alpine:~# rc-service openvn start
openvn                   | * Caching service dependencies ...                                                                                                      [ ok ]
net                      |net starting
net                      |dns                       | * Call to flock failed: Resource temporarily unavailable
net                      |dns                       | * ERROR: dns stopped by something else
net                      |net started
dns                      |dns started
openvn                   |openvn started
alpine:~# rc-status | grep s[1-3]
 net                                                               [  started  ]
 dns                                                               [  started  ]
 openvn                                                            [  started  ]
---

Locking again in restart --nodep can fail in two patterns:
 - openvpn's need dependency start was first, and the restart in net
failed (case above): we can just silence locking failures and exit quietly
with restart --no-deps, which is not worse than trying to restart while
another process hold the lock.
 - the restart in net's start was first, and openvpn's need dependency
start failed: not much can be done here short of adding a new status
that a no-deps restart is in progress as in the comment, but this case
can actually just be solved by adjusting dependencies -- and it actually
has already been fixed: the current openvpn init script in alpine only
'use dns', so it will not try to start it, and that will start just
fine with openvpn -> net -> dns only each starting each other once
sequentially.

Another failure pattern is just starting dns directly: that will start
net, which will try to restart dns while we are starting it.
Silencing messages on restart also solves this.

Link: https://github.com/OpenRC/openrc/issues/224 [1]
2023-04-24 22:06:41 -05:00
.github/workflows simplify github workflows using the matrix syntax 2022-04-16 15:15:15 -05:00
bash-completion bash-completions/rc-service: don't use grep 2023-02-02 19:37:09 -05:00
ci rewrite tests (#515) 2022-04-16 15:13:08 -05:00
conf.d make the location of the swclock reference file configurable 2022-12-08 09:56:40 -06:00
etc rc.conf: note SSD_* vars need exporting 2023-04-17 23:53:18 -05:00
init.d init.d/rc.conf: make unicode default to yes 2023-03-07 00:48:43 -06:00
local.d migrate fully to meson build system 2022-04-06 10:51:55 -05:00
man man: update path to internal runtime state 2023-01-15 15:10:22 -05:00
pkgconfig migrate fully to meson build system 2022-04-06 10:51:55 -05:00
sh netmount: add fuse.glusterfs 2023-01-15 15:24:51 -05:00
src openrc-run: remove kludge in restart --no-deps 2023-04-24 22:06:41 -05:00
support multiple spelling and typo fixes 2022-04-30 21:32:32 -05:00
sysctl.d migrate fully to meson build system 2022-04-06 10:51:55 -05:00
test multiple spelling and typo fixes 2022-04-30 21:32:32 -05:00
tools restore the init symlink for sysvinit mode 2022-06-10 10:28:57 -05:00
zsh-completion migrate fully to meson build system 2022-04-06 10:51:55 -05:00
.cirrus.yml update cirrus ci to latest FreeBSD images 2023-01-24 11:32:11 -06:00
.clangd Add clangd support for development 2022-03-31 00:52:36 -05:00
.gitignore migrate fully to meson build system 2022-04-06 10:51:55 -05:00
.travis.yml update travis ci irc notifications 2021-08-14 15:05:07 -05:00
agetty-guide.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
AUTHORS Use seedrng for seeding the random number generator 2022-03-26 19:16:27 -05:00
BUSYBOX.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
CODE_OF_CONDUCT.md add CoC based on the Contributor Covenant project 2023-01-21 22:01:15 -06:00
FEATURE-REMOVAL-SCHEDULE.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
HISTORY.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
init-guide.md Delete stray text. 2020-01-11 11:15:56 -06:00
LICENSE LICENSE: Change year to 2023 (from 2015!!!) 2023-01-08 09:05:18 -05:00
meson_options.txt capabilities: Add support for Linux capabilities(7) 2021-12-23 17:29:10 -05:00
meson.build meson.build: add -Werror=... for modern C issues 2023-04-19 16:44:51 -04:00
NEWNET.md NEWNET.md: fix the title 2021-04-03 15:18:30 -05:00
NEWS.md update news 2023-04-18 00:13:16 -05:00
README.md migrate fully to meson build system 2022-04-06 10:51:55 -05:00
runit-guide.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
s6-guide.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
service-script-guide.md Add newline for want 2022-03-05 13:14:21 -05:00
STYLE-GUIDE.md Reformat and fix titles in documentation 2018-01-12 14:10:42 -06:00
supervise-daemon-guide.md multiple spelling and typo fixes 2022-04-30 21:32:32 -05:00
TODO Add a potential future problem I can see with metric calculation and interfaces that change often. 2012-03-02 19:51:09 +00:00
user-guide.md user-guide: clarify note for Runlevels/rc-update usage 2020-12-20 13:54:33 +01:00

OpenRC README

OpenRC is a dependency-based init system that works with the system-provided init program, normally /sbin/init.

building and installing

OpenRC uses the meson build system, so use the usual methods for this build system to build and install.

Notes

We don't support building a static OpenRC with PAM.

PKG_PREFIX should be set to where packages install to by default.

LOCAL_PREFIX should be set to where user maintained packages are. Only set LOCAL_PREFIX if different from PKG_PREFIX.

ROOTPREFIX should be set when the root path is different from '/'.

rc and rc.shutdown are the hooks from the BSD init into OpenRC.

devd.conf is modified from FreeBSD to call /etc/rc.devd which is a generic hook into OpenRC.

inittab is the same, but for SysVInit as used by most Linux distributions. This can be found in the support folder.

Obviously, if you're installing this onto a system that does not use OpenRC by default then you may wish to backup the above listed files, remove them and then install so that the OS hooks into OpenRC.

Discussions

We are testing discussions, so feel free to open topics there.

Reporting Bugs

Please report bugs on our bug tracker.

If you can contribute code , please feel free to do so by opening pull requests.

IRC Channel

We have an official irc channel, #openrc on the libera network. Please connect your irc client to irc.libera.chat and join #openrc on that network.