Compare commits
27 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a1acdeb92e | ||
|
|
b810473e4f | ||
|
|
627e925463 | ||
|
|
f5cf1136e7 | ||
|
|
a4038e1171 | ||
|
|
a0cf8f9124 | ||
|
|
9fedb3b40b | ||
|
|
635e33cdc8 | ||
|
|
bd9456ff31 | ||
|
|
33d3f33b3c | ||
|
|
ddb895b355 | ||
|
|
085d77f17e | ||
|
|
c831f1f994 | ||
|
|
591aea2821 | ||
|
|
c09eeca491 | ||
|
|
4cf6b0ecf7 | ||
|
|
ee944553a9 | ||
|
|
6cae41a4e6 | ||
|
|
960881fcfe | ||
|
|
d26013494d | ||
|
|
b29b2fb3cb | ||
|
|
7da72ce487 | ||
|
|
fc777aeaf3 | ||
|
|
9d53d436ae | ||
|
|
b81317bdf8 | ||
|
|
29f7e33592 | ||
|
|
850ca03077 |
426
ChangeLog
426
ChangeLog
@@ -1,46 +1,172 @@
|
||||
commit 248a7dcda351ef4172c28cc686bfe7b93fa522ff
|
||||
commit b810473e4f7218afbb7047890860c15a8c45472b
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
man/openrc-run.8: Clarify documentation on dependencies and keywords
|
||||
|
||||
Provide an example of using the -containers keyword and clarify
|
||||
documentation on some of the dependency functions.
|
||||
|
||||
commit 627e925463068e754ffd869f99a43634d6d9631e
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
add support for -containers keyword
|
||||
|
||||
commit f5cf1136e70502ee530f20f0434f312611b12b51
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Use systype variable for rc_sys call
|
||||
|
||||
commit a4038e11712d4c3f87f541f90be0b88f2903b82d
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc.conf.Linux: document the rkt keyword
|
||||
|
||||
commit a0cf8f91246ff4487b36d6432dab787e5b10957d
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add detection for rkt containers
|
||||
|
||||
commit 9fedb3b40b5983372b2c2de29dfe321c6dfaadf4
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add detection for docker containers
|
||||
|
||||
commit 635e33cdc8f18bb290756633ce0714c496383cfb
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc: comsolidate rc_sys_v1 and rc_sys_v2 into rc_sys
|
||||
|
||||
These functions were never meant to be used outside of OpenRC, and they
|
||||
were added when we thought we were going to do away with the automatic
|
||||
detection of subsystems. Since the autodetection is not going away, we
|
||||
can combine these functions into rc_sys.
|
||||
|
||||
commit bd9456ff3172cc88f32d67bd4e789e2beee43595
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
rc-functions.sh: add support for user-defined want dependencies
|
||||
|
||||
commit 33d3f33b3ca7dd2ce616b8182d588d0743c2f124
|
||||
Author: Ian Stakenvicius <axs@gentoo.org>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Implement "want" dependency
|
||||
|
||||
The want dependency is similar to the use dependency. If a service
|
||||
script, for example called service1, adds "want service2" to its depend
|
||||
function, OpenRC will attempt to start service2, if it exists on the
|
||||
system, when service1 is started.
|
||||
|
||||
However, service1 will start regardless of the status of
|
||||
service2.
|
||||
|
||||
X-Gentoo-Bug: 406021
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=406021
|
||||
|
||||
commit ddb895b355e02c9c07b00bfaf00d1bf8a7abbc03
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
conf.d/netmount: typo fix
|
||||
|
||||
X-Gentoo-Bug: 564846
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=564846
|
||||
|
||||
commit 085d77f17e3bedd23ffa96fe7e4eb8515ae8bfc6
|
||||
Author: Benda Xu <heroxbd@gentoo.org>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Standardize macro tests for gnu hurd
|
||||
|
||||
This also fixes breakage of GNU/hurd builds introduced by commit 3f82edbeb92.
|
||||
|
||||
commit c831f1f994e187afd8edfff15e4063b99440bbcb
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc: rework overriding rc.conf options from the kcl
|
||||
|
||||
Rename the rc_conf_override function to describe its purpose better,
|
||||
drop one conditional compile by making it available everywhere, and move
|
||||
the call to it after the optional rc.conf.d directory is processed.
|
||||
|
||||
commit 591aea28215a8b5ad8660184dc6f6f15ff0c18b4
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc: Remove redundant code from rc_config_load
|
||||
|
||||
commit c09eeca49145b034df6527c500099ba22f28e824
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add rc.conf.d support
|
||||
|
||||
This makes it possible to override settings in rc.conf by adding a
|
||||
directory @SYSCONFDIR@/rc.conf.d and putting files in this directory.
|
||||
The files will be processed in lexical order, and the last setting in
|
||||
these files will be used.
|
||||
|
||||
commit 4cf6b0ecf7f5b35a6d80d76c60e77c3e1c7fee5c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
consolefont: add after modules to dependencies
|
||||
|
||||
X-Gentoo-Bug: 559540
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=559540
|
||||
|
||||
commit ee944553a9ea35622046bd1ab5657fd416a7019a
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
bootmisc: optionally save the previous dmesg log
|
||||
|
||||
X-Gentoo-Bug: 561204
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=561204
|
||||
|
||||
commit 6cae41a4e63510cdcf3af1153d6e8300435e1838
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
etc/rc.conf: Clean up documentation for rc_hotplug
|
||||
|
||||
X-Gentoo-Bug: 554540
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=554540
|
||||
|
||||
commit 960881fcfe974178c0846a816663a258cdd488cc
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add net-online service
|
||||
|
||||
commit d26013494db8ea8699db9815ef4c4b0eb2f55e7f
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
mtab: typo fix
|
||||
|
||||
commit bb451fd7b4a200b63ba355ef2ea5ba35444f49e7
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
update ChangeLog
|
||||
|
||||
commit fb23cbe204b9adeb817e2f5be7a1bb827bb9a477
|
||||
commit b29b2fb3cb3e73b4453483ced908f0ef10e47e9c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
mtab: make /etc/mtab as a file configurable
|
||||
|
||||
commit a4346bb7f5fc09e81a61032ebc05f70692a4a04c
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
start work on 0.18.3
|
||||
|
||||
commit 776346e2cd4a43ffeaf268b8a89927d9f3f9eca5
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
update changelog
|
||||
|
||||
commit ce71ffbfbe5e44bb61a3f00faf8466071dab5ea7
|
||||
commit 7da72ce487a8d92d992e7fd3db881c198ae02609
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
openrc-run.sh: fix new required_* tests to exit properly
|
||||
|
||||
commit d9ee8ca5842983b59cc2c6e595d21e9a26a4f000
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
update changelog
|
||||
|
||||
commit 4e44e2cd73fb7fe08fb229bc3192d14f97dc2aa2
|
||||
commit fc777aeaf3e6e2d47f4599acfe6c8d1bf5bc760a
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -49,13 +175,13 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
X-Gentoo-Bug: 563010
|
||||
X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=563010
|
||||
|
||||
commit 88b807f9bcea5ec5bf5c5edb3c7161bf5c12d2d0
|
||||
commit 9d53d436ae22d6f0f6fc1537e836dd1b4d31cf35
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
increment version number
|
||||
sysfs: consolidate cgroup processing code in a single function
|
||||
|
||||
commit feba5d86b73b0df5587b178e80e85129a60861cd
|
||||
commit b81317bdf8e3eed8b8ff2bef757ba29f362ed297
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -66,7 +192,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
X-Gentoo-Bug: 562668
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562668
|
||||
|
||||
commit 3b1e96a6a3af3de68a18558f3a6ebac31430a1cd
|
||||
commit 29f7e335927d4c1fb151124de8cdf01fb87723fa
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -75,7 +201,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
X-Gentoo-Bug: 562320
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562320
|
||||
|
||||
commit 79998bdf9cb5089f423e00bfa4bc3816b64c58d4
|
||||
commit 850ca030777cb0c3e2fb03d9ab1f0ccee7b89e93
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
@@ -1086,237 +1212,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
This is a more descriptive name since this file only sets the gitver
|
||||
variable.
|
||||
|
||||
commit 30cc3cdb76a66c7c0f89a52db4e5cff77b570e31
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Make sysfs behave like netmount and localmount
|
||||
|
||||
sysfs now mounts all related sysfs file systems and returns success,
|
||||
like netmount and localmount.
|
||||
|
||||
Also, we now check to make sure the cgroups are not mounted before we
|
||||
mount them.
|
||||
|
||||
X-Gentoo-Bug: 530138
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=530138
|
||||
|
||||
commit dff6e4a004afeaa64f4ccb07c7d31bb821b043b4
|
||||
Author: S. Gilles <sgilles@umd.edu>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix mdoc warning for empty line in rc-update man page.
|
||||
|
||||
X-Gentoo-Bug: 529374
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=529374
|
||||
|
||||
commit 3fad31a994f7eb14f3f001f3980eb2b0ae8fe4f1
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
init.d: add osclock to ignore patterns
|
||||
|
||||
commit 8d0ca13fbd38e782bae655eca6646dabc8d63899
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
devfs: optionally add missing symbolic links
|
||||
|
||||
If symbolic links for /dev/{fd,stdin,stdout,stderr,core} do not exist
|
||||
once /dev is mounted, we should create them.
|
||||
|
||||
commit 93ba67eff9333e434c969bb8131467f777546764
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
netmount: unmount nfs file systems
|
||||
|
||||
commit 1932360adca3f9fe9b47bcfad7b8bd5efbd33bee
|
||||
Author: Jason Zaman <jason@perfinion.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Integrate the functionality from runscript_selinux.so
|
||||
|
||||
runscript used to dlopen() runscript_selinux.so. This adds equivalent
|
||||
functionality directly in to runscript instead. It authenticates with
|
||||
either PAM or shadow and optionally has a dep on audit.
|
||||
|
||||
X-Gentoo-Bug: 517450
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=517450
|
||||
|
||||
commit be952bebb3647069fb93b9791ee3439698f697ca
|
||||
Author: Alexander Vershilov <alexander.vershilov@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix incorrect handling of chroot option.
|
||||
Fixes #28.
|
||||
|
||||
X-Gentoo-Bug: #527370
|
||||
X-Gentoo-Bug-Url: https://bugs.gentoo.org/show_bug.cgi?id=527370
|
||||
|
||||
commit 0bfde472d0154f14ea88c0f5ddd21a510443d713
|
||||
Author: Ralph Sennhauser <sera@gentoo.org>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add osclock service
|
||||
|
||||
This scripts sole purpose is to "provide clock" on OSs that already
|
||||
take care of the clock being properly set.
|
||||
|
||||
commit ba0a11fc94d303e208dd364b06c1c2a75bcdd62b
|
||||
Author: Johan Bergström <bugs@bergstroem.nu>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Pass ncurses cflags to build
|
||||
|
||||
Fixes #25
|
||||
Note from William Hubbs:
|
||||
The original patch overwrote CFLAGS. I modified this patch to add the
|
||||
ncurses cflags to CPPFLAGS instead of overwriting CFLAGS.
|
||||
|
||||
commit 7700e6fe796cabfa22eefddc024d66257a28d4dc
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix compile errors created by bundling queue.h
|
||||
|
||||
commit 6ca79042b9aa9752e577346e6f355356ef8f2f9a
|
||||
Author: Anthony G. Basile <blueness@gentoo.org>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
helpers.h, start-stop-daemon.c: remove uneeded macros
|
||||
|
||||
TAILQ_CONCAT, TAILQ_FOREACH_SAFE and LIST_FOREACH_SAFE are defined
|
||||
in our bundled queue.h and are no longer required.
|
||||
|
||||
commit 1e0a4bebdefd06af09ba8f2459287d3ca28f89d7
|
||||
Author: Anthony G. Basile <blueness@gentoo.org>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Bundle <sys/queue.h> from NetBSD
|
||||
|
||||
We are bundling this to allow building on musl-based systems since musl
|
||||
does not include <sys/queue.h>.
|
||||
|
||||
commit ca6b86be44fc7ed618a7ab3bd021e208d38878b1
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix all tests for GNU/kFreeBSD
|
||||
|
||||
It is necessary to check for both the kernel and c library because
|
||||
__FreeBSD_kernel is also defined on native FreeBSD [1].
|
||||
|
||||
[1] http://sourceforge.net/p/predef/wiki/OperatingSystems/
|
||||
|
||||
commit 4ac289b5397a688393c596a9a01651c94d3b5711
|
||||
Author: Gabriele Giacone <1o5g4r8o@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix rc_svcdir for GNU/Hurd
|
||||
|
||||
commit 875f03e27c3475675f7b9572b071dd8c26257be7
|
||||
Author: Svante Signell <svante.signell@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
fix defines for GNU/Hurd
|
||||
|
||||
commit 203b754f843fe6af0a40e983d557a9cdbc89f84b
|
||||
Author: Svante Signell <svante.signell@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
add missing files for GNU/Hurd
|
||||
|
||||
commit 89c8a62a1078e770e12c47f06c8dbc9c2924e771
|
||||
Author: Gabriele Giacone <1o5g4r8o@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix rc_svcdir for GNU/kFreeBSD
|
||||
|
||||
commit d8e1d9a6edf94ecac580e80e1113f4fdbdc5a23b
|
||||
Author: Gabriele Giacone <1o5g4r8o@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add missing files for GNU/kFreeBSD
|
||||
|
||||
commit 3f82edbeb9251149c6aff071d6537379af4e5eea
|
||||
Author: Svante Signell <svante.signell@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Fix GNU/kFreeBSD port
|
||||
|
||||
Check for __FreeBSD_kernel instead of __GLIBC__ in source files.
|
||||
|
||||
note from William Hubbs:
|
||||
I was told this is a better check for GNU/kFreeBSD than checking the
|
||||
C library the source is being compiled against.
|
||||
GNU/kFreeBSD than checking which library we are using.
|
||||
|
||||
commit 86e9aa0d36813e2630c6613cd71c3ce8db642f71
|
||||
Author: Anthony G. Basile <blueness@gentoo.org>
|
||||
Commit: Anthony G. Basile <blueness@gentoo.org>
|
||||
|
||||
einfo.h, rc.h.in: simplify __BEGIN_DECLS logic
|
||||
|
||||
There is no need to redefine __BEGIN_DECLS and __END_DECLS.
|
||||
We simplify the logic here and avoid undefining these macros.
|
||||
|
||||
commit 4a08517cac3c68c232694db7288654b58b68b8ba
|
||||
Author: Anthony G. Basile <blueness@gentoo.org>
|
||||
Commit: Anthony G. Basile <blueness@gentoo.org>
|
||||
|
||||
einfo.h, rc.h.in: ensure __BEGIN_DECLS is defined
|
||||
|
||||
Some Standard C Libraries, like musl, don't define __BEGIN_DECLS
|
||||
or __END_DECLS. We add some ifdef magic to ensure these are
|
||||
available.
|
||||
|
||||
commit 9bf789f78890c8b5879d29acb9fb0e23285baee4
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Update news file wrt chroot variable
|
||||
|
||||
commit f9acd65497c6e561fbf5420386a99d681fede859
|
||||
Author: Alexander Vershilov <alexander.vershilov@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
librc:look for the pid file in a chroot if defined
|
||||
|
||||
X-Gentoo-Bug: 524388
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=524388
|
||||
|
||||
commit 8c7ea4e9e8da500877a514402bbe90aababda2d6
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
runscript.sh: add chroot support
|
||||
|
||||
This adds support for a chroot variable which will be passed to the
|
||||
start-stop-daemon --chroot switch to runscript.sh when starting a
|
||||
daemon. This also needs to be saved so it can be used in locating the
|
||||
pid file when stopping the daemon.
|
||||
|
||||
X-Gentoo-Bug: 524388
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=524388
|
||||
|
||||
commit 5f1439f1aac14618592789042e05daaf80f55a15
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
Add NEWS file
|
||||
|
||||
commit 85da4a5e2621dc5f5356d440735aa058008a1b7e
|
||||
Author: William Hubbs <w.d.hubbs@gmail.com>
|
||||
Commit: William Hubbs <w.d.hubbs@gmail.com>
|
||||
|
||||
add back nfs and nfs4 file systems
|
||||
|
||||
Fix gentoo bug #427996 correctly.
|
||||
We should attempt to mount the file systems, but not try to start the
|
||||
daemons. The previous fix removed mounting the file systems as well as
|
||||
starting the daemons.
|
||||
|
||||
X-Gentoo-Bug: 508574
|
||||
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=508574
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
NAME= openrc
|
||||
VERSION= 0.18.3
|
||||
VERSION= 0.19
|
||||
PKG= ${NAME}-${VERSION}
|
||||
|
||||
12
NEWS.md
12
NEWS.md
@@ -3,6 +3,18 @@
|
||||
This file will contain a list of notable changes for each release. Note
|
||||
the information in this file is in reverse order.
|
||||
|
||||
## OpenRC-0.19
|
||||
|
||||
This version adds a net-online service. By default, this
|
||||
service will check all known network interfaces for a configured
|
||||
interface or a carrier. It will register as started only when all
|
||||
interfaces are configured and there is at least a carrier on one
|
||||
interface. The behaviour of this service can be modified in
|
||||
/etc/conf.d/net-online.
|
||||
|
||||
Currently, this only works on Linux, but if anyone wants to port to
|
||||
*bsd, that would be welcomed.
|
||||
|
||||
## OpenRC-0.18.3
|
||||
|
||||
Modern Linux systems expect /etc/mtab to be a symbolic link to
|
||||
|
||||
@@ -15,7 +15,8 @@ include ${MK}/os.mk
|
||||
|
||||
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
|
||||
|
||||
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab
|
||||
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab \
|
||||
net-online
|
||||
|
||||
CONF-NetBSD= moused rarpd savecore
|
||||
|
||||
|
||||
@@ -8,3 +8,8 @@ wipe_tmp="YES"
|
||||
# Write the initial dmesg log into /var/log/dmesg after boot
|
||||
# This may be useful if you need the kernel boot log afterwards
|
||||
log_dmesg="YES"
|
||||
|
||||
# Save the previous dmesg log to dmesc.old
|
||||
# This may be useful if you need to compare the current boot to the
|
||||
# previous one.
|
||||
#previous_dmesg=no
|
||||
|
||||
15
conf.d/net-online
Normal file
15
conf.d/net-online
Normal file
@@ -0,0 +1,15 @@
|
||||
# The interfaces setting controls which interfaces the net-online
|
||||
# service considers in deciding whether the network is active. By
|
||||
# default, it is all ethernet or wireless LAN interfaces.
|
||||
#interfaces=""
|
||||
|
||||
# This setting controls whether a ping to the default gateway is
|
||||
# included in the test for network connectivity after all interfaces
|
||||
# are active.
|
||||
#ping_default_gateway=no
|
||||
|
||||
# The timeout setting controls how long the net-online service waits
|
||||
# for the network to be configured.
|
||||
# The default is 120 seconds.
|
||||
# if this is set to 0, the wait is infinite.
|
||||
#timeout=120
|
||||
@@ -25,11 +25,11 @@
|
||||
#rc_need="net.eth1 net.eth2"
|
||||
#
|
||||
# If you are using a dynamic network management tool like
|
||||
# networkmanager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to
|
||||
# NetworkManager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to
|
||||
# manage the network interfaces with the routes to your netmounts, you
|
||||
# should list that tool.
|
||||
#
|
||||
#rc_need="networkmanager"
|
||||
#rc_need="NetworkManager"
|
||||
#rc_need="dhcpcd"
|
||||
#rc_need="wicd"
|
||||
#
|
||||
|
||||
@@ -3,9 +3,11 @@
|
||||
|
||||
# This is the subsystem type. Valid options on Linux:
|
||||
# "" - nothing special
|
||||
# "docker" - Docker container manager
|
||||
# "lxc" - Linux Containers
|
||||
# "openvz" - Linux OpenVZ
|
||||
# "prefix" - Prefix
|
||||
# "rkt" - CoreOS container management system
|
||||
# "uml" - Usermode Linux
|
||||
# "vserver" - Linux vserver
|
||||
# "systemd-nspawn" - Container created by the systemd-nspawn utility
|
||||
|
||||
@@ -29,17 +29,20 @@
|
||||
# come up.
|
||||
#rc_depend_strict="YES"
|
||||
|
||||
# rc_hotplug is a list of services that we allow to be hotplugged.
|
||||
# By default we do not allow hotplugging.
|
||||
# rc_hotplug controls which services we allow to be hotplugged.
|
||||
# A hotplugged service is one started by a dynamic dev manager when a matching
|
||||
# hardware device is found.
|
||||
# This service is intrinsically included in the boot runlevel.
|
||||
# To disable services, prefix with a !
|
||||
# Hotplugged services appear in the "hotplugged" runlevel.
|
||||
# If rc_hotplug is set to any value, we compare the name of this service
|
||||
# to every pattern in the value, from left to right, and we allow the
|
||||
# service to be hotplugged if it matches a pattern, or if it matches no
|
||||
# patterns. Patterns can include shell wildcards.
|
||||
# To disable services from being hotplugged, prefix patterns with "!".
|
||||
#If rc_hotplug is not set or is empty, all hotplugging is disabled.
|
||||
# Example - rc_hotplug="net.wlan !net.*"
|
||||
# This allows net.wlan and any service not matching net.* to be plugged.
|
||||
# Example - rc_hotplug="*"
|
||||
# This allows all services to be hotplugged
|
||||
#rc_hotplug="*"
|
||||
# This allows net.wlan and any service not matching net.* to be hotplugged.
|
||||
# Example - rc_hotplug="!net.*"
|
||||
# This allows services that do not match "net.*" to be hotplugged.
|
||||
|
||||
# rc_logger launches a logging daemon to log the entire rc process to
|
||||
# /var/log/rc.log
|
||||
|
||||
@@ -23,7 +23,7 @@ SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
|
||||
|
||||
SRCS-Linux= binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
|
||||
killprocs.in modules.in mount-ro.in mtab.in numlock.in \
|
||||
procfs.in sysfs.in termencoding.in tmpfiles.dev.in
|
||||
procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
|
||||
|
||||
# Generic BSD scripts
|
||||
SRCS-NetBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
|
||||
|
||||
@@ -216,6 +216,9 @@ start()
|
||||
case "$RC_SYS" in
|
||||
VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;;
|
||||
*)
|
||||
if yesno ${previous_dmesg:-no}; then
|
||||
mv /var/log/dmesg /var/log/dmesg.old
|
||||
fi
|
||||
dmesg > /var/log/dmesg
|
||||
chmod 640 /var/log/dmesg
|
||||
;;
|
||||
|
||||
@@ -7,7 +7,7 @@ description="Sets a font for the consoles."
|
||||
depend()
|
||||
{
|
||||
need localmount termencoding
|
||||
after hotplug bootmisc
|
||||
after hotplug bootmisc modules
|
||||
keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc
|
||||
}
|
||||
|
||||
|
||||
69
init.d/net-online.in
Normal file
69
init.d/net-online.in
Normal file
@@ -0,0 +1,69 @@
|
||||
#!@SBINDIR@/openrc-run
|
||||
# Copyright (C) 2015 William Hubbs <w.d.hubbs@gmail.com>
|
||||
# Released under the 2-clause BSD license.
|
||||
|
||||
description="Delays until the network is online or a specific timeout"
|
||||
|
||||
depend()
|
||||
{
|
||||
after modules
|
||||
need sysfs
|
||||
keyword -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
|
||||
}
|
||||
|
||||
get_interfaces()
|
||||
{
|
||||
local ifname iftype
|
||||
for ifname in /sys/class/net/*; do
|
||||
read iftype < ${ifname}/type
|
||||
[ "$iftype" = "1" ] && printf "%s " ${ifname##*/}
|
||||
done
|
||||
}
|
||||
|
||||
get_default_gateway()
|
||||
{
|
||||
local cmd gateway
|
||||
if command -v ip > /dev/null 2>&1; then
|
||||
cmd="ip route show"
|
||||
else
|
||||
cmd=route
|
||||
fi
|
||||
set -- $($cmd | grep default)
|
||||
[ "$2" != via ] && gateway="$2" || gateway="$3"
|
||||
printf "%s" $gateway
|
||||
}
|
||||
|
||||
start ()
|
||||
{
|
||||
local carriers configured dev gateway ifcount infinite interfaces
|
||||
local rc state timeout x
|
||||
|
||||
ebegin "Checking to see if the network is online"
|
||||
rc=0
|
||||
interfaces=${interfaces:-$(get_interfaces)}
|
||||
timeout=${timeout:-120}
|
||||
[ $timeout -eq 0 ] && infinite=true || infinite=false
|
||||
while $infinite || [ $timeout -gt 0 ]; do
|
||||
carriers=0
|
||||
configured=0
|
||||
ifcount=0
|
||||
for dev in ${interfaces}; do
|
||||
: $((ifcount += 1))
|
||||
read x < /sys/class/net/$dev/carrier
|
||||
[ $x -eq 1 ] && : $((carriers += 1))
|
||||
read x < /sys/class/net/$dev/operstate
|
||||
[ "$x" = up ] && : $((configured += 1))
|
||||
done
|
||||
[ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break
|
||||
sleep 1
|
||||
: $((timeout -= 1))
|
||||
done
|
||||
! $infinite && [ $timeout -eq 0 ] && rc=1
|
||||
if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then
|
||||
gateway="$(get_default_gateway)"
|
||||
if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then
|
||||
rc=1
|
||||
fi
|
||||
fi
|
||||
eend $rc "The network is offline"
|
||||
}
|
||||
@@ -61,16 +61,6 @@ mount_misc()
|
||||
fi
|
||||
fi
|
||||
|
||||
# set up kernel support for cgroups
|
||||
if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then
|
||||
if grep -qs cgroup /proc/filesystems; then
|
||||
ebegin "Mounting cgroup filesystem"
|
||||
local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}"
|
||||
mount -n -t tmpfs -o ${opts} cgroup_root /sys/fs/cgroup
|
||||
eend $?
|
||||
fi
|
||||
fi
|
||||
|
||||
# set up kernel support for fusectl
|
||||
if [ -d /sys/fs/fuse/connections ] \
|
||||
&& ! mountinfo -q /sys/fs/fuse/connections; then
|
||||
@@ -108,6 +98,16 @@ mount_misc()
|
||||
|
||||
mount_cgroups()
|
||||
{
|
||||
# set up kernel support for cgroups
|
||||
if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then
|
||||
if grep -qs cgroup /proc/filesystems; then
|
||||
ebegin "Mounting cgroup filesystem"
|
||||
local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}"
|
||||
mount -n -t tmpfs -o ${opts} cgroup_root /sys/fs/cgroup
|
||||
eend $?
|
||||
fi
|
||||
fi
|
||||
|
||||
mountinfo -q /sys/fs/cgroup || return 0
|
||||
|
||||
if ! mountinfo -q /sys/fs/cgroup/openrc; then
|
||||
|
||||
@@ -166,21 +166,25 @@ will start and stop it in the right order in relation to other services.
|
||||
As it's a function it can be very flexible, see the example below.
|
||||
Here is a list of the functions you can use in a
|
||||
.Ic depend
|
||||
function. You simply pass the names of the services to it to add to that
|
||||
dependency type, or prefix it with ! to remove it.
|
||||
function. You simply pass the names of the services you want to add to
|
||||
that dependency type to the function, or prefix the names with ! to
|
||||
remove them from the dependencies.
|
||||
.Bl -tag -width "RC_DEFAULTLEVEL"
|
||||
.It Ic need
|
||||
The service will refuse to start until needed services have started and it
|
||||
will refuse to stop until any services that need it have stopped.
|
||||
.It Ic use
|
||||
The service will attempt to start any services we use that have been added
|
||||
The service will attempt to start any services it uses that have been added
|
||||
to the runlevel.
|
||||
.It Ic want
|
||||
The service will attempt to start any services it wants, regardless of
|
||||
whether they have been added to the runlevel.
|
||||
.It Ic after
|
||||
The service will start after these services and stop before these services.
|
||||
.It Ic before
|
||||
The service will start before these services and stop after these services.
|
||||
.It Ic provide
|
||||
We provide this virtual service. For example, named provides dns.
|
||||
The service provides this virtual service. For example, named provides dns.
|
||||
Virtual services take precedence over real services, so it is highly
|
||||
recommended that you do not have a real service that has the same name
|
||||
as a virtual service.
|
||||
@@ -213,6 +217,8 @@ Same as -jail, but for Linux Resource Containers (LXC).
|
||||
Same as -jail, but for OpenVZ systems.
|
||||
.It Dv -prefix
|
||||
Same as -jail, but for Prefix systems.
|
||||
.It Dv -rkt
|
||||
Same as -jail, but for RKT systems.
|
||||
.It Dv -uml
|
||||
Same as -jail, but for UML systems.
|
||||
.It Dv -vserver
|
||||
@@ -221,6 +227,11 @@ Same as -jail, but for VServer systems.
|
||||
Same as -jail, but for Xen DOM0 systems.
|
||||
.It Dv -xenu
|
||||
Same as -jail, but for Xen DOMU systems.
|
||||
.It Dv -docker
|
||||
Same as -jail, but for docker systems.
|
||||
.It Dv -containers
|
||||
Same as -jail, but for all relevant container types on the operating
|
||||
system.
|
||||
.El
|
||||
.El
|
||||
.Pp
|
||||
@@ -462,6 +473,9 @@ rc_net_tap1_provide="!net"
|
||||
# It's also possible to negate keywords. This is mainly useful for prefix
|
||||
# users testing OpenRC.
|
||||
rc_keyword="!-prefix"
|
||||
# This can also be used to block a script from runining in all
|
||||
# containers except one or two
|
||||
rc_keyword="!-containers !-docker"
|
||||
.Ed
|
||||
.Sh EXAMPLES
|
||||
.Pp
|
||||
|
||||
@@ -16,6 +16,9 @@ need() {
|
||||
use() {
|
||||
[ -n "$*" ] && echo "$RC_SVCNAME iuse $*" >&3
|
||||
}
|
||||
want() {
|
||||
[ -n "$*" ] && echo "$RC_SVCNAME iwant $*" >&3
|
||||
}
|
||||
before() {
|
||||
[ -n "$*" ] && echo "$RC_SVCNAME ibefore $*" >&3
|
||||
}
|
||||
@@ -26,7 +29,18 @@ provide() {
|
||||
[ -n "$*" ] && echo "$RC_SVCNAME iprovide $*" >&3
|
||||
}
|
||||
keyword() {
|
||||
[ -n "$*" ] && echo "$RC_SVCNAME keyword $*" >&3
|
||||
local c x
|
||||
set -- $*
|
||||
while [ -n "$*" ]; do
|
||||
case "$1" in
|
||||
-containers) x="$(_get_containers)" ;;
|
||||
!-containers) x="$(_get_containers_remove)" ;;
|
||||
*) x=$1 ;;
|
||||
esac
|
||||
c="${c}${x} "
|
||||
shift
|
||||
done
|
||||
[ -n "$c" ] && echo "$RC_SVCNAME keyword $c" >&3
|
||||
}
|
||||
depend() {
|
||||
:
|
||||
|
||||
@@ -66,6 +66,9 @@ need() {
|
||||
use() {
|
||||
[ -n "$*" ] && echo "use $*"
|
||||
}
|
||||
want() {
|
||||
[ -n "$*" ] && echo "want $*"
|
||||
}
|
||||
before() {
|
||||
[ -n "$*" ] && echo "before $*"
|
||||
}
|
||||
@@ -76,7 +79,18 @@ provide() {
|
||||
[ -n "$*" ] && echo "provide $*"
|
||||
}
|
||||
keyword() {
|
||||
[ -n "$*" ] && echo "keyword $*"
|
||||
local c x
|
||||
set -- $*
|
||||
while [ -n "$*" ]; do
|
||||
case "$1" in
|
||||
-containers) x="$(_get_containers)" ;;
|
||||
!-containers) x="$(_get_containers_remove)" ;;
|
||||
*) x=$1 ;;
|
||||
esac
|
||||
c="${c}${x} "
|
||||
shift
|
||||
done
|
||||
[ -n "$c" ] && echo "keyword $c"
|
||||
}
|
||||
|
||||
# Describe the init script to the user
|
||||
@@ -184,6 +198,12 @@ unset _conf_d
|
||||
|
||||
# Load any system overrides
|
||||
sourcex -e "@SYSCONFDIR@/rc.conf"
|
||||
if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then
|
||||
for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do
|
||||
sourcex -e "$_f"
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# load service supervisor functions
|
||||
sourcex "@LIBEXECDIR@/sh/s6.sh"
|
||||
|
||||
@@ -86,12 +86,33 @@ get_bootparam()
|
||||
}
|
||||
|
||||
# Called from openrc-run.sh or gendepends.sh
|
||||
_get_containers() {
|
||||
local c
|
||||
case "${RC_UNAME}" in
|
||||
FreeBSD)
|
||||
c="-jail"
|
||||
;;
|
||||
Linux)
|
||||
c="-docker -lxc -openvz -rkt -systemd-nspawn -uml -vserver"
|
||||
;;
|
||||
esac
|
||||
echo $c
|
||||
}
|
||||
|
||||
_get_containers_remove() {
|
||||
local c
|
||||
for x in $(_get_containers); do
|
||||
c="${c}!${x} "
|
||||
done
|
||||
echo $c
|
||||
}
|
||||
|
||||
_depend() {
|
||||
depend
|
||||
local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=
|
||||
|
||||
# Add any user defined depends
|
||||
for _deptype in config:CONFIG need:NEED use:USE \
|
||||
for _deptype in config:CONFIG need:NEED use:USE want:WANT \
|
||||
after:AFTER before:BEFORE \
|
||||
provide:PROVIDE keyword:KEYWORD; do
|
||||
IFS=:
|
||||
|
||||
@@ -31,7 +31,8 @@
|
||||
#include "queue.h"
|
||||
#include "librc.h"
|
||||
|
||||
#if defined(__linux__) || (defined (__FreeBSD_kernel__) && defined(__GLIBC__))
|
||||
#if defined(__linux__) || (defined (__FreeBSD_kernel__) && defined(__GLIBC__)) \
|
||||
|| defined(__GNU__)
|
||||
static bool
|
||||
pid_is_exec(pid_t pid, const char *exec)
|
||||
{
|
||||
|
||||
@@ -192,7 +192,9 @@ valid_service(const char *runlevel, const char *service, const char *type)
|
||||
|
||||
if (!runlevel ||
|
||||
strcmp(type, "ineed") == 0 ||
|
||||
strcmp(type, "needsme") == 0)
|
||||
strcmp(type, "needsme") == 0 ||
|
||||
strcmp(type, "iwant") == 0 ||
|
||||
strcmp(type, "wantsme") == 0)
|
||||
return true;
|
||||
|
||||
if (rc_service_in_runlevel(service, runlevel))
|
||||
@@ -543,6 +545,7 @@ rc_deptree_order(const RC_DEPTREE *deptree, const char *runlevel, int options)
|
||||
types = rc_stringlist_new();
|
||||
rc_stringlist_add(types, "ineed");
|
||||
rc_stringlist_add(types, "iuse");
|
||||
rc_stringlist_add(types, "iwant");
|
||||
rc_stringlist_add(types, "iafter");
|
||||
services = rc_deptree_depends(deptree, types, list, runlevel,
|
||||
RC_DEP_STRICT | RC_DEP_TRACE | options);
|
||||
@@ -648,6 +651,7 @@ typedef struct deppair
|
||||
static const DEPPAIR deppairs[] = {
|
||||
{ "ineed", "needsme" },
|
||||
{ "iuse", "usesme" },
|
||||
{ "iwant", "wantsme" },
|
||||
{ "iafter", "ibefore" },
|
||||
{ "ibefore", "iafter" },
|
||||
{ "iprovide", "providedby" },
|
||||
@@ -844,6 +848,7 @@ rc_deptree_update(void)
|
||||
/* If we're after something, remove us from the before list */
|
||||
if (strcmp(type, "iafter") == 0 ||
|
||||
strcmp(type, "ineed") == 0 ||
|
||||
strcmp(type, "iwant") == 0 ||
|
||||
strcmp(type, "iuse") == 0) {
|
||||
if ((dt = get_deptype(depinfo, "ibefore")))
|
||||
rc_stringlist_delete(dt->services, depend);
|
||||
@@ -957,6 +962,7 @@ rc_deptree_update(void)
|
||||
/* Phase 5 - Remove broken before directives */
|
||||
types = rc_stringlist_new();
|
||||
rc_stringlist_add(types, "ineed");
|
||||
rc_stringlist_add(types, "iwant");
|
||||
rc_stringlist_add(types, "iuse");
|
||||
rc_stringlist_add(types, "iafter");
|
||||
TAILQ_FOREACH(depinfo, deptree, entries) {
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include <fnmatch.h>
|
||||
|
||||
#include "queue.h"
|
||||
#include "librc.h"
|
||||
|
||||
@@ -214,12 +216,78 @@ rc_config_list(const char *file)
|
||||
}
|
||||
librc_hidden_def(rc_config_list)
|
||||
|
||||
/*
|
||||
* Override some specific rc.conf options on the kernel command line
|
||||
*/
|
||||
#ifdef __linux__
|
||||
static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config)
|
||||
static void rc_config_set_value(RC_STRINGLIST *config, char *value)
|
||||
{
|
||||
RC_STRING *cline;
|
||||
char *entry;
|
||||
size_t i = 0;
|
||||
char *newline;
|
||||
char *p = value;
|
||||
bool replaced;
|
||||
char *token;
|
||||
|
||||
if (! p)
|
||||
return;
|
||||
if (strncmp(p, "export ", 7) == 0)
|
||||
p += 7;
|
||||
if (! (token = strsep(&p, "=")))
|
||||
return;
|
||||
|
||||
entry = xstrdup(token);
|
||||
/* Preserve shell coloring */
|
||||
if (*p == '$')
|
||||
token = value;
|
||||
else
|
||||
do {
|
||||
/* Bash variables are usually quoted */
|
||||
token = strsep(&p, "\"\'");
|
||||
} while (token && *token == '\0');
|
||||
|
||||
/* Drop a newline if that's all we have */
|
||||
if (token) {
|
||||
i = strlen(token) - 1;
|
||||
if (token[i] == '\n')
|
||||
token[i] = 0;
|
||||
|
||||
i = strlen(entry) + strlen(token) + 2;
|
||||
newline = xmalloc(sizeof(char) * i);
|
||||
snprintf(newline, i, "%s=%s", entry, token);
|
||||
} else {
|
||||
i = strlen(entry) + 2;
|
||||
newline = xmalloc(sizeof(char) * i);
|
||||
snprintf(newline, i, "%s=", entry);
|
||||
}
|
||||
|
||||
replaced = false;
|
||||
/* In shells the last item takes precedence, so we need to remove
|
||||
any prior values we may already have */
|
||||
TAILQ_FOREACH(cline, config, entries) {
|
||||
i = strlen(entry);
|
||||
if (strncmp(entry, cline->value, i) == 0 && cline->value[i] == '=') {
|
||||
/* We have a match now - to save time we directly replace it */
|
||||
free(cline->value);
|
||||
cline->value = newline;
|
||||
replaced = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!replaced) {
|
||||
rc_stringlist_add(config, newline);
|
||||
free(newline);
|
||||
}
|
||||
free(entry);
|
||||
}
|
||||
|
||||
/*
|
||||
* Override some specific rc.conf options on the kernel command line.
|
||||
* I only know how to do this in Linux, so if someone wants to supply
|
||||
* a patch for this on *BSD or tell me how to write the code to do this,
|
||||
* any suggestions are welcome.
|
||||
*/
|
||||
static RC_STRINGLIST *rc_config_kcl(RC_STRINGLIST *config)
|
||||
{
|
||||
#ifdef __linux__
|
||||
RC_STRINGLIST *overrides;
|
||||
RC_STRING *cline, *override, *config_np;
|
||||
char *tmp = NULL;
|
||||
@@ -268,90 +336,60 @@ static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config)
|
||||
}
|
||||
|
||||
rc_stringlist_free(overrides);
|
||||
#endif
|
||||
return config;
|
||||
}
|
||||
|
||||
static RC_STRINGLIST * rc_config_directory(RC_STRINGLIST *config)
|
||||
{
|
||||
DIR *dp;
|
||||
struct dirent *d;
|
||||
RC_STRINGLIST *rc_conf_d_files = rc_stringlist_new();
|
||||
RC_STRING *fname;
|
||||
RC_STRINGLIST *rc_conf_d_list;
|
||||
char path[PATH_MAX];
|
||||
RC_STRING *line;
|
||||
|
||||
if ((dp = opendir(RC_CONF_D)) != NULL) {
|
||||
while ((d = readdir(dp)) != NULL) {
|
||||
if (fnmatch("*.conf", d->d_name, FNM_PATHNAME) == 0) {
|
||||
rc_stringlist_addu(rc_conf_d_files, d->d_name);
|
||||
}
|
||||
}
|
||||
closedir(dp);
|
||||
|
||||
if (rc_conf_d_files) {
|
||||
rc_stringlist_sort(&rc_conf_d_files);
|
||||
TAILQ_FOREACH(fname, rc_conf_d_files, entries) {
|
||||
if (! fname->value)
|
||||
continue;
|
||||
sprintf(path, "%s/%s", RC_CONF_D, fname->value);
|
||||
rc_conf_d_list = rc_config_list(path);
|
||||
TAILQ_FOREACH(line, rc_conf_d_list, entries)
|
||||
if (line->value)
|
||||
rc_config_set_value(config, line->value);
|
||||
rc_stringlist_free(rc_conf_d_list);
|
||||
}
|
||||
rc_stringlist_free(rc_conf_d_files);
|
||||
}
|
||||
}
|
||||
return config;
|
||||
}
|
||||
#endif
|
||||
|
||||
RC_STRINGLIST *
|
||||
rc_config_load(const char *file)
|
||||
{
|
||||
RC_STRINGLIST *list;
|
||||
RC_STRINGLIST *config;
|
||||
char *token;
|
||||
RC_STRING *line;
|
||||
RC_STRING *cline;
|
||||
size_t i = 0;
|
||||
bool replaced;
|
||||
char *entry;
|
||||
char *newline;
|
||||
char *p;
|
||||
|
||||
list = rc_config_list(file);
|
||||
config = rc_stringlist_new();
|
||||
TAILQ_FOREACH(line, list, entries) {
|
||||
/* Get entry */
|
||||
p = line->value;
|
||||
if (! p)
|
||||
continue;
|
||||
if (strncmp(p, "export ", 7) == 0)
|
||||
p += 7;
|
||||
if (! (token = strsep(&p, "=")))
|
||||
continue;
|
||||
|
||||
entry = xstrdup(token);
|
||||
/* Preserve shell coloring */
|
||||
if (*p == '$')
|
||||
token = line->value;
|
||||
else
|
||||
do {
|
||||
/* Bash variables are usually quoted */
|
||||
token = strsep(&p, "\"\'");
|
||||
} while (token && *token == '\0');
|
||||
|
||||
/* Drop a newline if that's all we have */
|
||||
if (token) {
|
||||
i = strlen(token) - 1;
|
||||
if (token[i] == '\n')
|
||||
token[i] = 0;
|
||||
|
||||
i = strlen(entry) + strlen(token) + 2;
|
||||
newline = xmalloc(sizeof(char) * i);
|
||||
snprintf(newline, i, "%s=%s", entry, token);
|
||||
} else {
|
||||
i = strlen(entry) + 2;
|
||||
newline = xmalloc(sizeof(char) * i);
|
||||
snprintf(newline, i, "%s=", entry);
|
||||
}
|
||||
|
||||
replaced = false;
|
||||
/* In shells the last item takes precedence, so we need to remove
|
||||
any prior values we may already have */
|
||||
TAILQ_FOREACH(cline, config, entries) {
|
||||
i = strlen(entry);
|
||||
if (strncmp(entry, cline->value, i) == 0 && cline->value[i] == '=') {
|
||||
/* We have a match now - to save time we directly replace it */
|
||||
free(cline->value);
|
||||
cline->value = newline;
|
||||
replaced = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!replaced) {
|
||||
rc_stringlist_add(config, newline);
|
||||
free(newline);
|
||||
}
|
||||
free(entry);
|
||||
rc_config_set_value(config, line->value);
|
||||
}
|
||||
rc_stringlist_free(list);
|
||||
|
||||
#ifdef __linux__
|
||||
/* Only override rc.conf settings */
|
||||
if (strcmp(file, RC_CONF) == 0) {
|
||||
config = rc_config_override(config);
|
||||
}
|
||||
#endif
|
||||
|
||||
return config;
|
||||
}
|
||||
librc_hidden_def(rc_config_load)
|
||||
@@ -401,6 +439,9 @@ rc_conf_value(const char *setting)
|
||||
#endif
|
||||
}
|
||||
|
||||
rc_conf = rc_config_directory(rc_conf);
|
||||
rc_conf = rc_config_kcl(rc_conf);
|
||||
|
||||
/* Convert old uppercase to lowercase */
|
||||
TAILQ_FOREACH(s, rc_conf, entries) {
|
||||
p = s->value;
|
||||
|
||||
@@ -210,14 +210,14 @@ found:
|
||||
}
|
||||
#endif
|
||||
|
||||
/* New sys identification code
|
||||
* Not to be used for any binaries outside of openrc. */
|
||||
|
||||
const char *
|
||||
rc_sys_v2(void)
|
||||
rc_sys(void)
|
||||
{
|
||||
#define __STRING_SWITCH(x) { char *__string_switch = x; if (false) {}
|
||||
#define __STRING_CASE(y) else if (strcmp(__string_switch,y) == 0)
|
||||
#define __STRING_SWITCH_END() }
|
||||
#ifdef PREFIX
|
||||
return RC_SYS_PREFIX;
|
||||
#endif
|
||||
|
||||
char *systype = rc_conf_value("rc_sys");
|
||||
if (systype) {
|
||||
char *s = systype;
|
||||
@@ -227,43 +227,11 @@ rc_sys_v2(void)
|
||||
*s = toupper((unsigned char) *s);
|
||||
s++;
|
||||
}
|
||||
/* Now do detection */
|
||||
__STRING_SWITCH(systype)
|
||||
__STRING_CASE(RC_SYS_PREFIX) { return RC_SYS_PREFIX; }
|
||||
#ifdef __FreeBSD__
|
||||
__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; }
|
||||
#endif /* __FreeBSD__ */
|
||||
#ifdef __NetBSD__
|
||||
__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; }
|
||||
__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; }
|
||||
#endif /* __NetBSD__ */
|
||||
#ifdef __linux__
|
||||
__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; }
|
||||
__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; }
|
||||
__STRING_CASE(RC_SYS_UML) { return RC_SYS_UML; }
|
||||
__STRING_CASE(RC_SYS_VSERVER) { return RC_SYS_VSERVER; }
|
||||
__STRING_CASE(RC_SYS_OPENVZ) { return RC_SYS_OPENVZ; }
|
||||
__STRING_CASE(RC_SYS_LXC) { return RC_SYS_LXC; }
|
||||
#endif /* __linux__ */
|
||||
__STRING_SWITCH_END()
|
||||
}
|
||||
#undef __STRING_SWITCH
|
||||
#undef __STRING_CASE
|
||||
#undef __STRING_SWITCH_END
|
||||
return NULL;
|
||||
}
|
||||
librc_hidden_def(rc_sys_v2)
|
||||
|
||||
/* Old sys identification code.
|
||||
* Not to be used for any binaries outside of openrc. */
|
||||
const char *
|
||||
rc_sys_v1(void)
|
||||
{
|
||||
#ifdef PREFIX
|
||||
return RC_SYS_PREFIX;
|
||||
#else
|
||||
|
||||
#ifdef __FreeBSD__
|
||||
if (systype && strcmp(systype, RC_SYS_JAIL) == 0)
|
||||
return RC_SYS_JAIL;
|
||||
int jailed = 0;
|
||||
size_t len = sizeof(jailed);
|
||||
|
||||
@@ -273,6 +241,12 @@ rc_sys_v1(void)
|
||||
#endif
|
||||
|
||||
#ifdef __NetBSD__
|
||||
if (systype) {
|
||||
if(strcmp(systype, RC_SYS_XEN0) == 0)
|
||||
return RC_SYS_XEN0;
|
||||
if (strcmp(systype, RC_SYS_XENU) == 0)
|
||||
return RC_SYS_XENU;
|
||||
}
|
||||
if (exists("/kern/xen/privcmd"))
|
||||
return RC_SYS_XEN0;
|
||||
if (exists("/kern/xen"))
|
||||
@@ -280,6 +254,26 @@ rc_sys_v1(void)
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
if (systype) {
|
||||
if (strcmp(systype, RC_SYS_XEN0) == 0)
|
||||
return RC_SYS_XEN0;
|
||||
if (strcmp(systype, RC_SYS_XENU) == 0)
|
||||
return RC_SYS_XENU;
|
||||
if (strcmp(systype, RC_SYS_UML) == 0)
|
||||
return RC_SYS_UML;
|
||||
if (strcmp(systype, RC_SYS_VSERVER) == 0)
|
||||
return RC_SYS_VSERVER;
|
||||
if (strcmp(systype, RC_SYS_OPENVZ) == 0)
|
||||
return RC_SYS_OPENVZ;
|
||||
if (strcmp(systype, RC_SYS_LXC) == 0)
|
||||
return RC_SYS_LXC;
|
||||
if (strcmp(systype, RC_SYS_RKT) == 0)
|
||||
return RC_SYS_RKT;
|
||||
if (strcmp(systype, RC_SYS_SYSTEMD_NSPAWN) == 0)
|
||||
return RC_SYS_SYSTEMD_NSPAWN;
|
||||
if (strcmp(systype, RC_SYS_DOCKER) == 0)
|
||||
return RC_SYS_DOCKER;
|
||||
}
|
||||
if (exists("/proc/xen")) {
|
||||
if (file_regex("/proc/xen/capabilities", "control_d"))
|
||||
return RC_SYS_XEN0;
|
||||
@@ -296,23 +290,15 @@ rc_sys_v1(void)
|
||||
return RC_SYS_OPENVZ; /* old test */
|
||||
else if (file_regex("/proc/1/environ", "container=lxc"))
|
||||
return RC_SYS_LXC;
|
||||
else if (file_regex("/proc/1/environ", "container=rkt"))
|
||||
return RC_SYS_RKT;
|
||||
else if (file_regex("/proc/1/environ", "container=systemd-nspawn"))
|
||||
return RC_SYS_SYSTEMD_NSPAWN;
|
||||
else if (file_regex("/proc/1/environ", "container=docker"))
|
||||
return RC_SYS_DOCKER;
|
||||
#endif
|
||||
|
||||
return NULL;
|
||||
#endif /* PREFIX */
|
||||
}
|
||||
librc_hidden_def(rc_sys_v1)
|
||||
|
||||
const char *
|
||||
rc_sys(void)
|
||||
{
|
||||
if (rc_conf_value("rc_sys")) {
|
||||
return rc_sys_v2();
|
||||
} else {
|
||||
return rc_sys_v1();
|
||||
}
|
||||
}
|
||||
librc_hidden_def(rc_sys)
|
||||
|
||||
|
||||
@@ -130,8 +130,6 @@ 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_sys_v1)
|
||||
librc_hidden_proto(rc_sys_v2)
|
||||
librc_hidden_proto(rc_yesno)
|
||||
|
||||
#endif
|
||||
|
||||
@@ -56,6 +56,7 @@ extern "C" {
|
||||
#define RC_SYS_WHITELIST RC_LIBEXECDIR "/conf.d/env_whitelist"
|
||||
#define RC_USR_WHITELIST RC_SYSCONFDIR "/conf.d/env_whitelist"
|
||||
#define RC_CONF RC_SYSCONFDIR "/rc.conf"
|
||||
#define RC_CONF_D RC_SYSCONFDIR "/rc.conf.d"
|
||||
#define RC_CONF_OLD RC_SYSCONFDIR "/conf.d/rc"
|
||||
|
||||
#define RC_PATH_PREFIX RC_LIBEXECDIR "/bin:/bin:/sbin:/usr/bin:/usr/sbin"
|
||||
@@ -328,10 +329,12 @@ bool rc_service_daemons_crashed(const char *);
|
||||
/*! @name System types
|
||||
* OpenRC can support some special sub system types, normally virtualization.
|
||||
* Some services cannot work in these systems, or we do something else. */
|
||||
#define RC_SYS_DOCKER "DOCKER"
|
||||
#define RC_SYS_JAIL "JAIL"
|
||||
#define RC_SYS_OPENVZ "OPENVZ"
|
||||
#define RC_SYS_LXC "LXC"
|
||||
#define RC_SYS_PREFIX "PREFIX"
|
||||
#define RC_SYS_RKT "RKT"
|
||||
#define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN"
|
||||
#define RC_SYS_UML "UML"
|
||||
#define RC_SYS_VSERVER "VSERVER"
|
||||
@@ -342,14 +345,6 @@ bool rc_service_daemons_crashed(const char *);
|
||||
* @return string from RC_SYS_* types or NULL if none detected */
|
||||
const char *rc_sys(void);
|
||||
|
||||
/*! Returns the type of subsystem using old automatic code
|
||||
* @return string from RC_SYS_* types or NULL if none detected */
|
||||
const char *rc_sys_v1(void);
|
||||
|
||||
/*! Returns the type of subsystem using new rc.conf rc_sys value
|
||||
* @return string from RC_SYS_* types or NULL if none detected */
|
||||
const char *rc_sys_v2(void);
|
||||
|
||||
/*! @name Dependency options
|
||||
* These options can change the services found by the rc_get_depinfo and
|
||||
* rc_get_depends functions. */
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
# include <sys/statvfs.h>
|
||||
# define statfs statvfs
|
||||
# define F_FLAGS f_flag
|
||||
#elif defined (__linux__) || (defined(__FreeBSD_kernel__) && \
|
||||
#elif defined(__linux__) || (defined(__FreeBSD_kernel__) && \
|
||||
defined(__GLIBC__)) || defined(__GNU__)
|
||||
# include <mntent.h>
|
||||
#endif
|
||||
@@ -267,8 +267,8 @@ find_mounts(struct args *args)
|
||||
return list;
|
||||
}
|
||||
|
||||
#elif defined (__linux__) || (defined (__FreeBSD_kernel__) && \
|
||||
defined(__GLIBC__))
|
||||
#elif defined(__linux__) || (defined(__FreeBSD_kernel__) && \
|
||||
defined(__GLIBC__)) || defined(__GNU__)
|
||||
static struct mntent *
|
||||
getmntfile(const char *file)
|
||||
{
|
||||
|
||||
@@ -51,8 +51,8 @@
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#if defined(__linux__) || (defined(__FreeBSD_kernel__) && \
|
||||
defined(__GLIBC__))
|
||||
#if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) \
|
||||
|| defined(__GNU__)
|
||||
# include <pty.h>
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
# include <util.h>
|
||||
@@ -78,19 +78,23 @@ static const char *applet;
|
||||
static char *service, *runlevel, *ibsave, *prefix;
|
||||
static RC_DEPTREE *deptree;
|
||||
static RC_STRINGLIST *applet_list, *services, *tmplist;
|
||||
static RC_STRINGLIST *restart_services, *need_services, *use_services;
|
||||
static RC_STRINGLIST *restart_services;
|
||||
static RC_STRINGLIST *need_services;
|
||||
static RC_STRINGLIST *use_services;
|
||||
static RC_STRINGLIST *want_services;
|
||||
static RC_HOOK hook_out;
|
||||
static int exclusive_fd = -1, master_tty = -1;
|
||||
static bool sighup, in_background, deps, dry_run;
|
||||
static pid_t service_pid;
|
||||
static int signal_pipe[2] = { -1, -1 };
|
||||
|
||||
static RC_STRINGLIST *deptypes_b;
|
||||
static RC_STRINGLIST *deptypes_n;
|
||||
static RC_STRINGLIST *deptypes_nu;
|
||||
static RC_STRINGLIST *deptypes_nua;
|
||||
static RC_STRINGLIST *deptypes_m;
|
||||
static RC_STRINGLIST *deptypes_mua;
|
||||
static RC_STRINGLIST *deptypes_b; /* broken deps */
|
||||
static RC_STRINGLIST *deptypes_n; /* needed deps */
|
||||
static RC_STRINGLIST *deptypes_nw; /* need+want deps */
|
||||
static RC_STRINGLIST *deptypes_nwu; /* need+want+use deps */
|
||||
static RC_STRINGLIST *deptypes_nwua; /* need+want+use+after deps */
|
||||
static RC_STRINGLIST *deptypes_m; /* needed deps for stopping */
|
||||
static RC_STRINGLIST *deptypes_mwua; /* need+want+use+after deps for stopping */
|
||||
|
||||
static void
|
||||
handle_signal(int sig)
|
||||
@@ -237,14 +241,16 @@ cleanup(void)
|
||||
#ifdef DEBUG_MEMORY
|
||||
rc_stringlist_free(deptypes_b);
|
||||
rc_stringlist_free(deptypes_n);
|
||||
rc_stringlist_free(deptypes_nu);
|
||||
rc_stringlist_free(deptypes_nua);
|
||||
rc_stringlist_free(deptypes_nw);
|
||||
rc_stringlist_free(deptypes_nwu);
|
||||
rc_stringlist_free(deptypes_nwua);
|
||||
rc_stringlist_free(deptypes_m);
|
||||
rc_stringlist_free(deptypes_mua);
|
||||
rc_stringlist_free(deptypes_mwua);
|
||||
rc_deptree_free(deptree);
|
||||
rc_stringlist_free(restart_services);
|
||||
rc_stringlist_free(need_services);
|
||||
rc_stringlist_free(use_services);
|
||||
rc_stringlist_free(want_services);
|
||||
rc_stringlist_free(services);
|
||||
rc_stringlist_free(applet_list);
|
||||
rc_stringlist_free(tmplist);
|
||||
@@ -530,22 +536,29 @@ setup_deptypes(void)
|
||||
deptypes_n = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_n, "ineed");
|
||||
|
||||
deptypes_nu = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_nu, "ineed");
|
||||
rc_stringlist_add(deptypes_nu, "iuse");
|
||||
deptypes_nw = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_nw, "ineed");
|
||||
rc_stringlist_add(deptypes_nw, "iwant");
|
||||
|
||||
deptypes_nua = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_nua, "ineed");
|
||||
rc_stringlist_add(deptypes_nua, "iuse");
|
||||
rc_stringlist_add(deptypes_nua, "iafter");
|
||||
deptypes_nwu = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_nwu, "ineed");
|
||||
rc_stringlist_add(deptypes_nwu, "iwant");
|
||||
rc_stringlist_add(deptypes_nwu, "iuse");
|
||||
|
||||
deptypes_nwua = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_nwua, "ineed");
|
||||
rc_stringlist_add(deptypes_nwua, "iwant");
|
||||
rc_stringlist_add(deptypes_nwua, "iuse");
|
||||
rc_stringlist_add(deptypes_nwua, "iafter");
|
||||
|
||||
deptypes_m = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_m, "needsme");
|
||||
|
||||
deptypes_mua = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_mua, "needsme");
|
||||
rc_stringlist_add(deptypes_mua, "usesme");
|
||||
rc_stringlist_add(deptypes_mua, "beforeme");
|
||||
deptypes_mwua = rc_stringlist_new();
|
||||
rc_stringlist_add(deptypes_mwua, "needsme");
|
||||
rc_stringlist_add(deptypes_mwua, "wantsme");
|
||||
rc_stringlist_add(deptypes_mwua, "usesme");
|
||||
rc_stringlist_add(deptypes_mwua, "beforeme");
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -631,7 +644,9 @@ svc_start_deps(void)
|
||||
|
||||
need_services = rc_deptree_depends(deptree, deptypes_n,
|
||||
applet_list, runlevel, depoptions);
|
||||
use_services = rc_deptree_depends(deptree, deptypes_nu,
|
||||
want_services = rc_deptree_depends(deptree, deptypes_nw,
|
||||
applet_list, runlevel, depoptions);
|
||||
use_services = rc_deptree_depends(deptree, deptypes_nwu,
|
||||
applet_list, runlevel, depoptions);
|
||||
|
||||
if (!rc_runlevel_starting()) {
|
||||
@@ -659,7 +674,7 @@ svc_start_deps(void)
|
||||
return;
|
||||
|
||||
/* Now wait for them to start */
|
||||
services = rc_deptree_depends(deptree, deptypes_nua, applet_list,
|
||||
services = rc_deptree_depends(deptree, deptypes_nwua, applet_list,
|
||||
runlevel, depoptions);
|
||||
/* We use tmplist to hold our scheduled by list */
|
||||
tmplist = rc_stringlist_new();
|
||||
@@ -674,6 +689,7 @@ svc_start_deps(void)
|
||||
state & RC_SERVICE_WASINACTIVE)
|
||||
{
|
||||
if (!rc_stringlist_find(need_services, svc->value) &&
|
||||
!rc_stringlist_find(want_services, svc->value) &&
|
||||
!rc_stringlist_find(use_services, svc->value))
|
||||
continue;
|
||||
}
|
||||
@@ -927,7 +943,7 @@ svc_stop_deps(RC_SERVICE state)
|
||||
|
||||
/* We now wait for other services that may use us and are
|
||||
* stopping. This is important when a runlevel stops */
|
||||
services = rc_deptree_depends(deptree, deptypes_mua, applet_list,
|
||||
services = rc_deptree_depends(deptree, deptypes_mwua, applet_list,
|
||||
runlevel, depoptions);
|
||||
TAILQ_FOREACH(svc, services, entries) {
|
||||
if (rc_service_state(svc->value) & RC_SERVICE_STOPPED)
|
||||
@@ -1298,8 +1314,10 @@ openrc_run(int argc, char **argv)
|
||||
prefix = save;
|
||||
} else if (strcmp(optarg, "ineed") == 0 ||
|
||||
strcmp(optarg, "iuse") == 0 ||
|
||||
strcmp(optarg, "iwant") == 0 ||
|
||||
strcmp(optarg, "needsme") == 0 ||
|
||||
strcmp(optarg, "usesme") == 0 ||
|
||||
strcmp(optarg, "wantsme") == 0 ||
|
||||
strcmp(optarg, "iafter") == 0 ||
|
||||
strcmp(optarg, "ibefore") == 0 ||
|
||||
strcmp(optarg, "iprovide") == 0)
|
||||
|
||||
@@ -44,7 +44,8 @@
|
||||
#include <time.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__))
|
||||
#if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) \
|
||||
|| defined(__GNU__)
|
||||
# include <pty.h>
|
||||
#elif defined(__NetBSD__) || defined(__OpenBSD__)
|
||||
# include <util.h>
|
||||
|
||||
@@ -343,6 +343,7 @@ rc_status(int argc, char **argv)
|
||||
}
|
||||
needsme = rc_stringlist_new();
|
||||
rc_stringlist_add(needsme, "needsme");
|
||||
rc_stringlist_add(needsme, "wantsme");
|
||||
nservices = rc_stringlist_new();
|
||||
alist = rc_stringlist_new();
|
||||
l = rc_stringlist_add(alist, "");
|
||||
@@ -365,7 +366,7 @@ rc_status(int argc, char **argv)
|
||||
* be added to the list
|
||||
*/
|
||||
unsetenv("RC_SVCNAME");
|
||||
print_level("Dynamic", "needed");
|
||||
print_level("Dynamic", "needed/wanted");
|
||||
print_services(NULL, nservices);
|
||||
print_level("Dynamic", "manual");
|
||||
print_services(NULL, services);
|
||||
|
||||
41
src/rc/rc.c
41
src/rc/rc.c
@@ -155,8 +155,8 @@ cleanup(void)
|
||||
rc_stringlist_free(hotplugged_services);
|
||||
rc_stringlist_free(stop_services);
|
||||
rc_stringlist_free(start_services);
|
||||
rc_stringlist_free(types_n);
|
||||
rc_stringlist_free(types_nua);
|
||||
rc_stringlist_free(types_nw);
|
||||
rc_stringlist_free(types_nwua);
|
||||
rc_deptree_free(deptree);
|
||||
free(runlevel);
|
||||
#endif
|
||||
@@ -519,7 +519,7 @@ runlevel_config(const char *service, const char *level)
|
||||
}
|
||||
|
||||
static void
|
||||
do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services,
|
||||
do_stop_services(RC_STRINGLIST *types_nw, RC_STRINGLIST *start_services,
|
||||
const RC_STRINGLIST *stop_services, const RC_DEPTREE *deptree,
|
||||
const char *newlevel, bool parallel, bool going_down)
|
||||
{
|
||||
@@ -530,9 +530,10 @@ do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services,
|
||||
RC_STRINGLIST *nostop;
|
||||
bool crashed, nstop;
|
||||
|
||||
if (!types_n) {
|
||||
types_n = rc_stringlist_new();
|
||||
rc_stringlist_add(types_n, "needsme");
|
||||
if (!types_nw) {
|
||||
types_nw = rc_stringlist_new();
|
||||
rc_stringlist_add(types_nw, "needsme");
|
||||
rc_stringlist_add(types_nw, "wantsme");
|
||||
}
|
||||
|
||||
crashed = rc_conf_yesno("rc_crashed_stop");
|
||||
@@ -591,7 +592,7 @@ do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services,
|
||||
if (!svc1) {
|
||||
tmplist = rc_stringlist_new();
|
||||
rc_stringlist_add(tmplist, service->value);
|
||||
deporder = rc_deptree_depends(deptree, types_n,
|
||||
deporder = rc_deptree_depends(deptree, types_nw,
|
||||
tmplist, newlevel ? newlevel : runlevel,
|
||||
RC_DEP_STRICT | RC_DEP_TRACE);
|
||||
rc_stringlist_free(tmplist);
|
||||
@@ -751,11 +752,12 @@ main(int argc, char **argv)
|
||||
{
|
||||
const char *bootlevel = NULL;
|
||||
char *newlevel = NULL;
|
||||
const char *systype = NULL;
|
||||
static RC_STRINGLIST *hotplugged_services;
|
||||
static RC_STRINGLIST *stop_services;
|
||||
static RC_STRINGLIST *start_services;
|
||||
static RC_STRINGLIST *types_n;
|
||||
static RC_STRINGLIST *types_nua;
|
||||
static RC_STRINGLIST *types_nw;
|
||||
static RC_STRINGLIST *types_nwua;
|
||||
static RC_DEPTREE *deptree;
|
||||
RC_STRINGLIST *deporder = NULL;
|
||||
RC_STRINGLIST *tmplist;
|
||||
@@ -844,9 +846,9 @@ main(int argc, char **argv)
|
||||
eerrorx("%s: %s", applet, strerror(errno));
|
||||
/* NOTREACHED */
|
||||
case 'S':
|
||||
bootlevel = rc_sys();
|
||||
if (bootlevel)
|
||||
printf("%s\n", bootlevel);
|
||||
systype = rc_sys();
|
||||
if (systype)
|
||||
printf("%s\n", systype);
|
||||
exit(EXIT_SUCCESS);
|
||||
/* NOTREACHED */
|
||||
case_RC_COMMON_GETOPT
|
||||
@@ -996,13 +998,14 @@ main(int argc, char **argv)
|
||||
if (stop_services)
|
||||
rc_stringlist_sort(&stop_services);
|
||||
|
||||
types_nua = rc_stringlist_new();
|
||||
rc_stringlist_add(types_nua, "ineed");
|
||||
rc_stringlist_add(types_nua, "iuse");
|
||||
rc_stringlist_add(types_nua, "iafter");
|
||||
types_nwua = rc_stringlist_new();
|
||||
rc_stringlist_add(types_nwua, "ineed");
|
||||
rc_stringlist_add(types_nwua, "iwant");
|
||||
rc_stringlist_add(types_nwua, "iuse");
|
||||
rc_stringlist_add(types_nwua, "iafter");
|
||||
|
||||
if (stop_services) {
|
||||
tmplist = rc_deptree_depends(deptree, types_nua, stop_services,
|
||||
tmplist = rc_deptree_depends(deptree, types_nwua, stop_services,
|
||||
runlevel, depoptions | RC_DEP_STOP);
|
||||
rc_stringlist_free(stop_services);
|
||||
stop_services = tmplist;
|
||||
@@ -1047,7 +1050,7 @@ main(int argc, char **argv)
|
||||
|
||||
/* Now stop the services that shouldn't be running */
|
||||
if (stop_services && !nostop)
|
||||
do_stop_services(types_n, start_services, stop_services, deptree, newlevel, parallel, going_down);
|
||||
do_stop_services(types_nw, start_services, stop_services, deptree, newlevel, parallel, going_down);
|
||||
|
||||
/* Wait for our services to finish */
|
||||
wait_for_services();
|
||||
@@ -1109,7 +1112,7 @@ main(int argc, char **argv)
|
||||
|
||||
/* Start those services. */
|
||||
rc_stringlist_sort(&run_services);
|
||||
deporder = rc_deptree_depends(deptree, types_nua, run_services, rlevel->value, depoptions | RC_DEP_START);
|
||||
deporder = rc_deptree_depends(deptree, types_nwua, run_services, rlevel->value, depoptions | RC_DEP_START);
|
||||
rc_stringlist_free(run_services);
|
||||
run_services = deporder;
|
||||
do_start_services(run_services, parallel);
|
||||
|
||||
@@ -112,9 +112,5 @@ rc_stringlist_split
|
||||
rc_stringlist_split@@RC_1.0
|
||||
rc_sys
|
||||
rc_sys@@RC_1.0
|
||||
rc_sys_v1
|
||||
rc_sys_v1@@RC_1.0
|
||||
rc_sys_v2
|
||||
rc_sys_v2@@RC_1.0
|
||||
rc_yesno
|
||||
rc_yesno@@RC_1.0
|
||||
|
||||
Reference in New Issue
Block a user