Compare commits

..

91 Commits

Author SHA1 Message Date
William Hubbs
8046427d7f increment version
This sets up for the release of openrc-0.11.3. The release will be
tagged when it is ready.
2012-11-02 18:56:53 -05:00
William Hubbs
c73173ae53 Tmpfiles: create and delete entries once in the boot runlevel.
Initially, we were creating tmpfiles entries in the sysinit runlevel and
again in the boot runlevel. Systemd runs the --create and --remove
options in one service called systemd-tmpfiles-setup after the local
file systems are mounted. Now we have a service called tmpfiles.setup
which emulates this.

This also closes the bug mentioned below, since we were originally
writing to files that were on read-only file systems and that were not
available.

Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 439012
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=439012
2012-10-31 17:38:41 -05:00
William Hubbs
2964fc47f1 Expand the documentation for service configuration variables
The original documentation for these variables did not give an example
of what to do if the service had a name that had illegal characters in
it, so this commit adds an example. There was no bug report; this was
suggested by Tobias Klausmann.
2012-10-30 11:19:53 -05:00
William Hubbs
0396f0ea7c Oldnet: make carrier timeout documentation consistent 2012-10-28 15:02:41 -05:00
William Hubbs
78a25883f3 Checkpath: print the path when correcting the owner
Checkpath was printing the path it was working with unless it was
correcting the owner. In this case, it was printing "checkpath", which
is not very useful.

Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 439014
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=439014
2012-10-28 15:02:41 -05:00
William Hubbs
18dc0efa52 netmount: drop need net from dependencies
Reported-by: <mattsch@gmail.com>
X-Gentoo-Bug: 439658
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=439658
2012-10-28 15:02:41 -05:00
William Hubbs
f53645b7c7 mountinfo: respect the -q command line option
Previously, we were setting the quiet flag before the command line was
parsed. Since the flag is only used once, we can just read the
environment variable which is set by the parsing process.

Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 439010
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=439010
2012-10-28 15:02:41 -05:00
William Hubbs
a75a9940b0 oldnet: document the carrier_timeout option 2012-10-28 15:02:41 -05:00
William Hubbs
e27f0acc60 oldnet: make the default carrier timeout 0
Some types of interfaces do not have a carrier, so it doesn't make sense
to automatically wait for one.

Reported-by: <rose@rz.uni-potsdam.de>
X-Gentoo-Bug: 438970
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=438970
2012-10-22 16:30:34 -05:00
William Hubbs
5c8ba80ea7 release openrc-0.11.2 2012-10-22 02:38:31 -05:00
Andrew Gregory
e8ad6d2423 fix typo in rc-status.8
Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2012-10-22 00:12:27 -05:00
Andrew Gregory
aa34435cc8 tmpfilesd: parse arguments with spaces
systemd allows the final arg in tmpfiles to contain spaces.  Using the read()
call to set the variables includes all trailing components in $arg so it
doesn't get cut off.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2012-10-22 00:12:27 -05:00
Andrew Gregory
68f8e8aac2 tmpfiles: return success from _f/_F on empty $arg
'[ -n "$arg" ] && _w' causes _f/_F to return the failure from the test when
$arg is empty.  Inverting the test causes the test and _f/_F to return success.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2012-10-21 22:37:39 -05:00
William Hubbs
ee54bfef05 tmpfiles: do not process systemd.conf
This file contains definitions specific to systemd, so we should not
process it.

Reported-by: <andrew.gregory.8@gmail.com>
2012-10-21 14:52:37 -05:00
William Hubbs
7279b469ec release openrc-0.11.1 2012-10-19 22:30:40 -05:00
William Hubbs
8482008559 tmfiles: change need dev to use dev.
This is being changed to use for the reason I stated in the previous
commit. There is no guarantee that someone is using a device manager.
2012-10-19 21:52:20 -05:00
William Hubbs
463d4ef00a devfs: Remove references to specific device managers
There were references in the devfs script to mdev, udev and
udev-mount. These all provide the virtuals dev and dev-mount; that is
how we should refer to them.

I believe in the discussion I had with Tony and Robin about this, we
were going to change the "use" line to "need". However, after thinking
that over, I'm not comfortable doing so because someone could be running
a static /dev with no device manager.

Reported-by: <tokiclover@gmail.com>
X-Gentoo-Bug: 438932
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=438932
2012-10-19 21:50:51 -05:00
William Hubbs
b5629d4ea0 Fix bashism in tmpfilesd scripts
Reported-by: <pesa@gentoo.org>
2012-10-19 13:09:58 -05:00
William Hubbs
4385d31d9d release openrc-0.11 2012-10-18 10:10:10 -05:00
William Hubbs
20af890ac2 Spacing fixes 2012-10-17 18:47:36 -05:00
William Hubbs
21abe9821c tests: fix the paths
When the test suite is being run, we need our local directories in PATH
and LD_LIBRARY_PATH before the system directories. This makes sure we
run our tests using the currently built tree.
2012-10-17 18:13:47 -05:00
William Hubbs
f886372749 functions.sh: do not hard code path in e* wrapper functions
We should use the "command" shell builtin to execute a binary from
within the wrapper with the same name. Hard coding the path to the
binary makes our test suite fail.
2012-10-17 17:55:02 -05:00
Lorand Kelemen
f671e0a28f Oldnet: bonding: set miimon correctly
Miimon needs to be activated before downdelay is set.

X-Gentoo-Bug: 421757
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=421757
2012-10-17 12:53:17 -05:00
William Hubbs
6d84a4aed8 Oldnet: the loopback interface does not need sysfs 2012-10-16 20:56:34 -05:00
William Hubbs
76f76eb19a Migrate /var/run and /var/lock to symlinks
Now that we have full support for tmpfiles.d in OpenRC, we can migrate
/var/run and /var/lock to symbolic links to /run and /run/lock
respectively.
2012-10-16 14:33:27 -05:00
Christian Ruppert
a3ff6cce97 Revert "Prepare for real "restart" support"
This reverts commit c5bb6829d0.

That was meant for my local devel branch :)
2012-10-16 21:28:45 +02:00
Walter
1e7c696ea4 Add documentation for subsuming support
X-Gentoo-Bug: 428604
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=428604
2012-10-16 14:14:12 -05:00
Christian Ruppert
8d9db8d02c Add Vim modeline 2012-10-16 21:00:45 +02:00
Christian Ruppert
c5bb6829d0 Prepare for real "restart" support 2012-10-12 21:07:59 +02:00
Robin H. Johnson
a9f1ac2dfd net/bonding: Sanity-check sysfs usage
If sysfs is not available, you might still be able to create bond
interfaces, but only in very specific configurations, and you must have
the ifenslave binary instead to call ioctls.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-10-11 03:56:37 +00:00
Robin H. Johnson
27984c0d2d net/bonding: subsume functionality for NFS booting
If the kernel is NFS-booting, it is critical that we don't down the
slave interfaces when we activate the bond. To do so will break the root
filesystem when networking is temporarily lost.

Reported-by: Walter <walter@pratyeka.org>
X-Gentoo-Bug: 428604
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=428604
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-10-11 03:49:45 +00:00
Robin H. Johnson
9a9c2acd8d net/{bridge,iproute2}: Stricter iproute2 ip link syntax & promisc handling
The 'dev' argument is only optional for ethX devices, for others it is
mandatory, so we should always include it.

Also tweak when promisc mode is applied to bridges.

Patches submitted by Denis Kaganovich <mahatma@bspu.unibel.by>.

X-Gentoo-Bug: #431204
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=431204
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-10-10 00:10:52 +00:00
William Hubbs
b68d4b3580 checkpath: fix bool values
Use true/false for bool values instead of 0/1.

Reported-by: <vapier@gentoo.org>
2012-10-09 18:55:09 -05:00
William Hubbs
6f345abe91 checkpath: change the owner/group only when requested to do so
Fix checkpath so that it only changes the owner/group if -o is on the
command line.

Reported-by: <flameeyes@gentoo.org>
X-Gentoo-Bug: 437560
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=437560
2012-10-09 16:44:01 -05:00
Andrew Gregory
da842085ce Fix default runlevel symlink paths
runlevels/Makefile currently uses ${PREFIX} when creating the initial
runlevel symlinks, but the init files are installed to ${INITDIR},
which results in broken symlinks if ${SYSCONFDIR} is set to something
other than ${PREFIX}/etc

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2012-10-05 14:27:00 -05:00
Andrew Gregory
18bdbb6870 Remove non-standard reboot option from inittab
Gentoo adds a "-k" option to the reboot command in inittab. This is a
Gentoo-specific option, so it is being removed.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
2012-10-05 14:24:50 -05:00
William Hubbs
361f5ce2b8 set the RC_UNAME environment variable when updating dependencies
This is needed because the network script uses this variable in the
depend() function but it wasn't exported when this was run.

Reported-by: <aaly90@gmail.com>
2012-10-04 22:01:33 -05:00
William Hubbs
ae9acfaed8 sysfs: add -lxc keyword
The sysfs filesystem should not be mounted inside a linux container.

Reported-by: permeakra@gmail.com
X-Gentoo-Bug: 425790
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=425790
2012-10-02 15:02:11 -05:00
William Hubbs
6770a6b1ce dmesg should not run in a linux container
reported-by: <Walter@pratyeka.org>
X-Gentoo-Bug: 436266
X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=436266
2012-10-02 11:06:31 -05:00
Robin H. Johnson
4ff71bd741 tmpfiles.d init.d scripts
Now that the tmpfiles.d code is more tested, actually call it from
init.d. It assumes that /run is already available when it runs.

Please note it runs TWICE.
- During sysinit, ideally just after /dev/shm is created, but before
  udev has started. After udev is also acceptable, but not ideal.
- During boot, ideally just after localmount has completed.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-09-26 15:42:37 -07:00
Robin H. Johnson
5c736ad63e sh/tmpfiles.sh: Improve dry-run mode.
Dry-run with more detail is more useful this way.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-09-26 15:14:04 -07:00
Robin H. Johnson
33c63ede78 init.d/devfs: Run after (u)dev-mount, before udev/mdev
Using the new dev-mount virtual, with udev-mount included until new udev
version is rolled out, we run devfs earlier now, before udev/mdev.
It only needs (u)dev-mount before it, so that /dev is mounted.

This opens the way for tmpfiles.d, which needs to be sandwiched in the
middle.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-09-26 14:34:41 -07:00
Robin H. Johnson
ac47b6abfa runlevels: Include sysfs in the sysinit level.
net.* and module loading require sysfs now, and if udev is not in use,
it is not always loaded early enough, esp for net.lo. Force it to come
up during sysinit instead.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-09-26 14:29:47 -07:00
William Hubbs
7d8dca7b78 Add -lxc keyword to urandom script
Urandom should not run in lxc containers since it is provided by the
host.

Reported-by: <walter@pratyeka.org>
X-Gentoo-Bug: 436270
X-Gentoo-Bug-URL: http://bugs.gentoo.org/436270
2012-09-26 11:51:34 -05:00
William Hubbs
c08b1a6a32 small runscript man page cleanups 2012-09-25 12:09:45 -05:00
William Hubbs
5615fa78d6 Drop restart_pre/restart_post
By design, restart is hard coded to run stop followed by start along
with all of the pre/post functions associated with them. Restart doesn't
need its own pre/post functions since it is possible to make any
function in an init script behave differently for a restart command by
testing against the RC_CMD environment variable.
2012-09-25 10:22:47 -05:00
William Hubbs
f007988fba Clarify how to handle restart processing
The Gentoo developer manual covers how to handle restarts in init
scripts, but this was not officially covered in OpenRc's Documentation.
This commit adds an example to the runscript man page that shows how
this works.
2012-09-23 19:25:57 -05:00
William Hubbs
20ef3439ea fix Makefile indentation 2012-09-23 11:11:40 -05:00
Christian Ruppert
0406c6085b Add restart_pre/restart_post support, also document RC_CMD 2012-09-22 16:57:46 +02:00
William Hubbs
0a132cdca5 fix RC_SVCDIR on prefix systems
On prefix systems, RC_SVCDIR was being defined based on the host
operating system. This is not correct because there will not be a /run
directory in a prefix.
This commit moves RC_SVCDIR on prefix systems to the same location as on
non-Linux systems.
2012-09-20 16:04:48 -05:00
William Hubbs
a0fe1c5a60 netmount: do not handle NFS mounts
Since nfs and nfs4 file systems require extra daemons to be running on
the client to function properly, netmount should not try to handle these
file systems.

Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 427996
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=427996
2012-09-15 12:08:09 -05:00
Christian Ruppert
6b1e806c8b Typo: emtpy -> empty
Reported-by: Walter <walter@pratyeka.org>
X-Gentoo-Bug: 430146
X-Gentoo-Bug-URL: https://bugs.gentoo.org/430146
2012-09-14 22:59:01 +02:00
Christian Ruppert
3cd293c515 Silence the right get_pid() call 2012-09-12 21:35:55 +02:00
Christian Ruppert
a06072b395 Silence get_pid(), OpenRC will give the process some time to create the PID file and the first get__pid() call may fail. 2012-09-12 21:00:20 +02:00
William Hubbs
3863c11be5 netmount: add checks for rpc.idmapd for nfs4 filesystems
Reported-by: <devurandom@gmx.net>
X-Gentoo-Bug: 427996
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=427996
2012-09-10 15:43:42 -05:00
William Hubbs
5092595835 add RC_PREFIX environment variable
This will be used by init scripts which want to be able to run in a
Gentoo Prefix installation. RC_PREFIX will contain the prefix offset.
2012-09-09 22:22:15 -05:00
William Hubbs
918d261658 dmesg: add -prefix keyword
Dmesg should not run on prefix systems.

Reported-by: <heroxbd@gentoo.org>
2012-09-09 20:40:38 -05:00
William Hubbs
a0877449f3 savecache: make sure $RC_LIBEXECDIR is writable
This is needed in case of a read-only root filesystem such as a diskless
client.

Reported-by: <walter@pratyeka.org>
X-Gentoo-Bug: 430382
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=430382
2012-09-07 19:18:51 -05:00
William Hubbs
444bdfbfc4 oldnet/iproute2.sh: fix carrier detection
We were not testing for carrier correctly when testing for ipv6
tentative addresses.

Reported-by: <ast@domdv.de>
X-Gentoo-Bug: 433012
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=433012
2012-09-07 14:29:56 -05:00
William Hubbs
8e4169e29e Fix UPREFIX for Gentoo Prefix installations
Make sure UPREFIX in our make files gets set correctly when
MKPREFIX=yes. In this situation, UPREFIX should be ${PREFIX}/usr.

Reported-by: <heroxdb@gentoo.org>
X-Gentoo-Bug: 415899
X-Gentoo-Bug-URL: http://bugs.gentoo.org/show_bug.cgi?id=415899
2012-08-31 16:50:49 -05:00
William Hubbs
ea696b47c8 fix typo 2012-08-31 14:47:20 -05:00
William Hubbs
9e88d73aaa add MKPREFIX flag to build system
This allows building OpenRC for a Gentoo Prefix installation.
2012-08-31 10:40:47 -05:00
William Hubbs
1f01157354 do not provide a virtual for the loopback
The loopback interface is active on all systems, so there is no need to
provide a virtual for it.
2012-08-25 17:09:04 -05:00
William Hubbs
8f675d14e8 newnet: provide net if configuring more than the loopback interface 2012-08-24 10:30:04 -05:00
Christian Ruppert
9afdf50667 Do not silence errors 2012-08-19 00:26:38 +02:00
Christian Ruppert
8dc06e3259 Fix quiet usage
EINFO_QUIET will always been unset when we first do unsetenv("EINFO_QUIET") and
later query it again anyway..
2012-08-18 23:21:40 +02:00
Christian Ruppert
aa7e2cd1fe Use do_umount's return value instead of eoutdent's. 2012-08-18 22:37:38 +02:00
William Hubbs
07e848638c swapfiles: make sure /proc/swaps exists
If CONFIG_SWAP is turned off in the kernel, this file may not exist. In
that case, we should not try to read from it.

reported-by: <walter@pratyeka.org>
X-Gentoo-Bug: 430378
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=430378
2012-08-17 13:26:21 -05:00
Robin H. Johnson
c8703354e3 sh/tmpfiles: fix quoting for optional arguments
Some optional arguments were missing quotes in the tests, so produced
spurious warnings.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-08-16 18:45:23 +00:00
William Hubbs
e641b43849 Bring Back prefix support
We now have a team member who is interested in OpenRC on prefix, so I am
bringing it back to the main tree.
2012-07-26 10:54:48 -05:00
Robin H. Johnson
a6db2374fe Bug #427152: Port of VLAN code to sysfs/iproue2 from vconfig lost the ability to create different vlans with the same ID but different interfaces on a single system. Implement it now.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2012-07-20 10:20:19 -07:00
William Hubbs
2e3715bb69 remove unnecessary header line 2012-07-15 14:12:55 -05:00
William Hubbs
883ea31f80 small style changes to encswap
This drops some unnecessary continue statements and changes command
command substitution to use $() instead of ``.
2012-07-15 14:01:03 -05:00
Richard Yao
39abbed7cb Fix savecore init script to execute after dumpon, but before encswap
This ensures that any kernel crash dumps are available when savecore
runs. It also prevents encswap from corrupting them.
2012-07-15 14:01:03 -05:00
Richard Yao
0730ac61e8 Import encswap init script from FreeBSD
The FreeBSD encswap init script has been adapted to function in OpenRC. It
should function identically to its FreeBSD counterpart.
2012-07-15 13:57:57 -05:00
William Hubbs
006fbdce83 fix the upstream default network stack
The OpenRC upstream default network stack was changed, but there was no
reason to change it. Now since we have the MKNET build switch, it is
easy for the gentoo ebuild to install oldnet by default.

The upstream default is newnet.
2012-07-10 12:18:06 -05:00
William Hubbs
60d6847de5 add the MKNET variable to select a network stack
The MKNET variable can be used to select the network stack you want to
build and install with OpenRC.

The current default is the gentoo "oldnet" stack. If you want to install
the OpenRC newnet stack, use MKNET=newnet on the make command line.
2012-07-10 02:39:36 -05:00
William Hubbs
ecb4d7c3f2 Revert "add the appropriate network scripts to the boot runlevel"
This reverts commit add965706a.
This commit was broken so I need to revert it.
2012-07-09 21:08:58 -05:00
William Hubbs
84ad14b2e4 fix reference to dmesg man page
Correct the reference in conf.d/dmesg from dmesg(8) to dmesg(1).

reported-by: <toralf.foerster@gmx.de>
X-Gentoo-Bug: 425370
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=425370
2012-07-09 09:25:24 -05:00
William Hubbs
a1bf102591 fix typo 2012-07-09 09:12:31 -05:00
William Hubbs
add965706a add the appropriate network scripts to the boot runlevel 2012-07-08 21:10:10 -05:00
William Hubbs
5d8b1b689b make oldnet the default for now 2012-07-08 21:04:05 -05:00
William Hubbs
3e2018f5e9 Revert "Deprecate the network and staticroute scripts"
This reverts commit 5994e55937.
There are situations where these scripts can be useful, so I am bringing
them back. Also, I want to start discussions about simplifying the
OpenRC network stack.
2012-07-08 19:51:36 -05:00
Björn Baumbach
dceeef9fe5 net: fix typo 2012-07-04 09:15:54 -05:00
William Hubbs
3df0bd64cb cgroups: allow users to turn off creation of controller cgroups
This adds a switch to not create the one-cgroup-per-controller setup of
cgroups.

reported-by: davidweb@klaftenegger.de
X-Gentoo-Bug: 423317
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=423317
2012-07-03 13:49:58 -05:00
William Hubbs
a5b4fab732 fix handling of /run for vserver
Mount can't be used in vservers, but /run is still needed. So we create
the directory and clear it out instead of mounting a tmpfs in that
situation.

reported-by: <patrick@gentoo.org>
X-Gentoo-Bug: 423739
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=423739
2012-07-02 13:22:04 -05:00
William Hubbs
de36b26d5e fix consolefont documentation to reflect the default state
conf.d/consolefont was written as though the consolefont service was
active by default. It is not, so this has been fixed.

reported-by: Ikonta@yandex.ru
X-Gentoo-Bug: 420037
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=420037
2012-06-07 10:51:02 -05:00
William Hubbs
ae7cbd910a net/udhcpc: use -x hostname:NAME option instead of -h name
reported-by: bug@mejor.pl
X-Gentoo-Bug: 417617
X-Gentoo-Bug-URL: https://bugs.gentoo.org/417617
2012-06-07 00:12:20 -05:00
William Hubbs
92b274a7de net: clarify how to prefer ifconfig over iproute2
reported-by: <vsync@quadium.net>
X-Gentoo-Bug: 417899
X-Gentoo-Bug-Url: https://bugs.gentoo.org/show_bug.cgi?id=417899
2012-06-06 23:16:35 -05:00
William Hubbs
b3d47d5861 termencoding should not run on lxc
reported-by: Alexey Shvetsov <alexxy@gentoo.org>
2012-05-27 10:03:24 -05:00
Mike Frysinger
f5ba232fb4 rc: fix inverted string compare logic
X-Gentoo-Bug: 417227
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=417227
Reported-by: sphakka <marcoep@gmail.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2012-05-23 19:32:59 -04:00
90 changed files with 625 additions and 278 deletions

View File

@@ -4,7 +4,12 @@
include Makefile.inc
SUBDIR= conf.d doc etc init.d local.d sysctl.d man net scripts sh src
SUBDIR= conf.d etc init.d local.d man scripts sh src sysctl.d
# Build our old net foo or not
ifeq (${MKNET},oldnet)
SUBDIR+= net doc
endif
# Build pkgconfig or not
MKPKGCONFIG?= yes
@@ -25,7 +30,9 @@ include ${MK}/dist.mk
include ${MK}/git.mk
_installafter:
ifneq ($(OS),Linux)
ifeq (${MKPREFIX},yes)
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
else ifneq (${OS},Linux)
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/init.d
endif
${INSTALL} -d ${DESTDIR}/${LIBEXECDIR}/tmp

View File

@@ -1,3 +1,3 @@
NAME= openrc
VERSION= 0.10
VERSION= 0.11.3
PKG= ${NAME}-${VERSION}

4
README
View File

@@ -10,7 +10,9 @@ You may wish to tweak the installation with the below arguments
PROGLDFLAGS=-static
LIBNAME=lib64
DESTDIR=/tmp/openrc-image
MKNET=oldnet
MKPAM=pam
MKPREFIX=yes
MKPKGCONFIG=no
MKSELINUX=yes
MKSTATICLIBS=no
@@ -24,6 +26,8 @@ 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.
You can also brand OpenRC if you so wish like so
BRANDING=\"Gentoo/$(uname -s)\"

40
README.newnet Normal file
View File

@@ -0,0 +1,40 @@
The following applies only to the newnet stack, which is not presently
maintained in OpenRC. The oldnet stack is maintained instead.
- Robin H. Johnson <robbat2@gentoo.org>, 2011/02/21
OpenRC Network Ideals
---------------------
The new style networking for OpenRC is very simplistic - provide a basic means
of configuring static interface address and routes whilst allowing the
possibility to run any command at any point.
In a nutshell, init.d/network is a wrapper around ifconfig(8) and
init.d/staticroute is wrapper around route(8).
In the Perfect World (TM) ifconfig should be able to configure everything
about the interface easily * . The BSD family almost get this right and Linux
epically fails.
* Only static configuration, including link setup.
For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x
provides your needs.
It fails because there are many tools to do the same job and often have
vastly different syntax where they could be similar. In other words, there
is no coherence.
OpenRC-0.4.x and older (inc Gentoo baselayout-1) had a collection of scripts
for each tool and allowed a script per interface. Over the years, this design
has proven very hard to maintain as each user has their own idea of how
things should work. Also, there were (and still are) race conditions.
So where do we go from here?
Well, it's possible to use the new network scripts using the tools
currently available. It's just harder as you have to know them and their
documentation can be lacking at times.
The correct end goal is a BSD style ifconfig tool.
I've started work on it, but the project has stalled somewhat.
It's display only right now and the source is not yet publicly available.
If you have the skills and share the vision then contact me privately and
we'll take it from there.

View File

@@ -1,9 +1,12 @@
DIR= ${CONFDIR}
CONF= bootmisc fsck hostname localmount network staticroute urandom \
${CONF-${OS}}
CONF= bootmisc fsck hostname localmount netmount urandom tmpfiles \
${CONF-${OS}}
ifeq (${MKNET},)
CONF+= network staticroute
TARGETS+= network staticroute
CLEANFILES+= network staticroute
endif
MK= ../mk
include ${MK}/os.mk

View File

@@ -1,9 +1,10 @@
# The consolefont service is not activated by default. If you need to
# use it, you should run "rc-update add consolefont boot" as root.
#
# consolefont specifies the default font that you'd like Linux to use on the
# console. You can find a good selection of fonts in /usr/share/consolefonts;
# you shouldn't specify the trailing ".psf.gz", just the font name below.
# To use the default console font, comment out the CONSOLEFONT setting below.
# This setting is used by the /etc/init.d/consolefont script (NOTE: if you do
# not want to use it, run "rc-update del consolefont boot" as root).
consolefont="default8x16"
# consoletranslation is the charset map file to use. Leave commented to use

View File

@@ -1,3 +1,3 @@
# Sets the level at which logging of messages is done to the
# console. See dmesg(8) for more info.
# console. See dmesg(1) for more info.
dmesg_level="1"

20
conf.d/netmount Normal file
View File

@@ -0,0 +1,20 @@
# Depending on how mounting your network file systems behaves when your
# network interfaces are down, you may need to set the netmount script to
# require specific network interfaces to be active. This file gives
# examples of how to do this:
#
# If you are using newnet and configuring the interface with a static
# address with the network script:
# rc_need="network"
#
# If you are using oldnet, you must list the specific net.* services you
# need:
#
# rc_need="net.eth0"
# rc_need="net.eth1 net.eth2"
#
# If you are using a dynamic network management tool like
# networkmanager, dhcpcd, etc, you should list that tool here.
#
# rc_need="networkmanager"
# rc_need="dhcpcd"

3
conf.d/tmpfiles Normal file
View File

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

View File

@@ -80,9 +80,9 @@
# Most drivers that report carrier status function correctly, but some do not
# One of these faulty drivers is for the Intel e1000 network card, but only
# at boot time. To get around this you may alter the carrier_timeout value for
# the interface. -1 is disable, 0 is infinite and any other number of seconds
# is how long we wait for carrier. The current default is 3 seconds
#carrier_timeout_eth0=-1
# the interface. 0 is disable and any other number of seconds is how
# long we wait for carrier. The current default is disabled.
#carrier_timeout_eth0=0
# You may wish to disable the interface being brought down when stopping.
# This is only of use for WakeOnLan.

View File

@@ -34,7 +34,7 @@
# In other words, you probably should DO NOTHING HERE...
# Prefer ifconfig over iproute2
#modules="ifconfig"
#modules="!iproute2"
# You can also specify other modules for an interface
# In this case we prefer udhcpc over dhcpcd
@@ -57,7 +57,7 @@
# If you don't specify an interface then we prefer iproute2 if it's installed
# To prefer ifconfig over iproute2
#modules="ifconfig"
#modules="!iproute2"
# For a static configuration, use something like this
# (They all do exactly the same thing btw)
@@ -126,6 +126,13 @@
# tables you may have to set a global metric as the due to a simple read of
# the routing table taking over a minute at a time.
# Most drivers that report carrier status function correctly, but some do not
# One of these faulty drivers is for the Intel e1000 network card, but only
# at boot time. To get around this you may alter the carrier_timeout value for
# the interface. 0 is disable and any other number of seconds is how
# long we wait for carrier. The current default is disabled.
#carrier_timeout_eth0=0
# You may wish to disable the interface being brought down when stopping.
# This is only of use for WakeOnLan.
#ifdown_eth0="NO"
@@ -552,26 +559,34 @@
# You can also configure the VLAN - see for ip man page for more details
# To change the vlan interface name. If not set, the standard "iface.vlanid"
# will be used. This is the replacement for the old 'vconfig set_name_type'
# functionality.
# functionality. If you previously relied on the DEV_PLUS_VID or
# DEV_PLUS_VID_NO_PAD options to have different VLANs with same ID value, on
# different interfaces, please note that you need to use both the interface and
# vlan number in the numbering. This applies for all of the options: name,
# txqueuelen, mac, broadcast, mtu, ingress, egress, flags
#vlan1_name="vlan1"
#vlan2_name="eth0.2"
#eth0_vlan2_name="eth0.2"
#eth1_vlan2_name="eth1.2"
# The following shows the old set_name_type setting and what new option to set:
# Using eth9 & VLAN VID 26 as an example.
# VLAN_PLUS_VID vlan26_name="vlan0026"
# VLAN_PLUS_VID_NO_PAD vlan26_name="vlan26"
# DEV_PLUS_VID vlan26_name="eth9.0026"
# DEV_PLUS_VID_NO_PAD vlan26_name="eth9.26"
# DEV_PLUS_VID eth9_vlan26_name="eth9.0026"
# DEV_PLUS_VID_NO_PAD eth9_vlan26_name="eth9.26"
# Set the vlan flags
#vlan1_flags="reorder_hdr off gvrp on loose_binding on"
#eth0_vlan1_flags="reorder_hdr off gvrp on loose_binding on"
# Configure in/egress maps
#vlan1_ingress="2:6 3:5"
#vlan1_egress="1:2"
#eth0_vlan1_egress="1:2"
#config_vlan1="172.16.3.1/23"
#config_vlan2="172.16.2.1/23"
#config_vlan1="172.16.2.1/24"
#config_vlan2="172.16.3.1/24"
#config_eth0_1="172.16.4.1/24"
#config_eth1_1="172.16.5.1/24"
# NOTE: Vlans can be configured with a . in their interface names
# When configuring vlans with this name type, you need to replace . with a _
@@ -638,6 +653,17 @@
# ppp devices - we need to depend function on the bonded interfaces
#rc_net_bond0_need="net.eth0 net.eth1"
# Bonding subsume support (prevents crashes for root-on-NFS)
# - Only tested in the default bonding mode ('active-backup') with
# IPv4
# - Only subsumes basic interface characteristics (IP, netmask) and
# excludes additional routes, interface properties such as MTU,
# interface-associated netfilter rules, etc.
# In the example below, the (usually kernel-autoconfigured)
# 'eth0' interface is a member of bond0, which subsumes the
# existing interface configuration without upsetting NFS.
#slaves_bond0="eth0 eth1"
#subsume_bond0="eth0"
#-----------------------------------------------------------------------------
# Classical IP over ATM

View File

@@ -4,6 +4,7 @@
# 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

View File

@@ -5,6 +5,7 @@
# "" - nothing special
# "lxc" - Linux Containers
# "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "uml" - Usermode Linux
# "vserver" - Linux vserver
# "xen0" - Xen0 Domain
@@ -18,3 +19,11 @@
# This is the number of tty's used in most of the rc-scripts (like
# consolefont, numlock, etc ...)
rc_tty_number=12
# If you have cgroups turned on in your kernel, this switch controls
# whether or not a group for each controler is mounted under
# /sys/fs/cgroup.
# Support for process management by cgroups is planned in the future,
# so if you turn this off, be aware that you may not be able to use that
# feature.
#rc_controller_cgroups="YES"

View File

@@ -3,6 +3,7 @@
# 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.

View File

@@ -94,6 +94,10 @@
# 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.
@@ -116,6 +120,13 @@
#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"

1
init.d/.gitignore vendored
View File

@@ -41,3 +41,4 @@ syslogd
termencoding
ttys
wscons
tmpfiles.setup

View File

@@ -1,12 +1,18 @@
DIR= ${INITDIR}
SRCS= bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
network.in root.in savecache.in staticroute.in swap.in swapfiles.in \
swclock.in sysctl.in urandom.in ${SRCS-${OS}}
root.in savecache.in swap.in swapfiles.in \
tmpfiles.setup.in swclock.in sysctl.in urandom.in ${SRCS-${OS}}
BIN= ${OBJS}
# Build our old net foo or not
ifeq (${MKNET},)
SRCS+= network.in staticroute.in
endif
ifeq (${MKNET},oldnet)
INSTALLAFTER= _installafter_net.lo
CLEANFILES+= net.lo
TARGETS+= net.lo
SRCS+= net.lo.in
endif
MK= ../mk
include ${MK}/os.mk
@@ -16,8 +22,8 @@ NET_LO-FreeBSD= net.lo0
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 ipfw.in mixer.in nscd.in \
powerd.in syscons.in
SRCS-FreeBSD+= adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
mixer.in nscd.in powerd.in syscons.in
NET_LO-Linux= net.lo
SRCS-Linux= devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \

View File

@@ -22,7 +22,7 @@ depend()
[ "$clock" != "UTC" -a ! -e /etc/wall_cmos_clock ]; then
need root
fi
keyword -jail
keyword -jail -prefix
}
start()

View File

@@ -7,7 +7,7 @@ depend()
need localmount
before logger
after clock sysctl
keyword -timeout
keyword -prefix -timeout
}
: ${wipe_tmp:=${WIPE_TMP:-yes}}
@@ -112,7 +112,7 @@ start()
fi
done
if [ "$RC_UNAME" = Linux -a -d /run ] && false; then
if [ "$RC_UNAME" = Linux -a -d /run ]; then
migrate_to_run /var/lock /run/lock
migrate_to_run /var/run /run
fi
@@ -196,3 +196,5 @@ stop()
return 0
}
# vim: ft=sh

View File

@@ -8,7 +8,7 @@ depend()
{
need localmount termencoding
after hotplug bootmisc
keyword -openvz -uml -vserver -xenu -lxc
keyword -openvz -prefix -uml -vserver -xenu -lxc
}
start()

View File

@@ -10,7 +10,7 @@ depend() {
need localmount
after bootmisc
before net.lo0
keyword -jail
keyword -jail -prefix
}
start_pre() {

View File

@@ -5,8 +5,9 @@
description="Mount system critical filesystems in /dev."
depend() {
use dev
keyword -vserver
use dev-mount
before dev
keyword -prefix -vserver
}
start() {

View File

@@ -7,7 +7,7 @@ description="Set the dmesg level for a cleaner boot"
depend()
{
before dev modules
keyword -vserver
keyword -lxc -prefix -vserver
}
start()

View File

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

43
init.d/encswap.in Normal file
View File

@@ -0,0 +1,43 @@
#!@PREFIX@/sbin/runscript
# Copyright 1992-2012 FreeBSD Project
# Released under the 2-clause BSD license
depend() {
before swap
}
start() {
while read device mountpoint type options rest ; do
case ":${device}:${type}:${options}" in
:#*)
;;
*.bde:swap:sw)
passphrase=$(dd if=/dev/random count=1 2>/dev/null | md5 -q)
device="${device%.bde}"
gbde init "${device}" -P "${passphrase}" || return 1
gbde attach "${device}" -p "${passphrase}" || return 1
;;
*.eli:swap:sw)
device="${device%.eli}"
geli onetime ${geli_swap_flags} "${device}" || return 1
;;
esac
done < /etc/fstab
}
stop() {
while read device mountpoint type options rest ; do
case ":${device}:${type}:${options}" in
:#*)
;;
*.bde:swap:sw)
device="${device%.bde}"
gbde detach "${device}"
;;
*.eli:swap:sw)
# Nothing here, because geli swap devices should be
# created with the auto-detach-on-last-close option.
;;
esac
done < /etc/fstab
}

View File

@@ -9,7 +9,7 @@ _IFS="
depend()
{
use dev clock modules
keyword -jail -openvz -timeout -vserver -lxc
keyword -jail -openvz -prefix -timeout -vserver -lxc
}
_abort() {

View File

@@ -9,7 +9,7 @@ depend()
{
use root
before devd net
keyword -jail
keyword -jail -prefix
}
_set()

View File

@@ -5,7 +5,7 @@
description="Sets the hostname of the machine."
depend() {
keyword -lxc
keyword -prefix -lxc
}
start()

View File

@@ -28,7 +28,7 @@ depend()
else
before *
fi
keyword -openvz -uml -vserver -xenu -lxc
keyword -openvz -prefix -uml -vserver -xenu -lxc
}
setupopts()

View File

@@ -8,7 +8,7 @@ depend()
{
need localmount termencoding
after bootmisc
keyword -openvz -uml -vserver -xenu -lxc
keyword -openvz -prefix -uml -vserver -xenu -lxc
}
start()

View File

@@ -4,6 +4,11 @@
description="Kill all processes so we can unmount disks cleanly."
depend()
{
keyword -prefix
}
start()
{
ebegin "Terminating remaining processes"

View File

@@ -9,7 +9,7 @@ depend()
need fsck
use lvm modules mtab
after lvm modules
keyword -jail -openvz -vserver -lxc
keyword -jail -openvz -prefix -vserver -lxc
}
start()

View File

@@ -7,7 +7,7 @@ extra_commands="restore"
depend()
{
need localmount
keyword -jail
keyword -jail -prefix
}
restore()

View File

@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
depend()
{
use isapnp
keyword -openvz -vserver -lxc
keyword -openvz -prefix -vserver -lxc
}
start()

View File

@@ -7,11 +7,13 @@ description="Re-mount filesytems read-only for a clean reboot."
depend()
{
need killprocs savecache
keyword -openvz -vserver -lxc
keyword -openvz -prefix -vserver -lxc
}
start()
{
local ret=0
# Flush all pending disk writes now
sync; sync
@@ -39,6 +41,9 @@ start()
do_unmount "umount -r" \
--skip-point-regex "$m" \
"${fs:+--skip-fstype-regex}" $fs --nonetdev
ret=$?
eoutdent
eend $?
eend $ret
}

View File

@@ -16,7 +16,7 @@ depend()
{
need localmount
after bootmisc
keyword -jail
keyword -jail -prefix
}
start()

View File

@@ -7,6 +7,7 @@ description="Update /etc/mtab to match what the kernel knows about"
depend()
{
need root
keyword -prefix
}
start()

View File

@@ -19,14 +19,14 @@ depend()
local IFVAR=$(shell_var "${IFACE}")
need localmount
if [ "$RC_UNAME" = Linux ]; then
if [ "$RC_UNAME" = Linux -a "$IFACE" != lo ]; then
need sysfs
fi
after bootmisc
keyword -jail -vserver
keyword -jail -prefix -vserver
case "${IFACE}" in
lo|lo0) provide lo;;
lo|lo0) ;;
*)
after net.lo net.lo0 dbus
provide net
@@ -108,7 +108,7 @@ _wait_for_carrier()
_has_carrier && return 0
eval timeout=\$carrier_timeout_${IFVAR}
timeout=${timeout:-${carrier_timeout:-5}}
timeout=${timeout:-${carrier_timeout:-0}}
# Incase users don't want this nice feature ...
[ ${timeout} -le 0 ] && return 0

View File

@@ -2,62 +2,26 @@
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# Released under the 2-clause BSD license.
description="Mounts network shares according to /etc/fstab."
need_portmap()
{
local opts=
local IFS="
"
set -- $(fstabinfo --options --fstype nfs,nfs4)
for opts; do
case ,$opts, in
*,noauto,*|*,nolock,*);;
*) return 0;;
esac
done
return 1
}
description="Mounts network shares, other than NFS, according to /etc/fstab."
# We skip all NFS shares in this script because they require extra
# daemons to be running on the client in order to work correctly.
# It is best to allow nfs-utils to handle all nfs shares.
depend()
{
# Only have portmap as a dependency if there is a nfs mount in fstab
# that is set to mount at boot
local pmap=
if need_portmap; then
pmap="rpc.statd"
[ -x @SYSCONFDIR@/init.d/rpcbind ] \
&& pmap="$pmap rpcbind" \
|| pmap="$pmap portmap"
fi
config /etc/fstab
need net $pmap
use afc-client amd autofs openvpn
use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
keyword -jail -vserver
use dns
keyword -jail -prefix -vserver
}
start()
{
local myneed= myuse= pmap="portmap" nfsmounts=
[ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind"
local x= fs= rc=
for x in $net_fs_list $extra_net_fs_list; do
case "$x" in
nfs|nfs4)
# If the nfsmount script took care of the nfs
# filesystems, then there's no point in trying
# them twice
service_started nfsmount && continue
# Only try to mount NFS filesystems if portmap was
# started. This is to fix "hang" problems for new
# users who do not add portmap to the default runlevel.
if need_portmap && ! service_started "$pmap"; then
continue
fi
continue
;;
esac
fs="$fs${fs:+,}$x"
@@ -82,7 +46,14 @@ stop()
. "$RC_LIBEXECDIR"/sh/rc-mount.sh
for x in $net_fs_list $extra_net_fs_list; do
fs="$fs${fs:+,}$x"
case "$x" in
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+,}$x"
;;
esac
done
if [ -n "$fs" ]; then
umount -at $fs || eerror "Failed to simply unmount filesystems"
@@ -91,7 +62,14 @@ stop()
eindent
fs=
for x in $net_fs_list $extra_net_fs_list; do
fs="$fs${fs:+|}$x"
case "$x" in
nfs|nfs4)
continue
;;
*)
fs="$fs${fs:+|}$x"
;;
esac
done
[ -n "$fs" ] && fs="^($fs)$"
do_unmount umount ${fs:+--fstype-regex} $fs --netdev

View File

@@ -12,8 +12,10 @@ depend()
{
need localmount
after bootmisc
provide net
keyword -jail -vserver
if [ -n "$(interfaces)" ]; then
provide net
fi
keyword -jail -prefix -vserver
}
uniqify()
@@ -219,12 +221,6 @@ start()
eend $?
fi
ewarn
ewarn "The $RC_SVCNAME script is deprecated and will be"
ewarn "removed in the future."
ewarn "Please use the net.* scripts to manage your network interfaces."
ewarn
einfo "Starting network"
routeflush
if [ "$RC_UNAME" = "Linux" ]; then

View File

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

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
need localmount
keyword -openvz -vserver -lxc
keyword -openvz -prefix -vserver -lxc
}
_setleds()

View File

@@ -11,7 +11,7 @@ extra_started_commands="reload"
depend() {
need localmount
keyword -jail
keyword -jail -prefix
}
start()

View File

@@ -12,7 +12,7 @@ depend()
need localmount
use logger
after bootmisc
keyword -jail
keyword -jail -prefix
}
start_pre()

View File

@@ -8,7 +8,7 @@ depend()
{
use modules devfs
need localmount
keyword -openvz -vserver -lxc
keyword -openvz -prefix -vserver -lxc
}
start()

View File

@@ -7,6 +7,7 @@ depend()
need localmount net
after *
before local
keyword -prefix
}
start()

View File

@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
depend()
{
need fsck
keyword -jail -openvz -vserver -lxc
keyword -jail -openvz -prefix -vserver -lxc
}
start()

View File

@@ -13,6 +13,14 @@ start()
return 1
fi
fi
if ! checkpath -W "$RC_LIBEXECDIR"; then
ewarn "WARNING: ${RC_LIBEXECDIR} is not writable!"
if ! yesno "${RC_GOINGDOWN}"; then
ewarn "Unable to save deptree cache"
return 1
fi
return 0
fi
ebegin "Saving dependency cache"
local rc=
if [ ! -d "$RC_LIBEXECDIR"/cache ]; then

View File

@@ -6,8 +6,9 @@ description="Saves a kernel dump."
depend()
{
need localmount
keyword -jail
need dumpon localmount
before encswap
keyword -jail -prefix
}
start()

View File

@@ -12,7 +12,7 @@ depend()
{
provide net
use network
keyword -jail -vserver
keyword -jail -prefix -vserver
}
pre_flight_checks()
@@ -93,11 +93,6 @@ do_routes()
start()
{
ewarn
ewarn "The $RC_SVCNAME script is deprecated and will be"
ewarn "removed in the future."
ewarn "Please use the net.* scripts to manage your network interfaces."
ewarn
do_routes "Adding" "add"
}

View File

@@ -5,7 +5,7 @@
depend()
{
before fsck
keyword -jail
keyword -jail -prefix
}
start()

View File

@@ -5,7 +5,7 @@
depend()
{
before localmount
keyword -jail -openvz -vserver -lxc
keyword -jail -openvz -prefix -vserver -lxc
}
start()

View File

@@ -31,14 +31,16 @@ stop()
case "$RC_UNAME" in
Linux)
while read filename type rest; do
case "$type" in
file) swapoff $filename >/dev/null;;
esac
case "$filename" in
/dev/loop*) swapoff $filename >/dev/null;;
esac
done < /proc/swaps
if [ -e /proc/swaps ]; then
while read filename type rest; do
case "$type" in
file) swapoff $filename >/dev/null;;
esac
case "$filename" in
/dev/loop*) swapoff $filename >/dev/null;;
esac
done < /proc/swaps
fi
;;
esac
eend 0

View File

@@ -8,7 +8,7 @@ depend()
{
before *
provide clock
keyword -openvz -uml -vserver -xenu -lxc
keyword -openvz -prefix -uml -vserver -xenu -lxc
}
# swclock is an OpenRC built in

View File

@@ -4,7 +4,7 @@
depend() {
need localmount
keyword -jail
keyword -jail -prefix
}
start() {

View File

@@ -5,6 +5,7 @@
depend()
{
before bootmisc logger
keyword -prefix
}
start()

View File

@@ -5,7 +5,7 @@
depend()
{
before bootmisc logger
keyword -lxc -vserver
keyword -lxc -prefix -vserver
}
start()

View File

@@ -6,7 +6,7 @@ description="Mount the sys filesystem."
depend()
{
keyword -vserver
keyword -lxc -prefix -vserver
}
mount_sys()
@@ -74,7 +74,6 @@ mount_misc()
mount_cgroups()
{
yesno ${rc_cgroups:-YES} && [ -e /proc/cgroups ] && \
mountinfo -q /sys/fs/cgroup || return 0
local agent="@LIBEXECDIR@/sh/cgroup-release-agent.sh"
@@ -83,6 +82,8 @@ mount_cgroups()
-o none,nodev,noexec,nosuid,name=openrc,release_agent="$agent" \
openrc /sys/fs/cgroup/openrc
echo 1 > /sys/fs/cgroup/openrc/notify_on_release
yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0
while read name hier groups enabled rest; do
case "${enabled}" in
1) mkdir /sys/fs/cgroup/${name}

View File

@@ -16,4 +16,5 @@ depend()
use net newsyslog
need localmount
after bootmisc
keyword -prefix
}

View File

@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
depend()
{
keyword -openvz -uml -vserver -xenu
keyword -lxc -openvz -prefix -uml -vserver -xenu
use root
after bootmisc
}

18
init.d/tmpfiles.setup.in Normal file
View File

@@ -0,0 +1,18 @@
#!@PREFIX@/sbin/runscript
# Copyright 1999-2012 Gentoo Foundation
# Released under the 2-clause BSD license.
description="set up tmpfiles.d entries"
depend()
{
need localmount
}
start()
{
ebegin "setting up tmpfiles.d entries"
@LIBEXECDIR@/sh/tmpfiles.sh --create --remove ${tmpfiles_opts}
eend $?
return 0
}

View File

@@ -5,6 +5,7 @@
depend()
{
after fsck
keyword -prefix
}
start()

View File

@@ -8,7 +8,7 @@ description="Initializes the random number generator."
depend()
{
need localmount
keyword -jail -openvz
keyword -jail -lxc -openvz -prefix
}
save_seed()

View File

@@ -5,6 +5,7 @@
depend()
{
need localmount
keyword -prefix
}
start()

View File

@@ -46,7 +46,7 @@ Show all runlevels and their services.
List all services that have crashed.
.It Fl l , -list
List all defined runlevels.
.It fl r , -runlevel
.It Fl r , -runlevel
Print the current runlevel name.
.It Fl s , -servicelist
Show all services.

View File

@@ -37,7 +37,7 @@
.Op Ar command ...
.Sh DESCRIPTION
.Nm
is basically an interpreter for shell scripts which provide an easy interface
is basically an interpreter for shell scripts which provides an easy interface
to the often complex system commands and daemons.
When a service runs a command it first loads its multiplexed configuration
file, then its master configuration file, then
@@ -156,7 +156,7 @@ We provide this virtual service. For example, named provides dns.
.It Ic config
We should recalculate our dependencies if the listed files have changed.
.It Ic keyword
Tags a service with a keyword. Here's the keywords we currently understand:-
Tags a service with a keyword. These are the keywords we currently understand:
.Bl -tag -width indent
.It Dv -shutdown
Don't stop this service when shutting the system down.
@@ -180,6 +180,8 @@ in
Same as -jail, but for Linux Resource Containers (LXC).
.It Dv -openvz
Same as -jail, but for OpenVZ systems.
.It Dv -prefix
Same as -jail, but for Prefix systems.
.It Dv -uml
Same as -jail, but for UML systems.
.It Dv -vserver
@@ -350,8 +352,14 @@ Default runlevel chosen. Default is default.
.It Va RC_SYS
A special variable to describe the system more.
Possible values are OPENVZ, XENU, XEN0, UML and VSERVER.
.It Va RC_PREFIX
In a Gentoo Prefix installation, this variable contains the prefix
offset. Otherwise it is undefined.
.It Va RC_UNAME
The result of `uname -s`.
.It Va RC_CMD
This contains the name of the command the service script is executing, such
as start, stop, restart etc.
.El
.Sh FILES
.Pp
@@ -388,8 +396,9 @@ rc_provide_tap1="!net"
# To put in in /etc/rc.conf you would do it like this
rc_net_tap1_provide="!net"
# It's also possible to negate keywords.
rc_keyword="-keyword"
# It's also possible to negate keywords. This is mainly useful for prefix
# users testing OpenRC.
rc_keyword="!-prefix"
.Ed
.Sh EXAMPLES
.Pp
@@ -438,8 +447,22 @@ depend()
need ${_need}
}
# This function does any pre-start setup. If it fails, the service will
# not be started.
# If you need this function to behave differently for a restart command,
# you should check the value of RC_CMD for "restart".
# This also applies to start_post, stop_pre and stop_post.
start_pre()
{
if [ "$RC_CMD" = restart ]; then
# This block will only execute for a restart command. Use a
# structure like this if you need special processing for a
# restart which you do not need for a normal start.
# The function can also fail from here, which will mean that a
# restart can fail.
# This logic can also be used in start_post, stop_pre and
# stop_post.
fi
# Ensure that our dirs are correct
checkpath --dir --owner foo:foo --mode 0664 \\
/var/run/foo /var/cache/foo

6
mk/os-prefix.mk Normal file
View File

@@ -0,0 +1,6 @@
# Copyright (c) 2012 William Hubbs <w.d.hubbs@gmail.com>
# Released under the 2-clause BSD license.
ifeq (${MKPREFIX},yes)
CPPFLAGS+= -DPREFIX
endif

View File

@@ -7,5 +7,6 @@ _OS_SH= uname -s
_OS:= $(shell ${_OS_SH})
OS?= ${_OS}
include ${MK}/os-${OS}.mk
include ${MK}/os-prefix.mk
RC_LIB= /$(LIBNAME)/rc

View File

@@ -11,9 +11,14 @@ SED?= sed
SH= /bin/sh
PREFIX?=
_UPREFIX_SH= case "${PREFIX}" in "") echo /usr;; *) echo "${PREFIX}";; esac
_UPREFIX:= $(shell ${_UPREFIX_SH})
UPREFIX= ${_UPREFIX}
ifeq (${PREFIX},)
UPREFIX= /usr
else
UPREFIX= ${PREFIX}
ifeq (${MKPREFIX},yes)
UPREFIX= ${PREFIX}/usr
endif
endif
LOCAL_PREFIX= /usr/local
PICFLAG?= -fPIC

View File

@@ -4,6 +4,12 @@
bonding_depend()
{
before interface macchanger
program /sbin/ifconfig /bin/ifconfig
# If you do not have sysfs, you MUST have this binary instead for ioctl
# Also you will loose some functionality that cannot be done via sysfs:
if [ ! -d /sys/class/net ]; then
program /sbin/ifenslave
fi
}
_config_vars="$_config_vars slaves"
@@ -23,6 +29,9 @@ bonding_pre_start()
eval primary="\$primary_${IFVAR}"
unset primary_${IFVAR}
eval subsume="\$subsume_${IFVAR}"
unset subsume_${IFVAR}
[ -z "${slaves}" ] && return 0
@@ -34,6 +43,10 @@ bonding_pre_start()
fi
fi
if [ ! -d /sys/class/net ]; then
ewarn "sysfs is not available! You will be unable to create new bonds, or change dynamic parameters!"
fi
# We can create the interface name we like now, but this
# requires sysfs
if ! _exists && [ -d /sys/class/net ]; then
@@ -51,7 +64,18 @@ bonding_pre_start()
# Configure the bond mode, then we can reloop to ensure we configure
# All other options
for x in /sys/class/net/"${IFACE}"/bonding/mode; do
[ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/mode; do
[ -f "${x}" ] || continue
n=${x##*/}
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}"
echo "${s}" >"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi
done
# Configure link monitoring
for x in /sys/class/net/"${IFACE}"/bonding/miimon; do
[ -f "${x}" ] || continue
n=${x##*/}
eval s=\$${n}_${IFVAR}
@@ -62,11 +86,11 @@ bonding_pre_start()
fi
done
# Nice and dynamic for remaining options:)
for x in /sys/class/net/"${IFACE}"/bonding/*; do
[ -d /sys/class/net ] && for x in /sys/class/net/"${IFACE}"/bonding/*; do
[ -f "${x}" ] || continue
n=${x##*/}
eval s=\$${n}_${IFVAR}
[ "${n}" != "mode" ] || continue
[ "${n}" != "mode" -o "${n}" != "miimon" ] || continue
if [ -n "${s}" ]; then
einfo "Setting ${n}: ${s}"
echo "${s}" >"${x}" || \
@@ -84,15 +108,44 @@ bonding_pre_start()
_exists true || return 1
done
# Must force the slaves to a particular state before adding them
for IFACE in ${slaves}; do
_delete_addresses
_down
done
# Unless we are subsuming an existing interface (NFS root), we down
# slave interfaces to work around bugs supposedly in some chipsets
# that cause failure to enslave from other states.
if [ -z "${subsume}" ]; then
for IFACE in ${slaves}; do
_delete_addresses
_down
done
fi
)
# now force the master to up
_up
# Now force the master to up
# - First test for interface subsume request (required for NFS root)
if [ -n "${subsume}" ]; then
einfo "Subsuming ${subsume} interface characteristics."
eindent
local oiface=${IFACE}
IFACE=${subsume}
local addr="$(_get_inet_address)"
einfo "address: ${addr}"
IFACE=${oiface}
unset oiface
eoutdent
# subsume (presumably kernel auto-)configured IP
ifconfig ${IFACE} ${addr} up
else
# warn if root on nfs and no subsume interface supplied
local root_fs_type=$(mountinfo -s /)
if [ "${root_fs_type}" == "nfs" ]; then
warn_nfs=1
ewarn "NFS root detected!!!"
ewarn " If your system crashes here, /etc/conf.d/net needs"
ewarn " subsume_${IFACE}=\"<iface>\" ... where <iface> is the"
ewarn " existing, (usually kernel auto-)configured interface."
fi
# up the interface
_up
fi
# finally add in slaves
# things needed in the process, and if they are done by ifenslave, openrc, and/or the kernel.
@@ -121,7 +174,7 @@ bonding_pre_start()
fi
done
else
/sbin/ifenslave "${IFACE}" ${slaves} >/dev/null
ifenslave "${IFACE}" ${slaves} >/dev/null
fi
eend $?
@@ -132,6 +185,11 @@ bonding_stop()
{
_is_bond || return 0
# Wipe subsumed interface
if [ -n "${subsume}" ]; then
ifconfig ${subsume} 0.0.0.0
fi
local slaves= s=
slaves=$( \
sed -n -e 's/^Slave Interface: //p' "/proc/net/bonding/${IFACE}" \
@@ -149,7 +207,7 @@ bonding_stop()
echo -"${s}" > /sys/class/net/"${IFACE}"/bonding/slaves
done
else
/sbin/ifenslave -d "${IFACE}" ${slaves}
ifenslave -d "${IFACE}" ${slaves}
fi
# reset all slaves

View File

@@ -119,10 +119,8 @@ bridge_pre_start()
return 1
fi
# The interface is known to exist now
_set_flag promisc
_up
if ! brctl addif "${BR_IFACE}" "${x}"; then
_set_flag -promisc
eend 1
return 1
fi
@@ -144,6 +142,7 @@ bridge_pre_start()
) || return 1
# Bring up the bridge
_set_flag promisc
_up
}

View File

@@ -10,12 +10,12 @@ iproute2_depend()
_up()
{
ip link set "${IFACE}" up
ip link set dev "${IFACE}" up
}
_down()
{
ip link set "${IFACE}" down
ip link set dev "${IFACE}" down
}
_exists()
@@ -57,7 +57,7 @@ _set_flag()
flag=${flag#-}
opt="off"
fi
ip link set "${IFACE}" "${flag}" "${opt}"
ip link set dev "${IFACE}" "${flag}" "${opt}"
}
_get_mac_address()
@@ -79,7 +79,7 @@ _get_mac_address()
_set_mac_address()
{
ip link set "${IFACE}" address "$1"
ip link set dev "${IFACE}" address "$1"
}
_get_inet_addresses()
@@ -212,7 +212,7 @@ _delete_addresses()
_has_carrier()
{
return 0
LC_ALL=C ip link show dev "${IFACE}" | grep -q "LOWER_UP"
}
_tunnel()
@@ -274,12 +274,12 @@ iproute2_pre_start()
# MTU support
local mtu=
eval mtu=\$mtu_${IFVAR}
[ -n "${mtu}" ] && ip link set "${IFACE}" mtu "${mtu}"
[ -n "${mtu}" ] && ip link set dev "${IFACE}" mtu "${mtu}"
# TX Queue Length support
local len=
eval len=\$txqueuelen_${IFVAR}
[ -n "${len}" ] && ip link set "${IFACE}" txqueuelen "${len}"
[ -n "${len}" ] && ip link set dev "${IFACE}" txqueuelen "${len}"
return 0
}
@@ -287,7 +287,7 @@ iproute2_pre_start()
_iproute2_ipv6_tentative()
{
# Only check tentative when we have a carrier.
LC_ALL=C ip link show dev "${IFACE}" | grep -q "NO-CARRIER" && return 1
_has_carrier || return 1
LC_ALL=C ip addr show dev "${IFACE}" | \
grep -q "^[[:space:]]*inet6 .* tentative"
}

View File

@@ -61,12 +61,12 @@ udhcpc_start()
esac
case " ${args} " in
*" --hosname="*|*" -h "*|*" -H "*);;
*" --hostname="*|*" -h "*|*" -H "*);;
*)
if ${sendhost}; then
local hname="$(hostname)"
if [ "${hname}" != "(none)" ] && [ "${hname}" != "localhost" ]; then
args="${args} --hostname='${hname}'"
args="${args} -x hostname:'${hname}'"
fi
fi
;;

View File

@@ -66,26 +66,41 @@ vlan_post_start()
einfo "Adding VLAN ${vlan} to ${IFACE}"
# We need to gather all interface configuration options
# 1) naming. Default to the standard "${IFACE}.${vlan}" but it can be anything
eval vname=\$vlan${vlan}_name
eval vname=\$${IFACE}_vlan${vlan}_name
[ -z "${vname}" ] && eval vname=\$vlan${vlan}_name
[ -z "${vname}" ] && vname="${IFACE}.${vlan}"
# 2) flags
eval vflags=\$vlan${vlan}_flags
eval vflags=\$${IFACE}_vlan${vlan}_flags
[ -z "${vname}" ] && eval vflags=\$vlan${vlan}_flags
# 3) ingress/egress map
eval vingress=\$vlan${vlan}_ingress
eval vingress=\$${IFACE}_vlan${vlan}_ingress
[ -z "${vingress}" ] && eval vingress=\$vlan${vlan}_ingress
[ -z "${vingress}" ] || vingress="ingress-qos-map ${vingress}"
eval vegress=\$vlan${vlan}_egress
eval vegress=\$${IFACE}_vlan${vlan}_egress
[ -z "${vegress}" ] && eval vegress=\$vlan${vlan}_egress
[ -z "${vegress}" ] || vegress="egress-qos-map ${vegress}"
# txqueue
local txqueuelen=
eval txqueuelen=\$txqueuelen_vlan${vlan}
eval txqueuelen=\$txqueuelen_${IFACE}_vlan${vlan}
[ -z "${txqueuelen}" ] && eval txqueuelen=\$txqueuelen_vlan${vlan}
# mac
local mac=
eval mac=\$mac_vlan${vlan}
eval mac=\$mac_${IFACE}_vlan${vlan}
[ -z "${mac}" ] && eval mac=\$mac_vlan${vlan}
# broadcast
local broadcast=
eval broadcast=\$broadcast_vlan${vlan}
eval broadcast=\$broadcast_${IFACE}_vlan${vlan}
[ -z "${broadcast}" ] && eval broadcast=\$broadcast_vlan${vlan}
# mtu
local mtu=
eval mtu=\$mtu_vlan${vlan}
eval mtu=\$mtu_${IFACE}_vlan${vlan}
[ -z "${mtu}" ] && eval mtu=\$mtu_vlan${vlan}
# combine it all
local opts="${txqueuelen:+txqueuelen} ${txqueuelen} ${mac:+address} ${mac} ${broadcast:+broadcast} ${broadcast} ${mtu:+mtu} ${mtu}"
veinfo "ip link add link \"${IFACE}\" name \"${vname}\" ${opts} type vlan id \"${vlan}\" ${vflags} ${vingress} ${vegress}"
e="$(ip link add link "${IFACE}" name "${vname}" ${opts} type vlan id "${vlan}" ${vflags} ${vingress} ${vegress} 2>&1 1>/dev/null)"
if [ -n "${e}" ]; then
eend 1 "${e}"

View File

@@ -10,6 +10,12 @@ BOOTDIR= ${LEVELDIR}/boot
DEFAULTDIR= ${LEVELDIR}/default
SHUTDOWNDIR= ${LEVELDIR}/shutdown
ifeq (${MKNET},)
BOOT+= network staticroute
endif
INITFILES= ../init.d
MK= ../mk
include ${MK}/sys.mk
include ${MK}/os.mk
@@ -19,19 +25,25 @@ BOOT-${OS}=
SHUTDOWN-${OS}=
SYSINIT-${OS}=
ifeq (${MKNET},oldnet)
BOOT-FreeBSD+= net.lo0
BOOT-Linux+= net.lo
BOOT-NetBSD+= net.lo0
endif
BOOT-BSD= hostid newsyslog savecore syslogd swap-blk
# Generic BSD stuff
BOOT-FreeBSD= hostid net.lo0 newsyslog savecore syslogd
BOOT-FreeBSD+= hostid newsyslog savecore syslogd
# FreeBSD specific stuff
BOOT-FreeBSD+= adjkerntz dumpon syscons
BOOT-Linux= hwclock keymaps modules mtab net.lo procfs termencoding
BOOT-Linux+= hwclock keymaps modules mtab procfs termencoding tmpfiles.setup
SHUTDOWN-Linux= killprocs mount-ro
SYSINIT-Linux= devfs dmesg
SYSINIT-Linux= devfs dmesg sysfs
# Generic BSD stuff
BOOT-NetBSD= hostid net.lo0 newsyslog savecore syslogd
BOOT-NetBSD+= hostid newsyslog savecore syslogd
# NetBSD specific stuff
BOOT-NetBSD+= devdb swap-blk ttys wscons
@@ -41,25 +53,35 @@ install:
if ! test -d "${SYSINITDIR}"; then \
${INSTALL} -d ${SYSINITDIR} || exit $$?; \
for x in ${SYSINIT}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; \
done \
if test -n "${PREFIX}"; then \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; done \
fi
if ! test -d "${BOOTDIR}"; then \
${INSTALL} -d ${BOOTDIR} || exit $$?; \
for x in ${BOOT}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \
if test -n "${PREFIX}"; then \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \
done \
fi
if ! test -d "${DEFAULTDIR}"; then \
${INSTALL} -d ${DEFAULTDIR} || exit $$?; \
for x in ${DEFAULT}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; \
done \
if test -n "${PREFIX}"; then \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; done \
fi
if ! test -d "${SHUTDOWNDIR}"; then \
${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \
for x in ${SHUTDOWN}; do \
ln -snf ${PREFIX}/etc/init.d/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
if test -n "${PREFIX}"; then \
grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \
fi; \
ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
fi
check test::

View File

@@ -105,7 +105,7 @@ else
# the last ecmd
for _e in ebegin eend error errorn einfo einfon ewarn ewarnn ewend \
vebegin veend veinfo vewarn vewend; do
eval "$_e() { local _r; @LIBEXECDIR@/bin/$_e \"\$@\"; _r=\$?; \
eval "$_e() { local _r; command $_e \"\$@\"; _r=\$?; \
export EINFO_LASTCMD=$_e; return \$_r; }"
done
unset _e

View File

@@ -37,14 +37,23 @@ fi
# /run is a new directory for storing volatile runtime data.
# Read more about /run at https://lwn.net/Articles/436012
sys="$(rc --sys)"
if [ ! -d /run ]; then
eerror "The /run directory does not exist. Unable to continue."
return 1
if [ "$sys" = VSERVER ]; then
if [ -e /run ]; then
rm -rf /run
fi
mkdir /run
else
eerror "The /run directory does not exist. Unable to continue."
return 1
fi
fi
if mountinfo -q /run; then
einfo "/run is already mounted, skipping"
else
if [ "$sys" = VSERVER ]; then
rm -rf /run/*
elif ! mountinfo -q /run; then
ebegin "Mounting /run"
rc=0
if ! fstabinfo --mount /run; then

View File

@@ -13,21 +13,29 @@
# This script should match the manpage as of 2012/03/12
#
DRYRUN=0
warninvalid() {
printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
error=$(( error+1 ))
} >&2
dryrun_or_real() {
local dryrun=
[ $DRYRUN -eq 1 ] && dryrun=echo
$dryrun "$@"
}
relabel() {
local path
local paths=$1 mode=$2 uid=$3 gid=$4
for path in ${paths}; do
if [ -e "$path" ]; then
[ $uid != '-' ] && chown $CHOPTS "$uid" "$path"
[ $gid != '-' ] && chgrp $CHOPTS "$gid" "$path"
[ $mode != '-' ] && chmod $CHOPTS "$mode" "$path"
[ -x /sbin/restorecon ] && restorecon $CHOPTS "$path"
[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path"
[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path"
[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path"
[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path"
fi
done
}
@@ -35,13 +43,13 @@ relabel() {
_b() {
# Create a block device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && mknod $path b ${arg%:*} ${arg#*:}
[ ! -e "$path" ] && dryrun_or_real mknod $path b ${arg%:*} ${arg#*:}
}
_c() {
# Create a character device node if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && mknod $path c ${arg%:*} ${arg#*:}
[ ! -e "$path" ] && dryrun_or_real mknod $path c ${arg%:*} ${arg#*:}
}
@@ -52,8 +60,8 @@ _f() {
[ $CREATE -gt 0 ] || return 0
if [ ! -e "$path" ]; then
install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -n "$arg" ] && _w "$@"
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -z "$arg" ] || _w "$@"
fi
}
@@ -63,8 +71,8 @@ _F() {
[ $CREATE -gt 0 ] || return 0
install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -n "$arg" ] && _w "$@"
dryrun_or_real install -m"$mode" -o"$uid" -g"$gid" /dev/null "$path"
[ -z "$arg" ] || _w "$@"
}
_d() {
@@ -74,7 +82,7 @@ _d() {
[ $CREATE -gt 0 ] || return 0
if [ ! -d "$path" ]; then
install -d -m"$mode" -o"$uid" -g"$gid" "$path"
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path"
fi
}
@@ -83,18 +91,18 @@ _D() {
local path=$1 mode=$2 uid=$3 gid=$4
if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
fi
if [ $CREATE -gt 0 ]; then
install -d -m"$mode" -o"$uid" -g"$gid" "$path"
dryrun_or_real install -d -m"$mode" -o"$uid" -g"$gid" "$path"
fi
}
_L() {
# Create a symlink if it doesn't exist yet
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ ! -e "$path" ] && ln -s "$args" "$path"
[ ! -e "$path" ] && dryrun_or_real ln -s "$args" "$path"
}
_p() {
@@ -104,8 +112,8 @@ _p() {
[ $CREATE -gt 0 ] || return 0
if [ ! -p "$path" ]; then
mkfifo -m$mode "$path"
chown "$uid:$gid" "$path"
dryrun_or_real mkfifo -m$mode "$path"
dryrun_or_real chown "$uid:$gid" "$path"
fi
}
@@ -129,9 +137,9 @@ _r() {
for path in ${paths}; do
if [ -f "$path" ]; then
rm -f "$path"
dryrun_or_real rm -f "$path"
elif [ -d "$path" ]; then
rmdir "$path"
dryrun_or_real rmdir "$path"
fi
done
}
@@ -145,14 +153,20 @@ _R() {
[ $REMOVE -gt 0 ] || return 0
for path in ${paths}; do
[ -d "$path" ] && rm -rf --one-file-system "$path"
[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path"
done
}
_w() {
# Write the argument parameter to a file, if it exists.
local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
[ -f "$path" ] && echo "$arg" >>"$path"
if [ -f "$path" ]; then
if [ $DRYRUN -eq 1 ]; then
echo "echo \"$arg\" >>\"$path\""
else
echo "$arg" >>"$path"
fi
fi
}
_z() {
@@ -187,6 +201,7 @@ tmpfiles_d=''
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
for d in ${tmpfiles_dirs} ; do
[ -d $d ] && for f in ${d}/*.conf ; do
[ "$f" = "$d/systemd.conf" ] && continue
[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
done # for f in ${d}
done # for d in ${tmpfiles_dirs}
@@ -212,6 +227,11 @@ while [ $# -gt 0 ]; do
shift
done
if [ $(( CLEAN )) -eq 1 ] ; then
printf '%s clean mode is not implemented\n' "${0##*/}"
exit 1
fi
if [ $(( CREATE + REMOVE )) -ne 1 ] ; then
printf 'usage: %s [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
exit 1
@@ -233,51 +253,40 @@ for FILE in $tmpfiles_d ; do
# XXX: Upstream says whitespace is NOT permitted in the Path argument.
# But IS allowed when globs are expanded for the x/r/R/z/Z types.
while read line; do
while read cmd path mode uid gid age arg; do
LINENUM=$(( LINENUM+1 ))
# This will skip over comments and empty lines
set -- $line
# Unless we have both command and path, skip this line.
if [ -z "$1" -o -z "$2" ]; then
if [ -z "$cmd" -o -z "$path" ]; then
continue
fi
# whine about invalid entries
case $1 in
case $cmd in
f|F|w|d|D|p|L|c|b|x|r|R|z|Z) ;;
\#) continue ;;
*) warninvalid ; continue ;;
esac
cmd=$1
path=$2
# fall back on defaults when parameters are passed as '-'
if [ "$3" = '-' -o "$3" = '' ]; then
case ${1} in
if [ "$mode" = '-' -o "$mode" = '' ]; then
case "$cmd" in
p|f|F) mode=0644 ;;
d|D) mode=0755 ;;
z|Z|x|r|R|L) ;;
esac
else
mode=$3
fi
uid=$4
gid=$5
age=$6
arg=$7
[ ${4} = '-' ] && uid=0
[ ${5} = '-' ] && gid=0
[ ${6} = '-' ] && age=0
[ ${7} = '-' ] && arg=''
[ "$uid" = '-' -o "$uid" = '' ] && uid=0
[ "$gid" = '-' -o "$gid" = '' ] && gid=0
[ "$age" = '-' -o "$age" = '' ] && age=0
[ "$arg" = '-' -o "$arg" = '' ] && arg=''
set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
_$cmd "$@"
rc=$?
if [ "${DRYRUN}" -eq "0" ]; then
_$cmd "$@"
rc=$?
[ $rc -ne 0 ] && error=$((error + 1))
fi
done <$FILE

View File

@@ -28,6 +28,8 @@
* SUCH DAMAGE.
*/
#include <sys/utsname.h>
#include "librc.h"
#define GENDEP RC_LIBEXECDIR "/sh/gendepends.sh"
@@ -747,12 +749,15 @@ rc_deptree_update(void)
size_t i, k, l;
bool retval = true;
const char *sys = rc_sys();
struct utsname uts;
/* Some init scripts need RC_LIBEXECDIR to source stuff
Ideally we should be setting our full env instead */
if (!getenv("RC_LIBEXECDIR"))
setenv("RC_LIBEXECDIR", RC_LIBEXECDIR, 0);
if (uname(&uts) == 0)
setenv("RC_UNAME", uts.sysname, 1);
/* Phase 1 - source all init scripts and print dependencies */
if (!(fp = popen(GENDEP, "r")))
return false;

View File

@@ -216,6 +216,7 @@ rc_sys_v2(void)
}
/* Now do detection */
__STRING_SWITCH(systype)
__STRING_CASE(RC_SYS_PREFIX) { return RC_SYS_PREFIX; }
#ifdef __FreeBSD__
__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; }
#endif /* __FreeBSD__ */
@@ -245,6 +246,10 @@ librc_hidden_def(rc_sys_v2)
const char *
rc_sys_v1(void)
{
#ifdef PREFIX
return RC_SYS_PREFIX;
#else
#ifdef __FreeBSD__
int jailed = 0;
size_t len = sizeof(jailed);
@@ -281,6 +286,7 @@ rc_sys_v1(void)
#endif
return NULL;
#endif /* PREFIX */
}
librc_hidden_def(rc_sys_v1)

View File

@@ -33,10 +33,13 @@
__BEGIN_DECLS
#define RC_PREFIX "@PREFIX@"
#define RC_SYSCONFDIR "@SYSCONFDIR@"
#define RC_LIBDIR "@PREFIX@/@LIB@/rc"
#define RC_LIBEXECDIR "@LIBEXECDIR@"
#ifdef __linux__
#if defined(PREFIX)
#define RC_SVCDIR RC_LIBEXECDIR "/init.d"
#elif defined(__linux__)
#define RC_SVCDIR "@PREFIX@/run/openrc"
#else
#define RC_SVCDIR RC_LIBEXECDIR "/init.d"
@@ -280,6 +283,7 @@ bool rc_service_daemons_crashed(const char *);
#define RC_SYS_JAIL "JAIL"
#define RC_SYS_OPENVZ "OPENVZ"
#define RC_SYS_LXC "LXC"
#define RC_SYS_PREFIX "PREFIX"
#define RC_SYS_UML "UML"
#define RC_SYS_VSERVER "VSERVER"
#define RC_SYS_XEN0 "XEN0"

View File

@@ -38,7 +38,7 @@
"Disable color output", \
"Display software version", \
"Run verbosely", \
"Run quietly"
"Run quietly (Does not affect errors)"
#define case_RC_COMMON_getopt_case_C setenv ("EINFO_COLOR", "NO", 1);
#define case_RC_COMMON_getopt_case_h usage (EXIT_SUCCESS);

View File

@@ -60,7 +60,8 @@ extern const char *applet;
* See systemd's src/label.c:label_mkdir
*/
static int
do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc)
do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type,
bool trunc, bool chowner)
{
struct stat st;
int fd, flags;
@@ -132,14 +133,14 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
}
if (mode && (st.st_mode & 0777) != mode) {
einfo("%s: correcting mode", applet);
einfo("%s: correcting mode", path);
if (chmod(path, mode)) {
eerror("%s: chmod: %s", applet, strerror(errno));
return -1;
}
}
if (st.st_uid != uid || st.st_gid != gid) {
if (chowner && (st.st_uid != uid || st.st_gid != gid)) {
if (st.st_dev || st.st_ino)
einfo("%s: correcting owner", path);
if (chown(path, uid, gid)) {
@@ -222,19 +223,20 @@ checkpath(int argc, char **argv)
struct group *gr = NULL;
inode_t type = inode_unknown;
int retval = EXIT_SUCCESS;
bool trunc = 0;
bool trunc = false;
bool chowner = false;
while ((opt = getopt_long(argc, argv, getoptstring,
longopts, (int *) 0)) != -1)
{
switch (opt) {
case 'D':
trunc = 1;
trunc = true;
case 'd':
type = inode_dir;
break;
case 'F':
trunc = 1;
trunc = true;
case 'f':
type = inode_file;
break;
@@ -247,6 +249,7 @@ checkpath(int argc, char **argv)
applet, optarg);
break;
case 'o':
chowner = true;
if (parse_owner(&pw, &gr, optarg) != 0)
eerrorx("%s: owner `%s' not found",
applet, optarg);
@@ -272,7 +275,7 @@ checkpath(int argc, char **argv)
gid = gr->gr_gid;
while (optind < argc) {
if (do_check(argv[optind], uid, gid, mode, type, trunc))
if (do_check(argv[optind], uid, gid, mode, type, trunc, chowner))
retval = EXIT_FAILURE;
optind++;
}

View File

@@ -282,7 +282,7 @@ fstabinfo(int argc, char **argv)
END_ENT;
if (!TAILQ_FIRST(files))
eerrorx("%s: emtpy fstab", argv[0]);
eerrorx("%s: empty fstab", argv[0]);
}
if (!TAILQ_FIRST(files)) {

View File

@@ -390,12 +390,8 @@ mountinfo(int argc, char **argv)
char real_path[PATH_MAX + 1];
int opt;
int result;
bool quiet;
char *this_path;
/* Ensure that we are only quiet when explicitly told to be */
unsetenv("EINFO_QUIET");
#define DO_REG(_var) \
if (_var) free(_var); \
_var = get_regex(optarg);
@@ -475,7 +471,6 @@ mountinfo(int argc, char **argv)
REG_FREE(args.skip_options_regex);
result = EXIT_FAILURE;
quiet = rc_yesno(getenv("EINFO_QUIET"));
/* We should report the mounts in reverse order to ease unmounting */
TAILQ_FOREACH_REVERSE(s, nodes, rc_stringlist, entries) {
@@ -485,7 +480,7 @@ mountinfo(int argc, char **argv)
if (skip_point_regex &&
regexec(skip_point_regex, s->value, 0, NULL, 0) == 0)
continue;
if (! quiet)
if (! rc_yesno(getenv("EINFO_QUIET")))
printf("%s\n", s->value);
result = EXIT_SUCCESS;
}

View File

@@ -343,7 +343,7 @@ do_mark_service(int argc, char **argv)
if (service == NULL || *service == '\0')
eerrorx("%s: no service specified", applet);
if (strncmp(applet, "mark_", 5) &&
if (!strncmp(applet, "mark_", 5) &&
(bit = lookup_service_state(applet + 5)))
ok = rc_service_mark(service, bit);
else

View File

@@ -191,6 +191,10 @@ env_config(void)
if (sys)
setenv("RC_SYS", sys, 1);
#ifdef PREFIX
setenv("RC_PREFIX", RC_PREFIX, 1);
#endif
/* Some scripts may need to take a different code path if
Linux/FreeBSD, etc
To save on calling uname, we store it in an environment variable */

View File

@@ -315,8 +315,7 @@ get_pid(const char *pidfile, bool quiet)
if ((fp = fopen(pidfile, "r")) == NULL) {
if (!quiet)
eerror("%s: fopen `%s': %s",
applet, pidfile, strerror(errno));
eerror("%s: fopen `%s': %s", applet, pidfile, strerror(errno));
return -1;
}
@@ -355,8 +354,7 @@ do_stop(const char *exec, const char *const *argv,
LIST_FOREACH_SAFE(pi, pids, entries, np) {
if (test) {
if (!quiet)
einfo("Would send signal %d to PID %d",
sig, pi->pid);
einfo("Would send signal %d to PID %d", sig, pi->pid);
nkilled++;
} else {
if (verbose)
@@ -417,7 +415,7 @@ run_stop_schedule(const char *exec, const char *const *argv,
}
if (pidfile) {
pid = get_pid(pidfile, quiet);
pid = get_pid(pidfile, false);
if (pid == -1)
return 0;
}
@@ -436,9 +434,7 @@ run_stop_schedule(const char *exec, const char *const *argv,
if (tkilled == 0) {
if (progressed)
printf("\n");
if (! quiet)
eerror("%s: no matching "
"processes found", applet);
eerror("%s: no matching processes found", applet);
}
return tkilled;
}
@@ -508,14 +504,10 @@ run_stop_schedule(const char *exec, const char *const *argv,
if (progressed)
printf("\n");
if (! quiet) {
if (nrunning == 1)
eerror("%s: %d process refused to stop",
applet, nrunning);
else
eerror("%s: %d process(es) refused to stop",
applet, nrunning);
}
if (nrunning == 1)
eerror("%s: %d process refused to stop", applet, nrunning);
else
eerror("%s: %d process(es) refused to stop", applet, nrunning);
return -nrunning;
}
@@ -1295,7 +1287,7 @@ start_stop_daemon(int argc, char **argv)
/* We don't redirect stdin as some daemons may need it */
if (background || quiet || redirect_stdout)
dup2(stdout_fd, STDOUT_FILENO);
if (background || quiet || redirect_stderr)
if (background || redirect_stderr)
dup2(stderr_fd, STDERR_FILENO);
for (i = getdtablesize() - 1; i >= 3; --i)
@@ -1326,12 +1318,9 @@ start_stop_daemon(int argc, char **argv)
return -1;
}
} while (!WIFEXITED(i) && !WIFSIGNALED(i));
if (!WIFEXITED(i) || WEXITSTATUS(i) != 0) {
if (!quiet)
eerrorx("%s: failed to start `%s'",
applet, exec);
exit(EXIT_FAILURE);
}
if (!WIFEXITED(i) || WEXITSTATUS(i) != 0)
eerrorx("%s: failed to start `%s'", applet, exec);
pid = spid;
}
@@ -1365,7 +1354,7 @@ start_stop_daemon(int argc, char **argv)
alive = true;
} else {
if (pidfile) {
pid = get_pid(pidfile, true);
pid = get_pid(pidfile, false);
if (pid == -1) {
eerrorx("%s: did not "
"create a valid"

View File

@@ -18,7 +18,7 @@ l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
l6r:6:wait:/sbin/reboot -dk
l6r:6:wait:/sbin/reboot -d
#z6:6:respawn:/sbin/sulogin
# new-style single-user

View File

@@ -9,10 +9,6 @@ srcdir=${srcdir:-.}
top_builddir=${top_builddir:-${top_srcdir}}
builddir=${builddir:-${srcdir}}
export LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH}
export PATH=${top_builddir}/src/rc:${PATH}
if [ ! -f ${top_srcdir}/sh/functions.sh ] ; then
echo "functions.sh not yet created !?" 1>&2
exit 1
@@ -21,6 +17,9 @@ elif ! . ${top_srcdir}/sh/functions.sh; then
exit 1
fi
export LD_LIBRARY_PATH=${top_builddir}/src/libeinfo:${top_builddir}/src/librc:${LD_LIBRARY_PATH}
export PATH=${top_builddir}/src/rc:${PATH}
cd ${top_srcdir}/src/rc
${MAKE:-make} links >/dev/null
cd -