Compare commits

...

75 Commits

Author SHA1 Message Date
William Hubbs
ac8b4be7c2 release openrc-0.7.0 2011-01-12 20:14:17 -06:00
Eray Aslan
66abbefd6c bug 351160: make openrc exit codes LSB compliant
* status on a stopped service now has a return code of 3 (was 1)
* starting an already started service now has a return code of 0 (was 1)
* stopping an already stopped service now has a return code of 0 (was 1)
2011-01-12 19:46:11 -06:00
William Hubbs
84eda608c8 bug 328675: add error checking to runscript.sh
runscript.sh needs to abort if the . command used to load
conf.d files and the service script does not execute successfully.
I would like to thank Mike Frysinger for his input wrt style on this
patch.
2011-01-12 19:21:48 -06:00
Mike Frysinger
e3905ed7bb update bug reporting information
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2011-01-08 18:35:08 -05:00
Chris Richards
92b6262ac7 Bug 349571 - SELinux fixes for bootmisc
- delete the contents of the $RC_LIBEXECDIR/console directory but not
  the directory itself.
  - direct error output from the chmod call for /tmp to /dev/null.
2011-01-06 18:20:53 -06:00
Robin H. Johnson
647df8cfe7 Make sure old rc_sys code never runs if the rc_sys variable exists.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-01-05 22:33:03 -08:00
Robin H. Johnson
6a0812645a Update manpage for mention of rc_sys purpose.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-01-05 22:27:35 -08:00
Robin H. Johnson
3d4d1ab14b Remove broken automatic LXC subsystem detection.
Any system using cgroups was being detected as an LXC system. This was
triggering on OpenVZ under RHEL6 as well as the "automated per tty task
groups" as discussed on the LKML.

All LXC users should now switch to the new rc_sys variable introduced in
the previous patch.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-01-05 22:09:34 -08:00
Robin H. Johnson
09f990a7c8 Implement explicit selection of subsystem types.
- Fixes bugs #347583, #349389, both of which were triggered by cgroups
  being detected as the LXC subsystem type.
- Makes it much easier to select "prefix" type.
- "rc -S" will now print a warning if you have not configured rc_sys in
  /etc/rc.conf
- All other semantics of rc_sys are unchanged in this patch.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
2011-01-05 22:09:34 -08:00
Robin H. Johnson
6df531d33d Document the order of the services within rc-status output. 2011-01-05 22:09:33 -08:00
William Hubbs
b2e9b91852 bug #349443: remove -openvz keyword from sysctl service
Openvz supports sysctl settings which are different from the host
settings, so allow the sysctl service to run for openvz systems.
2010-12-28 13:54:19 -06:00
Robin H. Johnson
f84d997d4c Move the ip rule extra output to verbose mode only, and support verbose output on addresses and routes. 2010-12-15 13:02:04 -08:00
Robin H. Johnson
346148ceb8 Fix pointopoint->peer for iproute. 2010-12-15 12:40:21 -08:00
Robin H. Johnson
12a91636f4 Fix pointopoint typo in old ifconfig setup. 2010-12-15 12:37:50 -08:00
Robin H. Johnson
7f7baa6c3c Bug #266659: we really need to allow peer, pointtopoint in parsing config lines. 2010-12-11 18:29:34 -08:00
Robin H. Johnson
400b45d590 Final documentation cleanup for updated bridge code.
Specifically document how to handle the case of explicitly starting a
bridge and then dynamically adding interfaces to it.

brctl_br0=''
bridge_add_eth0='br0'
2010-12-12 00:58:47 +00:00
Robin H. Johnson
e431599d08 Add "after lvm modules" as Flameeyes reports that LVM is starting too late on his system in some cases. 2010-12-11 14:25:46 -08:00
Robin H. Johnson
e07f0ef417 Merge support for Routing Policy Database (RPDB)
This can be used for multi-homed connections and other advanced routing
in Linux. See the documentation links for more information about doing
this in linux.

The code was a originally pure addon into the conf.d/net files, written
in mid-2004 for doing multi-homing between two internet connections. I
have finally cleaned this up and integrated it. Thanks to Jonathan Kwan
for giving me the original impetus to develop this for Gentoo (it was
his dual internet connections...).

In the intervening years, it was a example of postup/postdown in the
net.example file, however that suffered from a few corner case issues.

If you were using the code from net.example, please see the updated
section 'Advanced Routing' on syntax, and drop your old function blocks.
Additionally, note that the rules added are now directly saved for
removal when the interface is taken down.
2010-12-11 14:23:52 -08:00
Robin H. Johnson
dbb5af2023 Revamp of bridging code.
- Use sysfs to read bridge information from the system instead of
  parsing the brctl outputs.
- Allow setting of all bridge configuration parameters using new sysfs
  methods, modelled after bonding configuration. Also works for per-port
  bridge interface parameters.
- Document pre-starting an empty bridge for dynamic add.
- Check for interface existence before adding to bridge.
- Should fix bug #293046, #309185.
2010-12-11 12:26:38 -08:00
William Hubbs
900d54b0fc release openrc-0.6.8 2010-12-07 22:32:44 -06:00
William Hubbs
84750f5722 bug 232347: fix netmount to respect _netdev option
The _netdev option in fstab on linux systems indicates
that a filesystem should only be mounted if the network is available.

This commit fixes netmount to support this.
2010-12-07 11:54:03 -06:00
Robin H. Johnson
f8f03bdbbf Bug #345281: If wpa_supplicant is built w/ USE=dbus, we need to start after DBus is up. 2010-12-06 02:54:21 +00:00
Robin Johnson
80d5f7d27b fix selinux context for rc-svcdir (bug #347503) 2010-12-03 23:49:34 -06:00
William Hubbs
449080e145 release openrc-0.6.7 2010-12-03 14:51:30 -06:00
Thomas Pfaff
062223a5df Avoid race condition in runscript (bug #319865)
Under normal conditions, runscript creates one child and waits for its
termination, which is signaled by a pipe write from the SIGCHLD
sighandler.

When running killprocs however more than one SIGHCLD signal is generated, at
least on all of my amd64 boxes running on real hardware and in vmware.

When the first SIGCHLD occurs svc_exec leaves the loop and closes the pipe.
Subsequent SIGCHLDs during the close can lead to a race condition and create an
EBADF error in the pipe write (pipe is closed but the file handle is still !=
-1).

We avoid this by blocking SIGHCHLD during the pipe close.
2010-12-03 14:01:28 -06:00
William Hubbs
18064e19f6 release openrc-0.6.6 2010-11-30 16:04:17 -06:00
William Hubbs
cdf07b5970 localmount should only use the -O option for linux systems
This fixes bug #347307.
2010-11-30 15:40:44 -06:00
William Hubbs
82b265016a send error output from chattr command to /dev/null
This is for bug #346659.
2010-11-26 14:54:30 -06:00
William Hubbs
bdfab242b7 release openrc-0.6.5 2010-11-21 11:08:53 -06:00
William Hubbs
4ca32808dd Revert "allow ifplugd to work on wireless interfaces"
This reverts commit 4ea75dd1d6.
This caused a regression, see bug #345795.

Ifplugd is only designed to support wireless interfaces that use the
older wireless extentions.
2010-11-18 15:06:42 -06:00
William Hubbs
9e5b9abf40 remove "use hostname" from sysctl for bsd systems 2010-11-16 10:03:05 -06:00
William Hubbs
ac37dc2764 do not mount local file systems with the _netdev option in fstab
This fixes #344947.
2010-11-15 12:01:48 -06:00
William Hubbs
9285cb3392 release openrc-0.6.4 2010-11-15 10:17:17 -06:00
William Hubbs
6d9137d6c4 remove support for local.start and local.stop for bug #343709
The openrc ebuild now migrates these files to /etc/conf.d/local, so we
do not need to support them.
2010-11-10 10:55:28 -06:00
William Hubbs
2fa6bb0d48 add warnings about local.start and local.stop for bug #343709
We need to warn users that they should be using /etc/conf.d/local
instead of /etc/conf.d/local.start and /etc/conf.d/local.stop. This adds
those warnings.
2010-11-05 13:42:33 -05:00
William Hubbs
39776d6fb7 update documentation for rc_interactive
rc_interactive is automatically disabled if rc_parallel is set to YES.
Update the documentation in rc.conf to reflect this.
This fixes bug #327305.
2010-11-01 13:57:22 -05:00
Jory A. Pratt
68c021c424 ensure bonding interface is down before we attempt to configure, also
mode has to be configure before any other arguements are passed. Thanks
Ed Wildgoose <gentoo@wildgooses.com> for patch.
2010-10-31 16:40:54 -05:00
Diego Elio Pettenò
09bed967bf Allow cleaning up of pam_mktemp-based temporary directories.
This was blacklisted before, so the .private directories never had their
content cleaned up, even if WIPE_TMP was set to yes.
2010-10-31 16:18:38 -05:00
Jory A. Pratt
060b19e3e3 correction for unmounting volumes with weird characters, thanks Brant
Gurganus <brant@gurganus.name>
2010-10-28 20:35:09 -05:00
William Hubbs
d8a76d1bf6 allow net_fs_list to be extended but not replaced
This fixes bug #342825.
2010-10-27 09:00:02 -05:00
Jory A. Pratt
7653ef89b8 remove 'use hostname' bug 340991, Thanks Diego 2010-10-23 23:52:43 -05:00
Jory A. Pratt
be6c0716ee surpress output of loadkeys, fix setfont path check 2010-09-30 07:33:52 -05:00
William Hubbs
4ea75dd1d6 allow ifplugd to work on wireless interfaces
this fixes bug #335494.
2010-09-14 19:37:52 -05:00
William Hubbs
b708852784 release openrc-0.6.3 2010-09-02 10:15:17 -05:00
William Hubbs
f700243016 Revert "fix bug 266395"
This reverts commit 1a188f8f72.

This revert fixes bug #334663.
2010-09-02 09:42:11 -05:00
Jory A. Pratt
b232e529f1 Fix for make-3.82 breakage. 2010-08-22 15:05:11 -05:00
William Hubbs
ae3186834f release openrc-0.6.2 2010-08-19 17:00:38 -05:00
William Hubbs
23546e27d9 fix detection of renamed vlan interfaces
This fixes bug 327059, thanks to Jonathan for reporting this and for the patch.
2010-08-19 16:17:38 -05:00
William Hubbs
1a188f8f72 fix bug 266395
Do not stop wpa_supplicant or wpa_cli if they are in the background.
Thanks to Slava Gorbunov for the patch.
2010-08-18 15:01:23 -05:00
Anthony G. Basile
89829f6d7c Fixes bug #332383. Thanks Lutz Heermann. 2010-08-13 17:42:23 -04:00
Anthony G. Basile
6e3b3bfc53 Fix bug #332181. Thanks Lutz Heermann. 2010-08-13 17:32:31 -04:00
Jory A. Pratt
14c95ae9a6 update consolefont/keymap to include -lxc in keywords 2010-08-10 08:21:08 -05:00
William Hubbs
d3ccbdb5a9 allow ip to be in /sbin or /bin
This makes it possible for the "ip" program in iproute2 to be installed
in /sbin or /bin.
2010-08-09 20:01:15 -05:00
William Hubbs
1cdf85e1ce fix bug #330173
This fixes a typo in the comments in net.example.
2010-07-28 13:18:33 -05:00
Jory A. Pratt
2982cfab70 Fix bug #301237, update example to list proper package for mii-tool 2010-07-12 22:45:40 -05:00
Jory A. Pratt
761fe99fe2 on_ac_power needs to exit not return bug #322037 2010-07-12 22:19:56 -05:00
William Hubbs
6f24d1cbd8 fix typo
I made a typo while manually transferring over Roy's last commit.  This
fixes that typo.
2010-07-10 15:31:16 -05:00
William Hubbs
898552dcc3 fix metric
This change was also taken from Roy Marples' git.
2010-07-07 19:55:37 -05:00
William Hubbs
6850566be0 remove extra route
This was taken from Roy Marples' git repository.
2010-07-07 19:42:56 -05:00
Mike Frysinger
3036b44798 restore init.d pause option 2010-04-09 02:19:40 -04:00
Mike Frysinger
acc0edb040 restore old e* func output
Gentoo has always used the sytle:
 * moo ...                [ ok ]
Latest openrc now does:
* moo...                    [ok]

Realistically, 4 spaces out of 80 on reduced terminals doesn't make any
sort of realistic difference and it's been just fine for the last 10
years, so keep the default behavior.
2010-04-09 02:19:40 -04:00
Seth Robertson
316a316d9b Allow dhclient per $IFACE arguments. 2010-03-30 09:21:54 +01:00
Michal Gorny
20b4076b12 Support sysfs.
Fixes #214
2010-03-27 08:53:04 +00:00
Roy Marples
4d86d34635 Fix -s and -S. 2010-03-26 22:10:03 +00:00
Roy Marples
ae7a92ae7b Try and describe bonding errors a bit more. 2010-03-24 20:41:18 +00:00
Roy Marples
67b538fd26 Fix tentative ip addresses 2010-03-24 20:25:42 +00:00
Roy Marples
0276c4f516 Release openrc-0.6.1 2010-03-22 20:02:12 +00:00
Roy Marples
7271449a0c Fix two leaks. 2010-03-17 20:37:47 +00:00
Roy Marples
4b333eaf36 Send SIGKILL after 2 failed SIGTERM when unmounting. 2010-03-16 21:34:48 +00:00
Juan RP
59b08643f1 Mount xenfs early so OpenRC can detect it. 2010-02-26 09:34:43 +00:00
Roy Marples
5c52e5beb5 Fix rc_${rc_svcname}_need.
Display config depends in service depend function also.
2010-02-20 21:48:06 +00:00
Trevor Summers Smith
c0f5f2122c Allow bridge interfaces to be called bridge. 2010-02-09 17:10:04 +00:00
Mike Frysinger
ecf9ef49a7 random spelling fixes
Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2010-01-08 22:02:51 +00:00
Roy Marples
bb45f0eabc Fix BSD compile. 2010-01-08 00:22:04 +00:00
Daniel Mierswa
f434c902a5 Use IFACE variable instead of iface.
Signed-off-by: Daniel Mierswa <impulze@impulze.org>
2009-12-31 07:21:59 +00:00
58 changed files with 705 additions and 272 deletions

View File

@@ -1,3 +1,3 @@
NAME= openrc NAME= openrc
VERSION= 0.6.0 VERSION= 0.7.0
PKG= ${NAME}-${VERSION} PKG= ${NAME}-${VERSION}

15
README
View File

@@ -41,7 +41,7 @@ If any of the following files exist then we do not overwrite them
rc and rc.shutdown are the hooks from the BSD init into OpenRC. rc and rc.shutdown are the hooks from the BSD init into OpenRC.
devd.conf is modified from FreeBSD to call /etc/rc.devd which is a generic devd.conf is modified from FreeBSD to call /etc/rc.devd which is a generic
hook into OpenRC. hook into OpenRC.
inittab is the same, but for SysVInit as used by most Linux distrubtions. inittab is the same, but for SysVInit as used by most Linux distributions.
This can be found in the support folder. This can be found in the support folder.
Obviously, if you're installing this onto a system that does not use OpenRC 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 by default then you may wish to backup the above listed files, remove them
@@ -53,20 +53,17 @@ of the system.
Reporting Bugs Reporting Bugs
------------- --------------
If you installed OpenRC from your chosen distribution, you should report Bugs should go to the Gentoo Bugzilla:
bugs directly to them. For example, if you use Gentoo and emerged OpenRC http://bugs.gentoo.org/
then you should reports bugs to http://bugs.gentoo.org. You'll want the "Gentoo Linux" product and the "baselayout" component.
Otherwise, you can report them directly to me at
http://roy.marples.name/projects/openrc
History - by Roy Marples History - by Roy Marples
------------------------ ------------------------
I became a Gentoo/Linux developer in 2004 and wrote the modular network I became a Gentoo/Linux developer in 2004 and wrote the modular network
scripts for the Gentoo baselayout package. baselayout is a collection of scripts for the Gentoo baselayout package. baselayout is a collection of
bash scripts to bring up your computer and it's services. bash scripts to bring up your computer and its services.
Then towards the end of 2005 I found myself as the primary maintainer Then towards the end of 2005 I found myself as the primary maintainer
for baselayout. for baselayout.

View File

@@ -12,8 +12,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 about the interface easily * . The BSD family almost get this right and Linux
epically fails. epically fails.
* Only static confguration, including link setup. * Only static configuration, including link setup.
For dynmaic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x
provides your needs. provides your needs.
It fails because there are many tools to do the same job and often have It fails because there are many tools to do the same job and often have
@@ -31,6 +31,6 @@ currently available. It's just harder as you have to know them and their
documentation can be lacking at times. documentation can be lacking at times.
The correct end goal is a BSD style ifconfig tool. The correct end goal is a BSD style ifconfig tool.
I've started work on it, but the project has stalled somewhat. I've started work on it, but the project has stalled somewhat.
It's display only right now and the source is not yet publically available. 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 If you have the skills and share the vision then contact me privately and
we'll take it from there. we'll take it from there.

2
TODO
View File

@@ -1,3 +1,5 @@
- ensure all forks block, restore and unblock signals. needs review - ensure all forks block, restore and unblock signals. needs review
- add support somehow for optional translations - add support somehow for optional translations
- oldnet[bridging]: Review setting of bridge configuration on dynamic interface add

View File

@@ -11,7 +11,7 @@ include ${MK}/scripts.mk
SOS?= BSD SOS?= BSD
network: network.in network.${OS} network: network.in network.${SOS}
cp $@.in $@ cp $@.in $@
[ -e $@.${SOS} ] && cat $@.${SOS} >> $@ || true [ -e $@.${SOS} ] && cat $@.${SOS} >> $@ || true

View File

@@ -12,7 +12,7 @@
# kernel then remove the IPv6 address from your config. # kernel then remove the IPv6 address from your config.
# If you want to use a static address or use DHCP explicitly, jump # If you want to use a static address or use DHCP explicitly, jump
# down to the section labelled INTERFACE HANDLERS. # down to the section labeled INTERFACE HANDLERS.
# #
# If you want to do anything more fancy, you should take the time to # If you want to do anything more fancy, you should take the time to
# read through the rest of this file. # read through the rest of this file.
@@ -22,10 +22,10 @@
# #
# We now support modular networking scripts which means we can easily # We now support modular networking scripts which means we can easily
# add support for new interface types and modules while keeping # add support for new interface types and modules while keeping
# compatability with existing ones. # compatibility with existing ones.
# #
# Modules load by default if the package they need is installed. If # Modules load by default if the package they need is installed. If
# you specify a module here that doesn't have it's package installed # you specify a module here that doesn't have its package installed
# then you get an error stating which package you need to install. # then you get an error stating which package you need to install.
# Ideally, you only use the modules setting when you have two or more # Ideally, you only use the modules setting when you have two or more
# packages installed that supply the same service. # packages installed that supply the same service.
@@ -96,8 +96,8 @@
#modules="iwconfig" #modules="iwconfig"
# ifconfig (iwconig) support is a one shot script - wpa_supplicant is daemon # ifconfig (iwconig) support is a one shot script - wpa_supplicant is daemon
# that scans, assoicates and re-configures if assocation is lost. # that scans, associates and re-configures if association is lost.
# We call it iwconfig to seperate the wireless setup from ifconfig. # We call it iwconfig to separate the wireless setup from ifconfig.
#################################### ####################################
# HINTS # HINTS
# #
@@ -182,7 +182,7 @@
#dns_servers_001122334455="192.168.0.1 192.168.0.2" #dns_servers_001122334455="192.168.0.1 192.168.0.2"
# Map a MAC address to an SSID # Map a MAC address to an SSID
# This is used when the Access Point is not broadcasting it's SSID # This is used when the Access Point is not broadcasting its SSID
# WARNING: This will override the SSID being broadcast due to some # WARNING: This will override the SSID being broadcast due to some
# Access Points sending an SSID even when they have been configured # Access Points sending an SSID even when they have been configured
# not to! # not to!
@@ -193,7 +193,7 @@
# This lists the preferred SSIDs to connect to in order # This lists the preferred SSIDs to connect to in order
# SSID's can contain any characters here as they must match the broadcast # SSID's can contain any characters here as they must match the broadcast
# SSID exactly. # SSID exactly.
# Surround each SSID with the " character and seperate them with a space # Surround each SSID with the " character and separate them with a space
# If the first SSID isn't found then it moves onto the next # If the first SSID isn't found then it moves onto the next
# If this isn't defined then it connects to the first one found # If this isn't defined then it connects to the first one found
#preferred_aps="SSID1 SSID2" #preferred_aps="SSID1 SSID2"
@@ -208,9 +208,9 @@
# any other available AP # any other available AP
# "preferredonly" means it will only connect to visible APs in the preferred # "preferredonly" means it will only connect to visible APs in the preferred
# list # list
# "forcepreferred" means it will forceably connect to APs in order if it does # "forcepreferred" means it will forcibly connect to APs in order if it does
# not find them in a scan # not find them in a scan
# "forcepreferredonly" means it forceably connects to the APs in order and # "forcepreferredonly" means it forcibly connects to the APs in order and
# does not bother to scan # does not bother to scan
# "forceany" does the same as forcepreferred + connects to any other # "forceany" does the same as forcepreferred + connects to any other
# available AP # available AP
@@ -320,7 +320,7 @@
# Set generic DHCP options like so # Set generic DHCP options like so
#dhcp_eth0="release nodns nontp nonis nogateway nosendhost" #dhcp_eth0="release nodns nontp nonis nogateway nosendhost"
# This tells the dhcp client to release it's lease when it stops, not to # This tells the dhcp client to release its lease when it stops, not to
# overwrite dns, ntp and nis settings, not to set a default route and not to # overwrite dns, ntp and nis settings, not to set a default route and not to
# send the current hostname to the dhcp server and when it starts. # send the current hostname to the dhcp server and when it starts.
# You can use any combination of the above options - the default is not to # You can use any combination of the above options - the default is not to

View File

@@ -12,7 +12,7 @@
# kernel then remove the IPv6 address from your config. # kernel then remove the IPv6 address from your config.
# If you want to use a static address or use DHCP explicitly, jump # If you want to use a static address or use DHCP explicitly, jump
# down to the section labelled INTERFACE HANDLERS. # down to the section labeled INTERFACE HANDLERS.
# #
# If you want to do anything more fancy, you should take the time to # If you want to do anything more fancy, you should take the time to
# read through the rest of this file. # read through the rest of this file.
@@ -23,10 +23,10 @@
# #
# We now support modular networking scripts which means we can easily # We now support modular networking scripts which means we can easily
# add support for new interface types and modules while keeping # add support for new interface types and modules while keeping
# compatability with existing ones. # compatibility with existing ones.
# #
# Modules load by default if the package they need is installed. If # Modules load by default if the package they need is installed. If
# you specify a module here that doesn't have it's package installed # you specify a module here that doesn't have its package installed
# then you get an error stating which package you need to install. # then you get an error stating which package you need to install.
# Ideally, you only use the modules setting when you have two or more # Ideally, you only use the modules setting when you have two or more
# packages installed that supply the same service. # packages installed that supply the same service.
@@ -106,7 +106,7 @@
# Each module described below can set a default base metric, lower is # Each module described below can set a default base metric, lower is
# preferred over higher. This is so we can prefer a wired route over a # preferred over higher. This is so we can prefer a wired route over a
# wireless route automaticaly. You can override this by setting # wireless route automatically. You can override this by setting
#metric_eth0="100" #metric_eth0="100"
# or on a global basis # or on a global basis
#metric="100" #metric="100"
@@ -253,7 +253,7 @@
#key_SSID="s:foobar enc open" #key_SSID="s:foobar enc open"
#key_SSID="1234-5678-9012 enc open" #key_SSID="1234-5678-9012 enc open"
# You may want to set muliple keys - here's an example # You may want to set multiple keys - here's an example
# It sets 4 keys on the card and instructs to use key 2 by default # It sets 4 keys on the card and instructs to use key 2 by default
#key_SSID="[1] s:passkey1 key [2] s:passkey2 key [3] s:passkey3 key [4] s:passkey4 key [2]" #key_SSID="[1] s:passkey1 key [2] s:passkey2 key [3] s:passkey3 key [4] s:passkey4 key [2]"
@@ -283,7 +283,7 @@
#dns_servers_001122334455="192.168.0.1 192.168.0.2" #dns_servers_001122334455="192.168.0.1 192.168.0.2"
# Map a MAC address to an SSID # Map a MAC address to an SSID
# This is used when the Access Point is not broadcasting it's SSID # This is used when the Access Point is not broadcasting its SSID
# WARNING: This will override the SSID being broadcast due to some # WARNING: This will override the SSID being broadcast due to some
# Access Points sending an SSID even when they have been configured # Access Points sending an SSID even when they have been configured
# not to! # not to!
@@ -294,7 +294,7 @@
# This lists the preferred SSIDs to connect to in order # This lists the preferred SSIDs to connect to in order
# SSID's can contain any characters here as they must match the broadcast # SSID's can contain any characters here as they must match the broadcast
# SSID exactly. # SSID exactly.
# Surround each SSID with the " character and seperate them with a space # Surround each SSID with the " character and separate them with a space
# If the first SSID isn't found then it moves onto the next # If the first SSID isn't found then it moves onto the next
# If this isn't defined then it connects to the first one found # If this isn't defined then it connects to the first one found
#preferred_aps="SSID1 SSID2" #preferred_aps="SSID1 SSID2"
@@ -307,9 +307,9 @@
# "any" means it will connect to visible APs in the preferred list and then any # "any" means it will connect to visible APs in the preferred list and then any
# other available AP # other available AP
# "preferredonly" means it will only connect to visible APs in the preferred list # "preferredonly" means it will only connect to visible APs in the preferred list
# "forcepreferred" means it will forceably connect to APs in order if it does not find # "forcepreferred" means it will forcibly connect to APs in order if it does not find
# them in a scan # them in a scan
# "forcepreferredonly" means it forceably connects to the APs in order and does not bother # "forcepreferredonly" means it forcibly connects to the APs in order and does not bother
# to scan # to scan
# "forceany" does the same as forcepreferred + connects to any other available AP # "forceany" does the same as forcepreferred + connects to any other available AP
# Default is "any" # Default is "any"
@@ -448,7 +448,7 @@
# Set generic DHCP options like so # Set generic DHCP options like so
#dhcp_eth0="release nodns nontp nonis nogateway nosendhost" #dhcp_eth0="release nodns nontp nonis nogateway nosendhost"
# This tells the dhcp client to release it's lease when it stops, not to # This tells the dhcp client to release its lease when it stops, not to
# overwrite dns, ntp and nis settings, not to set a default route and not to # overwrite dns, ntp and nis settings, not to set a default route and not to
# send the current hostname to the dhcp server and when it starts. # send the current hostname to the dhcp server and when it starts.
# You can use any combination of the above options - the default is not to # You can use any combination of the above options - the default is not to
@@ -572,7 +572,7 @@
#config_bond0="null" # You may not want to assign an IP the the bond #config_bond0="null" # You may not want to assign an IP the the bond
# You can also configure the bond here, which must be done via sysfs on 2.6 # You can also configure the bond here, which must be done via sysfs on 2.6
# kernels or newer. See the kernel bonding documention for a description of # kernels or newer. See the kernel bonding documentation for a description of
# these options. # these options.
#arp_ip_target_bond0="+26.0.0.0" #arp_ip_target_bond0="+26.0.0.0"
@@ -658,7 +658,7 @@
# #
# Dead peer detection # Dead peer detection
# lcp-echo-interval 15 # Send a LCP echo every 15 seconds # lcp-echo-interval 15 # Send a LCP echo every 15 seconds
# lcp-echo-failure 3 # Make peer dead after 3 consective # lcp-echo-failure 3 # Make peer dead after 3 consecutive
# # echo-requests # # echo-requests
# #
# Compression options - use these to completely disable compression # Compression options - use these to completely disable compression
@@ -787,11 +787,18 @@
#bridge_add_eth0="br0" #bridge_add_eth0="br0"
#bridge_add_eth1="br0" #bridge_add_eth1="br0"
# NOTE: If you want to manually start an empty bridge, and then dynamically add
# ports to it you must set at least one of the following variables based on the
# interface name, so that we can pick it up from your configuration. Even an
# empty value variable is fine, but at least one of them must be set:
# brctl_IFVAR
# You need to configure the ports to null values so dhcp does not get started # You need to configure the ports to null values so dhcp does not get started
#config_eth0="null" #config_eth0="null"
#config_eth1="null" #config_eth1="null"
# Finally give the bridge an address - dhcp or a static IP # Finally give the bridge an address - dhcp or a static IP, this is assigned to
# the bridge when the bridge is explicitly started.
#config_br0="dhcp" # may not work when adding ports dynamically #config_br0="dhcp" # may not work when adding ports dynamically
#config_br0="192.168.0.1/24" #config_br0="192.168.0.1/24"
@@ -805,6 +812,13 @@
#sethello 0 #sethello 0
#stp off" #stp off"
# You can also configure the bridge or bridge members via sysfs on 2.6 kernels
# or newer. See the kernel bridge documentation for a description of these
# options.
#stp_state_br0="0"
#forward_delay_br0="10"
#hairpin_mode_eth0="1"
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# RFC 2684 Bridge Support # RFC 2684 Bridge Support
# For RFC 2684 bridge support emerge net-misc/br2684ctl # For RFC 2684 bridge support emerge net-misc/br2684ctl
@@ -822,8 +836,8 @@
#config_nas0="'192.168.0.1/24'" #config_nas0="'192.168.0.1/24'"
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# Tunnelling # Tunneling
# WARNING: For tunnelling it is highly recommended that you # WARNING: For tunneling it is highly recommended that you
# emerge sys-apps/iproute2 # emerge sys-apps/iproute2
# #
# For GRE tunnels # For GRE tunnels
@@ -838,7 +852,7 @@
# 6to4 Tunnels allow IPv6 to work over IPv4 addresses, provided you # 6to4 Tunnels allow IPv6 to work over IPv4 addresses, provided you
# have a non-private address configured on an interface. # have a non-private address configured on an interface.
# link_6to4="eth0" # Interface to base it's addresses on # link_6to4="eth0" # Interface to base its addresses on
# config_6to4="ip6to4" # config_6to4="ip6to4"
# You may want to depend on eth0 like so # You may want to depend on eth0 like so
#rc_need_6to4="net.eth0" #rc_need_6to4="net.eth0"
@@ -848,10 +862,56 @@
# sit0 - otherwise use a different name like 6to4 in the example above. # sit0 - otherwise use a different name like 6to4 in the example above.
# You can also specify a relay and suffix if you like. # You can also specify a relay and suffix if you like.
# The default relay is 192.88.99.1 and the defualt suffix is :1 # The default relay is 192.88.99.1 and the default suffix is :1
#relay_6to4="192.168.3.2" #relay_6to4="192.168.3.2"
#suffix_6to4=":ff" #suffix_6to4=":ff"
#-----------------------------------------------------------------------------
# Advanced Routing
# WARNING: For advanced routing you MUST be using sys-apps/iproute2
#
# This provides a means to do multi-homing and more using the Routing Policy
# Database (RPDB).
#
# See the following links for background and more information.
# http://linux-ip.net/html/ch-routing.html
# http://linux-ip.net/html/ch-advanced-routing.html
# The rules listed will be added with 'ip rule add LINE' when the interface is
# being brought up. They will also be removed with 'ip rule delete LINE'.
# The rules added are also stored for later removal, so if you alter your rules
# directly before stopping, you should review your rules again after stopping.
# Note in earlier versions of openrc, this was provided as an example in
# postup/postdown, however that implementation suffered some bugs in corner
# cases, which are now fixed with this merger. If you used the previous
# example, you should only need to drop the relevent portions of your
# postup/postdown functions, and review the quoting in your rules_IFACE
# variables.
# Below is a trivial example for a dual-homed connection where there is an OOB
# management network. Only packets explicitly with an address from or to the
# OOB are sent via eth0. All others go via eth1 as the eth1 rules have a lower
# priority.
# If you want to use names for your tables, you should put lines into
# /etc/iproute2/rt_tables, an example follows:
# 2 oob
# 3 external
#rules_eth0="
#from ZZZ.ZZZ.200.128/27 table oob priority 500
#to ZZZ.ZZZ.200.128/27 table oob priority 550"
#rules_eth1="
#from XXX.XXX.112.0/24 table external priority 400
#to XXX.XXX.112.0/24 table external priority 450"
#routes_eth0="
#ZZZ.ZZZ.200.128/27 dev eth0 table oob scope link
#default via ZZZ.ZZZ.200.129 table oob"
#routes_eth1="
#XXX.XXX.112.0/24 dev eth1 table external scope link
#default via XXX.XXX.112.1 dev eth1"
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
# System # System
@@ -896,7 +956,7 @@
# and you're done :) # and you're done :)
# By default we don't wait for netplug/ifplugd to configure the interface. # By default we don't wait for netplug/ifplugd to configure the interface.
# If you would like it to wait so that other services now that network is up # If you would like it to wait so that other services know that network is up
# then you can specify a timeout here. # then you can specify a timeout here.
#plug_timeout="10" #plug_timeout="10"
# A value of 0 means wait forever. # A value of 0 means wait forever.
@@ -936,8 +996,8 @@
#preup() { #preup() {
# # Test for link on the interface prior to bringing it up. This # # Test for link on the interface prior to bringing it up. This
# # only works on some network adapters and requires the mii-diag # # only works on some network adapters and requires the
# # package to be installed. # # sys-apps/net-tools package to be installed.
# if mii-tool "${IFACE}" 2> /dev/null | grep -q 'no link'; then # if mii-tool "${IFACE}" 2> /dev/null | grep -q 'no link'; then
# ewarn "No link on ${IFACE}, aborting configuration" # ewarn "No link on ${IFACE}, aborting configuration"
# return 1 # return 1
@@ -980,33 +1040,6 @@
# # This function could be used, for example, to register with a # # This function could be used, for example, to register with a
# # dynamic DNS service. Another possibility would be to # # dynamic DNS service. Another possibility would be to
# # send/receive mail once the interface is brought up. # # send/receive mail once the interface is brought up.
# # Here is an example that allows the use of iproute rules
# # which have been configured using the rules_eth0 variable.
# #rules_eth0=" \
# # 'from 24.80.102.112/32 to 192.168.1.0/24 table localnet priority 100' \
# # 'from 216.113.223.51/32 to 192.168.1.0/24 table localnet priority 100' \
# #"
# eval set -- \$rules_${IFVAR}
# if [ $# != 0 ]; then
# einfo "Adding IP policy routing rules"
# eindent
# # Ensure that the kernel supports policy routing
# if ! ip rule list | grep -q "^"; then
# eerror "You need to enable IP Policy Routing (CONFIG_IP_MULTIPLE_TABLES)"
# eerror "in your kernel to use ip rules"
# else
# for x; do
# ebegin "${x}"
# ip rule add ${x}
# eend $?
# done
# fi
# eoutdent
# # Flush the cache
# ip route flush cache dev "${IFACE}"
# fi
#} #}
#postdown() { #postdown() {
@@ -1014,21 +1047,6 @@
# # Probably a good idea to set ifdown="no" in /etc/conf.d/net # # Probably a good idea to set ifdown="no" in /etc/conf.d/net
# # as well ;) # # as well ;)
# [ "${IFACE}" != "lo" ] && ethtool -s "${IFACE}" wol g # [ "${IFACE}" != "lo" ] && ethtool -s "${IFACE}" wol g
# Automatically erase any ip rules created in the example postup above
# if interface_exists "${IFACE}"; then
# # Remove any rules for this interface
# local rule
# ip rule list | grep " iif ${IFACE}[ ]*" | {
# while read rule; do
# rule="${rule#*:}"
# ip rule del ${rule}
# done
# }
# # Flush the route cache
# ip route flush cache dev "${IFACE}"
# fi
# # Return 0 always # # Return 0 always
# return 0 # return 0
#} #}

View File

@@ -7,3 +7,6 @@ MK= ../mk
include ${MK}/os.mk include ${MK}/os.mk
include Makefile.${OS} include Makefile.${OS}
include ${MK}/scripts.mk include ${MK}/scripts.mk
rc.conf: rc.conf.in rc.conf.${OS}
${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@

View File

@@ -1,6 +1,2 @@
SED_EXTRA= -e 's:@TERM@:wsvt25:g' SED_EXTRA= -e 's:@TERM@:wsvt25:g'
SRCS+= rc.in rc.shutdown.in SRCS+= rc.conf.in rc.in rc.shutdown.in
rc.conf:
cp rc.conf.in rc.conf
cat rc.conf.Linux >> rc.conf

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

@@ -0,0 +1,8 @@
# This is the subsystem type. Valid options on FreeBSD:
# "" - nothing special
# "jail" - FreeBSD jails
# "prefix" - Prefix
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and be removed not later than 2010/03/01.
rc_sys=""

View File

@@ -1,3 +1,15 @@
# This is the subsystem type. Valid options on Linux:
# "" - nothing special
# "lxc" - Linux Containers
# "openvz" - Linux OpenVZ
# "prefix" - Prefix
# "uml" - Usermode Linux
# "vserver" - Linux vserver
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and be removed not later than 2010/03/01.
rc_sys=""
############################################################################## ##############################################################################
# LINUX SPECIFIC OPTIONS # LINUX SPECIFIC OPTIONS

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

@@ -0,0 +1,9 @@
# This is the subsystem type. Valid options on NetBSD:
# "" - nothing special
# "prefix" - Prefix
# "xen0" - Xen0 Domain
# "xenU" - XenU Domain
# If unset, the old automagic detection code will be triggered. Said old code
# is deprecated and be removed not later than 2010/03/01.
rc_sys=""

View File

@@ -2,7 +2,7 @@
# Set to "YES" if you want the rc system to try and start services # 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 # in parallel for a slight speed improvement. When running in parallel we
# prefix the service output with it's name as the output will get # prefix the service output with its name as the output will get
# jumbled up. # jumbled up.
# WARNING: whilst we have improved parallel, it can still potentially lock # WARNING: whilst we have improved parallel, it can still potentially lock
# the boot process. Don't file bugs about this unless you can supply # the boot process. Don't file bugs about this unless you can supply
@@ -11,7 +11,8 @@
# Set rc_interactive to "YES" and you'll be able to press the I key during # 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 # boot so you can choose to start specific services. Set to "NO" to disable
# this feature. # this feature. This feature is automatically disabled if rc_parallel is
# set to YES.
#rc_interactive="YES" #rc_interactive="YES"
# If we need to drop to a shell, you can specify it here. # If we need to drop to a shell, you can specify it here.
@@ -75,8 +76,14 @@
# Set unicode to YES to turn on unicode support for keyboards and screens. # Set unicode to YES to turn on unicode support for keyboards and screens.
#unicode="NO" #unicode="NO"
# Network fstypes. Below is the default. # Below is the default list of network fstypes.
net_fs_list="afs cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs nfs nfs4 ocfs2 shfs smbfs" #
# afs 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 # SERVICE CONFIGURATION VARIABLES
@@ -108,3 +115,4 @@ net_fs_list="afs cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre ncpfs nfs
# You can also remove dependencies. # You can also remove dependencies.
# This is mainly used for saying which servies do NOT provide net. # This is mainly used for saying which servies do NOT provide net.
#rc_net_tap0_provide="!net" #rc_net_tap0_provide="!net"

View File

@@ -4,7 +4,6 @@
depend() depend()
{ {
use hostname
need localmount need localmount
before logger before logger
after clock sysctl after clock sysctl
@@ -26,7 +25,7 @@ cleanup_tmp_dir()
mkdir -p "$dir" || return $? mkdir -p "$dir" || return $?
fi fi
dir_writeable "$dir" || return 1 dir_writeable "$dir" || return 1
chmod a+rwt "$dir" chmod a+rwt "$dir" 2> /dev/null
cd "$dir" cd "$dir"
if yesno $wipe_tmp; then if yesno $wipe_tmp; then
ebegin "Wiping $dir directory" ebegin "Wiping $dir directory"
@@ -36,6 +35,12 @@ cleanup_tmp_dir()
# Faster than find # Faster than find
rm -rf -- [^ajlq\.]* rm -rf -- [^ajlq\.]*
# pam_mktemp creates a .private directory within which
# each user gets a private directory with immutable
# bit set; remove the immutable bit before trying to
# remove it.
[ -d /tmp/.private ] && chattr -R -a /tmp/.private 2> /dev/null
find $startopts ! -name . \ find $startopts ! -name . \
! -path "./lost+found" \ ! -path "./lost+found" \
! -path "./lost+found/*" \ ! -path "./lost+found/*" \
@@ -49,8 +54,6 @@ cleanup_tmp_dir()
! -path "./aquota.group/*" \ ! -path "./aquota.group/*" \
! -path "./journal" \ ! -path "./journal" \
! -path "./journal/*" \ ! -path "./journal/*" \
! -path "./.private" \
! -path "./.private/*" \
-exec rm -rf {} \; -exec rm -rf {} \;
eend 0 eend 0
else else
@@ -74,7 +77,7 @@ mkutmp()
start() start()
{ {
# Remove any added console dirs # Remove any added console dirs
rm -rf "$RC_LIBEXECDIR"/console rm -rf "$RC_LIBEXECDIR"/console/*
local logw=false runw=false extra= local logw=false runw=false extra=
# Ensure that our basic dirs exist # Ensure that our basic dirs exist

View File

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

View File

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

View File

@@ -18,11 +18,6 @@ start()
local_start local_start
fi fi
# Support old configs
if [ -e @SYSCONFDIR@/conf.d/local.start ]; then
. @SYSCONFDIR@/conf.d/local.start
fi
eend $? "Failed to start local" eend $? "Failed to start local"
} }
@@ -34,10 +29,5 @@ stop()
local_stop local_stop
fi fi
# Support old configs
if [ -e @SYSCONFDIR@/conf.d/local.stop ]; then
. @SYSCONFDIR@/conf.d/local.stop
fi
eend $? "Failed to stop local" eend $? "Failed to stop local"
} }

View File

@@ -8,19 +8,23 @@ depend()
{ {
need fsck need fsck
use lvm modules mtab use lvm modules mtab
after lvm modules
keyword -jail -openvz -prefix -vserver -lxc keyword -jail -openvz -prefix -vserver -lxc
} }
start() start()
{ {
# Mount local filesystems in /etc/fstab. # Mount local filesystems in /etc/fstab.
local types="noproc" x= local types="noproc" x= no_netdev=
for x in $net_fs_list; do for x in $net_fs_list; do
types="${types},${x}" types="${types},${x}"
done done
if [ "$RC_UNAME" = Linux ]; then
no_netdev="-O no_netdev"
fi
ebegin "Mounting local filesystems" ebegin "Mounting local filesystems"
mount -at "$types" mount -at "$types" $no_netdev
eend $? "Some local filesystem failed to mount" eend $? "Some local filesystem failed to mount"
# Always return 0 - some local mounts may not be critical for boot # Always return 0 - some local mounts may not be critical for boot

View File

@@ -402,7 +402,7 @@ _load_config()
set -- ${config} set -- ${config}
# Of course, we may have a single address added old style. # Of course, we may have a single address added old style.
case "$2" in case "$2" in
netmask|broadcast|brd|brd+) netmask|broadcast|brd|brd+|peer|pointopoint)
local IFS="$__IFS" local IFS="$__IFS"
set -- ${config} set -- ${config}
;; ;;

View File

@@ -43,7 +43,7 @@ start()
local myneed= myuse= pmap="portmap" nfsmounts= local myneed= myuse= pmap="portmap" nfsmounts=
[ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind" [ -x @SYSCONFDIR@/init.d/rpcbind ] && pmap="rpcbind"
local x= fs= local x= fs= rc=
for x in $net_fs_list; do for x in $net_fs_list; do
case "$x" in case "$x" in
nfs|nfs4) nfs|nfs4)
@@ -65,7 +65,12 @@ start()
ebegin "Mounting network filesystems" ebegin "Mounting network filesystems"
mount -at $fs mount -at $fs
ewend $? "Could not mount all network filesystems" rc=$?
if [ "$RC_UNAME" = Linux ]; then
mount -a -O _netdev
rc=$?
fi
ewend $rc "Could not mount all network filesystems"
return 0 return 0
} }
@@ -93,5 +98,9 @@ stop()
retval=$? retval=$?
eoutdent eoutdent
if [ "$RC_UNAME" = Linux ]; then
umount -a -O _netdev
retval=$?
fi
eend $retval "Failed to unmount network filesystems" eend $retval "Failed to unmount network filesystems"
} }

View File

@@ -57,6 +57,32 @@ sys_interfaces()
esac esac
} }
tentative()
{
local inet= address= rest=
case "$RC_UNAME" in
Linux)
[ -x /sbin/ip ] || [ -x /bin/ip ] || return 1
[ -n "$(ip -f inet6 addr show tentative)" ]
;;
*)
local inet= address= rest=
LC_ALL=C ifconfig -a | while read inet address rest; do
case "${inet}" in
inet6)
case "${rest}" in
*" "tentative*) return 2;;
esac
;;
esac
done
[ $? = 2 ]
;;
esac
}
auto_interfaces() auto_interfaces()
{ {
local ifs= c= f= local ifs= c= f=
@@ -135,7 +161,7 @@ runip()
routeflush() routeflush()
{ {
if [ "$RC_UNAME" = Linux ]; then if [ "$RC_UNAME" = Linux ]; then
if [ -x /sbin/ip ]; then if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
ip route flush scope global ip route flush scope global
ip route delete default 2>/dev/null ip route delete default 2>/dev/null
else else
@@ -197,8 +223,6 @@ start()
routeflush routeflush
if [ "$RC_UNAME" = "Linux" ]; then if [ "$RC_UNAME" = "Linux" ]; then
ifconfig lo 127.0.0.1 netmask 255.0.0.0 || cr=1 ifconfig lo 127.0.0.1 netmask 255.0.0.0 || cr=1
route add -net 127.0.0.0 netmask 255.0.0.0 \
gw 127.0.0.1 2>/dev/null
route add -net 127.0.0.0 netmask 255.0.0.0 \ route add -net 127.0.0.0 netmask 255.0.0.0 \
gw 127.0.0.1 reject 2>/dev/null gw 127.0.0.1 reject 2>/dev/null
else else
@@ -251,6 +275,19 @@ start()
eoutdent eoutdent
eend $cr eend $cr
# Wait for any inet6 tentative addresses
r=5
while [ $r -gt 0 ]; do
tentative || break
[ $r = 5 ] && vebegin "Waiting for tentative addresses"
sleep 1
r=$(($r - 1))
done
if [ $r != 5 ]; then
[ $r != 0 ]
veend $?
fi
if [ -n "$defaultroute" ]; then if [ -n "$defaultroute" ]; then
ebegin "Setting default route $defaultroute" ebegin "Setting default route $defaultroute"
route add default $defaultroute route add default $defaultroute
@@ -301,7 +338,7 @@ stop()
then then
veinfo "$int" veinfo "$int"
runargs /etc/ifdown."$int" "$downcmd" runargs /etc/ifdown."$int" "$downcmd"
if [ -x /sbin/ip ]; then if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
# We need to do this, otherwise we may # We need to do this, otherwise we may
# fail to add things correctly on restart # fail to add things correctly on restart
ip address flush dev "$int" 2>/dev/null ip address flush dev "$int" 2>/dev/null

View File

@@ -13,7 +13,7 @@ depend()
start() start()
{ {
# Make sure we insert usbcore if its a module # Make sure we insert usbcore if it's a module
if [ -f /proc/modules -a ! -d /proc/bus/usb ]; then if [ -f /proc/modules -a ! -d /proc/bus/usb ]; then
modprobe -q usbcore modprobe -q usbcore
fi fi

View File

@@ -4,7 +4,6 @@
depend() depend()
{ {
use hostname
before bootmisc logger before bootmisc logger
keyword -prefix keyword -prefix
} }

View File

@@ -4,9 +4,8 @@
depend() depend()
{ {
use hostname
before bootmisc logger before bootmisc logger
keyword -openvz -prefix -vserver keyword -prefix -vserver
} }
start() start()

View File

@@ -39,7 +39,7 @@
.Nm eprefix .Nm eprefix
.Nd colorful informational output .Nd colorful informational output
.Sh LIBRARY .Sh LIBRARY
Enhanced Informatation output library (libeinfo, -leinfo) Enhanced Information output library (libeinfo, -leinfo)
.Sh SYNOPSIS .Sh SYNOPSIS
.In einfo.h .In einfo.h
.Ft int Fn einfo "const char * restrict format" ... .Ft int Fn einfo "const char * restrict format" ...

View File

@@ -36,7 +36,7 @@
.Nm .Nm
gathers and displays information about the status of services gathers and displays information about the status of services
in different runlevels. The default behavior is to show information in different runlevels. The default behavior is to show information
about the current runlevel and any unassgined services that are not stopped, about the current runlevel and any unassigned services that are not stopped,
but any runlevel can be quickly examined. but any runlevel can be quickly examined.
.Pp .Pp
The options are as follows: The options are as follows:
@@ -62,6 +62,10 @@ Show information only for the named
.Sh EXIT STATUS .Sh EXIT STATUS
.Nm .Nm
exits 0, except when checking for crashed services and it doesn't find any. exits 0, except when checking for crashed services and it doesn't find any.
.Sh IMPLEMENTATION NOTES
.Nm
tries to list services within each runlevel in the presently resolved
dependency order if the dependency tree is available.
.Sh SEE ALSO .Sh SEE ALSO
.Xr rc 8 , .Xr rc 8 ,
.Xr rc-update 8 .Xr rc-update 8

View File

@@ -54,7 +54,7 @@ owned by
.Fa uid , .Fa uid ,
all of which are optional. all of which are optional.
.Pp .Pp
The retuned list should be freed when done. The returned list should be freed when done.
.Sh IMPLEMENTATION NOTES .Sh IMPLEMENTATION NOTES
On BSD systems we use On BSD systems we use
.Lb libkvm .Lb libkvm

View File

@@ -42,7 +42,7 @@ is set to the hook running, and
.Fa name .Fa name
is set to the name of the runlevel or name of the service. is set to the name of the runlevel or name of the service.
.Pp .Pp
Plugins can affect the parent environemnt by writing NULL separated strings to Plugins can affect the parent environment by writing NULL separated strings to
.Va rc_environ_fd . .Va rc_environ_fd .
.Sh SEE ALSO .Sh SEE ALSO
.Xr rc 8 , .Xr rc 8 ,

View File

@@ -39,8 +39,8 @@
.Nm .Nm
is basically an interpreter for shell scripts which provide an easy interface is basically an interpreter for shell scripts which provide an easy interface
to the often complex system commands and daemons. to the often complex system commands and daemons.
When a service runs a command it first loads it's mulitplexed configuration When a service runs a command it first loads its multiplexed configuration
file, then it's master configuration file, then file, then its master configuration file, then
.Pa /etc/rc.conf .Pa /etc/rc.conf
and finally the script itself. At this point and finally the script itself. At this point
.Nm .Nm
@@ -79,7 +79,7 @@ Ignore all dependency information the service supplies.
Only run the command if the service has been started. Only run the command if the service has been started.
.It Fl q , -quiet .It Fl q , -quiet
Turns off all informational output the service generates. Turns off all informational output the service generates.
Output from any non OpenRC comands is not affected. Output from any non OpenRC commands is not affected.
.It Fl v , -verbose .It Fl v , -verbose
Turns on any extra informational output the service generates. Turns on any extra informational output the service generates.
.It Fl Z , -dry-run .It Fl Z , -dry-run
@@ -90,9 +90,9 @@ or stopping them.
The following variables affect the service script: The following variables affect the service script:
.Bl -tag -width "RC_DEFAULTLEVEL" .Bl -tag -width "RC_DEFAULTLEVEL"
.It Ar extra_commands .It Ar extra_commands
Space seperated list of extra commands the service defines. Space separated list of extra commands the service defines.
.It Ar extra_started_commands .It Ar extra_started_commands
Space seperated list of extra commands the service defines. These only work if Space separated list of extra commands the service defines. These only work if
the service has already been started. the service has already been started.
.It Ar description .It Ar description
String describing the service. String describing the service.
@@ -128,7 +128,7 @@ will refuse to stop until any services that need it have stopped.
The service will attempt to start any services we use that have been added The service will attempt to start any services we use that have been added
to the runlevel. to the runlevel.
.It Ic after .It Ic after
The service will start after thse services and stop before these services. The service will start after these services and stop before these services.
.It Ic before .It Ic before
The service will start before these services and stop after these services. The service will start before these services and stop after these services.
.It Ic provide .It Ic provide
@@ -138,13 +138,6 @@ We should recalculate our dependencies if the listed files have changed.
.It Ic keyword .It Ic keyword
Tags a service with a keyword. Here's the keywords we currently understand:- Tags a service with a keyword. Here's the keywords we currently understand:-
.Bl -tag -width indent .Bl -tag -width indent
.It Dv -jail
When in a jail, exclude this service from any dependencies. The service can
still be run directly.
.It Dv -openvz
Same as -jail, but for OpenVZ systems.
.It Dv -lxc
Same as -jail, but for Linux Resource Containers (LXC).
.It Dv -shutdown .It Dv -shutdown
Don't stop this service when shutting the system down. Don't stop this service when shutting the system down.
This normally quite safe as remaining daemons will be sent a SIGTERM just This normally quite safe as remaining daemons will be sent a SIGTERM just
@@ -156,6 +149,18 @@ Don't stop this service when changing runlevels, even if not present.
This includes shutting the system down. This includes shutting the system down.
.It Dv -timeout .It Dv -timeout
Do not time out waiting for that service. Do not time out waiting for that service.
.It Dv -jail
When in a jail, exclude this service from any dependencies. The service can
still be run directly. Set via
.Ic rc_sys
in
.Pa /etc/rc.conf
.It Dv -lxc
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 .It Dv -uml
Same as -jail, but for UML systems. Same as -jail, but for UML systems.
.It Dv -vserver .It Dv -vserver
@@ -225,7 +230,7 @@ is newer than
return 0, otherwise 1. return 0, otherwise 1.
If If
.Ar file2 .Ar file2
is a directory, then check all it's contents too. is a directory, then check all its contents too.
.It Ic is_older_than Ar file1 Ar file2 ... .It Ic is_older_than Ar file1 Ar file2 ...
If If
.Ar file1 .Ar file1
@@ -234,7 +239,7 @@ is newer than
return 0, otherwise 1. return 0, otherwise 1.
If If
.Ar file2 .Ar file2
is a directory, then check all it's contents too. is a directory, then check all its contents too.
.It Ic service_set_value Ar name Ar value .It Ic service_set_value Ar name Ar value
Saves the Saves the
.Ar name .Ar name
@@ -320,7 +325,7 @@ Configuration files, relative to the location of the service.
If a file ending with .${RC_RUNLEVEL} exists then we use that instead. If a file ending with .${RC_RUNLEVEL} exists then we use that instead.
.Bl -ohang .Bl -ohang
.It Pa ../conf.d/${RC_SVCNAME%%.*} .It Pa ../conf.d/${RC_SVCNAME%%.*}
mulitplexed configuration file. multiplexed configuration file.
Example: if ${RC_SVCNAME} is net.eth1 then look for Example: if ${RC_SVCNAME} is net.eth1 then look for
.Pa ../conf.d/net . .Pa ../conf.d/net .
.It Pa ../conf.d/${RC_SVCNAME} .It Pa ../conf.d/${RC_SVCNAME}

View File

@@ -43,7 +43,7 @@
.Ar daemon .Ar daemon
.Sh DESCRIPTION .Sh DESCRIPTION
.Nm .Nm
provides a consistent method of starting, stopping and signalling daemons. provides a consistent method of starting, stopping and signaling daemons.
If neither If neither
.Fl K , -stop .Fl K , -stop
nor nor
@@ -85,7 +85,7 @@ then
.Nm .Nm
matches the process matches the process
.D1 /usr/bin/perl -w foo .D1 /usr/bin/perl -w foo
If an interpreted daemon changes it's process name then this won't work. If an interpreted daemon changes its process name then this won't work.
.It Fl u , -user Ar user Ns Op : Ns Ar group .It Fl u , -user Ar user Ns Op : Ns Ar group
Start the daemon as the Start the daemon as the
.Ar user .Ar user

View File

@@ -15,7 +15,14 @@ _is_bond()
bonding_pre_start() bonding_pre_start()
{ {
local x= s= slaves="$(_get_array "slaves_${IFVAR}")" local x= s= n= slaves= primary=
slaves="$(_get_array "slaves_${IFVAR}")"
unset slaves_${IFVAR}
eval primary="\$primary_${IFVAR}"
unset primary_${IFVAR}
[ -z "${slaves}" ] && return 0 [ -z "${slaves}" ] && return 0
@@ -39,13 +46,31 @@ bonding_pre_start()
return 1 return 1
fi fi
# Configure the bond. # Interface must be down in order to configure
# Nice and dynamic :) _down
# 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
[ -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
# Nice and dynamic for remaining options:)
for x in /sys/class/net/"${IFACE}"/bonding/*; do for x in /sys/class/net/"${IFACE}"/bonding/*; do
[ -f "${x}" ] || continue [ -f "${x}" ] || continue
eval s=\$${x##*/}_${IFVAR} n=${x##*/}
eval s=\$${n}_${IFVAR}
[ "${n}" != "mode" ] || continue
if [ -n "${s}" ]; then if [ -n "${s}" ]; then
echo "${s}" >"${x}" einfo "Setting ${n}: ${s}"
echo "${s}" >"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi fi
done done
@@ -72,6 +97,11 @@ bonding_pre_start()
# finally add in slaves # finally add in slaves
eoutdent eoutdent
if [ -d /sys/class/net ]; then if [ -d /sys/class/net ]; then
if [ -n "${primary}" ]; then
echo "+${primary}" >/sys/class/net/"${IFACE}"/bonding/slaves
echo "${primary}" >/sys/class/net/"${IFACE}"/bonding/primary
slaves="${slaves/${primary}/}"
fi
for s in ${slaves}; do for s in ${slaves}; do
echo "+${s}" >/sys/class/net/"${IFACE}"/bonding/slaves echo "+${s}" >/sys/class/net/"${IFACE}"/bonding/slaves
done done
@@ -117,6 +147,12 @@ bonding_stop()
done done
) )
_down
if [ -d /sys/class/net ]; then
echo "-${IFACE}" > /sys/class/net/bonding_masters
fi
eend 0 eend 0
return 0 return 0
} }

View File

@@ -11,33 +11,64 @@ _config_vars="$_config_vars bridge bridge_add brctl"
_is_bridge() _is_bridge()
{ {
brctl show 2>/dev/null | grep -q "^${IFACE}[[:space:]]" [ -d /sys/class/net/"${1:-${IFACE}}"/bridge ]
return $?
}
_is_bridge_port()
{
[ -d /sys/class/net/"${1:-${IFACE}}"/brport ]
return $?
}
_bridge_ports()
{
for x in /sys/class/net/"${1:-${IFACE}}"/brif/*; do
n=${x##*/}
echo $n
done
} }
bridge_pre_start() bridge_pre_start()
{ {
local brif= iface="${IFACE}" e= x= local brif= oiface="${IFACE}" e= x=
# ports is for static add
local ports="$(_get_array "bridge_${IFVAR}")" local ports="$(_get_array "bridge_${IFVAR}")"
# old config options
local opts="$(_get_array "brctl_${IFVAR}")" local opts="$(_get_array "brctl_${IFVAR}")"
# brif is used for dynamic add
eval brif=\$bridge_add_${IFVAR} eval brif=\$bridge_add_${IFVAR}
eval x=\${bridge_${IFVAR}-y\}
if [ -z "${brif}" -a -z "${opts}" ]; then # we need a way to if the bridge exists in a variable name, not just the
[ -n "${ports}" -o "${x}" != "y" ] || return 0 # contents of a variable. Eg if somebody has only bridge_add_eth0='br0',
# with no other lines mentioning br0.
eval bridge_unset=\${bridge_${IFVAR}-y\}
eval brctl_unset=\${brctl_${IFVAR}-y\}
if [ -z "${brif}" -a "${brctl_unset}" == 'y' ]; then
if [ -z "${ports}" -a "${bridge_unset}" == "y" ]; then
#eerror "Misconfigured static bridge detected (see net.example)"
return 0
fi
fi fi
[ -n "${ports}" ] && bridge_post_stop # If the bridge was already up, we should clear it
[ "${bridge_unset}" != "y" ] && bridge_post_stop
( (
# Normalize order of variables
if [ -z "${ports}" -a -n "${brif}" ]; then if [ -z "${ports}" -a -n "${brif}" ]; then
# Dynamic mode detected
ports="${IFACE}" ports="${IFACE}"
IFACE="${brif}" IFACE="${brif}"
IFVAR=$(shell_var "${IFACE}")
else else
# Static mode detected
ports="${ports}" ports="${ports}"
metric=1000 metric=1000
fi fi
if ! _is_bridge; then if ! _is_bridge ; then
ebegin "Creating bridge ${IFACE}" ebegin "Creating bridge ${IFACE}"
if ! brctl addbr "${IFACE}"; then if ! brctl addbr "${IFACE}"; then
eend 1 eend 1
@@ -45,6 +76,12 @@ bridge_pre_start()
fi fi
fi fi
# TODO: does this reset the bridge every time we add a interface to the
# bridge? We should probably NOT do that.
# Old configuration set mechanism
# Only a very limited subset of the options are available in the old
# configuration method. The sysfs interface is in the next block instead.
local IFS="$__IFS" local IFS="$__IFS"
for x in ${opts}; do for x in ${opts}; do
unset IFS unset IFS
@@ -56,21 +93,50 @@ bridge_pre_start()
done done
unset IFS unset IFS
# New configuration set mechanism, matches bonding
for x in /sys/class/net/"${IFACE}"/bridge/*; 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
if [ -n "${ports}" ]; then if [ -n "${ports}" ]; then
einfo "Adding ports to ${IFACE}" einfo "Adding ports to ${IFACE}"
eindent eindent
local OIFACE="${IFACE}" local BR_IFACE="${IFACE}"
for x in ${ports}; do for x in ${ports}; do
ebegin "${x}" ebegin "${x}"
local IFACE="${x}" local IFACE="${x}"
local IFVAR=$(shell_var "${IFACE}")
if ! _exists "${IFACE}" ; then
eerror "Cannot add non-existent interface ${IFACE} to ${BR_IFACE}"
return 1
fi
# The interface is known to exist now
_set_flag promisc _set_flag promisc
_up _up
if ! brctl addif "${OIFACE}" "${x}"; then if ! brctl addif "${BR_IFACE}" "${x}"; then
_set_flag -promisc _set_flag -promisc
eend 1 eend 1
return 1 return 1
fi fi
# Per-interface bridge settings
for x in /sys/class/net/"${IFACE}"/brport/*; do
[ -f "${x}" ] || continue
n=${x##*/}
eval s=\$${n}_${IFVAR}
if [ -n "${s}" ]; then
einfo "Setting ${n}@${IFACE}: ${s}"
echo "${s}" >"${x}" || \
eerror "Failed to configure $n (${n}_${IFVAR})"
fi
done
eend 0 eend 0
done done
eoutdent eoutdent
@@ -85,25 +151,24 @@ bridge_post_stop()
{ {
local port= ports= delete=false extra= local port= ports= delete=false extra=
if _is_bridge; then if _is_bridge "${IFACE}"; then
ebegin "Destroying bridge ${IFACE}" ebegin "Destroying bridge ${IFACE}"
_down _down
ports="$(brctl show 2>/dev/null | \ for x in /sys/class/net/"${IFACE}"/brif/*; do
sed -n -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')" [ -s $x ] || continue
n=${x##*/}
ports="${ports} ${n}"
done
delete=true delete=true
iface=${IFACE} iface=${IFACE}
eindent eindent
else else
# Work out if we're added to a bridge for removal or not # We are taking down an interface that is part of a bridge maybe
eval set -- $(brctl show 2>/dev/null | sed -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g") ports="${IFACE}"
local line= local brport_dir="/sys/class/net/${IFACE}/brport"
for line; do [ -d ${brport_dir} ] || return 0
set -- ${line} iface=$(readlink ${brport_dir}/bridge)
if [ "$3" = "${IFACE}" ]; then iface=${iface##*/}
iface=$1
break
fi
done
[ -z "${iface}" ] && return 0 [ -z "${iface}" ] && return 0
extra=" from ${iface}" extra=" from ${iface}"
fi fi

View File

@@ -17,6 +17,7 @@ dhclient_start()
# Get our options # Get our options
# These options only work in Gentoo, and maybe RedHat # These options only work in Gentoo, and maybe RedHat
eval args=\$dhclient_${IFVAR}
eval opts=\$dhcp_${IFVAR} eval opts=\$dhcp_${IFVAR}
[ -z "${opts}" ] && opts=${dhcp} [ -z "${opts}" ] && opts=${dhcp}

View File

@@ -172,7 +172,7 @@ _add_address()
cmd="${cmd} broadcast" cmd="${cmd} broadcast"
fi fi
;; ;;
peer) cmd="${cmd} pointtopoint";; peer) cmd="${cmd} pointopoint";;
*) cmd="${cmd} $1";; *) cmd="${cmd} $1";;
esac esac
shift shift

View File

@@ -1,9 +1,18 @@
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name> # Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
# All rights reserved. Released under the 2-clause BSD license. # All rights reserved. Released under the 2-clause BSD license.
_ip()
{
if [ -x /bin/ip ]; then
echo /bin/ip
else
echo /sbin/ip
fi
}
iproute2_depend() iproute2_depend()
{ {
program /sbin/ip program $(_ip)
provide interface provide interface
after ifconfig after ifconfig
} }
@@ -109,7 +118,12 @@ _add_address()
set -- "${one}/$(_netmask2cidr "${three}")" "$@" set -- "${one}/$(_netmask2cidr "${three}")" "$@"
fi fi
#config=( "${config[@]//pointopoint/peer}" ) # tunnel keyword is 'peer' in iproute2, but 'pointopoint' in ifconfig.
if [ "$2" = "pointopoint" ]; then
local one="$1"
shift; shift
set -- "${one}" "peer" "$@"
fi
# Always scope lo addresses as host unless specified otherwise # Always scope lo addresses as host unless specified otherwise
if [ "${IFACE}" = "lo" ]; then if [ "${IFACE}" = "lo" ]; then
@@ -127,6 +141,7 @@ _add_address()
;; ;;
esac esac
veinfo ip addr add "$@" dev "${IFACE}"
ip addr add "$@" dev "${IFACE}" ip addr add "$@" dev "${IFACE}"
} }
@@ -160,11 +175,13 @@ _add_route()
# We cannot use a metric if we're using a nexthop # We cannot use a metric if we're using a nexthop
if ! ${have_metric} && \ if ! ${have_metric} && \
[ -n "${metric}" -a -z "${cmd##* nexthop }" ] [ -n "${metric}" -a \
"${cmd##* nexthop }" = "$cmd" ]
then then
cmd="${cmd} metric ${metric}" cmd="${cmd} metric ${metric}"
fi fi
veinfo ip ${family} route append ${cmd} dev "${IFACE}"
ip ${family} route append ${cmd} dev "${IFACE}" ip ${family} route append ${cmd} dev "${IFACE}"
eend $? eend $?
} }
@@ -189,6 +206,32 @@ _tunnel()
ip tunnel "$@" ip tunnel "$@"
} }
# This is just to trim whitespace, do not add any quoting!
_trim() {
echo $*
}
# This is our interface to Routing Policy Database RPDB
# This allows for advanced routing tricks
_ip_rule_runner() {
local cmd rules OIFS="${IFS}"
cmd="$1"
rules="$2"
veindent
local IFS="$__IFS"
for ru in $rules ; do
unset IFS
ruN="$(trim "${ru}")"
[ -z "${ruN}" ] && continue
vebegin "${cmd} ${ruN}"
ip rule ${cmd} ${ru}
veend $?
local IFS="$__IFS"
done
IFS="${OIFS}"
veoutdent
}
iproute2_pre_start() iproute2_pre_start()
{ {
local tunnel= local tunnel=
@@ -230,6 +273,16 @@ iproute2_post_start()
# Kernel may not have IP built in # Kernel may not have IP built in
if [ -e /proc/net/route ]; then if [ -e /proc/net/route ]; then
local rules="$(_get_array "rules_${IFVAR}")"
if [ -n "${rules}" ]; then
if ! ip rule list | grep -q "^"; then
eerror "IP Policy Routing (CONFIG_IP_MULTIPLE_TABLES) needed for ip rule"
else
service_set_value "ip_rule" "${rules}"
einfo "Adding RPDB rules"
_ip_rule_runner add "${rules}"
fi
fi
ip route flush table cache dev "${IFACE}" ip route flush table cache dev "${IFACE}"
fi fi
@@ -249,6 +302,16 @@ iproute2_post_start()
iproute2_post_stop() iproute2_post_stop()
{ {
# Kernel may not have IP built in
if [ -e /proc/net/route ]; then
local rules="$(service_get_value "ip_rule")"
if [ -n "${rules}" ]; then
einfo "Removing RPDB rules"
_ip_rule_runner del "${rules}"
fi
ip route flush table cache dev "${IFACE}"
fi
# Don't delete sit0 as it's a special tunnel # Don't delete sit0 as it's a special tunnel
if [ "${IFACE}" != "sit0" ]; then if [ "${IFACE}" != "sit0" ]; then
if [ -n "$(ip tunnel show "${IFACE}" 2>/dev/null)" ]; then if [ -n "$(ip tunnel show "${IFACE}" 2>/dev/null)" ]; then

View File

@@ -26,7 +26,7 @@ tuntap_pre_start()
return 1 return 1
fi fi
vebegin "Waiting for /dev/net/tun" vebegin "Waiting for /dev/net/tun"
# /dev/net/tun can take it's time to appear # /dev/net/tun can take its time to appear
local timeout=10 local timeout=10
while [ ! -e /dev/net/tun -a ${timeout} -gt 0 ]; do while [ ! -e /dev/net/tun -a ${timeout} -gt 0 ]; do
sleep 1 sleep 1

View File

@@ -20,7 +20,7 @@ _is_vlan()
_get_vlans() _get_vlans()
{ {
[ -e /proc/net/vlan/config ] || return 1 [ -e /proc/net/vlan/config ] || return 1
sed -n -e 's/^\(.*[0-9]\) \(.* \) .*'"${IFACE}"'$/\1/p' /proc/net/vlan/config sed -n -e 's/^\W*\([^ ]*\) \(.* \) .*'"${IFACE}"'$/\1/p' /proc/net/vlan/config
} }
_check_vlan() _check_vlan()
@@ -87,7 +87,7 @@ vlan_post_start()
# We need to work out the interface name of our new vlan id # We need to work out the interface name of our new vlan id
local ifname="$(sed -n -e \ local ifname="$(sed -n -e \
's/^\([^[:space:]]*\) *| '"${vlan}"' *| .*'"${iface}"'$/\1/p' \ 's/^\([^[:space:]]*\) *| '"${vlan}"' *| .*'"${IFACE}"'$/\1/p' \
/proc/net/vlan/config )" /proc/net/vlan/config )"
mark_service_started "net.${ifname}" mark_service_started "net.${ifname}"
( (

View File

@@ -3,10 +3,14 @@
wpa_supplicant_depend() wpa_supplicant_depend()
{ {
if [ -x /usr/sbin/wpa_supplicant ]; then wpas=/usr/sbin/wpa_supplicant
program start /usr/sbin/wpa_supplicant [ -x ${wpas} ] || wpas=/sbin/wpa_supplicant
else if [ -x ${wpas} ]; then
program start /sbin/wpa_supplicant program start ${wpas}
# bug 345281: if wpa_supplicant is built w/ USE=dbus, we need to start
# dbus before we can start wpa_supplicant.
${wpas} -h |grep DBus -sq
[ $? -eq 0 ] && need dbus
fi fi
after macnet plug after macnet plug
before interface before interface

View File

@@ -2,7 +2,8 @@ DIR= ${LIBDIR}/pkgconfig
SRCS= einfo.pc.in openrc.pc.in SRCS= einfo.pc.in openrc.pc.in
INC= einfo.pc openrc.pc INC= einfo.pc openrc.pc
sed -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h .DEFAULT:
${SED} -n -e 's/^VERSION=[[:space:]]*\([^[:space:]]*\).*/#define VERSION "\1${GITVER}\"/p' ../../Makefile > version.h
SED_EXTRA= -e 's:@VERSION@:${VERSION}:g' SED_EXTRA= -e 's:@VERSION@:${VERSION}:g'

View File

@@ -6,26 +6,30 @@
if [ -f /proc/acpi/ac_adapter/AC*/state ]; then if [ -f /proc/acpi/ac_adapter/AC*/state ]; then
cat /proc/acpi/ac_adapter/AC*/state | while read line; do cat /proc/acpi/ac_adapter/AC*/state | while read line; do
case "$line" in case "$line" in
"state:"*"off-line") return 128;; "state:"*"off-line") exit 128;;
esac esac
done done
elif [ -f /sys/class/power_supply/AC*/online ]; then
cat /sys/class/power_supply/AC*/online | while read line; do
[ "${line}" = 0 ] && exit 128
done
elif [ -f /proc/pmu/info ]; then elif [ -f /proc/pmu/info ]; then
cat /proc/pmu/info | while read line; do cat /proc/pmu/info | while read line; do
case "$line" in case "$line" in
"AC Power"*": 0") return 128;; "AC Power"*": 0") exit 128;;
esac esac
done done
elif type envstat >/dev/null 2>&1; then elif type envstat >/dev/null 2>&1; then
# NetBSD has envstat # NetBSD has envstat
envstat -d acpiacad0 2>/dev/null | while read line; do envstat -d acpiacad0 2>/dev/null | while read line; do
case "$line" in case "$line" in
"connected:"*"OFF") return 128;; "connected:"*"OFF") exit 128;;
esac esac
done done
elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then
case $(sysctl -n hw.acpi.acline) in case $(sysctl -n hw.acpi.acline) in
0) return 1;; 0) exit 1;;
*) return 0;; *) exit 0;;
esac esac
else else
exit 255 exit 255

View File

@@ -5,6 +5,7 @@
# All rights reserved. Released under the 2-clause BSD license. # All rights reserved. Released under the 2-clause BSD license.
. @SYSCONFDIR@/init.d/functions.sh . @SYSCONFDIR@/init.d/functions.sh
. @LIBEXECDIR@/sh/rc-functions.sh
config() { config() {
[ -n "$*" ] && echo "$RC_SVCNAME config $*" >&3 [ -n "$*" ] && echo "$RC_SVCNAME config $*" >&3
@@ -82,24 +83,7 @@ do
if . "$_dir/$RC_SVCNAME"; then if . "$_dir/$RC_SVCNAME"; then
echo "$RC_SVCNAME" >&3 echo "$RC_SVCNAME" >&3
depend _depend
_rc_svcname=$(shell_var "$RC_SVCNAME")
# Add any user defined depends
for _deptype in config:CONFIG need:NEED use:USE \
after:AFTER before:BEFORE \
provide:PROVIDE keyword:KEYWORD; do
IFS=:
set -- $_deptype
unset IFS
eval _depends=\$rc_$_rc_svcname_$1
[ -z "$_depends" ] && eval _depends=\$rc_$1
[ -z "$_depends" ] && \
eval _depends=\$RC_$_rc_svcname_$2
[ -z "$_depends" ] && eval _depends=\$RC_$2
$1 ${_depends}
done
fi fi
) )
done done

View File

@@ -17,7 +17,7 @@ fi
if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \ if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \
-o -e /etc/runlevels/"$RC_BOOTLEVEL"/consolefont ]; then -o -e /etc/runlevels/"$RC_BOOTLEVEL"/consolefont ]; then
printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null
if [ -r "$RC_LIBEXECDIR"/console/font -a -x /bin/setfont ]; then if [ -r "$RC_LIBEXECDIR"/console/font -a -x /usr/bin/setfont ]; then
font="$(cat "$RC_LIBEXECDIR"/console/font)" font="$(cat "$RC_LIBEXECDIR"/console/font)"
[ -c "$CONSOLE" ] && cons="-C $CONSOLE" [ -c "$CONSOLE" ] && cons="-C $CONSOLE"
setfont $cons "$RC_LIBEXECDIR"/console/"$font" 2>/dev/null setfont $cons "$RC_LIBEXECDIR"/console/"$font" 2>/dev/null
@@ -29,7 +29,7 @@ if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/keymaps \
-o -e /etc/runlevels/"$RC_BOOTLEVEL"/keymaps ]; then -o -e /etc/runlevels/"$RC_BOOTLEVEL"/keymaps ]; then
kbd_mode $kmode -C "$CONSOLE" 2>/dev/null kbd_mode $kmode -C "$CONSOLE" 2>/dev/null
if [ -r "$RC_LIBEXECDIR"/console/keymap ]; then if [ -r "$RC_LIBEXECDIR"/console/keymap ]; then
loadkeys "$RC_LIBEXECDIR"/console/keymap 2>/dev/null loadkeys -q "$RC_LIBEXECDIR"/console/keymap 2>/dev/null
fi fi
fi fi

View File

@@ -6,6 +6,17 @@
# This basically mounts $RC_SVCDIR as a ramdisk. # This basically mounts $RC_SVCDIR as a ramdisk.
# The tricky part is finding something our kernel supports # The tricky part is finding something our kernel supports
# tmpfs and ramfs are easy, so force one or the other. # tmpfs and ramfs are easy, so force one or the other.
svcdir_restorecon()
{
local rc=0
if [ -x /usr/sbin/selinuxenabled -a -c /selinux/null ] &&
selinuxenabled; then
restorecon $RC_SVCDIR
rc=$?
fi
return $rc
}
mount_svcdir() mount_svcdir()
{ {
# mount from fstab if we can # mount from fstab if we can
@@ -16,8 +27,12 @@ mount_svcdir()
# Some buggy kernels report tmpfs even when not present :( # Some buggy kernels report tmpfs even when not present :(
if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
mount -n -t tmpfs $fsopts,mode=755,size=${svcsize}k \ local tmpfsopts="${fsopts},mode=755,size=${svcsize}k"
rc-svcdir "$RC_SVCDIR" && return 0 mount -n -t tmpfs $tmpfsopts rc-svcdir "$RC_SVCDIR"
if [ $? -eq 0 ]; then
svcdir_restorecon
[ $? -eq 0 ] && return 0
fi
fi fi
if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
@@ -38,6 +53,10 @@ mount_svcdir()
fi fi
mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR" mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR"
if [ $? -eq 0 ]; then
svcdir_restorecon
[ $? -eq 0 ] && return 0
fi
} }
. "$RC_LIBEXECDIR"/sh/functions.sh . "$RC_LIBEXECDIR"/sh/functions.sh
@@ -70,4 +89,14 @@ if $mountproc; then
eend $? eend $?
fi fi
# Try to mount xenfs as early as possible, otherwise rc_sys() will always
# return RC_SYS_XENU and will think that we are in a domU while it's not.
if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
ebegin "Mounting xenfs"
if ! fstabinfo --mount /proc/xen; then
mount -n -t xenfs xenfs /proc/xen -o nosuid,nodev,noexec
fi
eend $?
fi
. "$RC_LIBEXECDIR"/sh/init-common-post.sh . "$RC_LIBEXECDIR"/sh/init-common-post.sh

View File

@@ -38,7 +38,8 @@ stop_addon()
( import_addon "$1-stop" ) ( import_addon "$1-stop" )
} }
net_fs_list="afs cifs coda davfs fuse gfs ncpfs nfs nfs4 ocfs2 shfs smbfs" net_fs_list="afs cifs coda davfs fuse fuse.sshfs gfs glusterfs lustre
ncpfs nfs nfs4 ocfs2 shfs smbfs $extra_net_fs_list"
is_net_fs() is_net_fs()
{ {
[ -z "$1" ] && return 1 [ -z "$1" ] && return 1
@@ -84,6 +85,27 @@ get_bootparam()
return 1 return 1
} }
# Called from runscript.sh or gendepends.sh
_depend() {
depend
local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=
# Add any user defined depends
for _deptype in config:CONFIG need:NEED use:USE \
after:AFTER before:BEFORE \
provide:PROVIDE keyword:KEYWORD; do
IFS=:
set -- $_deptype
unset IFS
eval _depends=\$rc_${_rc_svcname}_$1
[ -z "$_depends" ] && eval _depends=\$rc_$1
[ -z "$_depends" ] && eval _depends=\$RC_${_rc_svcname}_$2
[ -z "$_depends" ] && eval _depends=\$RC_$2
$1 $_depends
done
}
# Add our sbin to $PATH # Add our sbin to $PATH
case "$PATH" in case "$PATH" in
"$RC_LIBEXECDIR"/sbin|"$RC_LIBEXECDIR"/sbin:*);; "$RC_LIBEXECDIR"/sbin|"$RC_LIBEXECDIR"/sbin:*);;

View File

@@ -26,6 +26,8 @@ do_unmount()
# Unmounting a shared mount can unmount other mounts, so # Unmounting a shared mount can unmount other mounts, so
# we need to check the mount is still valid # we need to check the mount is still valid
mountinfo --quiet "$mnt" || continue mountinfo --quiet "$mnt" || continue
# Ensure we interpret all characters properly.
mnt=$(printf "$mnt")
case "$cmd" in case "$cmd" in
umount) umount)
@@ -36,7 +38,7 @@ do_unmount()
;; ;;
esac esac
retry=3 retry=4 # Effectively TERM, sleep 1, TERM, sleep 1, KILL, sleep 1
while ! LC_ALL=C $cmd "$mnt" 2>/dev/null; do while ! LC_ALL=C $cmd "$mnt" 2>/dev/null; do
if type fuser >/dev/null 2>&1; then if type fuser >/dev/null 2>&1; then
pids="$(fuser $f_opts "$mnt" 2>/dev/null)" pids="$(fuser $f_opts "$mnt" 2>/dev/null)"
@@ -53,13 +55,16 @@ do_unmount()
eend 1 "in use but fuser finds nothing" eend 1 "in use but fuser finds nothing"
retry=0;; retry=0;;
*) *)
local sig="KILL" if [ $retry -le 0 ]; then
[ $retry -gt 0 ] && sig="TERM" eend 1
else
local sig="TERM"
retry=$(($retry - 1))
[ $retry = 1 ] && sig="KILL"
fuser $f_kill$sig -k $f_opts \ fuser $f_kill$sig -k $f_opts \
"$mnt" >/dev/null 2>&1 "$mnt" >/dev/null 2>&1
sleep 1 sleep 1
retry=$(($retry - 1)) fi
[ $retry -le 0 ] && eend 1
;; ;;
esac esac
[ $retry -le 0 ] && break [ $retry -le 0 ] && break

View File

@@ -4,12 +4,24 @@
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name> # Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
# All rights reserved. Released under the 2-clause BSD license. # All rights reserved. Released under the 2-clause BSD license.
. @SYSCONFDIR@/init.d/functions.sh sourcex()
. @LIBEXECDIR@/sh/rc-functions.sh {
if [ "$1" = "-e" ]; then
shift
[ -e "$1" ] || return 1
fi
if ! . "$1"; then
eerror "$RC_SVCNAME: error loading $1"
exit 1
fi
}
sourcex "@SYSCONFDIR@/init.d/functions.sh"
sourcex "@LIBEXECDIR@/sh/rc-functions.sh"
# Support LiveCD foo # Support LiveCD foo
if [ -r /sbin/livecd-functions.sh ]; then if [ -r /sbin/livecd-functions.sh ]; then
. /sbin/livecd-functions.sh sourcex "/sbin/livecd-functions.sh"
livecd_read_commandline livecd_read_commandline
fi fi
@@ -89,7 +101,7 @@ _status()
return 0 return 0
else else
einfo "status: stopped" einfo "status: stopped"
return 1 return 3
fi fi
} }
@@ -145,30 +157,26 @@ _conf_d=${RC_SERVICE%/*}/../conf.d
# If we're net.eth0 or openvpn.work then load net or openvpn config # If we're net.eth0 or openvpn.work then load net or openvpn config
_c=${RC_SVCNAME%%.*} _c=${RC_SVCNAME%%.*}
if [ -n "$_c" -a "$_c" != "$RC_SVCNAME" ]; then if [ -n "$_c" -a "$_c" != "$RC_SVCNAME" ]; then
if [ -e "$_conf_d/$_c.$RC_RUNLEVEL" ]; then if ! sourcex -e "$_conf_d/$_c.$RC_RUNLEVEL"; then
. "$_conf_d/$_c.$RC_RUNLEVEL" sourcex -e "$_conf_d/$_c"
elif [ -e "$_conf_d/$_c" ]; then
. "$_conf_d/$_c"
fi fi
fi fi
unset _c unset _c
# Overlay with our specific config # Overlay with our specific config
if [ -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL" ]; then if ! sourcex -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL"; then
. "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL" sourcex -e "$_conf_d/$RC_SVCNAME"
elif [ -e "$_conf_d/$RC_SVCNAME" ]; then
. "$_conf_d/$RC_SVCNAME"
fi fi
unset _conf_d unset _conf_d
# Load any system overrides # Load any system overrides
[ -e @SYSCONFDIR@/rc.conf ] && . @SYSCONFDIR@/rc.conf sourcex -e "@SYSCONFDIR@/rc.conf"
# Apply any ulimit defined # Apply any ulimit defined
[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT} [ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}
# Load our script # Load our script
. "$RC_SERVICE" sourcex "$RC_SERVICE"
for _d in $required_dirs; do for _d in $required_dirs; do
if [ ! -d $_d ]; then if [ ! -d $_d ]; then
@@ -187,8 +195,14 @@ done
unset _f unset _f
while [ -n "$1" ]; do while [ -n "$1" ]; do
# Sepcial case depend
if [ "$1" = depend ]; then
shift
_depend
continue
fi
# See if we have the required function and run it # See if we have the required function and run it
for _cmd in describe start stop status depend ${extra_commands:-$opts} \ for _cmd in describe start stop status ${extra_commands:-$opts} \
$extra_started_commands $extra_started_commands
do do
if [ "$_cmd" = "$1" ]; then if [ "$_cmd" = "$1" ]; then

View File

@@ -643,7 +643,7 @@ static int EINFO_PRINTF(3, 0)
fprintf(f, "\n"); fprintf(f, "\n");
if (_eprefix) if (_eprefix)
fprintf(f, "%s%s%s|", _ecolor(f, color), _eprefix, _ecolor(f, ECOLOR_NORMAL)); fprintf(f, "%s%s%s|", _ecolor(f, color), _eprefix, _ecolor(f, ECOLOR_NORMAL));
fprintf(f, "%s*%s ", _ecolor(f, color), _ecolor(f, ECOLOR_NORMAL)); fprintf(f, " %s*%s ", _ecolor(f, color), _ecolor(f, ECOLOR_NORMAL));
retval += _eindent(f); retval += _eindent(f);
va_copy(ap, va); va_copy(ap, va);
retval += vfprintf(f, fmt, ap) + 3; retval += vfprintf(f, fmt, ap) + 3;
@@ -800,7 +800,7 @@ ebegin(const char *EINFO_RESTRICT fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
retval = _einfovn(fmt, ap); retval = _einfovn(fmt, ap);
va_end(ap); va_end(ap);
retval += printf("..."); retval += printf(" ...");
if (colour_terminal(stdout)) if (colour_terminal(stdout))
retval += printf("\n"); retval += printf("\n");
LASTCMD("ebegin"); LASTCMD("ebegin");
@@ -817,7 +817,7 @@ _eend(FILE * EINFO_RESTRICT fp, int col, ECOLOR color, const char *msg)
if (!msg) if (!msg)
return; return;
cols = get_term_columns(fp) - (strlen(msg) + 3); cols = get_term_columns(fp) - (strlen(msg) + 5);
/* cons25 is special - we need to remove one char, otherwise things /* cons25 is special - we need to remove one char, otherwise things
* do not align properly at all. */ * do not align properly at all. */
@@ -831,18 +831,15 @@ _eend(FILE * EINFO_RESTRICT fp, int col, ECOLOR color, const char *msg)
if (term_is_cons25) if (term_is_cons25)
cols--; cols--;
/* If extra spacing is required around msg, then please change
* via a runtime knob and leave this default as is as it saves 2
* valuable columns when running on 80 column screens. */
if (cols > 0 && colour_terminal(fp)) { if (cols > 0 && colour_terminal(fp)) {
fprintf(fp, "%s%s %s[%s%s%s]%s\n", up, tgoto(goto_column, 0, cols), fprintf(fp, "%s%s %s[%s %s %s]%s\n", up, tgoto(goto_column, 0, cols),
ecolor(ECOLOR_BRACKET), ecolor(color), msg, ecolor(ECOLOR_BRACKET), ecolor(color), msg,
ecolor(ECOLOR_BRACKET), ecolor(ECOLOR_NORMAL)); ecolor(ECOLOR_BRACKET), ecolor(ECOLOR_NORMAL));
} else { } else {
if (col > 0) if (col > 0)
for (i = 0; i < cols - col; i++) for (i = 0; i < cols - col; i++)
fprintf(fp, " "); fprintf(fp, " ");
fprintf(fp, " [%s]\n", msg); fprintf(fp, " [ %s ]\n", msg);
} }
} }
@@ -1030,7 +1027,7 @@ ebeginv(const char *EINFO_RESTRICT fmt, ...)
va_start(ap, fmt); va_start(ap, fmt);
retval = _einfovn(fmt, ap); retval = _einfovn(fmt, ap);
retval += printf("..."); retval += printf(" ...");
if (colour_terminal(stdout)) if (colour_terminal(stdout))
retval += printf("\n"); retval += printf("\n");
va_end(ap); va_end(ap);

View File

@@ -199,7 +199,51 @@ file_regex(const char *file, const char *regex)
#endif #endif
const char * const char *
rc_sys(void) rc_sys_v2(void)
{
#define __STRING_SWITCH(x) { char* __string_switch = x; if(false) {}
#define __STRING_CASE(y) else if(strcmp(__string_switch,y) == 0)
#define __STRING_SWITCH_END() }
char* systype = rc_conf_value("rc_sys");
/* New sys identification code */
if(systype) {
char* s = systype;
// Convert to uppercase
while(s && *s) {
if(islower((unsigned char)*s))
*s = toupper((unsigned char)*s);
s++;
}
// Now do detection
__STRING_SWITCH(systype)
__STRING_CASE(RC_SYS_PREFIX) { return RC_SYS_PREFIX; }
#ifdef __FreeBSD__
__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; }
#endif /* __FreeBSD__ */
#ifdef __NetBSD__
__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; }
__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; }
#endif /* __NetBSD__ */
#ifdef __linux__
__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; }
__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; }
__STRING_CASE(RC_SYS_UML) { return RC_SYS_UML; }
__STRING_CASE(RC_SYS_VSERVER) { return RC_SYS_VSERVER; }
__STRING_CASE(RC_SYS_OPENVZ) { return RC_SYS_OPENVZ; }
__STRING_CASE(RC_SYS_LXC) { return RC_SYS_LXC; }
#endif /* __linux__ */
__STRING_SWITCH_END()
}
#undef __STRING_SWITCH
#undef __STRING_CASE
#undef __STRING_SWITCH_END
return NULL;
}
librc_hidden_def(rc_sys_v2)
/* Old sys identification code */
const char *
rc_sys_v1(void)
{ {
#ifdef PREFIX #ifdef PREFIX
return RC_SYS_PREFIX; return RC_SYS_PREFIX;
@@ -233,8 +277,6 @@ rc_sys(void)
return RC_SYS_VSERVER; return RC_SYS_VSERVER;
else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version")) else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version"))
return RC_SYS_OPENVZ; return RC_SYS_OPENVZ;
else if (file_regex("/proc/self/cgroup", ":/.+$"))
return RC_SYS_LXC;
else if (file_regex("/proc/self/status", else if (file_regex("/proc/self/status",
"envID:[[:space:]]*[1-9]")) "envID:[[:space:]]*[1-9]"))
return RC_SYS_OPENVZ; /* old test */ return RC_SYS_OPENVZ; /* old test */
@@ -243,6 +285,17 @@ rc_sys(void)
return NULL; return NULL;
#endif /* PREFIX */ #endif /* PREFIX */
} }
librc_hidden_def(rc_sys_v1)
const char *
rc_sys(void)
{
if(rc_conf_value("rc_sys")) {
return rc_sys_v2();
} else {
return rc_sys_v1();
}
}
librc_hidden_def(rc_sys) librc_hidden_def(rc_sys)
static const char * static const char *
@@ -377,7 +430,7 @@ rc_runlevel_stacks(const char *runlevel)
} }
librc_hidden_def(rc_runlevel_stacks) librc_hidden_def(rc_runlevel_stacks)
/* Resolve a service name to it's full path */ /* Resolve a service name to its full path */
char * char *
rc_service_resolve(const char *service) rc_service_resolve(const char *service)
{ {

View File

@@ -125,6 +125,8 @@ librc_hidden_proto(rc_stringlist_new)
librc_hidden_proto(rc_stringlist_split) librc_hidden_proto(rc_stringlist_split)
librc_hidden_proto(rc_stringlist_sort) librc_hidden_proto(rc_stringlist_sort)
librc_hidden_proto(rc_sys) librc_hidden_proto(rc_sys)
librc_hidden_proto(rc_sys_v1)
librc_hidden_proto(rc_sys_v2)
librc_hidden_proto(rc_yesno) librc_hidden_proto(rc_yesno)
#endif #endif

View File

@@ -117,7 +117,7 @@ bool rc_runlevel_stopping(void);
/*! @name RC /*! @name RC
* A service can be given as a full path or just its name. * A service can be given as a full path or just its name.
* If its just a name then we try to resolve the service to a full path. * If it's just a name then we try to resolve the service to a full path.
* This should allow the use if local init.d directories in the future. */ * This should allow the use if local init.d directories in the future. */
/*! @brief States a service can be in */ /*! @brief States a service can be in */
@@ -274,8 +274,19 @@ bool rc_service_daemons_crashed(const char *);
#define RC_SYS_VSERVER "VSERVER" #define RC_SYS_VSERVER "VSERVER"
#define RC_SYS_XEN0 "XEN0" #define RC_SYS_XEN0 "XEN0"
#define RC_SYS_XENU "XENU" #define RC_SYS_XENU "XENU"
/*! Returns the type of subsystem
* @return string from RC_SYS_* types or NULL if none detected */
const char *rc_sys(void); const char *rc_sys(void);
/*! Returns the type of subsystem using old automatic code
* @return string from RC_SYS_* types or NULL if none detected */
const char *rc_sys_v1(void);
/*! Returns the type of subsystem using new rc.conf rc_sys value
* @return string from RC_SYS_* types or NULL if none detected */
const char *rc_sys_v2(void);
/*! @name Dependency options /*! @name Dependency options
* These options can change the services found by the rc_get_depinfo and * These options can change the services found by the rc_get_depinfo and
* rc_get_depends functions. */ * rc_get_depends functions. */
@@ -326,7 +337,7 @@ typedef void *RC_DEPTREE;
#endif #endif
/*! Check to see if source is newer than target. /*! Check to see if source is newer than target.
* If target is a directory then we traverse it and it's children. * If target is a directory then we traverse it and its children.
* @param source * @param source
* @param target * @param target
* @param mtime of newest target * @param mtime of newest target
@@ -335,7 +346,7 @@ typedef void *RC_DEPTREE;
bool rc_newer_than(const char *, const char *, time_t *, char *); bool rc_newer_than(const char *, const char *, time_t *, char *);
/*! Check to see if source is older than target. /*! Check to see if source is older than target.
* If target is a directory then we traverse it and it's children. * If target is a directory then we traverse it and its children.
* @param source * @param source
* @param target * @param target
* @param mtime of oldest target * @param mtime of oldest target
@@ -446,7 +457,7 @@ RC_STRINGLIST *rc_config_load(const char *);
/*! Return the value of the entry from a key=value list. */ /*! Return the value of the entry from a key=value list. */
char *rc_config_value(RC_STRINGLIST *, const char *); char *rc_config_value(RC_STRINGLIST *, const char *);
/*! Check if a variable is a boolean and return it's value. /*! Check if a variable is a boolean and return its value.
* If variable is not a boolean then we set errno to be ENOENT when it does * If variable is not a boolean then we set errno to be ENOENT when it does
* not exist or EINVAL if it's not a boolean. * not exist or EINVAL if it's not a boolean.
* @param variable to check * @param variable to check
@@ -485,9 +496,9 @@ bool rc_stringlist_delete(RC_STRINGLIST *, const char *);
* @return pointer to item */ * @return pointer to item */
RC_STRING *rc_stringlist_find(RC_STRINGLIST *, const char *); RC_STRING *rc_stringlist_find(RC_STRINGLIST *, const char *);
/*! Split a string into a stringlist based on seperator. /*! Split a string into a stringlist based on separator.
* @param string to split * @param string to split
* @param seperator * @param separator
* @return new list */ * @return new list */
RC_STRINGLIST *rc_stringlist_split(const char *, const char *); RC_STRINGLIST *rc_stringlist_split(const char *, const char *);

View File

@@ -55,6 +55,8 @@ global:
rc_stringlist_sort; rc_stringlist_sort;
rc_stringlist_free; rc_stringlist_free;
rc_sys; rc_sys;
rc_sys_v1;
rc_sys_v2;
rc_yesno; rc_yesno;
local: local:

View File

@@ -38,7 +38,7 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
/* Yay for linux and it's non liking of POSIX functions. /* Yay for linux and its non liking of POSIX functions.
Okay, we could use getfsent but the man page says use getmntent instead Okay, we could use getfsent but the man page says use getmntent instead
AND we don't have getfsent on uclibc or dietlibc for some odd reason. */ AND we don't have getfsent on uclibc or dietlibc for some odd reason. */
#ifdef __linux__ #ifdef __linux__

View File

@@ -467,7 +467,7 @@ run_applets(int argc, char **argv)
} }
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
}; };
/* This tets is correct as it's not present in baselayout */ /* This test is correct as it's not present in baselayout */
if (strcmp(applet, "is_newer_than") == 0) { if (strcmp(applet, "is_newer_than") == 0) {
if (argc < 3) if (argc < 3)
exit (EXIT_FAILURE); exit (EXIT_FAILURE);

View File

@@ -219,6 +219,7 @@ static const char * const longopts_help[] = {
int int
rc_update(int argc, char **argv) rc_update(int argc, char **argv)
{ {
RC_DEPTREE *deptree;
RC_STRINGLIST *runlevels; RC_STRINGLIST *runlevels;
RC_STRING *runlevel; RC_STRING *runlevel;
char *service = NULL; char *service = NULL;
@@ -238,7 +239,9 @@ rc_update(int argc, char **argv)
stack = true; stack = true;
break; break;
case 'u': case 'u':
_rc_deptree_load(-1, &ret); deptree = _rc_deptree_load(-1, &ret);
if (deptree)
rc_deptree_free(deptree);
return ret; return ret;
case_RC_COMMON_GETOPT; case_RC_COMMON_GETOPT;
} }

View File

@@ -773,7 +773,7 @@ handle_bad_signal(int sig)
#endif #endif
#include "_usage.h" #include "_usage.h"
#define getoptstring "o:" getoptstring_COMMON #define getoptstring "o:s:S" getoptstring_COMMON
static const struct option longopts[] = { static const struct option longopts[] = {
{ "override", 1, NULL, 'o' }, { "override", 1, NULL, 'o' },
{ "service", 1, NULL, 's' }, { "service", 1, NULL, 's' },
@@ -878,9 +878,16 @@ main(int argc, char **argv)
eerrorx("%s: %s", applet, strerror(errno)); eerrorx("%s: %s", applet, strerror(errno));
/* NOTREACHED */ /* NOTREACHED */
case 'S': case 'S':
bootlevel = rc_sys(); if (rc_conf_value("rc_sys")) {
if (bootlevel) bootlevel = rc_sys_v2();
if(bootlevel)
printf("%s\n", bootlevel); printf("%s\n", bootlevel);
} else {
ewarn("WARNING: rc_sys not defined in rc.conf. Falling back to automatic detection");
bootlevel = rc_sys_v1();
if(bootlevel)
printf("%s\n", bootlevel);
}
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
/* NOTREACHED */ /* NOTREACHED */
case_RC_COMMON_GETOPT case_RC_COMMON_GETOPT

View File

@@ -350,6 +350,8 @@ svc_exec(const char *arg1, const char *arg2)
size_t bytes; size_t bytes;
bool prefixed = false; bool prefixed = false;
int slave_tty; int slave_tty;
sigset_t sigchldmask;
sigset_t oldmask;
/* Setup our signal pipe */ /* Setup our signal pipe */
if (pipe(signal_pipe) == -1) if (pipe(signal_pipe) == -1)
@@ -439,10 +441,17 @@ svc_exec(const char *arg1, const char *arg2)
} }
free(buffer); free(buffer);
sigemptyset (&sigchldmask);
sigaddset (&sigchldmask, SIGCHLD);
sigprocmask (SIG_BLOCK, &sigchldmask, &oldmask);
close(signal_pipe[0]); close(signal_pipe[0]);
close(signal_pipe[1]); close(signal_pipe[1]);
signal_pipe[0] = signal_pipe[1] = -1; signal_pipe[0] = signal_pipe[1] = -1;
sigprocmask (SIG_SETMASK, &oldmask, NULL);
if (master_tty >= 0) { if (master_tty >= 0) {
/* Why did we do this? */ /* Why did we do this? */
/* signal (SIGWINCH, SIG_IGN); */ /* signal (SIGWINCH, SIG_IGN); */
@@ -587,8 +596,10 @@ svc_start_check(void)
fcntl(exclusive_fd, F_SETFD, fcntl(exclusive_fd, F_SETFD,
fcntl(exclusive_fd, F_GETFD, 0) | FD_CLOEXEC); fcntl(exclusive_fd, F_GETFD, 0) | FD_CLOEXEC);
if (state & RC_SERVICE_STARTED) if (state & RC_SERVICE_STARTED) {
ewarnx("WARNING: %s has already been started", applet); ewarn("WARNING: %s has already been started", applet);
exit(EXIT_SUCCESS);
}
else if (state & RC_SERVICE_INACTIVE && !in_background) else if (state & RC_SERVICE_INACTIVE && !in_background)
ewarnx("WARNING: %s has already started, but is inactive", ewarnx("WARNING: %s has already started, but is inactive",
applet); applet);
@@ -739,6 +750,8 @@ svc_start_deps(void)
free(tmp); free(tmp);
} }
rc_stringlist_free(tmplist);
tmplist = NULL;
rc_stringlist_free(services); rc_stringlist_free(services);
services = NULL; services = NULL;
} }
@@ -834,8 +847,10 @@ svc_stop_check(RC_SERVICE *state)
fcntl(exclusive_fd, F_SETFD, fcntl(exclusive_fd, F_SETFD,
fcntl(exclusive_fd, F_GETFD, 0) | FD_CLOEXEC); fcntl(exclusive_fd, F_GETFD, 0) | FD_CLOEXEC);
if (*state & RC_SERVICE_STOPPED) if (*state & RC_SERVICE_STOPPED) {
ewarnx("WARNING: %s is already stopped", applet); ewarn("WARNING: %s is already stopped", applet);
exit(EXIT_SUCCESS);
}
rc_service_mark(service, RC_SERVICE_STOPPING); rc_service_mark(service, RC_SERVICE_STOPPING);
hook_out = RC_HOOK_SERVICE_STOP_OUT; hook_out = RC_HOOK_SERVICE_STOP_OUT;
@@ -998,7 +1013,7 @@ svc_restart(void)
* dns via resolvconf, so you could have openvpn trying to restart * dns via resolvconf, so you could have openvpn trying to restart
* dnsmasq which in turn is waiting on net which in turn is waiting * dnsmasq which in turn is waiting on net which in turn is waiting
* on dnsmasq. * on dnsmasq.
* The work around is for resolvconf to restart it's services with * The work around is for resolvconf to restart its services with
* --nodeps which means just that. * --nodeps which means just that.
* The downside is that there is a small window when our status is * The downside is that there is a small window when our status is
* invalid. * invalid.
@@ -1106,7 +1121,7 @@ runscript(int argc, char **argv)
atexit(cleanup); atexit(cleanup);
/* We need to work out the real full path to our service. /* We need to work out the real full path to our service.
* This works fine, provided that we ONLY allow mulitplexed services * This works fine, provided that we ONLY allow multiplexed services
* to exist in the same directory as the master link. * to exist in the same directory as the master link.
* Also, the master link as to be a real file in the init dir. */ * Also, the master link as to be a real file in the init dir. */
if (!realpath(argv[1], path)) { if (!realpath(argv[1], path)) {
@@ -1192,7 +1207,7 @@ runscript(int argc, char **argv)
deps = true; deps = true;
/* Punt the first arg as it's our service name */ /* Punt the first arg as its our service name */
argc--; argc--;
argv++; argv++;
@@ -1316,6 +1331,12 @@ runscript(int argc, char **argv)
prefix = NULL; prefix = NULL;
retval = svc_exec("status", NULL); retval = svc_exec("status", NULL);
} else { } else {
if (strcmp(optarg, "pause") == 0) {
ewarn("WARNING: 'pause' is deprecated; please use '--nodeps stop'");
deps = false;
optarg = "stop";
}
if (strcmp(optarg, "conditionalrestart") == 0 || if (strcmp(optarg, "conditionalrestart") == 0 ||
strcmp(optarg, "condrestart") == 0) strcmp(optarg, "condrestart") == 0)
{ {

View File

@@ -51,4 +51,6 @@ rc_stringlist_new
rc_stringlist_sort rc_stringlist_sort
rc_stringlist_split rc_stringlist_split
rc_sys rc_sys
rc_sys_v1
rc_sys_v2
rc_yesno rc_yesno

View File

@@ -104,5 +104,9 @@ rc_stringlist_split
rc_stringlist_split@@RC_1.0 rc_stringlist_split@@RC_1.0
rc_sys rc_sys
rc_sys@@RC_1.0 rc_sys@@RC_1.0
rc_sys_v1
rc_sys_v1@@RC_1.0
rc_sys_v2
rc_sys_v2@@RC_1.0
rc_yesno rc_yesno
rc_yesno@@RC_1.0 rc_yesno@@RC_1.0