Compare commits

..

30 Commits
0.41 ... 0.21.x

Author SHA1 Message Date
William Hubbs
fbfc14040a update ChangeLog 2016-08-31 11:26:56 -05:00
William Hubbs
1522eaf28b version 0.21.7 2016-08-31 10:38:22 -05:00
William Hubbs
eff1f12e5c update ChangeLog 2016-08-31 08:46:06 -05:00
Martin Väth
484e6089b9 Fix typo in RC_UNAME check of modules-load
The $RC_UNAME "Linux" had been misspelled as "linux".
As a consequence, entries in e.g. /etc/modules-load.d failed to
load any module succesfully under Linux(!)
2016-08-31 08:38:07 -05:00
William Hubbs
8b3efa6ae2 version 0.21.6 2016-08-30 21:12:39 -05:00
William Hubbs
d1161c8aae update ChangeLog 2016-08-30 09:11:28 -05:00
William Hubbs
528bfa13f9 another news typo fix 2016-08-30 09:08:17 -05:00
Doug Freed
5f1daa6f30 modules-load: handle comments better
This handles comments without a trailing space after the comment
character.

Reported-By: josef64
2016-08-26 15:31:59 -04:00
William Hubbs
0445bc13f8 typo fix 2016-08-26 13:36:53 -04:00
Doug Freed
73d024228d version 0.21.5 2016-08-26 13:36:11 -04:00
William Hubbs
4809bc249f update changelog 2016-08-25 17:45:58 -05:00
William Hubbs
1478552071 Update news file
Add information on modules-load service and more explanation about
dealing with the rc -> openrc and runscript -> openrc-run transitions.
2016-08-25 17:36:12 -05:00
William Hubbs
8aa0b5b8a9 init.d: add modules-load to ignore patterns 2016-08-25 17:02:14 -05:00
William Hubbs
c8059c8474 modules-load.d: cleanups
Move list of directories to a local variable and create the fn variable
to use for an individual file name rather than using path.
2016-08-25 16:58:46 -05:00
William Hubbs
b888f1a8e2 Add modules-load.d support 2016-08-25 16:58:46 -05:00
William Hubbs
6e0bd2deb1 openrc-run: make runscript warning respect quiet option
X-Gentoo-Bug: 591414
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=591414
2016-08-25 11:51:26 -05:00
William Hubbs
cdc42d91db version 0.21.4 2016-08-25 11:48:05 -05:00
William Hubbs
bd4cafbbf3 Update ChangeLog 2016-07-31 14:05:41 -05:00
William Hubbs
61e211c1c4 init.d: initial service adjustments for docker support
Add -docker keyword to the same scripts that have -lxc keyword.
2016-07-31 13:50:05 -05:00
William Hubbs
40d3795fba librc: fix Docker auto detection
The original auto detection of Docker containers assumed the presence of
a container environment variable. However, Docker-1.12 does not
implement this, and I'm not sure which versions of docker implemented
it.

The new test is for the presence of a file named .dockerenv in the
root directory.
2016-07-31 13:50:05 -05:00
Doug Freed
fa39271d7a rc-logger: refuse to cat TMPLOG into itself
This prevents an infinite loop in case somebody decides to set
rc_log_path to match TMPLOG.
2016-07-31 13:50:05 -05:00
Julian Ospald
0077e54146 Build: fix hardcoded pkg-config invocation
This fixes #89.
2016-07-31 13:50:05 -05:00
William Hubbs
871fa56baa version 0.21.3 2016-07-31 13:49:33 -05:00
William Hubbs
53f6bd3690 update changelog 2016-07-06 12:24:06 -05:00
William Hubbs
6074cbd651 hwclock: always use --noadjfile if available
When we use the --utc or --localtime switch, also use --noadjfile if it
is available. This means hwclock will not use a drift file.

X-Gentoo-Bug: 584722
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=584722
2016-07-06 12:22:49 -05:00
William Hubbs
8b9ea8b9e6 version 0.21.2 2016-07-06 12:20:32 -05:00
William Hubbs
c47b497483 update changelog 2016-06-28 16:34:42 -05:00
Benda Xu
977811563d Fix PATH for Prefix.
1. remove default /bin:/sbin:/usr/bin:/usr/sbin
2. PKG_PREFIX should be defaulted to $(PREFIX)/usr
3. LOCAL_PREFIX should be defaulted to $(PREFIX)/usr/local

X-Gentoo-Bug:583634
X-Gentoo-Bug-URL:https://bugs.gentoo.org/show_bug.cgi?id=583634
2016-06-28 14:37:47 -05:00
William Hubbs
47aa0b93cd fstabinfo/mountinfo: ensure /etc/fstab exists before calling setmntent
This is based on a patch by A. Wilcox <awilfox.gentoo@foxkit.us>.

X-Gentoo-Bug: 478226
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=478226

X-Gentoo-Bug: 478226
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=478226
2016-06-28 14:37:47 -05:00
William Hubbs
f680c89c26 version 0.21.1 2016-06-28 14:35:20 -05:00
239 changed files with 4189 additions and 8199 deletions

View File

@@ -1,15 +0,0 @@
# Cirrus CI integration
# https://cirrus-ci.org
test_task:
freebsd_instance:
matrix:
image: freebsd-12-0-release-amd64
image: freebsd-11-2-release-amd64
env:
OS: FreeBSD
procfs_script: >
[ -f /proc/curproc ] || mount -t procfs proc /proc
pkg_install_script: pkg install -y bash gawk gmake gsed
gsed_hack_script: rm /usr/bin/sed && ln -s /usr/local/bin/gsed /usr/bin/sed
test_script: bash ci/cirrus.sh

2
.gitignore vendored
View File

@@ -1,4 +1,4 @@
*.gz
*.bz2
*.diff
*.patch

View File

@@ -1,28 +0,0 @@
# Travis build integration.
# https://docs.travis-ci.com/
language: c
os:
- linux
compiler:
- gcc
- clang
- musl-gcc
addons:
apt:
packages:
- musl-tools
notifications:
irc:
channels:
- "irc.freenode.org#openrc"
on_success: change # options: [always|never|change] default: always
on_failure: always # options: [always|never|change] default: always
on_start: false # default: false
script:
- ./ci/travis.sh

View File

@@ -1,5 +1,4 @@
Using Busybox as your Default Shell with OpenRC
===============================================
# Using Busybox as your Default Shell with OpenRC
If you have/bin/sh linked to busybox, you need to be aware of several
incompatibilities between busybox's applets and the standalone
@@ -23,6 +22,9 @@ or recognize the nofail option in fstab.
CONFIG_SETFONT -- The setfont applet does not support the -u option from kbd.
CONFIG_IP -- The ip applet doesn't support the "scope" modifier for
"ip route add" and "ip address add".
CONFIG_BB_SYSCTL -- The sysctl applet does not support the --system command
line switch.

1855
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -1,12 +1,11 @@
Features Scheduled for Removal
==============================
# Features Scheduled for Removal
The following is a list of files and features that are going to be removed in
the source tree. Every entry should contain what exactly is going away, why it
is happening, and who is going to be doing the work. When the feature is
removed, it should also be removed from this file.
# Service pause action
## Service pause action
When: 1.0
@@ -14,7 +13,7 @@ Why: The same affect can be obtained with the --nodeps option to stop.
Who:
# start-stop-daemon options --startas, --chuid , --oknodo
## start-stop-daemon options --startas, --chuid , --oknodo
When: 1.0
@@ -26,7 +25,7 @@ Why: Obsolete or replaced by other options.
Who:
# runscript and rc symbolic links
## runscript and rc symbolic links
When: 1.0
@@ -35,7 +34,7 @@ Why: Deprecated in favor of openrc-run and openrc due to naming
Who:
# support for the opts variable in service scripts
## support for the opts variable in service scripts
When: 1.0
@@ -44,7 +43,7 @@ Why: Deprecated in favor of extra_commands, extra_started_commands
Who:
# support for local_start and local_stop
## support for local_start and local_stop
When: 1.0
@@ -52,7 +51,7 @@ Why: Deprecated in favor of executable scripts in @SYSCONFDIR@/local.d
Who:
# the mtab service script
## the mtab service script
When: force /etc/mtab to link to /proc/self/mounts in 1.0, remove
service in 2.0
@@ -62,13 +61,13 @@ Why: /etc/mtab should be a symbolic link to /proc/self/mounts on modern
Who:
# C API Functions in rc.h
## C API Functions in rc.h
If you have a c program that links to librc and uses functions from
there, this section will list API functions which are deprecated and
will be removed along with the reason they are being removed.
## rc_getline()
### rc_getline()
When: 1.0

View File

@@ -1,5 +1,4 @@
OpenRC History
==============
# OpenRC History
This history of OpenRC was written by Daniel Robbins, Roy Marples, William
Hubbs and others.

View File

@@ -13,13 +13,7 @@ MK= ${TOP}/mk
include ${TOP}/Makefile.inc
SUBDIR= conf.d etc init.d local.d man scripts sh src support sysctl.d
# Build bash completion or not
MKBASHCOMP?= no
ifeq (${MKBASHCOMP},yes)
SUBDIR+= bash-completion
endif
SUBDIR= conf.d etc init.d local.d man scripts sh src sysctl.d
# Build pkgconfig or not
MKPKGCONFIG?= yes
@@ -27,15 +21,8 @@ ifeq (${MKPKGCONFIG},yes)
SUBDIR+= pkgconfig
endif
# Build zsh completion or not
MKZSHCOMP?= no
ifeq (${MKZSHCOMP},yes)
SUBDIR+= zsh-completion
endif
# We need to ensure that runlevels is done last other than test
# We need to ensure that runlevels is done last
SUBDIR+= runlevels
SUBDIR+= test
INSTALLAFTER= _installafter

View File

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

190
NEWS.md
View File

@@ -1,196 +1,8 @@
OpenRC NEWS
===========
# 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.41.
This version adds the ability to format the output of rc-status when
showing the status of services in a runlevel so that it may be parsed.
Currently, the -f switch only accepts ini as an argument which
causes the output to be in the .ini format.
This version adds an experimental build time switch to allow setting the
default shell to use for service scripts.
By default, this is set to /bin/sh if it is changed, the new shell must
be able to understand posix-compatible syntax.
## OpenRC 0.40
In this version, the keymaps and termencoding services on Linux needed
to be modified so they do not write to the root file system. This was
done so they can run earlier in the boot sequence. AS a result, you will
need to add save-termencoding and save-keymaps to your boot runlevel.
This can be done as follows:
```
# rc-update add save-keymaps boot
# rc-update add save-termencoding boot
```
## OpenRC 0.39
This version removes the support for addons.
The only place I know that this was used was Gentoo Baselayout 1.x, so
it shouldn't affect anyone since baselayout-1 has been dead for a few
years.
Since all supported Linux kernel versions now make efivarfs immutable
and all of the tools that access efivarfs are aware of this, we no
longer mount efivarfs read-only. See the following github issue for more
information:
https://github.com/openrc/openrc/issues/238
This version adds timed shutdown and cancelation of shutdown to
openrc-shutdown. Shutdowns can now be delayed for a certain amount of
time or scheduled for an exact time.
supervise-daemon supports health checks, which are a periodic way to make sure a
service is healthy. For more information on setting this up, please see
supervise-daemon-guide.md.
The --first-time switch has been added to all modprobe commands in the
modules service. This means that, on Linux, you will see failures if a
module was loaded by an initramfs or device manager before this service
runs. These messages are harmless, but to clean them up, you should adjust your
modules autoload configuration.
## OpenRC 0.37
start-stop-daemon now supports logging stdout and stderr of daemons to
processes instead of files. These processes are defined by the
output_logger and error_logger variables in standard service scripts, or
by the -3/--output-logger or -4/--error-logger switches if you use
start-stop-daemon directly. For more information on this, see the
start-stop-daemon man page.
## OpenRC 0.36
In this release, the modules-load service has been combined into the
modules service since there is no reason I know of to keep them
separate. However, modules also provides modules-load in case you were
using modules-load in your dependencies.
The consolefont, keymaps, numlock and procfs service scripts no longer
have a dependency on localmount.
If you are a linux user and are still separaating / from /usr,
you will need to add the following line to the appropriate conf.d files:
rc_need="localmount"
## OpenRC 0.35
In this version, the cgroups mounting logic has been moved from the
sysfs service to the cgroups service. This was done so cgroups can be
mounted inside an lxc/lxd container without using the other parts of the
sysfs service.
?As a result of this change, if you are upgrading, you need to add
cgroups to your sysinit runlevel by running the following command as
root:
```
# rc-update add cgroups sysinit
```
For more information, see the following issue:
https://github.com/openrc/openrc/issues/187
Consider this your second notification with regard to /etc/mtab being a
file instead of a symbolic link.
In this version, the mtab service will complain loudly if you have
mtab_is_file set to yes and recommend that you change this to no and
restart the mtab service to migrate /etc/mtab to a symbolic link.
If there is a valid technical reason to keep /etc/mtab as a flat file
instead of a symbolic link to /proc/self/mounts, we are interested and
we will keep the support in that case. Please open an issue and let us
know however. Otherwise, consider this your final notice that the mtab
service will be removed in the future.
## OpenRC 0.33
This version removes the "service" binary which was just a copy of
"rc-service" provided for compatibility.
If you still need the "service" binary, as opposed to "rc-service", it is
recommended that you use something like Debian's init-system-helpers.
Otherwise, just use "rc-service" in place of "service".
## OpenRC 0.31
This version adds support for Control Groups version 2, which is
considered stable as of Linux-4.13. Please see /etc/rc.conf for
documentation on how to configure control groups.
## OpenRC-0.28
This version mounts efivars read only due to concerns about changes in
this file system making systems unbootable. If you need to change something
in this path, you will need to re-mount it read-write, make the change
and re-mount it read-only.
Also, you can override this behavior by adding a line for efivars to
fstab if you want efivars mounted read-write.
For more information on this issue, see the following url:
https://github.com/openrc/openrc/issues/134
## OpenRC-0.25
This version contains an OpenRC-specific implementation of init for
Linux which can be used in place of sysvinit or any other init process.
For information on its usage, see the man pages for openrc-init (8) and
openrc-shutdown (8).
## OpenRC-0.24.1
This version starts cleaning up the dependencies so that rc_parallel
will work correctly.
The first step in this process is to remove the 'before *' from the
depend functions in the clock services. This means some services not
controlled by OpenRC may now start before instead of after the clock
service. If it is important for these services to start after the clock
service, they need to have 'after clock' added to their depend
functions.
## OpenRC-0.24
Since the deptree2dot tool and the perl requirement are completely
optional, the deptree2dot tool has been moved to the support directory.
As a result, the MKTOOLS=yes/no switch has been removed from the makefiles.
This version adds the agetty service which can be used to spawn
agetty on a specific terminal. This is currently documented in the
agetty-guide.md file at the top level of this distribution.
## OpenRC-0.23
The tmpfiles.d processing code, which was part of previous versions of
OpenRC, has been separated into its own package [1]. If you need to
process systemd style tmpfiles.d files, please install this package.
[1] https://github.com/openrc/opentmpfiles
## OpenRC-0.22
In previous versions of OpenRC, configuration information was processed
so that service-specific configuration stored in /etc/conf.d/* was
overridden by global configuration stored in /etc/rc.conf. This release
reverses that. Global configuration is now overridden by
service-specific configuration.
The swapfiles service, which was basically a copy of the swap service,
has been removed. If you are only using swap partitions, this change
will not affect you. If you are using swap files, please adjust the
dependencies of the swap service as shown in /etc/conf.d/swap.
## OpenRC-0.21
This version adds a daemon supervisor which can start daemons and

View File

@@ -1,5 +1,4 @@
OpenRC README
=============
# OpenRC README
OpenRC is a dependency-based init system that works with the
system-provided init program, normally `/sbin/init`. Currently, it does
@@ -23,22 +22,19 @@ below arguments to the make command
PROGLDFLAGS=-static
LIBNAME=lib64
DESTDIR=/tmp/openrc-image
MKBASHCOMP=no
MKNET=no
MKPAM=pam
MKPREFIX=yes
MKPKGCONFIG=no
MKSELINUX=yes
MKSTATICLIBS=no
MKSYSVINIT=yes
MKTERMCAP=ncurses
MKTERMCAP=termcap
MKZSHCOMP=no
MKTOOLS=yes
PKG_PREFIX=/usr/pkg
LOCAL_PREFIX=/usr/local
PREFIX=/usr/local
BRANDING=\"Gentoo/$(uname -s)\"
SH=/bin/sh
```
## Notes
@@ -47,6 +43,9 @@ We don't support building a static OpenRC with PAM.
You may need to use `PROGLDFLAGS=-Wl,-Bstatic` on glibc instead of just `-static`.
If you debug memory under valgrind, add `-DDEBUG_MEMORY`
to your `CPPFLAGS` so that all malloc memory should be freed at exit.
If you are building OpenRC for a Gentoo Prefix installation, add `MKPREFIX=yes`.
`PKG_PREFIX` should be set to where packages install to by default.
@@ -77,6 +76,10 @@ 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.
`init.d.misc` is not installed by default as the scripts will need
tweaking on a per distro basis. They are also non essential to the
operation of the system.
## Reporting Bugs
If you are using Gentoo Linux, bugs can be filed on their bugzilla under

View File

@@ -1,5 +1,4 @@
OpenRC Coding Style Guide
=========================
# OpenRC Style Guide
This is the openrc style manual. It governs the coding style of all code
in this repository. Follow it. Contact openrc@gentoo.org for any questions

View File

@@ -1,19 +0,0 @@
Setting up the agetty service in OpenRC
=================================xxxxxx
The agetty service is an OpenRC specific way to monitor and respawn a
getty, using agetty, on Linux. To use this method, make sure you aren't
spawning a getty manager for this port some other way (such as through
sysvinit/inittab), then run the following commands as root.
Note that [port] refers to the port you are spawning the getty on, for
example, tty1 or ttyS0. The full path to it, for example, /dev/tty1
should not be used.
```
# cd /etc/init.d
# ln -s agetty agetty.[port]
# cd /etc/conf.d
# cp agetty agetty.[port]
#rc-update add agetty.[port] [runlevel]
```

View File

@@ -1,11 +0,0 @@
DIR= ${BASHCOMPDIR}
CONF= openrc \
openrc-service-script \
rc-service \
rc-status \
rc-update \
MK= ../mk
include ${MK}/os.mk
include ${MK}/scripts.mk

View File

@@ -1,24 +0,0 @@
# Copyright (c) 2017 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.
#
# openrc completion command
#
_openrc()
{
local cur
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ ${#COMP_WORDS[*]} -le 2 ]]; then
COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
fi
return 0
} &&
complete -F _openrc openrc

View File

@@ -1,29 +0,0 @@
# Copyright (c) 2017 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.
_openrc_service_script()
{
local script="${COMP_WORDS[0]}"
local cur="${COMP_WORDS[$COMP_CWORD]}"
if [[ ( -f "${script}" || -h "${script}" ) && -r "${script}" ]] \
&& [[ "$(head -n 1 "${script}")" =~ \#\!.*/openrc-run ]]
then
[[ $COMP_CWORD -gt 1 ]] && return 1
COMPREPLY=($(opts="start stop status restart pause zap ineed needsme iuse usesme broken"; \
eval "$(grep '^opts=' "${script}")"; echo "${opts}"))
[[ -n "$COMPREPLY" ]] || COMPREPLY=(start stop restart zap)
COMPREPLY=($(compgen -W "${COMPREPLY[*]}" -- "${cur}"))
else
COMPREPLY=($(compgen -o default -- "${cur}"))
fi
return 0
}
complete -F _openrc_service_script */etc/init.d/*

View File

@@ -1,116 +0,0 @@
# Copyright (c) 2017 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.
#
# rc-service completion command
#
_rc_service()
{
local cur prev numwords opts
local words i x filename
local action actionpos
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
numwords=${#COMP_WORDS[*]}
if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
COMPREPLY=($(compgen -f -- ${cur}))
return 0
fi
# find action
for x in ${COMP_LINE} ; do
if [[ ${x} =~ --(list|exists|resolve) ]] || [[ ${x} =~ -(l|e|r) ]]
then
action=${x}
break
fi
done
if [[ -n ${action} ]]; then
for ((i = 0; i < ${numwords}; i++ )); do
if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
actionpos=${i}
break
fi
done
for ((i = 1; i < ${numwords}; i++ )); do
if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
break
fi
done
fi
if [[ ${COMP_CWORD} -eq 3 ]]; then
return 1
fi
# check if an option was typed
if [[ ${cur} == -* ]]; then
if [[ ${cur} == --* ]]; then
opts="--list --exists --resolve"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
elif [[ ${cur} == -* ]]; then
opts="-l -e -r"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
# NOTE: This slows things down!
# (Adapted from bash_completion by Ian Macdonald <ian@caliban.org>)
# This removes any options from the list of completions that have
# already been specified on the command line.
COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
(while read -d ' ' i; do
[[ -z ${i} ]] && continue
# flatten array with spaces on either side,
# otherwise we cannot grep on word boundaries of
# first and last word
COMPREPLY=" ${COMPREPLY[@]} "
# remove word from list of completions
COMPREPLY=(${COMPREPLY/ ${i%% *} / })
done
echo ${COMPREPLY[@]})))
return 0
else
# no option was typed
if [[ ${COMP_CWORD} -eq 1 ]]; then # if first word typed
words="$(rc-service --list | grep ^${cur})" # complete for init scripts
COMPREPLY=($(for i in ${words} ; do \
[[ ${i} == ${cur}* ]] && echo ${i} ; \
done))
return 0
elif [[ ${COMP_CWORD} -eq 2 ]] && [[ ${prev} != -* ]]; then # if second word typed and we didn't type in a function
rc-service --exists "$prev" || return
shopt -s extglob
while read -r _ line; do
if [[ $line == +([[:alnum:]_]):* ]]; then
opts+="${line%%:*} "
fi
done < <(rc-service "$prev" describe 2>&1)
shopt -u extglob
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
fi
if [[ ${action} == '--exists' ]] || [[ ${action} == '-e' ]] || \
[[ ${action} == '--resolve' ]] || [[ ${action} == '-r' ]]; then
words="$(rc-service --list | grep ^${cur})"
COMPREPLY=($(for i in ${words} ; do \
[[ ${i} == ${cur}* ]] && echo ${i} ; \
done))
return 0
fi
return 0
} &&
complete -F _rc_service rc-service

View File

@@ -1,31 +0,0 @@
# Copyright (c) 2017 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.
#
# rc-status completion command
#
_rcstatus()
{
local cur
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $COMP_CWORD -eq 1 ]]; then
if [[ "${cur}" == --* ]]; then
COMPREPLY=($(compgen -W '--all --list --unused' -- ${cur}))
elif [[ "${cur}" == -* ]]; then
COMPREPLY=($(compgen -W '-a -l -u' -- ${cur}))
else
COMPREPLY=($(compgen -W "$(rc-status --list)" -- ${cur}))
fi
else
unset COMPREPLY
fi
return 0
} &&
complete -F _rcstatus rc-status

View File

@@ -1,42 +0,0 @@
# Copyright (c) 2017 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.
#
# rc-update completion command
#
_rc_update()
{
local cur show
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
if [[ $COMP_CWORD -eq 1 ]]; then
if [[ "${cur}" == -* ]]; then
COMPREPLY=($(compgen -W '-a -d -s' -- ${cur}))
else
COMPREPLY=($(compgen -W 'add del show' ${cur}))
fi
else
if [[ "${COMP_WORDS[1]}" == "show" ]] || [[ "${COMP_WORDS[1]}" == "-s" ]]; then
show="TRUE"
fi
if ([[ $COMP_CWORD -eq 3 ]] && [[ -z "$show" ]]) || \
([[ $COMP_CWORD -eq 2 ]] && [[ -n "$show" ]]); then
COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
elif [[ $COMP_CWORD -eq 2 ]]; then
COMPREPLY=($(compgen -W "$(rc-service --list)" $cur))
elif [[ ${#COMP_WORDS[*]} -gt 2 ]] ; then
COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
else
unset COMPREPLY
fi
fi
return 0
} &&
complete -F _rc_update rc-update

View File

@@ -1,21 +0,0 @@
#!/bin/bash
# Copyright (c) 2007-2018 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
set -e
set -u
set -x
# These are steps to run on Cirrus CI under a jailed FreeBSD system.
# See $TOP/.cirrus.yml for more info about the Cirrus CI setup.
cpus=$(getconf NPROCESSORS_CONF || echo 1)
gmake -j"${cpus}" -O
gmake test

View File

@@ -1,23 +0,0 @@
#!/bin/bash
# Copyright (c) 2007-2018 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
set -e
set -u
set -x
# These are steps to run on TravisCI under a containerized Ubuntu system.
# See $TOP/.travis.yml for more info about the TravisCI setup.
cpus=$(getconf _NPROCESSORS_CONF || echo 1)
# make on TravisCI doesn't support -O yet
make -j"${cpus}"
make test

2
conf.d/.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
network
staticroute

View File

@@ -1,20 +1,29 @@
include ../mk/net.mk
DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount netmount swap urandom ${CONF-${OS}}
CONF= bootmisc fsck hostname localmount netmount urandom tmpfiles \
${CONF-${OS}}
ifeq (${MKNET},yes)
CONF+= network staticroute
TARGETS+= network staticroute
CLEANFILES+= network staticroute
endif
MK= ../mk
include ${MK}/os.mk
CONF-FreeBSD= ipfw modules moused powerd rarpd savecore syscons
CONF-FreeBSD= ipfw moused powerd rarpd savecore syscons
CONF-Linux= agetty consolefont devfs dmesg hwclock keymaps killprocs modules \
mtab net-online
CONF-Linux= consolefont devfs dmesg hwclock keymaps killprocs modules mtab \
net-online
CONF-NetBSD= moused rarpd savecore
include ${MK}/scripts.mk
network: network.in network${SFX}
cat $^ > $@
staticroute: staticroute${SFX}
cp $@${SFX} $@

View File

@@ -1,11 +0,0 @@
# make agetty quiet
#quiet="yes"
# Set the baud rate of the terminal line
#baud=""
# set the terminal type
#term_type="linux"
# extra options to pass to agetty for this port
#agetty_options=""

View File

@@ -1,6 +1,3 @@
# If you wish to pass any options to kill_all during shutdown,
# If you wish to pass any options to killall5 during shutdown,
# you should do so here.
#
# The setting is called killall5_opts because the options here are meant
# to be identical to those you could pass to killall5.
killall5_opts=""

View File

@@ -3,7 +3,7 @@
#no_umounts="/dir1:/var/dir2"
#
# Mark certain mount points as critical.
# This contains a space separated list of mount points which should be
# This contains aspace separated list of mount points which should be
# considered critical. If one of these mount points cannot be mounted,
# localmount will fail.
# By default, this is empty.

View File

@@ -1,17 +1,18 @@
# Linux users can define a list of modules for a specific kernel version,
# a released kernel version, a main kernel version or all kernel versions.
# You can define a list modules for a specific kernel version,
# a released kernel version, a main kernel version or just a list.
# The most specific versioned variable will take precedence.
# FreeBSD users can only use the modules="foo bar" setting.
#modules_2_6_23_gentoo_r5="ieee1394 ohci1394"
#modules_2_6_23="tun ieee1394"
#modules_2_6="tun"
#modules_2="ipv6"
#modules="ohci1394"
# Linux users can give the modules some arguments if needed, per version
# if necessary.
# You can give modules a different name when they load - the new name
# will also be used to pick arguments below.
#modules="dummy:dummy1"
# Give the modules some arguments if needed, per version if necessary.
# Again, the most specific versioned variable will take precedence.
# This is not supported on FreeBSD.
#module_ieee1394_args="debug"
#module_ieee1394_args_2_6_23_gentoo_r5="debug2"
#module_ieee1394_args_2_6_23="debug3"

View File

@@ -1,13 +1,5 @@
# As far as we are aware, there are no modern linux tools or use cases
# which require /etc/mtab to be a separate file from /proc/self/mounts,
# so this setting should be commented out.
# If it is set to yes, please comment it out and run this command:
# # rc-service mtab restart
# In the future, the mtab service will be removed since we are not aware
# of any need to manipulate /etc/mtab as a separate file from
# /proc/self/mounts.
# If you have a technical reason we should keep this support, please
# open an issue at https://github.com/openrc/openrc/issues and let us
# know about your situation.
# This setting controls whether /etc/mtab is a file or symbolic link.
# Most of the time, you shouldn't touch this. However, if the default
# breaks your system in some way, please see the NEWS.md file that comes
# with OpenRC for the actions to take.
# mtab_is_file=no

View File

@@ -1,15 +1,12 @@
# The interfaces setting controls which interfaces the net-online
# service considers in deciding whether the network is active. The
# default is all interfaces that support ethernet.
# 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 test is included in the test for
# network connectivity after all interfaces are active.
#include_ping_test=no
# This setting is the host to attempt to ping if the above is yes.
# The default is google.com.
#ping_test_host=some.host.name
# 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.

View File

@@ -1,80 +0,0 @@
# Assign static IP addresses and run custom scripts per interface.
# Seperate commands with ;
# Prefix with ! to run a shell script.
# Use \$int to represent the interface
#ifconfig_eth0="192.168.0.10 netmask 255.255.255.0"
# You also have ifup_eth0 and ifdown_eth0 to run other commands when
# eth0 is started and stopped.
# You should note that we don't stop the network at system shutdown by default.
# If you really need this, then set keep_network=NO
# Lastly, the interfaces variable pulls in virtual interfaces that cannot
# be automatically detected.
#interfaces="br0 bond0 vlan0"
# You can also use files instead of variables here if you like:
# /etc/ifconfig.eth0 is equivalent to ifconfig_eth0
# /etc/ip.eth0 is equivalent to ifconfig_eth0
# /etc/ifup.eth0 is equivalent to ifup_eth0
# /etc/ifdown.eth0 is equivalent to ifdown_eth0
# Any files found will automatically be put into the interfaces variable.
# You don't need to escape variables in files, so use $int instead of \$int.
# If you require DHCP, you should install dhcpcd and add it to the boot or
# default runlevel.
# NIS users can set the domain name here
#domainname="foobar"
# You can add a default route.
# The way this is done is slightly different depending on the operating system.
#
# *BSD:
#defaultroute="192.168.0.1"
#defaultroute6="2001:a:b:c"
#Hurd/Linux (ifconfig):
#defaultroute="gw 192.168.0.1"
#defaultroute6="gw 2001:a:b:c"
# The remainder of this file applies to Linux only and shows how
# iproute2 is supported along with other examples.
# ifconfig under Linux is not that powerful and doesn't easily handle
# multiple addresses
# On the other hand, iproute2 is quite powerful and is also supported
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
# You can also use iproute2 to add the default route.
#defaultiproute="via 192.168.0.1"
#defaultiproute6="via 2001:a:b:c"
# ip doesn't handle MTU like ifconfig, but we can do it like so
#ifup_eth0="ip link set \$int mtu 1500"
# Create a bonded interface
#interfaces="bond0"
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
#ifconfig_bond0="192.168.0.10 netmask 255.255.255.0"
#ifdown_bond0="rmmod bonding"
# Create tap interface and a bridge interface.
# We add the tap to the bridge.
# An external program, like dhcpcd, will configure the IP on the bridge
#interfaces="tun0 br0"
#ifup_tun0="tunctl -t \$int"
#ifdown_tun0="tunctl -d \$int"
#ifup_br0="brctl addbr \$int; brctl add \$int eth1; brtctl add \$int eth2"
#ifdown_br0="ifconfig \$int down; btctl delbr \$int"
# Create VLAN
#interfaces="eth0_2 eth0_3 eth0_4"
#ifup_eth0="vconfig add \$int 2; vconfig add \$int 3; vconfig add \$int 4"
#ifconfig_eth0_2="192.168.2.10 netmask 255.255.255.0"
#ifconfig_eth0_3="192.168.3.10 netmask 255.255.255.0"
#ifconfig_eth0_4="192.168.4.10 netmask 255.255.255.0"
#ifdown_eth0="vconfig rem \$int.2; vconfig rem \$int.3; vconfig rem \$int.4"
# Normally you would use wpa_supplicant to configure wireless, but you can
# use iwconfig also
#ifup_wlan0="iwconfig \$int key s:secretkey enc open essid foobar"

4
conf.d/network.BSD.in Normal file
View File

@@ -0,0 +1,4 @@
# You can assign a default route
#defaultroute="192.168.0.1"
#defaultroute6="2001:a:b:c"

View File

@@ -0,0 +1,4 @@
# You can assign a default route
#defaultroute="192.168.0.1"
#defaultroute6="2001:a:b:c"

4
conf.d/network.GNU.in Normal file
View File

@@ -0,0 +1,4 @@
# You can assign a default route
#defaultroute="gw 192.168.0.1"
#defaultroute6="gw 2001:a:b:c"

43
conf.d/network.Linux.in Normal file
View File

@@ -0,0 +1,43 @@
# You can assign a default route
#defaultroute="gw 192.168.0.1"
#defaultroute6="gw 2001:a:b:c"
# ifconfig under Linux is not that powerful and doesn't easily handle
# multiple addresses
# On the other hand, ip (iproute2) is quite powerful and is also supported
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
# You can also use ip to add the default route.
#defaultiproute="via 192.168.0.1"
#defaultiproute6="via 2001:a:b:c"
# ip doesn't handle MTU like ifconfig, but we can do it like so
#ifup_eth0="ip link set \$int mtu 1500"
# Create a bonded interface
#interfaces="bond0"
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
#ifconfig_bond0="192.168.0.10 netmask 255.255.255.0"
#ifdown_bond0="rmmod bonding"
# Create tap interface and a bridge interface.
# We add the tap to the bridge.
# An external program, like dhcpcd, will configure the IP on the bridge
#interfaces="tun0 br0"
#ifup_tun0="tunctl -t \$int"
#ifdown_tun0="tunctl -d \$int"
#ifup_br0="brctl addbr \$int; brctl add \$int eth1; brtctl add \$int eth2"
#ifdown_br0="ifconfig \$int down; btctl delbr \$int"
# Create VLAN
#interfaces="eth0_2 eth0_3 eth0_4"
#ifup_eth0="vconfig add \$int 2; vconfig add \$int 3; vconfig add \$int 4"
#ifconfig_eth0_2="192.168.2.10 netmask 255.255.255.0"
#ifconfig_eth0_3="192.168.3.10 netmask 255.255.255.0"
#ifconfig_eth0_4="192.168.4.10 netmask 255.255.255.0"
#ifdown_eth0="vconfig rem \$int.2; vconfig rem \$int.3; vconfig rem \$int.4"
# Normally you would use wpa_supplicant to configure wireless, but you can
# use iwconfig also
#ifup_wlan0="iwconfig \$int key s:secretkey enc open essid foobar"

28
conf.d/network.in Normal file
View File

@@ -0,0 +1,28 @@
# Assign static IP addresses and run custom scripts per interface.
# Seperate commands with ;
# Prefix with ! to run a shell script.
# Use \$int to represent the interface
#ifconfig_eth0="192.168.0.10 netmask 255.255.255.0"
# You also have ifup_eth0 and ifdown_eth0 to run other commands when
# eth0 is started and stopped.
# You should note that we don't stop the network at system shutdown by default.
# If you really need this, then set keep_network=NO
# Lastly, the interfaces variable pulls in virtual interfaces that cannot
# be automatically detected.
#interfaces="br0 bond0 vlan0"
# You can also use files instead of variables here if you like:
# /etc/ifconfig.eth0 is equivalent to ifconfig_eth0
# /etc/ip.eth0 is equivalent to ifconfig_eth0
# /etc/ifup.eth0 is equivalent to ifup_eth0
# /etc/ifdown.eth0 is equivalent to ifdown_eth0
# Any files found will automatically be put into the interfaces variable.
# You don't need to escape variables in files, so use $int instead of \$int.
# If you require DHCP, you should install dhcpcd and it to the boot or
# default runlevel.
# NIS users can set the domain name here
#domainname="foobar"

View File

@@ -1,26 +0,0 @@
# Static routes are defined differently depending on your operating
# system, so please be sure to use the correct syntax.
# Do not use this file to define the default route.
# In all settings, multiple routes should be separated using ; or new lines.
# Define static routes on Linux using route. See route(8) for syntax.
#staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1
#net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1"
# Define static routes on Linux using iproute2. See ip(8) for syntax.
#staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1"
# Define static routes on GNU/Hurd. See route(8) for syntax.
# /etc/route.conf(5) takes precedence over this configuration.
# FIXME: "net ..." not supported
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 --address 10.73.1.1
#net 192.168.1.0 -netmask 255.255.255.0 --address 10.73.1.1"
# Define static routes on GNU/KFreeBSD. See route(8) for syntax.
#staticroute="net 192.168.0.0 10.73.1.1 netmask 255.255.255.0
#net 192.168.1.0 10.73.1.1 netmask 255.255.255.0"
# Define static routes on other BSD systems. See route(8) for syntax.
# /etc/route.conf(5) takes precedence over this configuration.
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 10.73.1.1
#net 192.168.1.0 -netmask 255.255.255.0 10.73.1.1"

View File

@@ -0,0 +1,6 @@
# Separate multiple routes using ; or new lines.
# /etc/route.conf(5) takes precedence over this configuration.
# Example static routes. See route(8) for syntax.
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 10.73.1.1
#net 192.168.1.0 -netmask 255.255.255.0 10.73.1.1"

View File

@@ -0,0 +1,5 @@
# Separate multiple routes using ; or new lines.
# Example static routes. See route(8) for syntax.
#staticroute="net 192.168.0.0 10.73.1.1 netmask 255.255.255.0
#net 192.168.1.0 10.73.1.1 netmask 255.255.255.0"

View File

@@ -0,0 +1,7 @@
# Separate multiple routes using ; or new lines.
# /etc/route.conf(5) takes precedence over this configuration.
# Example static routes. See route(8) for syntax.
# FIXME: "net ..." not supported
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 --address 10.73.1.1
#net 192.168.1.0 -netmask 255.255.255.0 --address 10.73.1.1"

View File

@@ -0,0 +1,8 @@
# Separate multiple routes using ; or new lines.
# Example static routes. See route(8) for syntax.
#staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1
#net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1"
# Example static routes using iproute2. See ip(8) for syntax.
#staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1"

View File

@@ -1,13 +0,0 @@
# If you are only using local swap partitions, you should not change
# this file. Otherwise, you need to uncomment the below rc_before line
# followed by the appropriate rc_need line.
#rc_before="!localmount"
#
# If you are using swap files stored on local file systems, uncomment
# this line.
#rc_need="localmount"
#
# If you are using swap files stored on network file systems or swap
# partitions stored on network block devices such as iSCSI, uncomment
# this line.
#rc_need="netmount"

3
conf.d/tmpfiles Normal file
View File

@@ -0,0 +1,3 @@
# Extra options for tmpfiles.sh
#tmpfiles_opts="--verbose"
tmpfiles_opts=""

1
etc/.gitignore vendored
View File

@@ -1,2 +1,3 @@
rc.conf
rc
rc.shutdown

View File

@@ -1,8 +1,10 @@
DIR= ${SYSCONFDIR}
SRCS= rc.in rc.shutdown.in
SRCS= rc.conf.in rc.in rc.shutdown.in
BIN= ${BIN-${OS}}
CONF= rc.conf ${BIN-${OS}}
CLEANFILES+= rc.conf
MK= ../mk
include ${MK}/os.mk
@@ -21,3 +23,6 @@ CONF-NetBSD=
SED_EXTRA= ${SED_EXTRA-${OS}}
include ${MK}/scripts.mk
rc.conf: rc.conf.in rc.conf.${OS}
${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@

View File

@@ -1,314 +0,0 @@
# Global OpenRC configuration settings
# Set to "YES" if you want the rc system to try and start services
# in parallel for a slight speed improvement. When running in parallel we
# prefix the service output with its name as the output will get
# jumbled up.
# WARNING: whilst we have improved parallel, it can still potentially lock
# the boot process. Don't file bugs about this unless you can supply
# patches that fix it without breaking other things!
#rc_parallel="NO"
# Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
#rc_interactive="YES"
# If we need to drop to a shell, you can specify it here.
# If not specified we use $SHELL, otherwise the one specified in /etc/passwd,
# otherwise /bin/sh
# Linux users could specify /sbin/sulogin
#rc_shell=/bin/sh
# Do we allow any started service in the runlevel to satisfy the dependency
# or do we want all of them regardless of state? For example, if net.eth0
# and net.eth1 are in the default runlevel then with rc_depend_strict="NO"
# both will be started, but services that depend on 'net' will work if either
# one comes up. With rc_depend_strict="YES" we would require them both to
# come up.
#rc_depend_strict="YES"
# 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.
# 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 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
# NOTE: Linux systems require the devfs service to be started before
# logging can take place and as such cannot log the sysinit runlevel.
#rc_logger="NO"
# Through rc_log_path you can specify a custom log file.
# The default value is: /var/log/rc.log
#rc_log_path="/var/log/rc.log"
# If you want verbose output for OpenRC, set this to yes. If you want
# verbose output for service foo only, set it to yes in /etc/conf.d/foo.
#rc_verbose=no
# By default we filter the environment for our running scripts. To allow other
# variables through, add them here. Use a * to allow all variables through.
#rc_env_allow="VAR1 VAR2"
# By default we assume that all daemons will start correctly.
# However, some do not - a classic example is that they fork and return 0 AND
# then child barfs on a configuration error. Or the daemon has a bug and the
# child crashes. You can set the number of milliseconds start-stop-daemon
# waits to check that the daemon is still running after starting here.
# The default is 0 - no checking.
#rc_start_wait=100
# rc_nostop is a list of services which will not stop when changing runlevels.
# This still allows the service itself to be stopped when called directly.
#rc_nostop=""
# rc will attempt to start crashed services by default.
# However, it will not stop them by default as that could bring down other
# critical services.
#rc_crashed_stop=NO
#rc_crashed_start=YES
# Set rc_nocolor to yes if you do not want colors displayed in OpenRC
# output.
#rc_nocolor=NO
##############################################################################
# MISC CONFIGURATION VARIABLES
# There variables are shared between many init scripts
# Set unicode to YES to turn on unicode support for keyboards and screens.
#unicode="NO"
# This is how long fuser should wait for a remote server to respond. The
# default is 60 seconds, but it can be adjusted here.
#rc_fuser_timeout=60
# Below is the default list of network fstypes.
#
# afs ceph cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs
# nfs nfs4 ocfs2 shfs smbfs
#
# If you would like to add to this list, you can do so by adding your
# own fstypes to the following variable.
#extra_net_fs_list=""
##############################################################################
# SERVICE CONFIGURATION VARIABLES
# These variables are documented here, but should be configured in
# /etc/conf.d/foo for service foo and NOT enabled here unless you
# really want them to work on a global basis.
# If your service has characters in its name which are not legal in
# shell variable names and you configure the variables for it in this
# file, those characters should be replaced with underscores in the
# variable names as shown below.
# Some daemons are started and stopped via start-stop-daemon.
# We can set some things on a per service basis, like the nicelevel.
#SSD_NICELEVEL="-19"
# Or the ionice level. The format is class[:data] , just like the
# --ionice start-stop-daemon parameter.
#SSD_IONICELEVEL="2:2"
# Pass ulimit parameters
# If you are using bash in POSIX mode for your shell, note that the
# ulimit command uses a block size of 512 bytes for the -c and -f
# options
#rc_ulimit="-u 30"
# It's possible to define extra dependencies for services like so
#rc_config="/etc/foo"
#rc_need="openvpn"
#rc_use="net.eth0"
#rc_after="clock"
#rc_before="local"
#rc_provide="!net"
# You can also enable the above commands here for each service. Below is an
# example for service foo.
#rc_foo_config="/etc/foo"
#rc_foo_need="openvpn"
#rc_foo_after="clock"
# Below is an example for service foo-bar. Note that the '-' is illegal
# in a shell variable name, so we convert it to an underscore.
# example for service foo-bar.
#rc_foo_bar_config="/etc/foo-bar"
#rc_foo_bar_need="openvpn"
#rc_foo_bar_after="clock"
# You can also remove dependencies.
# This is mainly used for saying which services do NOT provide net.
#rc_net_tap0_provide="!net"
# This is the subsystem type.
# It is used to match against keywords set by the keyword call in the
# depend function of service scripts.
#
# It should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
# If it is commented out, automatic detection will be used.
#
# The list below shows all possible settings as well as the host
# operating systems where they can be used and autodetected.
#
# "" - nothing special
# "docker" - Docker container manager (Linux)
# "jail" - Jail (DragonflyBSD or FreeBSD)
# "lxc" - Linux Containers
# "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "rkt" - CoreOS container management system (Linux)
# "subhurd" - Hurd subhurds (to be checked)
# "systemd-nspawn" - Container created by systemd-nspawn (Linux)
# "uml" - Usermode Linux
# "vserver" - Linux vserver
# "xen0" - Xen0 Domain (Linux and NetBSD)
# "xenU" - XenU Domain (Linux and NetBSD)
#rc_sys=""
# if you use openrc-init, which is currently only available on Linux,
# this is the default runlevel to activate after "sysinit" and "boot"
# when booting.
#rc_default_runlevel="default"
# on Linux and Hurd, this is the number of ttys allocated for logins
# It is used in the consolefont, keymaps, numlock and termencoding
# service scripts.
rc_tty_number=12
##############################################################################
# LINUX CGROUPS RESOURCE MANAGEMENT
# This sets the mode used to mount cgroups.
# "hybrid" mounts cgroups version 2 on /sys/fs/cgroup/unified and
# cgroups version 1 on /sys/fs/cgroup.
# "legacy" mounts cgroups version 1 on /sys/fs/cgroup
# "unified" mounts cgroups version 2 on /sys/fs/cgroup
#rc_cgroup_mode="hybrid"
# This is a list of controllers which should be enabled for cgroups version 2.
# If hybrid mode is being used, controllers listed here will not be
# available for cgroups version 1.
# This is a global setting.
#rc_cgroup_controllers=""
# This variable contains the cgroups version 2 settings for your services.
# If this is set in this file, the settings will apply to all services.
# If you want different settings for each service, place the settings in
# /etc/conf.d/foo for service foo.
# The format is to specify the setting and value followed by a newline.
# Multiple settings and values can be specified.
# For example, you would use this to set the maximum memory and maximum
# number of pids for a service.
#rc_cgroup_settings="
#memory.max 10485760
#pids.max max
#"
#
# For more information about the adjustments that can be made with
# cgroups version 2, see Documentation/cgroups-v2.txt in the linux kernel
# source tree.
#rc_cgroup_settings=""
# This switch controls whether or not cgroups version 1 controllers are
# individually mounted under
# /sys/fs/cgroup in hybrid or legacy mode.
#rc_controller_cgroups="YES"
# The following setting turns on the memory.use_hierarchy setting in the
# root memory cgroup for cgroups v1.
# It must be set to yes in this file if you want this functionality.
#rc_cgroup_memory_use_hierarchy="NO"
# The following settings allow you to set up values for the cgroups version 1
# controllers for your services.
# They can be set in this file;, however, if you do this, the settings
# will apply to all of your services.
# If you want different settings for each service, place the settings in
# /etc/conf.d/foo for service foo.
# The format is to specify the names of the settings followed by their
# values. Each variable can hold multiple settings.
# For example, you would use this to set the cpu.shares setting in the
# cpu controller to 512 for your service.
# rc_cgroup_cpu="
# cpu.shares 512
# "
#
# For more information about the adjustments that can be made with
# cgroups version 1, see Documentation/cgroups-v1/* in the linux kernel
# source tree.
# Set the blkio controller settings for this service.
#rc_cgroup_blkio=""
# Set the cpu controller settings for this service.
#rc_cgroup_cpu=""
# Add this service to the cpuacct controller (any value means yes).
#rc_cgroup_cpuacct=""
# Set the cpuset controller settings for this service.
#rc_cgroup_cpuset=""
# Set the devices controller settings for this service.
#rc_cgroup_devices=""
# Set the hugetlb controller settings for this service.
#rc_cgroup_hugetlb=""
# Set the memory controller settings for this service.
#rc_cgroup_memory=""
# Set the net_cls controller settings for this service.
#rc_cgroup_net_cls=""
# Set the net_prio controller settings for this service.
#rc_cgroup_net_prio=""
# Set the pids controller settings for this service.
#rc_cgroup_pids=""
# Set this to YES if you want all of the processes in a service's cgroup
# killed when the service is stopped or restarted.
# Be aware that setting this to yes means all of a service's
# child processes will be killed. Keep this in mind if you set this to
# yes here instead of for the individual services in
# /etc/conf.d/<service>.
# To perform this cleanup manually for a stopped service, you can
# execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or
# rc-service <service> cgroup_cleanup.
# The process followed in this cleanup is the following:
# 1. send stopsig (sigterm if it isn't set) to all processes left in the
# cgroup immediately followed by sigcont.
# 2. Send sighup to all processes in the cgroup if rc_send_sighup is
# yes.
# 3. delay for rc_timeout_stopsec seconds.
# 4. send sigkill to all processes in the cgroup unless disabled by
# setting rc_send_sigkill to no.
# rc_cgroup_cleanup="NO"
# If this is yes, we will send sighup to the processes in the cgroup
# immediately after stopsig and sigcont.
#rc_send_sighup="NO"
# This is the amount of time in seconds that we delay after sending sigcont
# and optionally sighup, before we optionally send sigkill to all
# processes in the # cgroup.
# The default is 90 seconds.
#rc_timeout_stopsec="90"
# If this is set to no, we do not send sigkill to all processes in the
# cgroup.
#rc_send_sigkill="YES"

13
etc/rc.conf.DragonFly Normal file
View File

@@ -0,0 +1,13 @@
##############################################################################
# DragonFly BSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on DragonFly BSD:
# "" - nothing special
# "jail" - DragonFly BSD jails
# "prefix" - Prefix
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""

13
etc/rc.conf.FreeBSD Normal file
View File

@@ -0,0 +1,13 @@
##############################################################################
# FreeBSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on FreeBSD:
# "" - nothing special
# "jail" - FreeBSD jails
# "prefix" - Prefix
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""

14
etc/rc.conf.GNU Normal file
View File

@@ -0,0 +1,14 @@
##############################################################################
# GNU/Hurd SPECIFIC OPTIONS
# This is the subsystem type. Valid options on GNU/Hurd:
# "" - nothing special
# "subhurd" - Hurd subhurds (to be checked)
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""
# This is the number of tty's used in most of the rc-scripts (like
# consolefont, numlock, etc ...)
#rc_tty_number=6?

11
etc/rc.conf.GNU-kFreeBSD Normal file
View File

@@ -0,0 +1,11 @@
##############################################################################
# GNU/kFreeBSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on GNU/kFreeBSD:
# "" - nothing special
# "jail" - FreeBSD jails (not yet implemented)
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""

90
etc/rc.conf.Linux Normal file
View File

@@ -0,0 +1,90 @@
##############################################################################
# LINUX SPECIFIC OPTIONS
# 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
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""
# This is the number of tty's used in most of the rc-scripts (like
# consolefont, numlock, etc ...)
rc_tty_number=12
##############################################################################
# CGROUPS RESOURCE MANAGEMENT
# If you have cgroups turned on in your kernel, this switch controls
# whether or not a group for each controller is mounted under
# /sys/fs/cgroup.
# None of the other options in this section work if this is set to "NO".
#rc_controller_cgroups="YES"
# The following settings allow you to set up values for the cgroup
# controllers for your services.
# They can be set in this file;, however, if you do this, the settings
# will apply to all of your services.
# If you want different settings for each service, place the settings in
# /etc/conf.d/foo for service foo.
# The format is to specify the names of the settings followed by their
# values. Each variable can hold multiple settings.
# For example, you would use this to set the cpu.shares setting in the
# cpu controller to 512 for your service.
# rc_cgroup_cpu="
# cpu.shares 512
# "
#
#For more information about the adjustments that can be made with
#cgroups, see Documentation/cgroups/* in the linux kernel source tree.
# Set the blkio controller settings for this service.
#rc_cgroup_blkio=""
# Set the cpu controller settings for this service.
#rc_cgroup_cpu=""
# Add this service to the cpuacct controller (any value means yes).
#rc_cgroup_cpuacct=""
# Set the cpuset controller settings for this service.
#rc_cgroup_cpuset=""
# Set the devices controller settings for this service.
#rc_cgroup_devices=""
# Set the hugetlb controller settings for this service.
#rc_cgroup_hugetlb=""
# Set the memory controller settings for this service.
#rc_cgroup_memory=""
# Set the net_cls controller settings for this service.
#rc_cgroup_net_cls=""
# Set the net_prio controller settings for this service.
#rc_cgroup_net_prio=""
# Set the pids controller settings for this service.
#rc_cgroup_pids=""
# Set this to YES if yu want all of the processes in a service's cgroup
# killed when the service is stopped or restarted.
# This should not be set globally because it kills all of the service's
# child processes, and most of the time this is undesirable. Please set
# it in /etc/conf.d/<service>.
# To perform this cleanup manually for a stopped service, you can
# execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or
# rc-service <service> cgroup_cleanup.
# rc_cgroup_cleanup="NO"

14
etc/rc.conf.NetBSD Normal file
View File

@@ -0,0 +1,14 @@
##############################################################################
# NetBSD SPECIFIC OPTIONS
# This is the subsystem type. Valid options on NetBSD:
# "" - nothing special
# "prefix" - Prefix
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If this is commented out, automatic detection will be used.
#
# This should be set to the value representing the environment this file is
# PRESENTLY in, not the virtualization the environment is capable of.
#rc_sys=""

151
etc/rc.conf.in Normal file
View File

@@ -0,0 +1,151 @@
# Global OpenRC configuration settings
# Set to "YES" if you want the rc system to try and start services
# in parallel for a slight speed improvement. When running in parallel we
# prefix the service output with its name as the output will get
# jumbled up.
# WARNING: whilst we have improved parallel, it can still potentially lock
# the boot process. Don't file bugs about this unless you can supply
# patches that fix it without breaking other things!
#rc_parallel="NO"
# Set rc_interactive to "YES" and you'll be able to press the I key during
# boot so you can choose to start specific services. Set to "NO" to disable
# this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
#rc_interactive="YES"
# If we need to drop to a shell, you can specify it here.
# If not specified we use $SHELL, otherwise the one specified in /etc/passwd,
# otherwise /bin/sh
# Linux users could specify /sbin/sulogin
#rc_shell=/bin/sh
# Do we allow any started service in the runlevel to satisfy the dependency
# or do we want all of them regardless of state? For example, if net.eth0
# and net.eth1 are in the default runlevel then with rc_depend_strict="NO"
# both will be started, but services that depend on 'net' will work if either
# one comes up. With rc_depend_strict="YES" we would require them both to
# come up.
#rc_depend_strict="YES"
# 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.
# 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 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
# NOTE: Linux systems require the devfs service to be started before
# logging can take place and as such cannot log the sysinit runlevel.
#rc_logger="YES"
# Through rc_log_path you can specify a custom log file.
# The default value is: /var/log/rc.log
#rc_log_path="/var/log/rc.log"
# If you want verbose output for OpenRC, set this to yes. If you want
# verbose output for service foo only, set it to yes in /etc/conf.d/foo.
#rc_verbose=no
# By default we filter the environment for our running scripts. To allow other
# variables through, add them here. Use a * to allow all variables through.
#rc_env_allow="VAR1 VAR2"
# By default we assume that all daemons will start correctly.
# However, some do not - a classic example is that they fork and return 0 AND
# then child barfs on a configuration error. Or the daemon has a bug and the
# child crashes. You can set the number of milliseconds start-stop-daemon
# waits to check that the daemon is still running after starting here.
# The default is 0 - no checking.
#rc_start_wait=100
# rc_nostop is a list of services which will not stop when changing runlevels.
# This still allows the service itself to be stopped when called directly.
#rc_nostop=""
# rc will attempt to start crashed services by default.
# However, it will not stop them by default as that could bring down other
# critical services.
#rc_crashed_stop=NO
#rc_crashed_start=YES
# Set rc_nocolor to yes if you do not want colors displayed in OpenRC
# output.
#rc_nocolor=NO
##############################################################################
# MISC CONFIGURATION VARIABLES
# There variables are shared between many init scripts
# Set unicode to YES to turn on unicode support for keyboards and screens.
#unicode="NO"
# This is how long fuser should wait for a remote server to respond. The
# default is 60 seconds, but it can be adjusted here.
#rc_fuser_timeout=60
# Below is the default list of network fstypes.
#
# afs ceph cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs
# nfs nfs4 ocfs2 shfs smbfs
#
# If you would like to add to this list, you can do so by adding your
# own fstypes to the following variable.
#extra_net_fs_list=""
##############################################################################
# SERVICE CONFIGURATION VARIABLES
# These variables are documented here, but should be configured in
# /etc/conf.d/foo for service foo and NOT enabled here unless you
# really want them to work on a global basis.
# If your service has characters in its name which are not legal in
# shell variable names and you configure the variables for it in this
# file, those characters should be replaced with underscores in the
# variable names as shown below.
# Some daemons are started and stopped via start-stop-daemon.
# We can set some things on a per service basis, like the nicelevel.
#SSD_NICELEVEL="-19"
# Pass ulimit parameters
# If you are using bash in POSIX mode for your shell, note that the
# ulimit command uses a block size of 512 bytes for the -c and -f
# options
#rc_ulimit="-u 30"
# It's possible to define extra dependencies for services like so
#rc_config="/etc/foo"
#rc_need="openvpn"
#rc_use="net.eth0"
#rc_after="clock"
#rc_before="local"
#rc_provide="!net"
# You can also enable the above commands here for each service. Below is an
# example for service foo.
#rc_foo_config="/etc/foo"
#rc_foo_need="openvpn"
#rc_foo_after="clock"
# Below is an example for service foo-bar. Note that the '-' is illegal
# in a shell variable name, so we convert it to an underscore.
# example for service foo-bar.
#rc_foo_bar_config="/etc/foo-bar"
#rc_foo_bar_need="openvpn"
#rc_foo_bar_after="clock"
# You can also remove dependencies.
# This is mainly used for saying which servies do NOT provide net.
#rc_net_tap0_provide="!net"

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!@SHELL@
# Copyright (c) 2007-2015 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS

View File

@@ -1,4 +1,4 @@
#!/bin/sh
#!@SHELL@
# Copyright (c) 2007-2015 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
@@ -14,7 +14,7 @@ trap : SIGINT SIGQUIT
# Try and use stuff in /lib over anywhere else so we can shutdown
# local mounts correctly.
LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" ; export LD_LIBRARY_PATH
LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LDLIBRARY_PATH}" ; export LD_LIBRARY_PATH
# If $TERM is not set then assume default of @TERM@
# This gives us a nice colour boot :)

251
guide.md Normal file
View File

@@ -0,0 +1,251 @@
# Purpose and description
OpenRC is an init system for Unixoid operating systems. It takes care of
startup and shutdown of the whole system, including services.
It evolved out of the Gentoo "Baselayout" package which was a custom pure-shell
startup solution. (This was both hard to maintain and debug, and not very
performant)
Most of the core parts are written in C99 for performance and flexibility
reasons, while everything else is posix sh.
The License is 2-clause BSD
Current size is about 10k LoC C, and about 4k LoC shell.
OpenRC is known to work on Linux, many BSDs (FreeBSD, OpenBSD, DragonFlyBSD at
least) and HURD.
Services are stateful (i.e. start; start will lead to "it's already started")
# Startup
Usually PID1 (aka. init) calls the OpenRC binary ("/sbin/openrc" by default).
(The default setup assumes sysvinit for this)
openrc scans the runlevels (default: "/etc/runlevels") and builds a dependency
graph, then starts the needed service scripts, either serialized (default) or in
parallel.
When all the init scripts are started openrc terminates. There is no persistent
daemon. (Integration with tools like monit, runit or s6 can be done)
# Shutdown
On change to runlevel 0/6 or running "reboot", "halt" etc., openrc stops all
services that are started and runs the services in the "shutdown" runlevel.
# Modifying Service Scripts
Any service can, at any time, be started/stopped/restarted by executing
"rc-service someservice start", "rc-service someservice stop", etc.
Another, less preferred method, is to run the service script directly,
e.g. "/etc/init.d/service start", "/etc/init.d/service stop", etc.
OpenRC will take care of dependencies, e.g starting apache will start network
first, and stopping network will stop apache first.
There is a special command "zap" that makes OpenRC 'forget' that a service is
started; this is mostly useful to reset a crashed service to stopped state
without invoking the (possibly broken) stop function of the service script.
Calling "openrc" without any arguments will try to reset all services so
that the current runlevel is satisfied; if you manually started apache it will be
stopped, and if squid died but is in the current runlevel it'll be restarted.
There is a "service" helper that emulates the syntax seen on e.g. older Redhat
and Ubuntu ("service nginx start" etc.)
# Runlevels
OpenRC has a concept of runlevels, similar to what sysvinit historically
offered. A runlevel is basically a collection of services that needs to be
started. Instead of random numbers they are named, and users can create their
own if needed. This allows, for example, to have a default runlevel with
"everything" enabled, and a "powersaving" runlevel where some services are
disabled.
The "rc-status" helper will print all currently active runlevels and the state
of init scripts in them:
# rc-status
* Caching service dependencies ... [ ok ]
Runlevel: default
modules [ started ]
lvm [ started ]
All runlevels are represented as folders in /etc/runlevels/ with symlinks to
the actual init scripts.
Calling openrc with an argument ("openrc default") will switch to that
runlevel; this will start and stop services as needed.
Managing runlevels is usually done through the "rc-update" helper, but could of
course be done by hand if desired.
e.g. "rc-update add nginx default" - add nginx to the default runlevel
Note: This will not auto-start nginx! You'd still have to trigger "rc" or run
the initscript by hand.
FIXME: Document stacked runlevels
The default startup uses the runlevels "boot", "sysinit" and "default", in that
order. Shutdown uses the "shutdown" runlevel.
# Syntax of Service Scripts
Service scripts are shell scripts. OpenRC aims at using only the standardized
POSIX sh subset for portability reasons. The default interpreter (build-time
toggle) is /bin/sh, so using for example mksh is not a problem.
OpenRC has been tested with busybox sh, ash, dash, bash, mksh, zsh and possibly
others. Using busybox sh has been difficult as it replaces commands with
builtins that don't offer the expected features.
The interpreter for initscripts is #!/sbin/openrc-run
Not using this interpreter will break the use of dependencies and is not
supported. (iow: if you insist on using #!/bin/sh you're on your own)
A "depend" function declares the dependencies of this service script.
All scripts must have start/stop/status functions, but defaults are provided.
Extra functions can be added easily:
extra_commands="checkconfig"
checkconfig() {
doSomething
}
This exports the checkconfig function so that "/etc/init.d/someservice
checkconfig" will be available, and it "just" runs this function.
While commands defined in extra_commands are always available, commands
defined in extra_started_commands will only work when the service is started
and those defined in extra_stopped_commands will only work when the service is
stopped. This can be used for implementing graceful reload and similar
behaviour.
Adding a restart function will not work, this is a design decision within
OpenRC. Since there may be dependencies involved (e.g. network -> apache) a
restart function is in general not going to work.
restart is internally mapped to stop() + start() (plus handling dependencies).
If a service needs to behave differently when it is being restarted vs
started or stopped, it should test the $RC_CMD variable, for example:
[ "$RC_CMD" = restart ] && do_something
# The Depend Function
This function declares the dependencies for a service script. This
determines the order the service scripts start.
depend() {
need net
use dns logger netmount
want coolservice
}
"need" declares a hard dependency - net always needs to be started before this
service does
"use" is a soft dependency - if dns, logger or netmount is in this runlevel
start it before, but we don't care if it's not in this runlevel.
"want" is between need and use - try to start coolservice if it is
installed on the system, regardless of whether it is in the
runlevel, but we don't care if it starts.
"before" declares that we need to be started before another service
"after" declares that we need to be started after another service, without
creating a dependency (so on calling stop the two are independent)
"provide" allows multiple implementations to provide one service type, e.g.:
'provide cron' is set in all cron-daemons, so any one of them started
satisfies a cron dependency
"keyword" allows platform-specific overrides, e.g. "keyword -lxc" makes this
service script a noop in lxc containers. Useful for things like keymaps,
module loading etc. that are either platform-specific or not available
in containers/virtualization/...
FIXME: Anything missing in this list?
# The Default Functions
All service scripts are assumed to have the following functions:
start()
stop()
status()
There are default implementations in rc/sh/openrc-run.sh - this allows very
compact service scripts. These functions can be overridden per service script as
needed.
The default functions assume the following variables to be set in the service
script:
command=
command_args=
pidfile=
Thus the 'smallest' service scripts can be half a dozen lines long
# The Magic of Conf.d
Most service scripts need default values. It would be fragile to
explicitly source some arbitrary files. By convention openrc-run will source
the matching file in /etc/conf.d/ for any script in /etc/init.d/
This allows you to set random startup-related things easily. Example:
conf.d/foo:
START_OPTS="--extraparameter sausage"
init.d/foo:
start() {
/usr/sbin/foo-daemon ${STARTOPTS}
}
The big advantage of this split is that most of the time editing of the init
script can be avoided.
# Start-Stop-Daemon
OpenRC has its own modified version of s-s-d, which is historically related and
mostly syntax-compatible to Debian's s-s-d, but has been rewritten from scratch.
It helps with starting daemons, backgrounding, creating PID files and many
other convenience functions related to managing daemons.
# /etc/rc.conf
This file manages the default configuration for OpenRC, and it has examples of
per-service-script variables.
Among these are rc_parallel (for parallelized startup), rc_log (logs all boot
messages to a file), and a few others.
# ulimit and CGroups
Setting ulimit and nice values per service can be done through the rc_ulimit
variable.
Under Linux, OpenRC can optionally use CGroups for process management.
By default each service script's processes are migrated to their own CGroup.
By changing certain values in the conf.d file limits can be enforced per
service. It is easy to find orphan processes of a service that persist after
stop(), but by default these will NOT be terminated.
To change this add rc_cgroup_cleanup="yes" in the conf.d files for services
where you desire this functionality.
# Caching
For performance reasons OpenRC keeps a cache of pre-parsed initscript metadata
(e.g. depend). The default location for this is /${RC_SVCDIR}/cache.
The cache uses mtime to check for file staleness. Should any service script
change it'll re-source the relevant files and update the cache
# Convenience functions
OpenRC has wrappers for many common output tasks in libeinfo.
This allows to print colour-coded status notices and other things.
To make the output consistent the bundled initscripts all use ebegin/eend to
print nice messages.

View File

@@ -1,11 +1,11 @@
DIR= ${DATADIR}/support/init.d.examples
INC= README.md
DIR= ${INITDIR}
SRCS= avahi-dnsconfd.in avahid.in dhcpcd.in dbus.in \
hald.in named.in ntpd.in \
openvpn.in polkitd.in sshd.in wpa_supplicant.in
BIN= ${OBJS}
MK= ../../mk
MK= ../mk
SED_EXTRA+= -e 's:@VARBASE@:/var:g'
include ${MK}/os.mk
include ${MK}/scripts.mk

View File

@@ -11,7 +11,7 @@
command=@PKG_PREFIX@/sbin/avahi-dnsconfd
command_args="$avahi_dnsconfd_args -D"
pidfile=/var/run/avahi-dnsconfd.pid
pidfile=@VARBASE@/run/avahi-dnsconfd.pid
name="Avahi DNS Configuration Daemon"
depend()

View File

@@ -11,7 +11,7 @@
command=@PKG_PREFIX@/sbin/avahi-daemon
command_args="$avahid_args -D"
pidfile=/var/run/avahi-daemon/pid
pidfile=@VARBASE@/run/avahi-daemon/pid
name="Avahi Service Advertisement Daemon"
depend()

View File

@@ -10,7 +10,7 @@
# except according to the terms contained in the LICENSE file.
command=@PKG_PREFIX@/bin/dbus-daemon
pidfile=/var/run/dbus/pid
pidfile=@VARBASE@/run/dbus/pid
command_args="${dbusd_args---system}"
name="Message Bus Daemon"

View File

@@ -11,7 +11,7 @@
command=@PKG_PREFIX@/sbin/dnsmasq
command_args=$dnsmasq_args
pidfile=/var/run/dnsmasq.pid
pidfile=@VARBASE@/run/dnsmasq.pid
required_files=/etc/dnsmasq.conf
extra_started_commands="reload"

View File

@@ -10,7 +10,7 @@
# except according to the terms contained in the LICENSE file.
command=@PKG_PREFIX@/sbin/hald
pidfile=/var/run/hald/hald.pid
pidfile=@VARBASE@/run/hald/hald.pid
command_args=$hald_args
name="Hardware Abstraction Layer Daemon"

View File

@@ -11,7 +11,7 @@
command=/usr/sbin/named
command_args=$named_args
pidfile=/var/run/named.pid
pidfile=@VARBASE@/run/named.pid
name="Domain Name server"
extra_started_commands="reload"
@@ -20,7 +20,7 @@ uid=named
case "$RC_UNAME" in
FreeBSD)
uid=bind
pidfile=/var/run/named/pid
pidfile=@VARBASE@/run/named/pid
;;
Linux)
uid=bind

View File

@@ -14,7 +14,7 @@ name="OpenVPN"
[ "$vpn" != openvpn ] && name="$name ($vpn)"
command=@PKG_PREFIX@/sbin/openvpn
pidfile=/var/run/"$RC_SVCNAME".pid
pidfile=@VARBASE@/run/"$RC_SVCNAME".pid
: ${openvpn_dir:=@PKG_PREFIX@/etc/openvpn}
: ${openvpn_config:=$openvpn_dir/$vpn.conf}
command_args="$openvpn_args --daemon --config $openvpn_config"

View File

@@ -10,7 +10,7 @@
# except according to the terms contained in the LICENSE file.
command=@PKG_PREFIX@/sbin/polkitd
pidfile=/var/run/polkitd/polkitd.pid
pidfile=@VARBASE@/run/polkitd/polkitd.pid
command_args="$polkitd_args"
name="PolicyKit Daemon"

View File

@@ -11,7 +11,7 @@
command=/usr/sbin/sshd
command_args=$sshd_args
pidfile=/var/run/sshd.pid
pidfile=@VARBASE@/run/sshd.pid
required_files=/etc/ssh/sshd_config
depend()

View File

@@ -39,11 +39,6 @@ find_wireless()
fi
done
;;
FreeBSD)
for iface in $(sysctl -b net.wlan.devices 2>/dev/null); do
echo "${iface##*/}"
done
;;
*)
for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do
if ifconfig "${iface##*/}" 2>/dev/null | \

8
init.d/.gitignore vendored
View File

@@ -1,6 +1,4 @@
agetty
binfmt
cgroups
modules-load
bootmisc
fsck
@@ -14,6 +12,7 @@ network
root
savecache
swap
swapfiles
sysctl
urandom
devfs
@@ -39,13 +38,12 @@ pf
rarpd
rc-enabled
rpcbind
runsvdir
savecore
save-keymaps
save-termencoding
swap-blk
swclock
syslogd
termencoding
ttys
wscons
tmpfiles.dev
tmpfiles.setup

View File

@@ -2,8 +2,8 @@ include ../mk/net.mk
DIR= ${INITDIR}
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
netmount.in osclock.in root.in savecache.in swap.in swclock.in \
sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \
tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}}
BIN= ${OBJS}
# Are we installing our network scripts?
@@ -15,16 +15,15 @@ MK= ../mk
include ${MK}/os.mk
# Generic BSD scripts
SRCS-FreeBSD= hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \
rc-enabled.in rpcbind.in savecore.in syslogd.in
SRCS-FreeBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
rpcbind.in savecore.in syslogd.in
# These are FreeBSD specific
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
mixer.in nscd.in powerd.in syscons.in
modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
SRCS-Linux= agetty.in binfmt.in devfs.in cgroups.in dmesg.in hwclock.in \
consolefont.in keymaps.in killprocs.in modules.in \
mount-ro.in mtab.in numlock.in procfs.in net-online.in save-keymaps.in \
save-termencoding.in sysfs.in termencoding.in
SRCS-Linux= binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
killprocs.in modules.in modules-load.in mount-ro.in mtab.in numlock.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 \
@@ -32,6 +31,9 @@ SRCS-NetBSD= hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
# These are NetBSD specific
SRCS-NetBSD+= devdb.in swap-blk.in ttys.in wscons.in
%.in: %${SFX}
sed ${SED_REPLACE} ${SED_EXTRA} $< > $@
include ${MK}/scripts.mk
_installafter_: realinstall

View File

@@ -23,7 +23,6 @@ fi
depend()
{
after swclock
provide clock
# BSD adjkerntz needs to be able to write to /etc
if [ "$clock" = "UTC" -a -e /etc/wall_cmos_clock ] ||

View File

@@ -1,40 +0,0 @@
#!@SBINDIR@/openrc-run
# Copyright (c) 2017 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
description="start agetty on a terminal line"
supervisor=supervise-daemon
port="${RC_SVCNAME#*.}"
respawn_period="${respawn_period:-60}"
term_type="${term_type:-linux}"
command=/sbin/agetty
command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
pidfile="/run/${RC_SVCNAME}.pid"
depend() {
after local
keyword -prefix
}
start_pre() {
if [ -z "$port" ]; then
eerror "${RC_SVCNAME} cannot be started directly. You must create"
eerror "symbolic links to it for the ports you want to start"
eerror "agetty on and add those to the appropriate runlevels."
return 1
else
export EINFO_QUIET="${quiet:-yes}"
fi
}
stop_pre()
{
export EINFO_QUIET="${quiet:-yes}"
}

View File

@@ -13,7 +13,7 @@ description="Register misc binary format handlers"
depend()
{
after clock procfs
after procfs
use modules devfs
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -71,8 +71,7 @@ cleanup_var_run_dir()
ebegin "Cleaning /var/run"
for x in $(find /var/run ! -type d ! -name utmp \
! -name random-seed ! -name dev.db \
! -name ld-elf.so.hints ! -name ld-elf32.so.hints \
! -name ld.so.hints);
! -name ld-elf.so.hints ! -name ld.so.hints);
do
# Clean stale sockets
if [ -S "$x" ]; then
@@ -241,7 +240,7 @@ stop()
{
# Write a halt record if we're shutting down
if [ "$RC_RUNLEVEL" = shutdown ]; then
[ "$RC_UNAME" = Linux ] && openrc-shutdown -w
[ "$RC_UNAME" = Linux ] && halt -w
if [ "$RC_SYS" = OPENVZ ]; then
yesno $RC_REBOOT && printf "" >/reboot
fi

View File

@@ -1,149 +0,0 @@
#!@SBINDIR@/openrc-run
# Copyright (c) 2017 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
description="Mount the control groups."
cgroup_opts=nodev,noexec,nosuid
depend()
{
keyword -docker -prefix -systemd-nspawn -vserver
after sysfs
}
cgroup1_base()
{
grep -qw cgroup /proc/filesystems || return 0
if ! mountinfo -q /sys/fs/cgroup; then
ebegin "Mounting cgroup filesystem"
local opts="${cgroup_opts},mode=755,size=${rc_cgroupsize:-10m}"
mount -n -t tmpfs -o "${opts}" cgroup_root /sys/fs/cgroup
eend $?
fi
if ! mountinfo -q /sys/fs/cgroup/openrc; then
local agent="${RC_LIBEXECDIR}/sh/cgroup-release-agent.sh"
mkdir /sys/fs/cgroup/openrc
mount -n -t cgroup \
-o none,${cgroup_opts},name=openrc,release_agent="$agent" \
openrc /sys/fs/cgroup/openrc
printf 1 > /sys/fs/cgroup/openrc/notify_on_release
fi
return 0
}
cgroup1_controllers()
{
yesno "${rc_controller_cgroups:-YES}" && [ -e /proc/cgroups ] &&
grep -qw cgroup /proc/filesystems || return 0
while read -r name _ _ enabled _; do
case "${enabled}" in
1) mountinfo -q "/sys/fs/cgroup/${name}" && continue
local x
for x in $rc_cgroup_controllers; do
[ "${name}" = "blkio" ] && [ "${x}" = "io" ] &&
continue 2
[ "${name}" = "${x}" ] &&
continue 2
done
mkdir "/sys/fs/cgroup/${name}"
mount -n -t cgroup -o "${cgroup_opts},${name}" \
"${name}" "/sys/fs/cgroup/${name}"
yesno "${rc_cgroup_memory_use_hierarchy:-no}" &&
[ "${name}" = memory ] &&
echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy
;;
esac
done < /proc/cgroups
return 0
}
cgroup2_base()
{
grep -qw cgroup2 /proc/filesystems || return 0
local base
base="$(cgroup2_find_path)"
mkdir -p "${base}"
mount -t cgroup2 none -o "${cgroup_opts},nsdelegate" "${base}" 2> /dev/null ||
mount -t cgroup2 none -o "${cgroup_opts}" "${base}"
return 0
}
cgroup2_controllers()
{
grep -qw cgroup2 /proc/filesystems || return 0
local active cgroup_path x y
cgroup_path="$(cgroup2_find_path)"
[ -z "${cgroup_path}" ] && return 0
[ -e "${cgroup_path}/cgroup.controllers" ] &&
read -r active < "${cgroup_path}/cgroup.controllers"
for x in ${rc_cgroup_controllers}; do
for y in ${active}; do
[ "$x" = "$y" ] &&
[ -e "${cgroup_path}/cgroup.subtree_control" ]&&
echo "+${x}" > "${cgroup_path}/cgroup.subtree_control"
done
done
return 0
}
cgroups_hybrid()
{
cgroup1_base
cgroup2_base
cgroup2_controllers
cgroup1_controllers
return 0
}
cgroups_legacy()
{
cgroup1_base
cgroup1_controllers
return 0
}
cgroups_unified()
{
cgroup2_base
cgroup2_controllers
return 0
}
mount_cgroups()
{
case "${rc_cgroup_mode:-hybrid}" in
hybrid) cgroups_hybrid ;;
legacy) cgroups_legacy ;;
unified) cgroups_unified ;;
esac
return 0
}
restorecon_cgroups()
{
if [ -x /sbin/restorecon ]; then
ebegin "Restoring SELinux contexts in /sys/fs/cgroup"
restorecon -rF /sys/fs/cgroup >/dev/null 2>&1
eend $?
fi
return 0
}
start()
{
# set up kernel support for cgroups
if [ -d /sys/fs/cgroup ]; then
mount_cgroups
restorecon_cgroups
fi
return 0
}

View File

@@ -13,7 +13,7 @@ description="Sets a font for the consoles."
depend()
{
need termencoding
need localmount termencoding
after hotplug bootmisc modules
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}

View File

@@ -13,7 +13,6 @@ description="Creates the dev database"
depend()
{
after clock
need localmount
}

View File

@@ -20,12 +20,9 @@ depend()
mount_dev()
{
local action conf_d_dir devfstype msg mountopts
action=--mount
conf_d_dir="${RC_SERVICE%/*/*}/conf.d"
msg=Mounting
local action=--mount devfstype msg=Mounting
# Some devices require exec, Bug #92921
mountopts="exec,nosuid,mode=0755"
local mountopts="exec,nosuid,mode=0755"
if yesno ${skip_mount_dev:-no} ; then
einfo "/dev will not be mounted due to user request"
return 0
@@ -36,7 +33,7 @@ mount_dev()
msg=Remounting
fi
if fstabinfo -q /dev; then
ebegin "$msg /dev according to fstab"
ebegin "$msg /dev according to @SYSCONFDIR@/fstab"
fstabinfo -q $action /dev
eend $?
return 0
@@ -57,7 +54,7 @@ mount_dev()
ewarn "is no entry for /dev in fstab."
ewarn "This means /dev will not be mounted."
ewarn "To avoid this message, set CONFIG_DEVTMPFS or CONFIG_TMPFS to y"
ewarn "in your kernel configuration or see ${conf_d_dir}/${RC_SVCNAME}"
ewarn "in your kernel configuration or see @SYSCONFDIR@/conf.d/devfs"
fi
return 0
}

View File

@@ -12,7 +12,6 @@
description="Configures a specific kernel dump device."
depend() {
after clock
need swap
keyword -jail -prefix
}

View File

@@ -15,7 +15,6 @@ _IFS="
depend()
{
after clock
use dev clock modules
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml
}

View File

@@ -15,7 +15,6 @@ extra_commands="reset"
depend()
{
use root
after clock
before devd net
keyword -jail -prefix
}

View File

@@ -11,28 +11,16 @@
description="Sets the hostname of the machine."
depend()
{
after clock
depend() {
keyword -docker -lxc -prefix -systemd-nspawn
}
start()
{
local h source x
if [ -s /etc/hostname ] && [ -r /etc/hostname ]; then
read h x </etc/hostname
source="from /etc/hostname"
else
# HOSTNAME variable used to be defined in caps in conf.d/hostname.
# It is also a magic variable in bash.
h=${hostname:-${HOSTNAME}} # checkbashisms: false positive (HOSTNAME var)
fi
if [ -z "$h" ]; then
einfo "Using default system hostname"
return 0
fi
ebegin "Setting hostname to $h $source"
hostname "$h"
# HOSTNAME variable used to be defined in caps in conf.d/hostname.
# It is also a magic variable in bash.
hostname=${hostname-${HOSTNAME-localhost}} # checkbashisms: false positive
ebegin "Setting hostname to $hostname"
hostname "$hostname"
eend $? "Failed to set the hostname"
}

View File

@@ -30,9 +30,10 @@ fi
depend()
{
provide clock
want modules
if yesno $clock_adjfile; then
use root
else
before *
fi
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}
@@ -78,18 +79,9 @@ get_noadjfile()
fi
}
rtc_exists()
{
local rtc=
for rtc in /dev/rtc /dev/rtc[0-9]*; do
[ -e "$rtc" ] && break
done
[ -e "$rtc" ]
}
start()
{
local retval=0 errstr="" modname
local retval=0 errstr=""
setupopts
if [ -z "$utc_cmd" ]; then
@@ -99,13 +91,12 @@ start()
ebegin "Setting system clock using the hardware clock [$utc]"
if [ -e /proc/modules ]; then
if ! rtc_exists; then
for x in rtc-cmos rtc genrtc; do
modprobe -q $x && rtc_exists && modname="$x" && break
done
[ -n "$modname" ] &&
ewarn "The $modname module needs to be configured in" \
"${RC_SERVICE%/*/*}/conf.d/modules or built in."
local rtc=
for rtc in /dev/rtc /dev/rtc[0-9]*; do
[ -e "$rtc" ] && break
done
if [ ! -e "${rtc}" ]; then
modprobe -q rtc-cmos || modprobe -q rtc || modprobe -q genrtc
fi
fi

View File

@@ -13,8 +13,8 @@ description="Applies a keymap for the consoles."
depend()
{
need termencoding
after devfs
need localmount termencoding
after bootmisc
keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
}
@@ -68,5 +68,10 @@ start()
echo "altgr keycode 18 = U+20AC" | loadkeys -q -
eend $?
fi
return 0
# Save the keymapping for use immediately at boot
if checkpath -W "$RC_LIBEXECDIR"; then
mkdir -p "$RC_LIBEXECDIR"/console
dumpkeys >"$RC_LIBEXECDIR"/console/keymap
fi
}

View File

@@ -19,9 +19,9 @@ depend()
start()
{
ebegin "Terminating remaining processes"
kill_all 15 ${killall5_opts}
killall5 -15 ${killall5_opts}
eend 0
ebegin "Killing remaining processes"
kill_all 9 ${killall5_opts}
killall5 -9 ${killall5_opts}
eend 0
}

View File

@@ -9,10 +9,7 @@
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
conf_d_dir="${RC_SERVICE%/*/*}/conf.d"
local_d_dir="${RC_SERVICE%/*/*}/local.d"
description="Executes user programs in ${local_d_dir}"
description="Executes user programs in @SYSCONFDIR@/local.d"
depend()
{
@@ -22,12 +19,12 @@ depend()
start()
{
local file has_errors redirect retval
has_errors=0
yesno $rc_verbose || redirect='> /dev/null 2>&1'
ebegin "Starting local"
local file has_errors=0 redirect retval
yesno $rc_verbose || redirect='> /dev/null 2>&1'
eindent
for file in "${local_d_dir}"/*.start; do
for file in @SYSCONFDIR@/local.d/*.start; do
if [ -x "${file}" ]; then
vebegin "Executing \"${file}\""
eval "${file}" $redirect
@@ -41,32 +38,32 @@ start()
eoutdent
if command -v local_start >/dev/null 2>&1; then
ewarn "\"${conf_d_dir}/local\" should be removed."
ewarn "\"@SYSCONFDIR@/conf.d/local\" should be removed."
ewarn "Please move the code from the local_start function"
ewarn "to executable scripts with an .start extension"
ewarn "in \"${local_d_dir}\""
ewarn "in \"@SYSCONFDIR@/local.d\""
local_start
fi
eend ${has_errors}
# We have to end with a zero exit code, because a failed execution
# of an executable ${local_d_dir}/*.start file shouldn't result in
# of an executable @SYSCONFDIR@/local.d/*.start file shouldn't result in
# marking the local service as failed. Otherwise we are unable to
# execute any executable ${local_d_dir}/*.stop file, because a failed
# execute any executable @SYSCONFDIR@/local.d/*.stop file, because a failed
# marked service cannot be stopped (and the stop function would
# actually call the executable ${local_d_dir}/*.stop file(s)).
# actually call the executable @SYSCONFDIR@/local.d/*.stop file(s)).
return 0
}
stop()
{
local file has_errors redirect retval
has_errors=0
yesno $rc_verbose || redirect='> /dev/null 2>&1'
ebegin "Stopping local"
local file has_errors=0 redirect retval
yesno $rc_verbose || redirect='> /dev/null 2>&1'
eindent
for file in "${local_d_dir}"/*.stop; do
for file in @SYSCONFDIR@/local.d/*.stop; do
if [ -x "${file}" ]; then
vebegin "Executing \"${file}\""
eval "${file}" $redirect
@@ -80,16 +77,16 @@ stop()
eoutdent
if command -v local_stop >/dev/null 2>&1; then
ewarn "\"${conf_d_dir}/local\" should be removed."
ewarn "\"@SYSCONFDIR@/conf.d/local\" should be removed."
ewarn "Please move the code from the local_stop function"
ewarn "to executable scripts with an .stop extension"
ewarn "in \"${local_d_dir}\""
ewarn "in \"@SYSCONFDIR@/local.d\""
local_stop
fi
eend ${has_errors}
# An executable ${local_d_dir}/*.stop file which failed with a
# An executable @SYSCONFDIR@/local.d/*.stop file which failed with a
# non-zero exit status is not a reason to mark this service
# as failed, therefore we have to end with a zero exit code.
return 0

View File

@@ -14,18 +14,17 @@ description="Mounts disks and swap according to /etc/fstab."
depend()
{
need fsck
use lvm modules root
after clock lvm modules root
use lvm modules mtab
after lvm modules
keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
}
start()
{
# Mount local filesystems in /etc/fstab.
# The types variable must start with no, and must be a type
local critical= types="noproc" x= no_netdev= rc=
for x in $net_fs_list $extra_net_fs_list; do
types="${types},${x}"
types="${types},no${x}"
done
if [ "$RC_UNAME" = Linux ]; then
@@ -100,8 +99,8 @@ stop()
aufs_branch=$(sed 's/=.*//g' $x)
eindent
if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then
ewarn "Failed to remove branch $aufs_branch from aufs" \
"$aufs_mount_point"
ewarn "Failed to remove branch $aufs_branch from aufs \
$aufs_mount_point"
fi
eoutdent
sync

View File

@@ -13,7 +13,6 @@ description="Configures the loopback interface."
depend()
{
after clock
keyword -jail -prefix -systemd-nspawn -vserver
}
@@ -22,14 +21,22 @@ start()
if [ "$RC_UNAME" = Linux ]; then
ebegin "Bringing up network interface lo"
if command -v ip > /dev/null 2>&1; then
ip addr add 127.0.0.1/8 dev lo brd +
ip addr add 127.0.0.1/8 dev lo brd + scope host
ip route add 127.0.0.0/8 dev lo scope host
ip link set lo up
else
ifconfig lo 127.0.0.1 netmask 255.0.0.0
route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1
fi
else
ebegin "Bringing up network interface lo0"
ifconfig lo0 127.0.0.1 netmask 255.0.0.0
route -q add -inet 127.0.0.0 -netmask 255.0.0.0 127.0.0.1
fi
eend $?
}
stop()
{
return 0
}

72
init.d/modules-load.in Normal file
View File

@@ -0,0 +1,72 @@
#!@SBINDIR@/openrc-run
# Copyright (c) 2016 The OpenRC Authors.
# See the Authors file at the top-level directory of this distribution and
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
#
# This file is part of OpenRC. It is subject to the license terms in
# the LICENSE file found in the top-level directory of this
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
# This file may not be copied, modified, propagated, or distributed
# except according to the terms contained in the LICENSE file.
description="Loads a list of modules from systemd-compatible locations."
depend()
{
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}
find_modfiles()
{
local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
local basenames files fn x y
for x in $dirs; do
[ ! -d $x ] && continue
for y in $x/*.conf; do
[ -f $y ] && basenames="${basenames}\n${y##*/}"
done
done
basenames=$(printf "$basenames" | sort -u)
for x in $basenames; do
for y in $dirs; do
[ -r $y/$x ] &&
fn=$y/$x
done
files="$files $fn"
done
echo $files
}
load_modules()
{
local file m modules rc x
file=$1
[ -z "$file" ] && return 0
while read m x; do
case $m in
\;*) continue ;;
\#*) continue ;;
*) modules="$modules $m"
;;
esac
done < $file
for x in $modules; do
ebegin "Loading module $x"
case "$RC_UNAME" in
FreeBSD) kldload "$x"; rc=$? ;;
Linux) modprobe -q "$x"; rc=$? ;;
*) ;;
esac
eend $rc "Failed to load $x"
done
}
start()
{
local x
files=$(find_modfiles)
for x in $files; do
load_modules $x
done
return 0
}

View File

@@ -14,80 +14,13 @@ description="Loads a user defined list of kernel modules."
depend()
{
use isapnp
provide modules-load
want modules-load
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}
find_modfiles()
start()
{
local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
local basenames files fn x y
for x in $dirs; do
[ ! -d $x ] && continue
for y in $x/*.conf; do
[ -f $y ] && basenames="${basenames}\n${y##*/}"
done
done
basenames=$(printf "$basenames" | sort -u)
for x in $basenames; do
for y in $dirs; do
[ -r $y/$x ] &&
fn=$y/$x
done
files="$files $fn"
done
echo $files
}
load_modules()
{
local file m modules rc x
file=$1
[ -z "$file" ] && return 0
while read m x; do
case $m in
\;*) continue ;;
\#*) continue ;;
*) modules="$modules $m"
;;
esac
done < $file
for x in $modules; do
ebegin "Loading module $x"
case "$RC_UNAME" in
FreeBSD) kldload "$x"; rc=$? ;;
Linux) modprobe --first-time -q --use-blacklist "$x"; rc=$? ;;
*) ;;
esac
eend $rc "Failed to load $x"
done
return 0
}
modules_load_d()
{
local x
files=$(find_modfiles)
for x in $files; do
load_modules $x
done
return 0
}
FreeBSD_modules()
{
local cnt=0 x
for x in $modules; do
ebegin "Loading module $x"
kldload "$x"
eend $? "Failed to load $x" && : $(( cnt += 1 ))
done
einfo "Autoloaded $cnt module(s)"
}
Linux_modules()
{
# Should not fail if kernel does not have module
# Should not fail if kernel do not have module
# support compiled in ...
[ ! -f /proc/modules ] && return 0
@@ -104,34 +37,35 @@ Linux_modules()
x=${x%.*}
done
local list= x= xx= y= args=
local list= x= xx= y= args= mpargs= cnt=0 a=
for x in $kv_variant_list ; do
eval list=\$modules_$(shell_var "$x")
[ -n "$list" ] && break
done
[ -z "$list" ] && list=$modules
[ -n "$list" ] && ebegin "Loading kernel modules"
for x in $list; do
a=${x#*:}
if [ "$a" = "$x" ]; then
unset mpargs
ebegin "Loading module $x"
else
x=${x%%:*}
mpargs="-o $a"
ebegin "Loading module $x as $a"
fi
aa=$(shell_var "$a")
xx=$(shell_var "$x")
for y in $kv_variant_list ; do
eval args=\$module_${aa}_args_$(shell_var "$y")
[ -n "${args}" ] && break
eval args=\$module_${xx}_args_$(shell_var "$y")
[ -n "${args}" ] && break
done
[ -z "$args" ] && eval args=\$module_${aa}_args
[ -z "$args" ] && eval args=\$module_${xx}_args
eval modprobe --first-time --use-blacklist --verbose "$x" "$args"
eval modprobe -q "$mpargs" "$x" "$args"
eend $? "Failed to load $x" && : $(( cnt += 1 ))
done
[ -n "$list" ] && eend
}
start()
{
case "$RC_UNAME" in
FreeBSD|Linux)
modules_load_d
${RC_UNAME}_modules
;;
*) ;;
esac
return 0
einfo "Autoloaded $cnt module(s)"
}

View File

@@ -13,7 +13,7 @@ description="Re-mount filesytems read-only for a clean reboot."
depend()
{
after killprocs savecache
need killprocs savecache
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}
@@ -34,9 +34,6 @@ start()
local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|/run|${rc_svcdir}" x= fs=
m="$m|/bin|/sbin|/lib(32|64)?|/libexec"
if [ -e "$rc_svcdir"/usr_premounted ]; then
m="$m|/usr"
fi
# RC_NO_UMOUNTS is an env var that can be set by plugins
local IFS="$IFS:"
for x in $no_umounts $RC_NO_UMOUNTS; do

View File

@@ -13,8 +13,6 @@ description="Update /etc/mtab to match what the kernel knows about"
depend()
{
after clock
before localmount
need root
keyword -prefix -systemd-nspawn
}
@@ -31,10 +29,6 @@ start()
einfo "Creating mtab symbolic link"
ln -snf /proc/self/mounts /etc/mtab
else
ewarn "The ${RC_SVCNAME} service will be removed in the future."
ewarn "Please change the mtab_is_file setting to no and run"
ewarn "# rc-service mtab restart"
ewarn "to create the mtab symbolic link."
[ -L /etc/mtab ] && ewarn "Removing /etc/mtab symbolic link"
rm -f /etc/mtab
einfo "Creating mtab file"

View File

@@ -13,9 +13,8 @@ description="Delays until the network is online or a specific timeout"
depend()
{
after modules net
after modules
need sysfs
provide network-online
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
}
@@ -23,16 +22,28 @@ get_interfaces()
{
local ifname iftype
for ifname in /sys/class/net/*; do
[ -h "${ifname}" ] && continue
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
local carrier operstate rc
local carriers configured dev gateway ifcount infinite interfaces
local rc state timeout x
ebegin "Checking to see if the network is online"
rc=0
@@ -45,31 +56,20 @@ start ()
ifcount=0
for dev in ${interfaces}; do
: $((ifcount += 1))
read carrier < /sys/class/net/$dev/carrier 2> /dev/null ||
carrier=
[ "$carrier" = 1 ] && : $((carriers += 1))
read operstate < /sys/class/net/$dev/operstate 2> /dev/null ||
operstate=
[ "$operstate" = up ] && : $((configured += 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
include_ping_test=${include_ping_test:-${ping_default_gateway}}
if [ -n "${ping_default_gateway}" ]; then
ewarn "ping_default_gateway is deprecated, please use include_ping_test"
fi
if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then
ping_test_host="${ping_test_host:-google.com}"
if [ -n "$ping_test_host" ]; then
while $infinite || [ $timeout -gt 0 ]; do
ping -c 1 $ping_test_host > /dev/null 2>&1
rc=$?
[ $rc -eq 0 ] && break
: $((timeout -= 1))
done
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"

View File

@@ -20,12 +20,10 @@ depend()
*) mywant="$mywant nfsclient"; break ;;
esac
done
after root
config /etc/fstab
want $mywant
use afc-client amd openvpn
use dns
use root
keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
}

View File

@@ -18,7 +18,7 @@ __nl="
depend()
{
need localmount
after bootmisc clock
after bootmisc
if [ -n "$(interfaces)" ]; then
provide net
fi
@@ -76,7 +76,7 @@ tentative()
case "$RC_UNAME" in
Linux)
[ -n "$(command -v ip)" ] || return 1
[ -x /sbin/ip ] || [ -x /bin/ip ] || return 1
[ -n "$(ip -f inet6 addr show tentative)" ]
;;
*)
@@ -174,7 +174,7 @@ runip()
routeflush()
{
if [ "$RC_UNAME" = Linux ]; then
if [ -n "$(command -v ip)" ]; then
if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
ip route flush scope global
ip route delete default 2>/dev/null
else
@@ -346,7 +346,7 @@ stop()
then
veinfo "$int"
runargs /etc/ifdown."$int" "$downcmd"
if [ -n "$(command -v ip)" ]; then
if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
# We need to do this, otherwise we may
# fail to add things correctly on restart
ip address flush dev "$int" 2>/dev/null

View File

@@ -13,7 +13,6 @@ required_files="/etc/newsyslog.conf"
depend()
{
after clock
need localmount
keyword -prefix
}

View File

@@ -15,6 +15,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
need localmount
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}

View File

@@ -13,22 +13,16 @@ description="Mounts misc filesystems in /proc."
depend()
{
after clock
use devfs
want modules
use modules devfs
need localmount
keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
}
start()
{
# Setup Kernel Support for miscellaneous Binary Formats
if [ -d /proc/sys/fs/binfmt_misc ] &&
[ ! -e /proc/sys/fs/binfmt_misc/register ]; then
if ! grep -qs binfmt_misc /proc/filesystems &&
modprobe -q binfmt-misc; then
ewarn "The binfmt-misc module needs to be loaded by" \
"the modules service or built in."
fi
if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
modprobe -q binfmt-misc
if grep -qs binfmt_misc /proc/filesystems; then
ebegin "Mounting misc binary format filesystem"
mount -t binfmt_misc -o nodev,noexec,nosuid \

View File

@@ -13,7 +13,6 @@ description="Mount the root fs read/write"
depend()
{
after clock
need fsck
keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
}

Some files were not shown because too many files have changed in this diff Show More