Compare commits
	
		
			102 Commits
		
	
	
		
			openrc-0.5
			...
			openrc-0.6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					449080e145 | ||
| 
						 | 
					062223a5df | ||
| 
						 | 
					18064e19f6 | ||
| 
						 | 
					cdf07b5970 | ||
| 
						 | 
					82b265016a | ||
| 
						 | 
					bdfab242b7 | ||
| 
						 | 
					4ca32808dd | ||
| 
						 | 
					9e5b9abf40 | ||
| 
						 | 
					ac37dc2764 | ||
| 
						 | 
					9285cb3392 | ||
| 
						 | 
					6d9137d6c4 | ||
| 
						 | 
					2fa6bb0d48 | ||
| 
						 | 
					39776d6fb7 | ||
| 
						 | 
					68c021c424 | ||
| 
						 | 
					09bed967bf | ||
| 
						 | 
					060b19e3e3 | ||
| 
						 | 
					d8a76d1bf6 | ||
| 
						 | 
					7653ef89b8 | ||
| 
						 | 
					be6c0716ee | ||
| 
						 | 
					4ea75dd1d6 | ||
| 
						 | 
					b708852784 | ||
| 
						 | 
					f700243016 | ||
| 
						 | 
					b232e529f1 | ||
| 
						 | 
					ae3186834f | ||
| 
						 | 
					23546e27d9 | ||
| 
						 | 
					1a188f8f72 | ||
| 
						 | 
					89829f6d7c | ||
| 
						 | 
					6e3b3bfc53 | ||
| 
						 | 
					14c95ae9a6 | ||
| 
						 | 
					d3ccbdb5a9 | ||
| 
						 | 
					1cdf85e1ce | ||
| 
						 | 
					2982cfab70 | ||
| 
						 | 
					761fe99fe2 | ||
| 
						 | 
					6f24d1cbd8 | ||
| 
						 | 
					898552dcc3 | ||
| 
						 | 
					6850566be0 | ||
| 
						 | 
					3036b44798 | ||
| 
						 | 
					acc0edb040 | ||
| 
						 | 
					316a316d9b | ||
| 
						 | 
					20b4076b12 | ||
| 
						 | 
					4d86d34635 | ||
| 
						 | 
					ae7a92ae7b | ||
| 
						 | 
					67b538fd26 | ||
| 
						 | 
					0276c4f516 | ||
| 
						 | 
					7271449a0c | ||
| 
						 | 
					4b333eaf36 | ||
| 
						 | 
					59b08643f1 | ||
| 
						 | 
					5c52e5beb5 | ||
| 
						 | 
					c0f5f2122c | ||
| 
						 | 
					ecf9ef49a7 | ||
| 
						 | 
					bb45f0eabc | ||
| 
						 | 
					f434c902a5 | ||
| 
						 | 
					5ec2efaff2 | ||
| 
						 | 
					9ca65be42e | ||
| 
						 | 
					a704b97fd2 | ||
| 
						 | 
					2c0a71172d | ||
| 
						 | 
					cbafcd078d | ||
| 
						 | 
					a165fbe384 | ||
| 
						 | 
					02c12c1cac | ||
| 
						 | 
					084f5e12eb | ||
| 
						 | 
					3b9eaea8ec | ||
| 
						 | 
					dc3ccd8101 | ||
| 
						 | 
					9476a2e721 | ||
| 
						 | 
					1d174cc60c | ||
| 
						 | 
					12af86395f | ||
| 
						 | 
					5b3e5edda2 | ||
| 
						 | 
					775d56b877 | ||
| 
						 | 
					22e2a4f0a1 | ||
| 
						 | 
					ca752a5a2d | ||
| 
						 | 
					93cecab1ed | ||
| 
						 | 
					baf3b2dd45 | ||
| 
						 | 
					e9e37ad798 | ||
| 
						 | 
					4df8770a90 | ||
| 
						 | 
					ec38bbbdda | ||
| 
						 | 
					509e34d425 | ||
| 
						 | 
					0de1d18d41 | ||
| 
						 | 
					89a2d76772 | ||
| 
						 | 
					80d4ce3a11 | ||
| 
						 | 
					d21177e5c7 | ||
| 
						 | 
					d29daf3952 | ||
| 
						 | 
					1d9ce8e9a1 | ||
| 
						 | 
					bb96dc4e01 | ||
| 
						 | 
					ebb49805fc | ||
| 
						 | 
					4a892a23ba | ||
| 
						 | 
					95ee39ab1c | ||
| 
						 | 
					3c8ea5896a | ||
| 
						 | 
					7c5047acfc | ||
| 
						 | 
					f2f7d0ae6d | ||
| 
						 | 
					d27655c908 | ||
| 
						 | 
					9f4a7afd83 | ||
| 
						 | 
					ac6808a73e | ||
| 
						 | 
					baeb59cd2e | ||
| 
						 | 
					a4b03ead79 | ||
| 
						 | 
					c96a015742 | ||
| 
						 | 
					fdca530d4f | ||
| 
						 | 
					da08e3822f | ||
| 
						 | 
					ac7af85813 | ||
| 
						 | 
					a8f6a9b654 | ||
| 
						 | 
					aaa0498bf8 | ||
| 
						 | 
					0ffe5caf18 | ||
| 
						 | 
					5e8e38b9cf | ||
| 
						 | 
					454bd460c4 | 
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
SUBDIR=		conf.d etc init.d man sh src
 | 
			
		||||
SUBDIR=		conf.d etc init.d man scripts sh src
 | 
			
		||||
 | 
			
		||||
# Build our old net foo or not
 | 
			
		||||
_OLDNET_SH=	case "${MKOLDNET}" in \
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
NAME=		openrc
 | 
			
		||||
VERSION=	0.5.1
 | 
			
		||||
VERSION=	0.6.7
 | 
			
		||||
PKG=		${NAME}-${VERSION}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								README
									
									
									
									
									
								
							@@ -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.
 | 
			
		||||
devd.conf is modified from FreeBSD to call /etc/rc.devd which is a generic
 | 
			
		||||
hook into OpenRC.
 | 
			
		||||
inittab is the same, but for SysVInit as used by most Linux distrubtions.
 | 
			
		||||
inittab is the same, but for SysVInit as used by most Linux distributions.
 | 
			
		||||
This can be found in the support folder.
 | 
			
		||||
Obviously, if you're installing this onto a system that does not use OpenRC
 | 
			
		||||
by default then you may wish to backup the above listed files, remove them
 | 
			
		||||
@@ -58,14 +58,15 @@ If you installed OpenRC from your chosen distribution, you should report
 | 
			
		||||
bugs directly to them. For example, if you use Gentoo and emerged OpenRC
 | 
			
		||||
then you should reports bugs to http://bugs.gentoo.org.
 | 
			
		||||
 | 
			
		||||
Otherwise, you can report them directly to me at http://bugs.marples.name
 | 
			
		||||
Otherwise, you can report them directly to me at
 | 
			
		||||
http://roy.marples.name/projects/openrc
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
History - by Roy Marples
 | 
			
		||||
------------------------
 | 
			
		||||
I became a Gentoo/Linux developer in 2004 and wrote the modular network
 | 
			
		||||
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
 | 
			
		||||
for baselayout.
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										36
									
								
								README.net
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								README.net
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
OpenRC Network Ideals
 | 
			
		||||
---------------------
 | 
			
		||||
 | 
			
		||||
The new style networking for OpenRC is very simplistic - provide a basic means
 | 
			
		||||
of configuring static interface address and routes whilst allowing the
 | 
			
		||||
possibility to run any command at any point.
 | 
			
		||||
 | 
			
		||||
In a nutshell, init.d/network is a wrapper around ifconfig(8) and
 | 
			
		||||
init.d/staticroute is wrapper around route(8).
 | 
			
		||||
 | 
			
		||||
In the Perfect World (TM) ifconfig should be able to configure everything
 | 
			
		||||
about the interface easily * . The BSD family almost get this right and Linux
 | 
			
		||||
epically fails.
 | 
			
		||||
 | 
			
		||||
* Only static configuration, including link setup.
 | 
			
		||||
For dynamic, static, IPv4LL, arping and per ssid IPv4 setup dhcpcd-5.x
 | 
			
		||||
provides your needs.
 | 
			
		||||
 | 
			
		||||
It fails because there are many tools to do the same job and often have
 | 
			
		||||
vastly different syntax where they could be similar. In other words, there
 | 
			
		||||
is no coherence.
 | 
			
		||||
 | 
			
		||||
OpenRC-0.4.x and older (inc Gentoo baselayout-1) had a collection of scripts
 | 
			
		||||
for each tool and allowed a script per interface. Over the years, this design
 | 
			
		||||
has proven very hard to maintain as each user has their own idea of how
 | 
			
		||||
things should work. Also, there were (and still are) race conditions.
 | 
			
		||||
 | 
			
		||||
So where do we go from here?
 | 
			
		||||
Well, it's possible to use the new network scripts using the tools
 | 
			
		||||
currently available. It's just harder as you have to know them and their
 | 
			
		||||
documentation can be lacking at times.
 | 
			
		||||
The correct end goal is a BSD style ifconfig tool.
 | 
			
		||||
I've started work on it, but the project has stalled somewhat.
 | 
			
		||||
It's display only right now and the source is not yet publicly available.
 | 
			
		||||
If you have the skills and share the vision then contact me privately and
 | 
			
		||||
we'll take it from there.
 | 
			
		||||
							
								
								
									
										1
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +1,2 @@
 | 
			
		||||
network
 | 
			
		||||
staticroute
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +1,19 @@
 | 
			
		||||
DIR=	${CONFDIR}
 | 
			
		||||
CONF=	bootmisc fsck hostname local localmount network urandom
 | 
			
		||||
CONF=	bootmisc fsck hostname local localmount network staticroute urandom
 | 
			
		||||
 | 
			
		||||
TARGETS+=	network
 | 
			
		||||
CLEANFILES+=	network
 | 
			
		||||
TARGETS+=	network staticroute
 | 
			
		||||
CLEANFILES+=	network staticroute
 | 
			
		||||
 | 
			
		||||
MK=	../mk
 | 
			
		||||
include ${MK}/os.mk
 | 
			
		||||
include Makefile.${OS}
 | 
			
		||||
include ${MK}/scripts.mk
 | 
			
		||||
 | 
			
		||||
network: network.in network.${OS}
 | 
			
		||||
	cp network.in network
 | 
			
		||||
	[ -e network.${OS} ] && cat network.${OS} >> network || true
 | 
			
		||||
SOS?=	BSD
 | 
			
		||||
 | 
			
		||||
network: network.in network.${SOS}
 | 
			
		||||
	cp $@.in $@
 | 
			
		||||
	[ -e $@.${SOS} ] && cat $@.${SOS} >> $@ || true
 | 
			
		||||
 | 
			
		||||
staticroute: staticroute.${SOS}
 | 
			
		||||
	cp $@.${SOS} $@
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1 @@
 | 
			
		||||
CONF+=	ipfw moused powerd rarpd savecore syscons
 | 
			
		||||
 | 
			
		||||
network.${OS}:
 | 
			
		||||
 
 | 
			
		||||
@@ -1 +1,2 @@
 | 
			
		||||
CONF+=	consolefont dmesg hwclock keymaps modules
 | 
			
		||||
SOS=	Linux
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1 @@
 | 
			
		||||
CONF+=	moused rarpd savecore
 | 
			
		||||
 | 
			
		||||
network.${OS}:
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,11 @@
 | 
			
		||||
#fsck_passno=">1"
 | 
			
		||||
#fsck_passno="<2"
 | 
			
		||||
 | 
			
		||||
# Most modern fs's don't require a full fsck on boot, but for those that do
 | 
			
		||||
# it may be advisable to skip this when running on battery.
 | 
			
		||||
# WARNING: Do not turn this off if you have any JFS partitions.
 | 
			
		||||
fsck_on_battery="YES"
 | 
			
		||||
 | 
			
		||||
# fsck_shutdown causes fsck to trigger during shutdown as well as startup.
 | 
			
		||||
# The end result of this is that if any periodic non-root filesystem checks are
 | 
			
		||||
# scheduled, under normal circumstances the actual check will happen during
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,11 @@
 | 
			
		||||
# Set CLOCK to "UTC" if your system clock is set to UTC (also known as
 | 
			
		||||
# Greenwich Mean Time).  If your clock is set to the local time, then 
 | 
			
		||||
# Set CLOCK to "UTC" if your Hardware Clock is set to UTC (also known as
 | 
			
		||||
# Greenwich Mean Time).  If that clock is set to the local time, then 
 | 
			
		||||
# set CLOCK to "local".  Note that if you dual boot with Windows, then 
 | 
			
		||||
# you should set it to "local".
 | 
			
		||||
clock="UTC"
 | 
			
		||||
 | 
			
		||||
# If you want to set the Hardware Clock to the current System Time 
 | 
			
		||||
# during shutdown, then say "YES" here.
 | 
			
		||||
# (software clock) during shutdown, then say "YES" here.
 | 
			
		||||
# You normally don't need to do this if you run a ntp daemon.
 | 
			
		||||
clock_systohc="NO"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								conf.d/network.BSD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								conf.d/network.BSD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
 | 
			
		||||
# You can assign a default route
 | 
			
		||||
#defaultroute="192.168.0.1"
 | 
			
		||||
#defaultroute6="2001:a:b:c"
 | 
			
		||||
@@ -1,8 +1,20 @@
 | 
			
		||||
 | 
			
		||||
# You can assign a default route
 | 
			
		||||
#defaultroute="gw 192.168.0.1"
 | 
			
		||||
#defaultroute6="gw 2001:a:b:c"
 | 
			
		||||
 | 
			
		||||
# ifconfig under Linux is not that powerful and doesn't easily handle
 | 
			
		||||
# multiple addresses
 | 
			
		||||
# On the other hand, ip (iproute2) is quite powerful and is also supported
 | 
			
		||||
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
 | 
			
		||||
 | 
			
		||||
# You can also use ip to add the default route.
 | 
			
		||||
#defaultiproute="via 192.168.0.1"
 | 
			
		||||
#defaultiproute6="via 2001:a:b:c"
 | 
			
		||||
 | 
			
		||||
# ip doesn't handle MTU like ifconfig, but we can do it like so
 | 
			
		||||
#ifup_eth0="ip link set \$int mtu 1500"
 | 
			
		||||
 | 
			
		||||
# Create a bonded interface
 | 
			
		||||
#interfaces="bond0"
 | 
			
		||||
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,6 @@
 | 
			
		||||
# You should note that we don't stop the network at system shutdown by default.
 | 
			
		||||
# If you really need this, then set shutdown_network=YES
 | 
			
		||||
 | 
			
		||||
# You can assign a default route
 | 
			
		||||
#defaultroute="192.168.0.1"
 | 
			
		||||
# Lastly, the interfaces variable pulls in virtual interfaces that cannot
 | 
			
		||||
# be automatically detected.
 | 
			
		||||
#interfaces="br0 bond0 vlan0"
 | 
			
		||||
@@ -26,3 +24,5 @@
 | 
			
		||||
# If you require DHCP, you should install dhcpcd and it to the boot or
 | 
			
		||||
# default runlevel.
 | 
			
		||||
 | 
			
		||||
# NIS users can set the domain name here
 | 
			
		||||
#domainname="foobar"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								conf.d/staticroute.BSD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								conf.d/staticroute.BSD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
# Separate multiple routes using ; or new lines.
 | 
			
		||||
# /etc/route.conf(5) takes precedence over this configuration.
 | 
			
		||||
 | 
			
		||||
# Example static routes. See route(8) for syntax.
 | 
			
		||||
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 10.73.1.1
 | 
			
		||||
#net 192.168.1.0 -netmask 255.255.255.0 10.73.1.1"
 | 
			
		||||
							
								
								
									
										8
									
								
								conf.d/staticroute.Linux
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								conf.d/staticroute.Linux
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
# Separate multiple routes using ; or new lines.
 | 
			
		||||
 | 
			
		||||
# Example static routes. See route(8) for syntax.
 | 
			
		||||
#staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1
 | 
			
		||||
#net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1"
 | 
			
		||||
 | 
			
		||||
# Example static routes using iproute2. See ip(8) for syntax.
 | 
			
		||||
#staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1"
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
# kernel then remove the IPv6 address from your config.
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# read through the rest of this file.
 | 
			
		||||
@@ -22,10 +22,10 @@
 | 
			
		||||
#
 | 
			
		||||
# We now support modular networking scripts which means we can easily
 | 
			
		||||
# 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
 | 
			
		||||
# 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.
 | 
			
		||||
# Ideally, you only use the modules setting when you have two or more
 | 
			
		||||
# packages installed that supply the same service.
 | 
			
		||||
@@ -43,11 +43,6 @@
 | 
			
		||||
#       (eth0:1, eth0:2, etc)
 | 
			
		||||
#       iproute2 does not do this as there is no need to
 | 
			
		||||
#config_eth0="192.168.0.2/24 192.168.0.3/24 192.168.0.4/24"
 | 
			
		||||
# Or you can use sequence expressions
 | 
			
		||||
#config_eth0="192.168.0.{2..4}/24"  FIXME - may not work with baselayout2
 | 
			
		||||
# which does the same as above. Be careful though as if you use this and
 | 
			
		||||
# fallbacks, you have to ensure that both end up with the same number of
 | 
			
		||||
# values otherwise your fallback won't work correctly.
 | 
			
		||||
 | 
			
		||||
# You can also use IPv6 addresses
 | 
			
		||||
# (you should always specify a prefix length with IPv6 here)
 | 
			
		||||
@@ -101,8 +96,8 @@
 | 
			
		||||
#modules="iwconfig"
 | 
			
		||||
 | 
			
		||||
# ifconfig (iwconig) support is a one shot script - wpa_supplicant is daemon
 | 
			
		||||
# that scans, assoicates and re-configures if assocation is lost.
 | 
			
		||||
# We call it iwconfig to seperate the wireless setup from ifconfig.
 | 
			
		||||
# that scans, associates and re-configures if association is lost.
 | 
			
		||||
# We call it iwconfig to separate the wireless setup from ifconfig.
 | 
			
		||||
####################################
 | 
			
		||||
# HINTS
 | 
			
		||||
#
 | 
			
		||||
@@ -187,7 +182,7 @@
 | 
			
		||||
#dns_servers_001122334455="192.168.0.1 192.168.0.2"
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# Access Points sending an SSID even when they have been configured
 | 
			
		||||
# not to!
 | 
			
		||||
@@ -198,7 +193,7 @@
 | 
			
		||||
# This lists the preferred SSIDs to connect to in order
 | 
			
		||||
# SSID's can contain any characters here as they must match the broadcast
 | 
			
		||||
# 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 this isn't defined then it connects to the first one found
 | 
			
		||||
#preferred_aps="SSID1 SSID2"
 | 
			
		||||
@@ -213,9 +208,9 @@
 | 
			
		||||
# any other available AP
 | 
			
		||||
# "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
 | 
			
		||||
# "forcepreferred" means it will forcibly connect to APs in order if it does
 | 
			
		||||
# 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
 | 
			
		||||
# "forceany" does the same as forcepreferred + connects to any other 
 | 
			
		||||
# available AP
 | 
			
		||||
@@ -242,12 +237,12 @@
 | 
			
		||||
 | 
			
		||||
##################################################
 | 
			
		||||
# wpa_supplicant
 | 
			
		||||
# emerge net-wireless/wpa-supplicant
 | 
			
		||||
# emerge net-wireless/wpa_supplicant
 | 
			
		||||
# Wireless options are held in /etc/wpa_supplicant/wpa_supplicant.conf
 | 
			
		||||
# Console the wpa_supplicant.conf.example that is installed in
 | 
			
		||||
# Consult the wpa_supplicant.conf.example that is installed in
 | 
			
		||||
# /usr/share/doc/wpa_supplicant
 | 
			
		||||
 | 
			
		||||
# By default we don't wait for wpa_suppliant to associate and authenticate.
 | 
			
		||||
# By default we don't wait for wpa_supplicant to associate and authenticate.
 | 
			
		||||
# If you would like to, so can specify how long in seconds
 | 
			
		||||
#associate_timeout_eth0=60
 | 
			
		||||
# A value of 0 means wait forever.
 | 
			
		||||
@@ -325,7 +320,7 @@
 | 
			
		||||
# Set generic DHCP options like so
 | 
			
		||||
#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
 | 
			
		||||
# 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
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@
 | 
			
		||||
# kernel then remove the IPv6 address from your config.
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# read through the rest of this file.
 | 
			
		||||
@@ -23,10 +23,10 @@
 | 
			
		||||
#
 | 
			
		||||
# We now support modular networking scripts which means we can easily
 | 
			
		||||
# 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
 | 
			
		||||
# 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.
 | 
			
		||||
# Ideally, you only use the modules setting when you have two or more
 | 
			
		||||
# packages installed that supply the same service.
 | 
			
		||||
@@ -70,11 +70,6 @@
 | 
			
		||||
#       iproute2 does not do this as there is no need to
 | 
			
		||||
#config_eth0="192.168.0.2/24 192.168.0.3/24 192.168.0.4/24"
 | 
			
		||||
# However, that only works with CIDR addresses, so you can't use netmask.
 | 
			
		||||
# Or you can use sequence expressions
 | 
			
		||||
#config_eth0="192.168.0.{2..4}/24"
 | 
			
		||||
# which does the same as above. Be careful though as if you use this and
 | 
			
		||||
# fallbacks, you have to ensure that both end up with the same number of
 | 
			
		||||
# values otherwise your fallback won't work correctly.
 | 
			
		||||
 | 
			
		||||
# You can also use IPv6 addresses
 | 
			
		||||
# (you should always specify a prefix length with IPv6 here)
 | 
			
		||||
@@ -111,7 +106,7 @@
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# wireless route automaticaly. You can override this by setting
 | 
			
		||||
# wireless route automatically. You can override this by setting
 | 
			
		||||
#metric_eth0="100"
 | 
			
		||||
# or on a global basis
 | 
			
		||||
#metric="100"
 | 
			
		||||
@@ -258,7 +253,7 @@
 | 
			
		||||
#key_SSID="s:foobar 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
 | 
			
		||||
#key_SSID="[1] s:passkey1 key [2] s:passkey2 key [3] s:passkey3 key [4] s:passkey4 key [2]"
 | 
			
		||||
 | 
			
		||||
@@ -288,7 +283,7 @@
 | 
			
		||||
#dns_servers_001122334455="192.168.0.1 192.168.0.2"
 | 
			
		||||
 | 
			
		||||
# 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
 | 
			
		||||
# Access Points sending an SSID even when they have been configured
 | 
			
		||||
# not to!
 | 
			
		||||
@@ -299,7 +294,7 @@
 | 
			
		||||
# This lists the preferred SSIDs to connect to in order
 | 
			
		||||
# SSID's can contain any characters here as they must match the broadcast
 | 
			
		||||
# 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 this isn't defined then it connects to the first one found
 | 
			
		||||
#preferred_aps="SSID1 SSID2" 
 | 
			
		||||
@@ -312,9 +307,9 @@
 | 
			
		||||
# "any" means it will connect to visible APs in the preferred list and then any
 | 
			
		||||
# other available AP
 | 
			
		||||
# "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
 | 
			
		||||
# "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
 | 
			
		||||
# "forceany" does the same as forcepreferred + connects to any other available AP
 | 
			
		||||
# Default is "any"
 | 
			
		||||
@@ -341,16 +336,16 @@
 | 
			
		||||
 | 
			
		||||
############################################################
 | 
			
		||||
# wpa_supplicant
 | 
			
		||||
# emerge net-wireless/wpa-supplicant
 | 
			
		||||
# emerge net-wireless/wpa_supplicant
 | 
			
		||||
# Wireless options are held in /etc/wpa_supplicant/wpa_supplicant.conf
 | 
			
		||||
# Console the wpa_supplicant.conf.example that is installed in
 | 
			
		||||
# Consult the wpa_supplicant.conf.example that is installed in
 | 
			
		||||
# /usr/share/doc/wpa_supplicant
 | 
			
		||||
# To configure wpa_supplicant
 | 
			
		||||
#wpa_supplicant_ath0="-Dmadwifi" # For Atheros based cards
 | 
			
		||||
# Consult wpa_supplicant for more drivers - the default is -Dwext which should
 | 
			
		||||
# work for most cards.
 | 
			
		||||
 | 
			
		||||
# By default we don't wait for wpa_suppliant to associate and authenticate.
 | 
			
		||||
# By default we don't wait for wpa_supplicant to associate and authenticate.
 | 
			
		||||
# If you need to change this behaviour then you don't know how our scripts work
 | 
			
		||||
# and setting this value could cause strange things to happen.
 | 
			
		||||
# If you would like to, so can specify how long in seconds.
 | 
			
		||||
@@ -453,7 +448,7 @@
 | 
			
		||||
# Set generic DHCP options like so
 | 
			
		||||
#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
 | 
			
		||||
# 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
 | 
			
		||||
@@ -577,7 +572,7 @@
 | 
			
		||||
#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
 | 
			
		||||
# 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.
 | 
			
		||||
#arp_ip_target_bond0="+26.0.0.0"
 | 
			
		||||
 | 
			
		||||
@@ -663,7 +658,7 @@
 | 
			
		||||
#
 | 
			
		||||
# Dead peer detection
 | 
			
		||||
#	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
 | 
			
		||||
#	
 | 
			
		||||
# Compression options - use these to completely disable compression
 | 
			
		||||
@@ -827,8 +822,8 @@
 | 
			
		||||
#config_nas0="'192.168.0.1/24'"
 | 
			
		||||
 | 
			
		||||
#-----------------------------------------------------------------------------
 | 
			
		||||
# Tunnelling
 | 
			
		||||
# WARNING: For tunnelling it is highly recommended that you
 | 
			
		||||
# Tunneling
 | 
			
		||||
# WARNING: For tunneling it is highly recommended that you
 | 
			
		||||
# emerge sys-apps/iproute2
 | 
			
		||||
#
 | 
			
		||||
# For GRE tunnels
 | 
			
		||||
@@ -843,7 +838,7 @@
 | 
			
		||||
 | 
			
		||||
# 6to4 Tunnels allow IPv6 to work over IPv4 addresses, provided you
 | 
			
		||||
# 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"
 | 
			
		||||
# You may want to depend on eth0 like so
 | 
			
		||||
#rc_need_6to4="net.eth0"
 | 
			
		||||
@@ -853,7 +848,7 @@
 | 
			
		||||
# sit0 - otherwise use a different name like 6to4 in the example above.
 | 
			
		||||
 | 
			
		||||
# 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"
 | 
			
		||||
#suffix_6to4=":ff"
 | 
			
		||||
 | 
			
		||||
@@ -901,7 +896,7 @@
 | 
			
		||||
# and you're done :)
 | 
			
		||||
 | 
			
		||||
# 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.
 | 
			
		||||
#plug_timeout="10"
 | 
			
		||||
# A value of 0 means wait forever.
 | 
			
		||||
@@ -941,8 +936,8 @@
 | 
			
		||||
 | 
			
		||||
#preup() {
 | 
			
		||||
#	# Test for link on the interface prior to bringing it up.  This
 | 
			
		||||
#	# only works on some network adapters and requires the mii-diag
 | 
			
		||||
#	# package to be installed.
 | 
			
		||||
#	# only works on some network adapters and requires the
 | 
			
		||||
#	# sys-apps/net-tools package to be installed.
 | 
			
		||||
#	if mii-tool "${IFACE}" 2> /dev/null | grep -q 'no link'; then
 | 
			
		||||
#		ewarn "No link on ${IFACE}, aborting configuration"
 | 
			
		||||
#		return 1
 | 
			
		||||
@@ -1003,7 +998,7 @@
 | 
			
		||||
#		else
 | 
			
		||||
#			for x; do
 | 
			
		||||
#				ebegin "${x}"
 | 
			
		||||
#				ip rule add ${x} dev "${IFACE}"
 | 
			
		||||
#				ip rule add ${x}
 | 
			
		||||
#				eend $?
 | 
			
		||||
#			done
 | 
			
		||||
#		fi
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
 | 
			
		||||
# Set to "YES" if you want the rc system to try and start services
 | 
			
		||||
# in parallel for a slight speed improvement. When running in parallel we
 | 
			
		||||
# prefix the service output with it's name as the output will get
 | 
			
		||||
# prefix the service output with its name as the output will get
 | 
			
		||||
# jumbled up.
 | 
			
		||||
# WARNING: whilst we have improved parallel, it can still potentially lock
 | 
			
		||||
# the boot process. Don't file bugs about this unless you can supply
 | 
			
		||||
@@ -11,7 +11,8 @@
 | 
			
		||||
 | 
			
		||||
# Set rc_interactive to "YES" and you'll be able to press the I key during
 | 
			
		||||
# boot so you can choose to start specific services. Set to "NO" to disable
 | 
			
		||||
# this feature.
 | 
			
		||||
# this feature. This feature is automatically disabled if rc_parallel is
 | 
			
		||||
# set to YES.
 | 
			
		||||
#rc_interactive="YES"
 | 
			
		||||
 | 
			
		||||
# If we need to drop to a shell, you can specify it here.
 | 
			
		||||
@@ -75,8 +76,14 @@
 | 
			
		||||
# Set unicode to YES to turn on unicode support for keyboards and screens.
 | 
			
		||||
#unicode="NO"
 | 
			
		||||
 | 
			
		||||
# Network fstypes. Below is the default.
 | 
			
		||||
net_fs_list="afs cifs coda davfs fuse gfs ncpfs nfs nfs4 ocfs2 shfs smbfs"
 | 
			
		||||
# Below is the default list of network fstypes.
 | 
			
		||||
#
 | 
			
		||||
# 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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										11
									
								
								init.d.misc/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								init.d.misc/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
avahi-dnsconfd
 | 
			
		||||
avahid
 | 
			
		||||
dhcpcd
 | 
			
		||||
dbus
 | 
			
		||||
hald
 | 
			
		||||
named
 | 
			
		||||
ntpd
 | 
			
		||||
openvpn
 | 
			
		||||
polkitd
 | 
			
		||||
sshd
 | 
			
		||||
wpa_supplicant
 | 
			
		||||
							
								
								
									
										2
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -24,6 +24,7 @@ mount-ro
 | 
			
		||||
mtab
 | 
			
		||||
numlock
 | 
			
		||||
procfs
 | 
			
		||||
staticroute
 | 
			
		||||
sysfs
 | 
			
		||||
devdb
 | 
			
		||||
hostid
 | 
			
		||||
@@ -34,6 +35,7 @@ rc-enabled
 | 
			
		||||
rpcbind
 | 
			
		||||
savecore
 | 
			
		||||
swap-blk
 | 
			
		||||
swclock
 | 
			
		||||
syslogd
 | 
			
		||||
termencoding
 | 
			
		||||
ttys
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
DIR=	${INITDIR}
 | 
			
		||||
SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
 | 
			
		||||
	network.in root.in savecache.in swap.in sysctl.in urandom.in
 | 
			
		||||
	network.in root.in savecache.in staticroute.in swap.in swclock.in \
 | 
			
		||||
	sysctl.in urandom.in
 | 
			
		||||
BIN=	${OBJS}
 | 
			
		||||
 | 
			
		||||
# Build our old net foo or not
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use hostname
 | 
			
		||||
	need localmount
 | 
			
		||||
	before logger
 | 
			
		||||
	after clock sysctl
 | 
			
		||||
@@ -36,6 +35,12 @@ cleanup_tmp_dir()
 | 
			
		||||
		# Faster than find
 | 
			
		||||
		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 . \
 | 
			
		||||
			! -path "./lost+found" \
 | 
			
		||||
			! -path "./lost+found/*" \
 | 
			
		||||
@@ -49,8 +54,6 @@ cleanup_tmp_dir()
 | 
			
		||||
			! -path "./aquota.group/*" \
 | 
			
		||||
			! -path "./journal" \
 | 
			
		||||
			! -path "./journal/*" \
 | 
			
		||||
			! -path "./.private" \
 | 
			
		||||
			! -path "./.private/*" \
 | 
			
		||||
			-exec rm -rf {} \;
 | 
			
		||||
		eend 0
 | 
			
		||||
	else
 | 
			
		||||
@@ -95,7 +98,7 @@ start()
 | 
			
		||||
		for x in "" $xtra; do
 | 
			
		||||
			mkutmp /var/run/utmp$x
 | 
			
		||||
		done
 | 
			
		||||
		[ -e /var/log/wtmp ] && mkutmp /var/log/wtmp
 | 
			
		||||
		[ -e /var/log/wtmp ] || mkutmp /var/log/wtmp
 | 
			
		||||
		eend 0
 | 
			
		||||
 | 
			
		||||
		ebegin "Cleaning /var/run"
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount termencoding
 | 
			
		||||
	after hotplug bootmisc
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ _IFS="
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use dev clock modules
 | 
			
		||||
	keyword -jail -openvz -prefix -timeout -vserver
 | 
			
		||||
	keyword -jail -openvz -prefix -timeout -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_abort() {
 | 
			
		||||
@@ -30,38 +30,6 @@ _forcefsck()
 | 
			
		||||
	[ -e /forcefsck ] || get_bootparam forcefsck
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_on_ac_power()
 | 
			
		||||
{
 | 
			
		||||
	if [ -f /proc/acpi/ac_adapter/AC/state ]; then
 | 
			
		||||
		cat /proc/acpi/ac_adapter/AC/state | while read line; do
 | 
			
		||||
			case "$line" in
 | 
			
		||||
			"state:"*"off-line") return 128;;
 | 
			
		||||
			esac
 | 
			
		||||
		done
 | 
			
		||||
	elif [ -f /proc/pmu/info ]; then
 | 
			
		||||
		cat /proc/pmu/info | while read line; do
 | 
			
		||||
			case "$line" in
 | 
			
		||||
			"AC Power"*": 0") return 128;;
 | 
			
		||||
			esac
 | 
			
		||||
		done
 | 
			
		||||
	elif type envstat >/dev/null 2>&1; then
 | 
			
		||||
		# NetBSD has envstat
 | 
			
		||||
		envstat -d acpiacad0 2>/dev/null | while read line; do
 | 
			
		||||
			case "$line" in
 | 
			
		||||
			"connected:"*"OFF") return 128;;
 | 
			
		||||
			esac
 | 
			
		||||
		done
 | 
			
		||||
	elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then
 | 
			
		||||
		case $(sysctl -n hw.acpi.acline) in
 | 
			
		||||
		0) return 1;;
 | 
			
		||||
		*) return 0;;
 | 
			
		||||
		esac
 | 
			
		||||
	else
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
	[ $? != 128 ]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	local fsck_opts= p= check_extra=
 | 
			
		||||
@@ -73,7 +41,7 @@ start()
 | 
			
		||||
	if _forcefsck; then
 | 
			
		||||
		fsck_opts="$fsck_opts -f"
 | 
			
		||||
		check_extra="(check forced)"
 | 
			
		||||
	elif ! _on_ac_power; then
 | 
			
		||||
	elif ! yesno ${fsck_on_battery:-YES} && ! on_ac_power; then
 | 
			
		||||
		ewarn "Skipping fsck due to not being on AC power"
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ depend()
 | 
			
		||||
	else
 | 
			
		||||
		before *
 | 
			
		||||
	fi
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setupopts()
 | 
			
		||||
 
 | 
			
		||||
@@ -8,14 +8,14 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount termencoding
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
			
		||||
	: ${unicode:=$UNICODE}
 | 
			
		||||
	: =${keymap:=$KEYMAP}
 | 
			
		||||
	: ${keymap:=$KEYMAP}
 | 
			
		||||
	: ${extended_keymaps:=$EXTENDED_KEYMAPS}
 | 
			
		||||
	: ${windowkeys:=$SET_WINDOWSKEYS} 
 | 
			
		||||
	: ${fix_euro:=$FIX_EURO}
 | 
			
		||||
@@ -34,15 +34,25 @@ start()
 | 
			
		||||
		echo 1 > /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	ebegin "Loading key mappings [$keymap]"
 | 
			
		||||
	local loadkeys_uni= wkeys= kmode="-a" msg="ASCII"
 | 
			
		||||
	local wkeys= kmode="-a" msg="ASCII"
 | 
			
		||||
	if yesno $unicode; then
 | 
			
		||||
		loadkeys_uni="--unicode"
 | 
			
		||||
		kmode="-u"
 | 
			
		||||
		msg="UTF-8"
 | 
			
		||||
	fi
 | 
			
		||||
	yesno $windowkeys && wkeys="windowkeys"
 | 
			
		||||
	loadkeys -q $loadkeys_uni $wkeys $keymap $extended_keymaps
 | 
			
		||||
 | 
			
		||||
	# Set terminal encoding to either ASCII or UNICODE.
 | 
			
		||||
	# See utf-8(7) for more information.
 | 
			
		||||
	ebegin "Setting keyboard mode [$msg]"
 | 
			
		||||
	n=1
 | 
			
		||||
	while [ $n -le $ttyn ]; do
 | 
			
		||||
		kbd_mode $kmode -C $ttydev$n
 | 
			
		||||
		n=$(($n + 1))
 | 
			
		||||
	done
 | 
			
		||||
	eend 0
 | 
			
		||||
 | 
			
		||||
	ebegin "Loading key mappings [$keymap]"
 | 
			
		||||
	loadkeys -q $wkeys $keymap $extended_keymaps
 | 
			
		||||
	eend $? "Error loading key mappings" || return $?
 | 
			
		||||
 | 
			
		||||
	if yesno $fix_euro; then
 | 
			
		||||
@@ -52,20 +62,6 @@ start()
 | 
			
		||||
		eend $?
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Set terminal encoding to either ASCII or UNICODE.
 | 
			
		||||
	# See utf-8(7) for more information.
 | 
			
		||||
	ebegin "Setting keyboard mode [$msg]"
 | 
			
		||||
	if yesno $unicode; then
 | 
			
		||||
		dumpkeys ${dumpkeys_charset:+-c} \
 | 
			
		||||
			$dumpkeys_charset | loadkeys --unicode
 | 
			
		||||
	fi
 | 
			
		||||
	n=1
 | 
			
		||||
	while [ $n -le $ttyn ]; do
 | 
			
		||||
		kbd_mode $kmode -C $ttydev$n
 | 
			
		||||
		n=$(($n + 1))
 | 
			
		||||
	done
 | 
			
		||||
	eend 0
 | 
			
		||||
 | 
			
		||||
	# Save the keymapping for use immediately at boot
 | 
			
		||||
	if [ -w "$RC_LIBEXECDIR" ]; then
 | 
			
		||||
		mkdir -p "$RC_LIBEXECDIR"/console
 | 
			
		||||
 
 | 
			
		||||
@@ -18,11 +18,6 @@ start()
 | 
			
		||||
		local_start
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Support old configs
 | 
			
		||||
	if [ -e @SYSCONFDIR@/conf.d/local.start ]; then
 | 
			
		||||
		. @SYSCONFDIR@/conf.d/local.start
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	eend $? "Failed to start local"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -34,10 +29,5 @@ stop()
 | 
			
		||||
		local_stop
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Support old configs
 | 
			
		||||
	if [ -e @SYSCONFDIR@/conf.d/local.stop ]; then
 | 
			
		||||
		. @SYSCONFDIR@/conf.d/local.stop
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	eend $? "Failed to stop local"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,19 +8,22 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need fsck
 | 
			
		||||
	use lvm modules mtab
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	# Mount local filesystems in /etc/fstab.
 | 
			
		||||
	local types="noproc" x=
 | 
			
		||||
	local types="noproc" x= no_netdev=
 | 
			
		||||
	for x in $net_fs_list; do
 | 
			
		||||
		types="${types},${x}"
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if [ "$RC_UNAME" = Linux ]; then
 | 
			
		||||
		no_netdev="-O no_netdev"
 | 
			
		||||
	fi
 | 
			
		||||
	ebegin "Mounting local filesystems"
 | 
			
		||||
	mount -at "$types"
 | 
			
		||||
	mount -at "$types" $no_netdev
 | 
			
		||||
	eend $? "Some local filesystem failed to mount"
 | 
			
		||||
 | 
			
		||||
	# Always return 0 - some local mounts may not be critical for boot
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use isapnp
 | 
			
		||||
	keyword -openvz -prefix -vserver
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ description="Re-mount filesytems read-only for a clean reboot."
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need killprocs savecache
 | 
			
		||||
	keyword -prefix -openvz -vserver
 | 
			
		||||
	keyword -prefix -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -57,6 +57,32 @@ sys_interfaces()
 | 
			
		||||
	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()
 | 
			
		||||
{
 | 
			
		||||
	local ifs= c= f=
 | 
			
		||||
@@ -103,13 +129,28 @@ dumpargs()
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
intup=false
 | 
			
		||||
runip()
 | 
			
		||||
{
 | 
			
		||||
	local int="$1" err=
 | 
			
		||||
 | 
			
		||||
	shift
 | 
			
		||||
 | 
			
		||||
	# Ensure we have a valid broadcast address
 | 
			
		||||
	case "$@" in
 | 
			
		||||
	*" broadcast "*|*" brd "*) ;;
 | 
			
		||||
	*:*) ;; # Ignore IPv6
 | 
			
		||||
	*) set -- "$@" brd +;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	err=$(LC_ALL=C ip address add "$@" dev "$int" 2>&1)
 | 
			
		||||
	[ -z "$err" ] && return 0
 | 
			
		||||
	if [ -z "$err" ]; then
 | 
			
		||||
		# ip does not bring up the interface when adding addresses
 | 
			
		||||
		if ! $intup; then
 | 
			
		||||
			ip link set "$int" up
 | 
			
		||||
			intup=true
 | 
			
		||||
		fi
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
	if [ "$err" = "RTNETLINK answers: File exists" ]; then
 | 
			
		||||
		ip address del "$@" dev "$int" 2>/dev/null
 | 
			
		||||
	fi
 | 
			
		||||
@@ -120,8 +161,9 @@ runip()
 | 
			
		||||
routeflush()
 | 
			
		||||
{
 | 
			
		||||
	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 delete default 2>/dev/null
 | 
			
		||||
		else
 | 
			
		||||
			# Sadly we also delete some link routes, but
 | 
			
		||||
			# this cannot be helped
 | 
			
		||||
@@ -141,6 +183,8 @@ routeflush()
 | 
			
		||||
				esac
 | 
			
		||||
				route del $flags $dest $netmask $xtra
 | 
			
		||||
			done
 | 
			
		||||
			# Erase any default dev eth0 routes
 | 
			
		||||
			route del default 2>/dev/null
 | 
			
		||||
		fi
 | 
			
		||||
	else
 | 
			
		||||
		route -qn flush
 | 
			
		||||
@@ -165,12 +209,20 @@ runargs()
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	local cr=0 r= int= intv= cmd= args= upcmd=
 | 
			
		||||
 | 
			
		||||
	if [ -z "$domainname" -a -s /etc/defaultdomain ]; then
 | 
			
		||||
		domainname=$(cat /etc/defaultdomain)
 | 
			
		||||
	fi
 | 
			
		||||
	if [ -n "$domainname" ]; then
 | 
			
		||||
		ebegin "Setting NIS domainname: $domainname"
 | 
			
		||||
		domainname "$domainname"
 | 
			
		||||
		eend $?
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	einfo "Starting network"
 | 
			
		||||
	routeflush
 | 
			
		||||
	if [ "$RC_UNAME" = "Linux" ]; then
 | 
			
		||||
		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 \
 | 
			
		||||
			gw 127.0.0.1 reject 2>/dev/null
 | 
			
		||||
	else
 | 
			
		||||
@@ -194,7 +246,7 @@ start()
 | 
			
		||||
			-f /etc/ifup."$int" -o -f "$cf" ] || continue
 | 
			
		||||
		veinfo "$int"
 | 
			
		||||
		case "$func" in
 | 
			
		||||
		ip)	func=runip;;
 | 
			
		||||
		ip)	func=runip; intup=false;;
 | 
			
		||||
		esac
 | 
			
		||||
		eindent
 | 
			
		||||
		runargs /etc/ifup."$int" "$upcmd"
 | 
			
		||||
@@ -223,13 +275,41 @@ start()
 | 
			
		||||
	eoutdent
 | 
			
		||||
	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
 | 
			
		||||
		ebegin "Setting default route $defaultroute"
 | 
			
		||||
		if [ "$RC_UNAME" = Linux ]; then
 | 
			
		||||
			route add default gw $defaultroute
 | 
			
		||||
		else
 | 
			
		||||
		route add default $defaultroute
 | 
			
		||||
		eend $?
 | 
			
		||||
	elif [ -n "$defaultiproute" ]; then
 | 
			
		||||
		ebegin "Setting default route $defaultiproute"
 | 
			
		||||
		ip route add default $defaultiproute
 | 
			
		||||
		eend $?
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if [ -n "$defaultroute6" ]; then
 | 
			
		||||
		ebegin "Setting default route $defaultroute6"
 | 
			
		||||
		if [ "$RC_UNAME" = Linux ]; then
 | 
			
		||||
			routecmd="route -A inet6 add"
 | 
			
		||||
		else
 | 
			
		||||
			routecmd="route -inet6 add"
 | 
			
		||||
		fi
 | 
			
		||||
		$routecmd default $defaultroute6
 | 
			
		||||
		eend $?
 | 
			
		||||
	elif [ -n "$defaultiproute6" ]; then
 | 
			
		||||
		ebegin "Setting default route $defaultiproute6"
 | 
			
		||||
		ip -f inet6 route add default $defaultiproute6
 | 
			
		||||
		eend $?
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
@@ -258,6 +338,11 @@ stop()
 | 
			
		||||
		then
 | 
			
		||||
			veinfo "$int"
 | 
			
		||||
			runargs /etc/ifdown."$int" "$downcmd"
 | 
			
		||||
			if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
 | 
			
		||||
				# We need to do this, otherwise we may
 | 
			
		||||
				# fail to add things correctly on restart
 | 
			
		||||
				ip address flush dev "$int" 2>/dev/null
 | 
			
		||||
			fi
 | 
			
		||||
			ifconfig "$int" down 2>/dev/null
 | 
			
		||||
			ifconfig "$int" destroy 2>/dev/null
 | 
			
		||||
		fi
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -openvz -prefix -vserver
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_setleds()
 | 
			
		||||
 
 | 
			
		||||
@@ -8,12 +8,12 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	use modules devfs
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -openvz -prefix -vserver
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
		modprobe -q usbcore
 | 
			
		||||
	fi
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ description="Mount the root fs read/write"
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need fsck
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ start()
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
	local save=
 | 
			
		||||
	for x in deptree depconfig softlevel nettree rc.log; do
 | 
			
		||||
	for x in deptree depconfig shutdowntime softlevel nettree rc.log; do
 | 
			
		||||
		[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
 | 
			
		||||
	done
 | 
			
		||||
	if [ -n "$save" ]; then
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										104
									
								
								init.d/staticroute.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								init.d/staticroute.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#!@PREFIX@/sbin/runscript
 | 
			
		||||
# Copyright (c) 2009 Roy Marples <roy@marples.name>
 | 
			
		||||
# All rights reserved. Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
# This script was inspired by the equivalent rc.d staticroute from NetBSD.
 | 
			
		||||
 | 
			
		||||
description="Configures static routes."
 | 
			
		||||
__nl="
 | 
			
		||||
"
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	provide net
 | 
			
		||||
	use network
 | 
			
		||||
	keyword -jail -prefix -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre_flight_checks()
 | 
			
		||||
{
 | 
			
		||||
	route=route
 | 
			
		||||
	[ -s /etc/route.conf ] && return 0
 | 
			
		||||
 | 
			
		||||
	if [ -n "$staticiproute" ]; then
 | 
			
		||||
		route="ip route"
 | 
			
		||||
		staticroute="$staticiproute"
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dump_args()
 | 
			
		||||
{
 | 
			
		||||
	# Route configuration file, as used by the NetBSD RC system
 | 
			
		||||
	if [ -s /etc/route.conf ]; then
 | 
			
		||||
		cat /etc/route.conf
 | 
			
		||||
		return $?
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	case "$staticroute" in
 | 
			
		||||
	*"$__nl"*)
 | 
			
		||||
		echo "$staticroute"
 | 
			
		||||
		;;
 | 
			
		||||
	*)
 | 
			
		||||
		(
 | 
			
		||||
			set -o noglob
 | 
			
		||||
			IFS=';'; set -- $staticroute
 | 
			
		||||
			IFS="$__nl"; echo "$*"
 | 
			
		||||
		)
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
do_routes()
 | 
			
		||||
{
 | 
			
		||||
	local xtra= family=
 | 
			
		||||
	[ "$RC_UNAME" != Linux ] && xtra=-q
 | 
			
		||||
 | 
			
		||||
	ebegin "$1 static routes"
 | 
			
		||||
	eindent
 | 
			
		||||
	pre_flight_checks
 | 
			
		||||
	dump_args | while read args; do
 | 
			
		||||
		[ -z "$args" ] && continue
 | 
			
		||||
		case "$args" in
 | 
			
		||||
		"#"*)
 | 
			
		||||
			;;
 | 
			
		||||
		"+"*)
 | 
			
		||||
			[ $2 = "add" ] && eval ${args#*+}
 | 
			
		||||
			;;
 | 
			
		||||
		"-"*)
 | 
			
		||||
			[ $2 = "del" -o $2 = "delete" ] && eval ${args#*-}
 | 
			
		||||
			;;
 | 
			
		||||
		*)
 | 
			
		||||
			veinfo "$args"
 | 
			
		||||
			case "$route" in
 | 
			
		||||
			"ip route")
 | 
			
		||||
				ip route $2 $args
 | 
			
		||||
				;;
 | 
			
		||||
			*)
 | 
			
		||||
				# Linux route does cannot work it out ...
 | 
			
		||||
				if [ "$RC_UNAME" = Linux ]; then
 | 
			
		||||
					case "$args" in
 | 
			
		||||
					*:*) family="-A inet6";;
 | 
			
		||||
					*) family=;;
 | 
			
		||||
					esac
 | 
			
		||||
				fi
 | 
			
		||||
				route $famly $xtra $2 -$args
 | 
			
		||||
				;;
 | 
			
		||||
			esac
 | 
			
		||||
			veend $?
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
	eoutdent
 | 
			
		||||
	eend 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	do_routes "Adding" "add"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop()
 | 
			
		||||
{
 | 
			
		||||
	local cmd="delete"
 | 
			
		||||
	[ "$RC_UNAME" = Linux ] && cmd="del"
 | 
			
		||||
	do_routes "Deleting" "$cmd"
 | 
			
		||||
}
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										28
									
								
								init.d/swclock.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								init.d/swclock.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#!@PREFIX@/sbin/runscript
 | 
			
		||||
# Copyright (c) 2009 Roy Marples <roy@marples.name>
 | 
			
		||||
# All rights reserved. Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
description="Sets the local clock to the mtime of a given file."
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	before *
 | 
			
		||||
	provide clock
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# swclock is an OpenRC built in
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Setting the local clock based on last shutdown time"
 | 
			
		||||
	swclock --warn
 | 
			
		||||
	eend $?
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Saving the shutdown time"
 | 
			
		||||
	swclock --save
 | 
			
		||||
	eend $?
 | 
			
		||||
}
 | 
			
		||||
@@ -4,7 +4,6 @@
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use hostname
 | 
			
		||||
	before bootmisc logger
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
@@ -12,13 +11,21 @@ depend()
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
			
		||||
	local retval=0 var= comments=
 | 
			
		||||
	local retval=0 var= comments= conf=
 | 
			
		||||
	ebegin "Configuring kernel parameters"
 | 
			
		||||
	eindent
 | 
			
		||||
	for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
 | 
			
		||||
		if [ -r "$conf" ]; then
 | 
			
		||||
			vebegin "applying $conf"
 | 
			
		||||
			while read var comments; do
 | 
			
		||||
				case "$var" in
 | 
			
		||||
				""|"#"*) continue;;
 | 
			
		||||
				esac
 | 
			
		||||
				sysctl -w "$var" >/dev/null || retval=1
 | 
			
		||||
	done < /etc/sysctl.conf
 | 
			
		||||
			done < "$conf"
 | 
			
		||||
			veend $retval
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
	eoutdent
 | 
			
		||||
	eend $retval "Some errors were encountered"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -4,15 +4,22 @@
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use hostname
 | 
			
		||||
	before bootmisc logger
 | 
			
		||||
	keyword -openvz -prefix -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
			
		||||
	local conf= retval=0
 | 
			
		||||
	ebegin "Configuring kernel parameters"
 | 
			
		||||
	sysctl -p >/dev/null
 | 
			
		||||
	eend $? "Some errors were encountered"
 | 
			
		||||
	eindent
 | 
			
		||||
	for conf in /etc/sysctl.d/*.conf /etc/sysctl.conf; do
 | 
			
		||||
		if [ -r "$conf" ]; then
 | 
			
		||||
			vebegin "applying $conf"
 | 
			
		||||
			sysctl -p "$conf" >/dev/null
 | 
			
		||||
			veend $? || retval=1
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
	eoutdent
 | 
			
		||||
	eend $retval "Some errors were encountered"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,7 +39,7 @@
 | 
			
		||||
.Nm eprefix
 | 
			
		||||
.Nd colorful informational output
 | 
			
		||||
.Sh LIBRARY
 | 
			
		||||
Enhanced Informatation output library (libeinfo, -leinfo)
 | 
			
		||||
Enhanced Information output library (libeinfo, -leinfo)
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.In einfo.h
 | 
			
		||||
.Ft int Fn einfo "const char * restrict format" ...
 | 
			
		||||
 
 | 
			
		||||
@@ -36,7 +36,7 @@
 | 
			
		||||
.Nm
 | 
			
		||||
gathers and displays information about the status of services 
 | 
			
		||||
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.
 | 
			
		||||
.Pp
 | 
			
		||||
The options are as follows:
 | 
			
		||||
 
 | 
			
		||||
@@ -54,7 +54,7 @@ owned by
 | 
			
		||||
.Fa uid ,
 | 
			
		||||
all of which are optional.
 | 
			
		||||
.Pp
 | 
			
		||||
The retuned list should be freed when done.
 | 
			
		||||
The returned list should be freed when done.
 | 
			
		||||
.Sh IMPLEMENTATION NOTES
 | 
			
		||||
On BSD systems we use
 | 
			
		||||
.Lb libkvm
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,7 @@ is set to the hook running, and
 | 
			
		||||
.Fa name
 | 
			
		||||
is set to the name of the runlevel or name of the service.
 | 
			
		||||
.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 .
 | 
			
		||||
.Sh SEE ALSO
 | 
			
		||||
.Xr rc 8 ,
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
.\" SUCH DAMAGE.
 | 
			
		||||
.\"
 | 
			
		||||
.Dd July 1, 2009
 | 
			
		||||
.Dd November 4, 2009
 | 
			
		||||
.Dt RUNSCRIPT 8 SMM
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
@@ -39,8 +39,8 @@
 | 
			
		||||
.Nm
 | 
			
		||||
is basically an interpreter for shell scripts which provide an easy interface
 | 
			
		||||
to the often complex system commands and daemons.
 | 
			
		||||
When a service runs a command it first loads it's mulitplexed configuration
 | 
			
		||||
file, then it's master configuration file, then
 | 
			
		||||
When a service runs a command it first loads its multiplexed configuration
 | 
			
		||||
file, then its master configuration file, then
 | 
			
		||||
.Pa /etc/rc.conf
 | 
			
		||||
and finally the script itself. At this point
 | 
			
		||||
.Nm
 | 
			
		||||
@@ -79,7 +79,7 @@ Ignore all dependency information the service supplies.
 | 
			
		||||
Only run the command if the service has been started.
 | 
			
		||||
.It Fl q , -quiet
 | 
			
		||||
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
 | 
			
		||||
Turns on any extra informational output the service generates.
 | 
			
		||||
.It Fl Z , -dry-run
 | 
			
		||||
@@ -90,9 +90,9 @@ or stopping them.
 | 
			
		||||
The following variables affect the service script:
 | 
			
		||||
.Bl -tag -width "RC_DEFAULTLEVEL"
 | 
			
		||||
.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
 | 
			
		||||
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.
 | 
			
		||||
.It Ar description
 | 
			
		||||
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
 | 
			
		||||
to the runlevel.
 | 
			
		||||
.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
 | 
			
		||||
The service will start before these services and stop after these services.
 | 
			
		||||
.It Ic provide
 | 
			
		||||
@@ -143,6 +143,8 @@ 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
 | 
			
		||||
Don't stop this service when shutting the system down.
 | 
			
		||||
This normally quite safe as remaining daemons will be sent a SIGTERM just
 | 
			
		||||
@@ -223,7 +225,7 @@ is newer than
 | 
			
		||||
return 0, otherwise 1.
 | 
			
		||||
If
 | 
			
		||||
.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 ...
 | 
			
		||||
If
 | 
			
		||||
.Ar file1
 | 
			
		||||
@@ -232,7 +234,7 @@ is newer than
 | 
			
		||||
return 0, otherwise 1.
 | 
			
		||||
If
 | 
			
		||||
.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
 | 
			
		||||
Saves the
 | 
			
		||||
.Ar name
 | 
			
		||||
@@ -318,7 +320,7 @@ Configuration files, relative to the location of the service.
 | 
			
		||||
If a file ending with .${RC_RUNLEVEL} exists then we use that instead.
 | 
			
		||||
.Bl -ohang
 | 
			
		||||
.It Pa ../conf.d/${RC_SVCNAME%%.*}
 | 
			
		||||
mulitplexed configuration file.
 | 
			
		||||
multiplexed configuration file.
 | 
			
		||||
Example: if ${RC_SVCNAME} is net.eth1 then look for
 | 
			
		||||
.Pa ../conf.d/net .
 | 
			
		||||
.It Pa ../conf.d/${RC_SVCNAME}
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@
 | 
			
		||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
.\" SUCH DAMAGE.
 | 
			
		||||
.\"
 | 
			
		||||
.Dd September 4, 2009
 | 
			
		||||
.Dd December 14, 2009
 | 
			
		||||
.Dt START-STOP-DAEMON 8 SMM
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
@@ -43,7 +43,7 @@
 | 
			
		||||
.Ar daemon
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
provides a consistent method of starting, stopping and signalling daemons.
 | 
			
		||||
provides a consistent method of starting, stopping and signaling daemons.
 | 
			
		||||
If neither
 | 
			
		||||
.Fl K , -stop
 | 
			
		||||
nor
 | 
			
		||||
@@ -85,7 +85,7 @@ then
 | 
			
		||||
.Nm
 | 
			
		||||
matches the process
 | 
			
		||||
.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
 | 
			
		||||
Start the daemon as the
 | 
			
		||||
.Ar user
 | 
			
		||||
@@ -136,6 +136,10 @@ option. Only useful when used with daemons that run in the foreground and
 | 
			
		||||
forced into the background with the
 | 
			
		||||
.Fl -b , -background
 | 
			
		||||
option.
 | 
			
		||||
.It Fl I , -ionice Ar class Ns Op : Ns Ar data
 | 
			
		||||
Modifies the IO scheduling priority of the daemon.
 | 
			
		||||
Class can be 0 for none, 1 for real time, 2 for best effort and 3 for idle.
 | 
			
		||||
Data can be from 0 to 7 inclusive.
 | 
			
		||||
.It Fl N , -nice Ar level
 | 
			
		||||
Modifies the scheduling priority of the daemon.
 | 
			
		||||
.It Fl 1 , -stdout Ar logfile
 | 
			
		||||
@@ -144,9 +148,9 @@ Redirect the standard output of the process to logfile when started with
 | 
			
		||||
Must be an absolute pathname, but relative to the path optionally given with
 | 
			
		||||
.Fl r , -chroot .
 | 
			
		||||
The logfile can also be a named pipe.
 | 
			
		||||
.It Fl w , -wait Ar seconds
 | 
			
		||||
.It Fl w , -wait Ar milliseconds
 | 
			
		||||
Wait
 | 
			
		||||
.Ar seconds
 | 
			
		||||
.Ar milliseconds
 | 
			
		||||
after starting and check that daemon is still running.
 | 
			
		||||
Useful for daemons that check configuration after forking or stopping race
 | 
			
		||||
conditions where the pidfile is written out after forking.
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,14 @@ _is_bond()
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
@@ -39,13 +46,31 @@ bonding_pre_start()
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Configure the bond.
 | 
			
		||||
	# Nice and dynamic :)
 | 
			
		||||
	# Interface must be down in order to configure
 | 
			
		||||
	_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
 | 
			
		||||
		[ -f "${x}" ] || continue
 | 
			
		||||
		eval s=\$${x##*/}_${IFVAR}
 | 
			
		||||
		n=${x##*/}
 | 
			
		||||
		eval s=\$${n}_${IFVAR}
 | 
			
		||||
		[ "${n}" != "mode" ] || continue
 | 
			
		||||
		if [ -n "${s}" ]; then
 | 
			
		||||
			echo "${s}" >"${x}"
 | 
			
		||||
			einfo "Setting ${n}: ${s}"
 | 
			
		||||
			echo "${s}" >"${x}" || \
 | 
			
		||||
			eerror "Failed to configure $n (${n}_${IFVAR})"
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
@@ -72,6 +97,11 @@ bonding_pre_start()
 | 
			
		||||
	# finally add in slaves
 | 
			
		||||
	eoutdent
 | 
			
		||||
	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
 | 
			
		||||
			echo "+${s}" >/sys/class/net/"${IFACE}"/bonding/slaves
 | 
			
		||||
		done
 | 
			
		||||
@@ -117,6 +147,12 @@ bonding_stop()
 | 
			
		||||
	done
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	_down
 | 
			
		||||
 | 
			
		||||
	if [ -d /sys/class/net ]; then
 | 
			
		||||
		echo "-${IFACE}" > /sys/class/net/bonding_masters
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	eend 0
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,8 @@ _config_vars="$_config_vars bridge bridge_add brctl"
 | 
			
		||||
 | 
			
		||||
_is_bridge()
 | 
			
		||||
{
 | 
			
		||||
	brctl show 2>/dev/null | grep -q "^${IFACE}[[:space:]]"
 | 
			
		||||
	# Ignore header line so as to allow for bridges named 'bridge'
 | 
			
		||||
	brctl show 2>/dev/null | sed '1,1d' | grep -q "^${IFACE}[[:space:]]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bridge_pre_start()
 | 
			
		||||
@@ -88,14 +89,16 @@ bridge_post_stop()
 | 
			
		||||
	if _is_bridge; then
 | 
			
		||||
		ebegin "Destroying bridge ${IFACE}"
 | 
			
		||||
		_down
 | 
			
		||||
		# Ignore header line so as to allow for bridges named 'bridge'
 | 
			
		||||
		ports="$(brctl show 2>/dev/null | \
 | 
			
		||||
			sed -n -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')"
 | 
			
		||||
			sed -n -e '1,1d' -e '/^'"${IFACE}"'[[:space:]]/,/^\S/ { /^\('"${IFACE}"'[[:space:]]\|\t\)/s/^.*\t//p }')"
 | 
			
		||||
		delete=true
 | 
			
		||||
		iface=${IFACE}
 | 
			
		||||
		eindent
 | 
			
		||||
	else
 | 
			
		||||
		# Work out if we're added to a bridge for removal or not
 | 
			
		||||
		eval set -- $(brctl show 2>/dev/null | sed -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g")
 | 
			
		||||
		# Ignore header line so as to allow for bridges named 'bridge'
 | 
			
		||||
		eval set -- $(brctl show 2>/dev/null | sed -e '1,1d' -e "s/'/'\\\\''/g" -e "s/$/'/g" -e "s/^/'/g")
 | 
			
		||||
		local line=
 | 
			
		||||
		for line; do
 | 
			
		||||
			set -- ${line}
 | 
			
		||||
 
 | 
			
		||||
@@ -17,6 +17,7 @@ dhclient_start()
 | 
			
		||||
 | 
			
		||||
	# Get our options
 | 
			
		||||
	# These options only work in Gentoo, and maybe RedHat
 | 
			
		||||
	eval args=\$dhclient_${IFVAR}
 | 
			
		||||
	eval opts=\$dhcp_${IFVAR}
 | 
			
		||||
	[ -z "${opts}" ] && opts=${dhcp}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -56,8 +56,11 @@ dhcpcd_start()
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Add our route metric
 | 
			
		||||
	[ "${metric:-0}" != "0" ] && args="${args} -m ${metric}"
 | 
			
		||||
	# Add our route metric if not given
 | 
			
		||||
	case " $args " in
 | 
			
		||||
	*" -m "*) ;;
 | 
			
		||||
	*) [ "${metric:-0}" != 0 ] && args="$args -m $metric";;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	# Bring up DHCP for this interface
 | 
			
		||||
	ebegin "Running dhcpcd"
 | 
			
		||||
 
 | 
			
		||||
@@ -42,7 +42,8 @@ _ifindex()
 | 
			
		||||
_is_wireless()
 | 
			
		||||
{
 | 
			
		||||
	# Support new sysfs layout
 | 
			
		||||
	[ -d /sys/class/net/"${IFACE}"/wireless ] && return 0
 | 
			
		||||
	[ -d /sys/class/net/"${IFACE}"/wireless -o \
 | 
			
		||||
		-d /sys/class/net/"${IFACE}"/phy80211 ] && return 0
 | 
			
		||||
 | 
			
		||||
	[ ! -e /proc/net/wireless ] && return 1
 | 
			
		||||
	grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/wireless
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,18 @@
 | 
			
		||||
# Copyright (c) 2007-2008 Roy Marples <roy@marples.name>
 | 
			
		||||
# 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()
 | 
			
		||||
{
 | 
			
		||||
	program /sbin/ip
 | 
			
		||||
	program $(_ip)
 | 
			
		||||
	provide interface
 | 
			
		||||
	after ifconfig
 | 
			
		||||
}
 | 
			
		||||
@@ -43,7 +52,8 @@ _ifindex()
 | 
			
		||||
_is_wireless()
 | 
			
		||||
{
 | 
			
		||||
	# Support new sysfs layout
 | 
			
		||||
	[ -d /sys/class/net/"${IFACE}"/wireless ] && return 0
 | 
			
		||||
	[ -d /sys/class/net/"${IFACE}"/wireless -o \
 | 
			
		||||
		-d /sys/class/net/"${IFACE}"/phy80211 ] && return 0
 | 
			
		||||
 | 
			
		||||
	[ ! -e /proc/net/wireless ] && return 1
 | 
			
		||||
	grep -Eq "^[[:space:]]*${IFACE}:" /proc/net/wireless
 | 
			
		||||
@@ -159,7 +169,8 @@ _add_route()
 | 
			
		||||
 | 
			
		||||
	# We cannot use a metric if we're using a nexthop
 | 
			
		||||
	if ! ${have_metric} && \
 | 
			
		||||
		[ -n "${metric}" -a -z "${cmd##* nexthop }" ]
 | 
			
		||||
		[ -n "${metric}" -a \
 | 
			
		||||
			"${cmd##* nexthop }" = "$cmd" ]
 | 
			
		||||
	then
 | 
			
		||||
		cmd="${cmd} metric ${metric}"
 | 
			
		||||
	fi
 | 
			
		||||
 
 | 
			
		||||
@@ -90,7 +90,7 @@ pppd_pre_start()
 | 
			
		||||
	eval passwordset=\$\{password_${IFVAR}-x\}
 | 
			
		||||
	if [ -n "${username}" ] \
 | 
			
		||||
	&& [ -n "${password}" -o -z "${passwordset}" ]; then
 | 
			
		||||
		opts="${opts} plugin passwordfd.so passwordfd 0"
 | 
			
		||||
		opts="plugin passwordfd.so ${opts} passwordfd 0"
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if ! ${hasdefaultmetric}; then
 | 
			
		||||
@@ -155,7 +155,7 @@ pppd_pre_start()
 | 
			
		||||
			opts="${opts} connect true"
 | 
			
		||||
			set -- "$@" "${link}"
 | 
			
		||||
		fi
 | 
			
		||||
		opts="${opts} plugin $1.so"
 | 
			
		||||
		opts="plugin $1.so ${opts}"
 | 
			
		||||
		shift
 | 
			
		||||
		opts="${opts} $@"
 | 
			
		||||
	done
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@ tuntap_pre_start()
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
		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
 | 
			
		||||
		while [ ! -e /dev/net/tun -a ${timeout} -gt 0 ]; do
 | 
			
		||||
			sleep 1
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ _is_vlan()
 | 
			
		||||
_get_vlans()
 | 
			
		||||
{
 | 
			
		||||
	[ -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()
 | 
			
		||||
@@ -87,7 +87,7 @@ vlan_post_start()
 | 
			
		||||
 | 
			
		||||
		# We need to work out the interface name of our new vlan id
 | 
			
		||||
		local ifname="$(sed -n -e \
 | 
			
		||||
			's/^\([^[:space:]]*\) *| '"${vlan}"' *| .*'"${iface}"'$/\1/p' \
 | 
			
		||||
			's/^\([^[:space:]]*\) *| '"${vlan}"' *| .*'"${IFACE}"'$/\1/p' \
 | 
			
		||||
			/proc/net/vlan/config )"
 | 
			
		||||
		mark_service_started "net.${ifname}"
 | 
			
		||||
		(
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,8 @@ DIR=	${LIBDIR}/pkgconfig
 | 
			
		||||
SRCS=	einfo.pc.in openrc.pc.in
 | 
			
		||||
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'
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
BOOT=		bootmisc fsck hostname localmount network \
 | 
			
		||||
		root swap sysctl urandom
 | 
			
		||||
		root staticroute swap sysctl urandom
 | 
			
		||||
DEFAULT=	local netmount
 | 
			
		||||
SHUTDOWN=	savecache
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								scripts/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								scripts/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
DIR=	${LIBEXECDIR}/bin
 | 
			
		||||
BIN=	on_ac_power
 | 
			
		||||
 | 
			
		||||
MK=	../mk
 | 
			
		||||
include ${MK}/scripts.mk
 | 
			
		||||
							
								
								
									
										37
									
								
								scripts/on_ac_power
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								scripts/on_ac_power
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Detect AC power or not in a portable way
 | 
			
		||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
 | 
			
		||||
 | 
			
		||||
# Exit 0 if on AC power, 1 if not and 255 if we don't know how to work it out
 | 
			
		||||
if [ -f /proc/acpi/ac_adapter/AC*/state ]; then
 | 
			
		||||
	cat /proc/acpi/ac_adapter/AC*/state | while read line; do
 | 
			
		||||
		case "$line" in
 | 
			
		||||
		"state:"*"off-line") exit 128;;
 | 
			
		||||
		esac
 | 
			
		||||
	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
 | 
			
		||||
	cat /proc/pmu/info | while read line; do
 | 
			
		||||
		case "$line" in
 | 
			
		||||
		"AC Power"*": 0") exit 128;;
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
elif type envstat >/dev/null 2>&1; then
 | 
			
		||||
	# NetBSD has envstat
 | 
			
		||||
	envstat -d acpiacad0 2>/dev/null | while read line; do
 | 
			
		||||
		case "$line" in
 | 
			
		||||
		"connected:"*"OFF") exit 128;;
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
elif sysctl -q hw.acpi.acline >/dev/null 2>/dev/null; then
 | 
			
		||||
	case $(sysctl -n hw.acpi.acline) in
 | 
			
		||||
	0) exit 1;;
 | 
			
		||||
	*) exit 0;;
 | 
			
		||||
	esac
 | 
			
		||||
else
 | 
			
		||||
	exit 255
 | 
			
		||||
fi
 | 
			
		||||
[ $? != 128 ]
 | 
			
		||||
@@ -5,6 +5,7 @@
 | 
			
		||||
# All rights reserved. Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
. @SYSCONFDIR@/init.d/functions.sh
 | 
			
		||||
. @LIBEXECDIR@/sh/rc-functions.sh
 | 
			
		||||
 | 
			
		||||
config() {
 | 
			
		||||
	[ -n "$*" ] && echo "$RC_SVCNAME config $*" >&3
 | 
			
		||||
@@ -82,24 +83,7 @@ do
 | 
			
		||||
 | 
			
		||||
		if . "$_dir/$RC_SVCNAME"; then
 | 
			
		||||
			echo "$RC_SVCNAME" >&3
 | 
			
		||||
			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
 | 
			
		||||
			_depend
 | 
			
		||||
		fi
 | 
			
		||||
		)
 | 
			
		||||
	done
 | 
			
		||||
 
 | 
			
		||||
@@ -17,7 +17,7 @@ fi
 | 
			
		||||
if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \
 | 
			
		||||
	 -o -e /etc/runlevels/"$RC_BOOTLEVEL"/consolefont ]; then
 | 
			
		||||
	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)"
 | 
			
		||||
		[ -c "$CONSOLE" ] && cons="-C $CONSOLE"
 | 
			
		||||
		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
 | 
			
		||||
	kbd_mode $kmode -C "$CONSOLE" 2>/dev/null
 | 
			
		||||
	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
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,14 +8,19 @@
 | 
			
		||||
# tmpfs and ramfs are easy, so force one or the other.
 | 
			
		||||
mount_svcdir()
 | 
			
		||||
{
 | 
			
		||||
	# mount from fstab if we can
 | 
			
		||||
	fstabinfo --mount "$RC_SVCDIR" && return 0
 | 
			
		||||
 | 
			
		||||
	local fs= fsopts="-o rw,noexec,nodev,nosuid"
 | 
			
		||||
	local devdir="rc-svcdir" x=
 | 
			
		||||
	local svcsize=${rc_svcsize:-1024}
 | 
			
		||||
 | 
			
		||||
	# Some buggy kernels report tmpfs even when not present :(
 | 
			
		||||
	if grep -Eq "[[:space:]]+tmpfs$" /proc/filesystems; then
 | 
			
		||||
		fs="tmpfs"
 | 
			
		||||
		fsopts="$fsopts,mode=0755,size=${svcsize}k"
 | 
			
		||||
	elif grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
 | 
			
		||||
		mount -n -t tmpfs $fsopts,mode=755,size=${svcsize}k \
 | 
			
		||||
			rc-svcdir "$RC_SVCDIR" && return 0
 | 
			
		||||
	fi
 | 
			
		||||
	
 | 
			
		||||
	if grep -Eq "[[:space:]]+ramfs$" /proc/filesystems; then
 | 
			
		||||
		fs="ramfs"
 | 
			
		||||
		# ramfs has no special options
 | 
			
		||||
	elif [ -e /dev/ram0 ] \
 | 
			
		||||
@@ -32,10 +37,7 @@ mount_svcdir()
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# If we have no entry in fstab for $RC_SVCDIR, provide our own
 | 
			
		||||
	if ! fstabinfo --mount "$RC_SVCDIR"; then
 | 
			
		||||
		mount -n -t "$fs" $fsopts "$devdir" "$RC_SVCDIR"
 | 
			
		||||
	fi
 | 
			
		||||
	mount -n -t "$fs" $fsopts rc-svcdir "$RC_SVCDIR"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
. "$RC_LIBEXECDIR"/sh/functions.sh
 | 
			
		||||
@@ -68,4 +70,14 @@ if $mountproc; then
 | 
			
		||||
	eend $?
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,8 @@ stop_addon()
 | 
			
		||||
	( 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()
 | 
			
		||||
{
 | 
			
		||||
	[ -z "$1" ] && return 1
 | 
			
		||||
@@ -84,6 +85,27 @@ get_bootparam()
 | 
			
		||||
	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
 | 
			
		||||
case "$PATH" in
 | 
			
		||||
	"$RC_LIBEXECDIR"/sbin|"$RC_LIBEXECDIR"/sbin:*);;
 | 
			
		||||
 
 | 
			
		||||
@@ -26,6 +26,8 @@ do_unmount()
 | 
			
		||||
		# Unmounting a shared mount can unmount other mounts, so
 | 
			
		||||
		# we need to check the mount is still valid
 | 
			
		||||
		mountinfo --quiet "$mnt" || continue
 | 
			
		||||
		# Ensure we interpret all characters properly.
 | 
			
		||||
		mnt=$(printf "$mnt")
 | 
			
		||||
 | 
			
		||||
		case "$cmd" in
 | 
			
		||||
			umount)
 | 
			
		||||
@@ -36,7 +38,7 @@ do_unmount()
 | 
			
		||||
				;;
 | 
			
		||||
		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
 | 
			
		||||
			if type fuser >/dev/null 2>&1; then
 | 
			
		||||
				pids="$(fuser $f_opts "$mnt" 2>/dev/null)"
 | 
			
		||||
@@ -53,13 +55,16 @@ do_unmount()
 | 
			
		||||
					eend 1 "in use but fuser finds nothing"
 | 
			
		||||
					retry=0;;
 | 
			
		||||
				*)
 | 
			
		||||
					local sig="KILL"
 | 
			
		||||
					[ $retry -gt 0 ] && sig="TERM"
 | 
			
		||||
					if [ $retry -le 0 ]; then
 | 
			
		||||
						eend 1
 | 
			
		||||
					else
 | 
			
		||||
						local sig="TERM"
 | 
			
		||||
						retry=$(($retry - 1))
 | 
			
		||||
						[ $retry = 1 ] && sig="KILL"
 | 
			
		||||
						fuser $f_kill$sig -k $f_opts \
 | 
			
		||||
							"$mnt" >/dev/null 2>&1
 | 
			
		||||
						sleep 1
 | 
			
		||||
					retry=$(($retry - 1))
 | 
			
		||||
					[ $retry -le 0 ] && eend 1
 | 
			
		||||
					fi
 | 
			
		||||
					;;
 | 
			
		||||
			esac
 | 
			
		||||
			[ $retry -le 0 ] && break
 | 
			
		||||
 
 | 
			
		||||
@@ -187,8 +187,14 @@ done
 | 
			
		||||
unset _f
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
	for _cmd in describe start stop status depend ${extra_commands:-$opts} \
 | 
			
		||||
	for _cmd in describe start stop status ${extra_commands:-$opts} \
 | 
			
		||||
		$extra_started_commands
 | 
			
		||||
	do
 | 
			
		||||
		if [ "$_cmd" = "$1" ]; then
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
 | 
			
		||||
#define RC_LEVEL_BOOT           "boot"
 | 
			
		||||
 
 | 
			
		||||
@@ -643,7 +643,7 @@ static int EINFO_PRINTF(3, 0)
 | 
			
		||||
		fprintf(f, "\n");
 | 
			
		||||
	if (_eprefix)
 | 
			
		||||
		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);
 | 
			
		||||
	va_copy(ap, va);
 | 
			
		||||
	retval += vfprintf(f, fmt, ap) + 3;
 | 
			
		||||
@@ -800,7 +800,7 @@ ebegin(const char *EINFO_RESTRICT fmt, ...)
 | 
			
		||||
	va_start(ap, fmt);
 | 
			
		||||
	retval = _einfovn(fmt, ap);
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
	retval += printf("...");
 | 
			
		||||
	retval += printf(" ...");
 | 
			
		||||
	if (colour_terminal(stdout))
 | 
			
		||||
		retval += printf("\n");
 | 
			
		||||
	LASTCMD("ebegin");
 | 
			
		||||
@@ -817,7 +817,7 @@ _eend(FILE * EINFO_RESTRICT fp, int col, ECOLOR color, const char *msg)
 | 
			
		||||
	if (!msg)
 | 
			
		||||
		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
 | 
			
		||||
	 * 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)
 | 
			
		||||
		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)) {
 | 
			
		||||
		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(ECOLOR_NORMAL));
 | 
			
		||||
	} else {
 | 
			
		||||
		if (col > 0)
 | 
			
		||||
			for (i = 0; i < cols - col; i++)
 | 
			
		||||
				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);
 | 
			
		||||
	retval = _einfovn(fmt, ap);
 | 
			
		||||
	retval += printf("...");
 | 
			
		||||
	retval += printf(" ...");
 | 
			
		||||
	if (colour_terminal(stdout))
 | 
			
		||||
		retval += printf("\n");
 | 
			
		||||
	va_end(ap);
 | 
			
		||||
 
 | 
			
		||||
@@ -346,8 +346,9 @@ get_provided(const RC_DEPINFO *depinfo, const char *runlevel, int options)
 | 
			
		||||
	    get_provided1(runlevel, providers, dt, bootlevel, false, RC_SERVICE_STOPPED))
 | 
			
		||||
		return providers;
 | 
			
		||||
 | 
			
		||||
	/* Still nothing? OK, list all services */
 | 
			
		||||
	TAILQ_FOREACH(service, dt->services, entries)
 | 
			
		||||
	/* Still nothing? OK, list our first provided service. */
 | 
			
		||||
	service = TAILQ_FIRST(dt->services);
 | 
			
		||||
	if (service != NULL)
 | 
			
		||||
		rc_stringlist_add(providers, service->value);
 | 
			
		||||
 | 
			
		||||
	return providers;
 | 
			
		||||
 
 | 
			
		||||
@@ -233,6 +233,8 @@ rc_sys(void)
 | 
			
		||||
		return RC_SYS_VSERVER;
 | 
			
		||||
	else if (exists("/proc/vz/veinfo") && !exists("/proc/vz/version"))
 | 
			
		||||
		return RC_SYS_OPENVZ;
 | 
			
		||||
	else if (file_regex("/proc/self/cgroup", ":/.+$"))
 | 
			
		||||
		return RC_SYS_LXC;
 | 
			
		||||
	else if (file_regex("/proc/self/status",
 | 
			
		||||
		"envID:[[:space:]]*[1-9]"))
 | 
			
		||||
		return RC_SYS_OPENVZ; /* old test */
 | 
			
		||||
@@ -375,7 +377,7 @@ rc_runlevel_stacks(const char *runlevel)
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_runlevel_stacks)
 | 
			
		||||
 | 
			
		||||
/* Resolve a service name to it's full path */
 | 
			
		||||
/* Resolve a service name to its full path */
 | 
			
		||||
char *
 | 
			
		||||
rc_service_resolve(const char *service)
 | 
			
		||||
{
 | 
			
		||||
 
 | 
			
		||||
@@ -117,7 +117,7 @@ bool rc_runlevel_stopping(void);
 | 
			
		||||
 | 
			
		||||
/*! @name RC
 | 
			
		||||
 * 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. */
 | 
			
		||||
 | 
			
		||||
/*! @brief States a service can be in */
 | 
			
		||||
@@ -268,6 +268,7 @@ bool rc_service_daemons_crashed(const char *);
 | 
			
		||||
 * Some services cannot work in these systems, or we do something else. */
 | 
			
		||||
#define RC_SYS_JAIL    "JAIL"
 | 
			
		||||
#define RC_SYS_OPENVZ  "OPENVZ"
 | 
			
		||||
#define RC_SYS_LXC     "LXC"
 | 
			
		||||
#define RC_SYS_PREFIX  "PREFIX"
 | 
			
		||||
#define RC_SYS_UML     "UML"
 | 
			
		||||
#define RC_SYS_VSERVER "VSERVER"
 | 
			
		||||
@@ -325,7 +326,7 @@ typedef void *RC_DEPTREE;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*! 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 target
 | 
			
		||||
 * @param mtime of newest target
 | 
			
		||||
@@ -334,7 +335,7 @@ typedef void *RC_DEPTREE;
 | 
			
		||||
bool rc_newer_than(const char *, const char *, time_t *, char *);
 | 
			
		||||
 | 
			
		||||
/*! 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 target
 | 
			
		||||
 * @param mtime of oldest target
 | 
			
		||||
@@ -445,7 +446,7 @@ RC_STRINGLIST *rc_config_load(const char *);
 | 
			
		||||
/*! Return the value of the entry from a key=value list. */
 | 
			
		||||
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
 | 
			
		||||
 * not exist or EINVAL if it's not a boolean.
 | 
			
		||||
 * @param variable to check
 | 
			
		||||
@@ -484,9 +485,9 @@ bool rc_stringlist_delete(RC_STRINGLIST *, const char *);
 | 
			
		||||
 * @return pointer to item */
 | 
			
		||||
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 seperator
 | 
			
		||||
 * @param separator
 | 
			
		||||
 * @return new list */
 | 
			
		||||
RC_STRINGLIST *rc_stringlist_split(const char *, const char *);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								src/rc/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								src/rc/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -38,6 +38,7 @@ service_crashed
 | 
			
		||||
checkpath
 | 
			
		||||
fstabinfo
 | 
			
		||||
mountinfo
 | 
			
		||||
swclock
 | 
			
		||||
rc-depend
 | 
			
		||||
service_get_value
 | 
			
		||||
service_set_value
 | 
			
		||||
@@ -59,6 +60,7 @@ checkpath.o
 | 
			
		||||
fstabinfo.o
 | 
			
		||||
mountinfo.o
 | 
			
		||||
start-stop-daemon.o
 | 
			
		||||
swclock.o
 | 
			
		||||
rc-applets.o
 | 
			
		||||
rc-depend.o
 | 
			
		||||
rc-logger.o
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@ PROG=		rc
 | 
			
		||||
SRCS=		checkpath.c fstabinfo.c mountinfo.c start-stop-daemon.c \
 | 
			
		||||
		rc-applets.c rc-depend.c rc-logger.c \
 | 
			
		||||
		rc-misc.c rc-plugin.c rc-service.c rc-status.c rc-update.c \
 | 
			
		||||
		runscript.c rc.c
 | 
			
		||||
		runscript.c rc.c swclock.c
 | 
			
		||||
 | 
			
		||||
CLEANFILES=	version.h
 | 
			
		||||
 | 
			
		||||
@@ -26,7 +26,7 @@ RC_SBINLINKS=	mark_service_starting mark_service_started \
 | 
			
		||||
		mark_service_stopping mark_service_stopped \
 | 
			
		||||
		mark_service_inactive mark_service_wasinactive \
 | 
			
		||||
		mark_service_hotplugged mark_service_failed \
 | 
			
		||||
		rc-abort
 | 
			
		||||
		rc-abort swclock
 | 
			
		||||
ALL_LINKS=	${BINLINKS} ${SBINLINKS} ${RC_BINLINKS} ${RC_SBINLINKS}
 | 
			
		||||
CLEANFILES+=	${ALL_LINKS}
 | 
			
		||||
 | 
			
		||||
@@ -46,12 +46,17 @@ LDADD+=		${LIBDL} ${LIBKVM}
 | 
			
		||||
include ${MK}/${MKPAM}.mk
 | 
			
		||||
 | 
			
		||||
${SRCS}: version.h
 | 
			
		||||
version.h:
 | 
			
		||||
	echo "#define VERSION \"${VERSION}${GITVER}\"" >version.h
 | 
			
		||||
 | 
			
		||||
.PHONY:	version.h.tmp
 | 
			
		||||
version.h.tmp:
 | 
			
		||||
	echo "#define VERSION \"${VERSION}${GITVER}\"" >$@
 | 
			
		||||
	if test -n "${BRANDING}"; then \
 | 
			
		||||
		echo "#define BRANDING \"${BRANDING}\"" >> version.h; \
 | 
			
		||||
		echo "#define BRANDING \"${BRANDING}\"" >> $@; \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
version.h: version.h.tmp
 | 
			
		||||
	cmp -s $@.tmp $@ && rm $@.tmp || mv $@.tmp $@
 | 
			
		||||
 | 
			
		||||
install: all
 | 
			
		||||
	${INSTALL} -d ${DESTDIR}${SBINDIR}
 | 
			
		||||
	${INSTALL} -m ${BINMODE} ${PROG} ${DESTDIR}${SBINDIR}
 | 
			
		||||
 
 | 
			
		||||
@@ -35,6 +35,7 @@ int rc_status(int, char **);
 | 
			
		||||
int rc_update(int, char **);
 | 
			
		||||
int runscript(int, char **);
 | 
			
		||||
int start_stop_daemon(int, char **);
 | 
			
		||||
int swclock(int, char **);
 | 
			
		||||
 | 
			
		||||
void run_applets(int, char **);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -38,7 +38,7 @@
 | 
			
		||||
#include <string.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
 | 
			
		||||
   AND we don't have getfsent on uclibc or dietlibc for some odd reason. */
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
 
 | 
			
		||||
@@ -449,6 +449,8 @@ run_applets(int argc, char **argv)
 | 
			
		||||
		exit(start_stop_daemon(argc, argv));
 | 
			
		||||
	else if (strcmp (applet, "checkpath") == 0)
 | 
			
		||||
		exit(checkpath(argc, argv));
 | 
			
		||||
	else if (strcmp(applet, "swclock") == 0)
 | 
			
		||||
		exit(swclock(argc, argv));
 | 
			
		||||
 | 
			
		||||
	/* These could also be applications in their own right */
 | 
			
		||||
	if (strcmp(applet, "shell_var") == 0)
 | 
			
		||||
@@ -465,7 +467,7 @@ run_applets(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
		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 (argc < 3)
 | 
			
		||||
			exit (EXIT_FAILURE);
 | 
			
		||||
 
 | 
			
		||||
@@ -219,6 +219,7 @@ static const char * const longopts_help[] = {
 | 
			
		||||
int
 | 
			
		||||
rc_update(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	RC_DEPTREE *deptree;
 | 
			
		||||
	RC_STRINGLIST *runlevels;
 | 
			
		||||
	RC_STRING *runlevel;
 | 
			
		||||
	char *service = NULL;
 | 
			
		||||
@@ -238,7 +239,9 @@ rc_update(int argc, char **argv)
 | 
			
		||||
		    stack = true;
 | 
			
		||||
		break;
 | 
			
		||||
		case 'u':
 | 
			
		||||
			_rc_deptree_load(-1, &ret);
 | 
			
		||||
			deptree = _rc_deptree_load(-1, &ret);
 | 
			
		||||
			if (deptree)
 | 
			
		||||
				rc_deptree_free(deptree);
 | 
			
		||||
			return ret;
 | 
			
		||||
			case_RC_COMMON_GETOPT;
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -773,7 +773,7 @@ handle_bad_signal(int sig)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define getoptstring "o:" getoptstring_COMMON
 | 
			
		||||
#define getoptstring "o:s:S" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "override", 1, NULL, 'o' },
 | 
			
		||||
	{ "service",  1, NULL, 's' },
 | 
			
		||||
 
 | 
			
		||||
@@ -350,6 +350,8 @@ svc_exec(const char *arg1, const char *arg2)
 | 
			
		||||
	size_t bytes;
 | 
			
		||||
	bool prefixed = false;
 | 
			
		||||
	int slave_tty;
 | 
			
		||||
	sigset_t sigchldmask;
 | 
			
		||||
	sigset_t oldmask;
 | 
			
		||||
 | 
			
		||||
	/* Setup our signal pipe */
 | 
			
		||||
	if (pipe(signal_pipe) == -1)
 | 
			
		||||
@@ -439,10 +441,17 @@ svc_exec(const char *arg1, const char *arg2)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	free(buffer);
 | 
			
		||||
 | 
			
		||||
	sigemptyset (&sigchldmask);
 | 
			
		||||
	sigaddset (&sigchldmask, SIGCHLD);
 | 
			
		||||
	sigprocmask (SIG_BLOCK, &sigchldmask, &oldmask);
 | 
			
		||||
 | 
			
		||||
	close(signal_pipe[0]);
 | 
			
		||||
	close(signal_pipe[1]);
 | 
			
		||||
	signal_pipe[0] = signal_pipe[1] = -1;
 | 
			
		||||
 | 
			
		||||
	sigprocmask (SIG_SETMASK, &oldmask, NULL);
 | 
			
		||||
	
 | 
			
		||||
	if (master_tty >= 0) {
 | 
			
		||||
		/* Why did we do this? */
 | 
			
		||||
		/* signal (SIGWINCH, SIG_IGN); */
 | 
			
		||||
@@ -739,6 +748,8 @@ svc_start_deps(void)
 | 
			
		||||
		free(tmp);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rc_stringlist_free(tmplist);
 | 
			
		||||
	tmplist = NULL;
 | 
			
		||||
	rc_stringlist_free(services);
 | 
			
		||||
	services = NULL;
 | 
			
		||||
}
 | 
			
		||||
@@ -998,7 +1009,7 @@ svc_restart(void)
 | 
			
		||||
	 * dns via resolvconf, so you could have openvpn trying to restart
 | 
			
		||||
	 * dnsmasq which in turn is waiting on net which in turn is waiting
 | 
			
		||||
	 * 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.
 | 
			
		||||
	 * The downside is that there is a small window when our status is
 | 
			
		||||
	 * invalid.
 | 
			
		||||
@@ -1106,7 +1117,7 @@ runscript(int argc, char **argv)
 | 
			
		||||
	atexit(cleanup);
 | 
			
		||||
 | 
			
		||||
	/* 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.
 | 
			
		||||
	 * Also, the master link as to be a real file in the init dir. */
 | 
			
		||||
	if (!realpath(argv[1], path)) {
 | 
			
		||||
@@ -1192,7 +1203,7 @@ runscript(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
	deps = true;
 | 
			
		||||
	
 | 
			
		||||
	/* Punt the first arg as it's our service name */
 | 
			
		||||
	/* Punt the first arg as its our service name */
 | 
			
		||||
	argc--;
 | 
			
		||||
	argv++;
 | 
			
		||||
 | 
			
		||||
@@ -1316,6 +1327,12 @@ runscript(int argc, char **argv)
 | 
			
		||||
			prefix = NULL;
 | 
			
		||||
			retval = svc_exec("status", NULL);
 | 
			
		||||
		} else {
 | 
			
		||||
			if (strcmp(optarg, "pause") == 0) {
 | 
			
		||||
				ewarn("WARNING: 'pause' is deprecated; please use '--nodeps stop'");
 | 
			
		||||
				deps = false;
 | 
			
		||||
				optarg = "stop";
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (strcmp(optarg, "conditionalrestart") == 0 ||
 | 
			
		||||
			    strcmp(optarg, "condrestart") == 0)
 | 
			
		||||
			{
 | 
			
		||||
 
 | 
			
		||||
@@ -37,6 +37,7 @@
 | 
			
		||||
#define POLL_INTERVAL   20000000
 | 
			
		||||
#define WAIT_PIDFILE   500000000
 | 
			
		||||
#define ONE_SECOND    1000000000
 | 
			
		||||
#define ONE_MS           1000000
 | 
			
		||||
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/ioctl.h>
 | 
			
		||||
@@ -46,6 +47,10 @@
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/wait.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
#include <sys/syscall.h> /* For io priority */
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#include <ctype.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
@@ -103,6 +108,13 @@ static char *changeuser, *ch_root, *ch_dir;
 | 
			
		||||
 | 
			
		||||
extern char **environ;
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
static inline int ioprio_set(int which, int who, int ioprio)
 | 
			
		||||
{
 | 
			
		||||
	return syscall(SYS_ioprio_set, which, who, ioprio);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
free_schedulelist(void)
 | 
			
		||||
{
 | 
			
		||||
@@ -588,8 +600,9 @@ expand_home(const char *home, const char *path)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define getoptstring "KN:PR:Sbc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:" getoptstring_COMMON
 | 
			
		||||
#define getoptstring "I:KN:PR:Sbc:d:e:g:ik:mn:op:s:tu:r:w:x:1:2:" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "ionice",       1, NULL, 'I'},
 | 
			
		||||
	{ "stop",         0, NULL, 'K'},
 | 
			
		||||
	{ "nicelevel",    1, NULL, 'N'},
 | 
			
		||||
	{ "retry",        1, NULL, 'R'},
 | 
			
		||||
@@ -618,6 +631,7 @@ static const struct option longopts[] = {
 | 
			
		||||
	longopts_COMMON
 | 
			
		||||
};
 | 
			
		||||
static const char * const longopts_help[] = {
 | 
			
		||||
	"Set an ionice class:data when starting", 
 | 
			
		||||
	"Stop daemon",
 | 
			
		||||
	"Set a nicelevel when starting",
 | 
			
		||||
	"Retry schedule to use when stopping",
 | 
			
		||||
@@ -638,7 +652,7 @@ static const char * const longopts_help[] = {
 | 
			
		||||
	"Test actions, don't do them",
 | 
			
		||||
	"Change the process user",
 | 
			
		||||
	"Chroot to this directory",
 | 
			
		||||
	"Seconds to wait for daemon start",
 | 
			
		||||
	"Milliseconds to wait for daemon start",
 | 
			
		||||
	"Binary to start/stop",
 | 
			
		||||
	"Redirect stdout to file",
 | 
			
		||||
	"Redirect stderr to file",
 | 
			
		||||
@@ -674,7 +688,7 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
	char *pidfile = NULL;
 | 
			
		||||
	char *retry = NULL;
 | 
			
		||||
	int sig = -1;
 | 
			
		||||
	int nicelevel = 0;
 | 
			
		||||
	int nicelevel = 0, ionicec = -1, ioniced = 0;
 | 
			
		||||
	bool background = false;
 | 
			
		||||
	bool makepidfile = false;
 | 
			
		||||
	bool interpreted = false;
 | 
			
		||||
@@ -737,6 +751,17 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
	while ((opt = getopt_long(argc, argv, getoptstring, longopts,
 | 
			
		||||
		    (int *) 0)) != -1)
 | 
			
		||||
		switch (opt) {
 | 
			
		||||
		case 'I': /* --ionice */
 | 
			
		||||
			if (sscanf(optarg, "%d:%d", &ionicec, &ioniced) == 0)
 | 
			
		||||
				eerrorx("%s: invalid ionice `%s'",
 | 
			
		||||
				    applet, optarg);
 | 
			
		||||
			if (ionicec == 0)
 | 
			
		||||
				ioniced = 0;
 | 
			
		||||
			else if (ionicec == 3)
 | 
			
		||||
				ioniced = 7;
 | 
			
		||||
			ionicec <<= 13; /* class shift */
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case 'K':  /* --stop */
 | 
			
		||||
			stop = true;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -1120,6 +1145,14 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
				    strerror(errno));
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
/* Only linux suports setting an IO priority */
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
		if (ionicec != -1 &&
 | 
			
		||||
		    ioprio_set(1, mypid, ionicec | ioniced) == -1)
 | 
			
		||||
			eerrorx("%s: ioprio_set %d %d: %s", applet,
 | 
			
		||||
			    ionicec, ioniced, strerror(errno));
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		if (ch_root && chroot(ch_root) < 0)
 | 
			
		||||
			eerrorx("%s: chroot `%s': %s",
 | 
			
		||||
			    applet, ch_root, strerror(errno));
 | 
			
		||||
@@ -1311,8 +1344,8 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
		struct timespec ts;
 | 
			
		||||
		bool alive = false;
 | 
			
		||||
		
 | 
			
		||||
		ts.tv_sec = start_wait;
 | 
			
		||||
		ts.tv_nsec = 0;
 | 
			
		||||
		ts.tv_sec = start_wait / 1000;
 | 
			
		||||
		ts.tv_nsec = (start_wait % 1000) * ONE_MS;
 | 
			
		||||
		if (nanosleep(&ts, NULL) == -1) {
 | 
			
		||||
			if (errno == EINTR)
 | 
			
		||||
				eerror("%s: caught an interrupt", applet);
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										120
									
								
								src/rc/swclock.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								src/rc/swclock.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
			
		||||
/*
 | 
			
		||||
  swclock.c
 | 
			
		||||
  Sets the system time from the mtime of the given file.
 | 
			
		||||
  This is useful for systems who do not have a working RTC and rely on ntp.
 | 
			
		||||
  OpenRC relies on the correct system time for a lot of operations so this is needed
 | 
			
		||||
  quite early.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (c) 2009 Roy Marples <roy@marples.name>
 | 
			
		||||
 * All rights reserved
 | 
			
		||||
 | 
			
		||||
 * Redistribution and use in source and binary forms, with or without
 | 
			
		||||
 * modification, are permitted provided that the following conditions
 | 
			
		||||
 * are met:
 | 
			
		||||
 * 1. Redistributions of source code must retain the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer.
 | 
			
		||||
 * 2. Redistributions in binary form must reproduce the above copyright
 | 
			
		||||
 *    notice, this list of conditions and the following disclaimer in the
 | 
			
		||||
 *    documentation and/or other materials provided with the distribution.
 | 
			
		||||
 *
 | 
			
		||||
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | 
			
		||||
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | 
			
		||||
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | 
			
		||||
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | 
			
		||||
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | 
			
		||||
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | 
			
		||||
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | 
			
		||||
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | 
			
		||||
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | 
			
		||||
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | 
			
		||||
 * SUCH DAMAGE.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include <sys/time.h>
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <getopt.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <utime.h>
 | 
			
		||||
 | 
			
		||||
#include "builtins.h"
 | 
			
		||||
#include "einfo.h"
 | 
			
		||||
#include "rc-misc.h"
 | 
			
		||||
 | 
			
		||||
#define RC_SHUTDOWNTIME    RC_SVCDIR "/shutdowntime"
 | 
			
		||||
 | 
			
		||||
extern const char *applet;
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define extraopts "file"
 | 
			
		||||
#define getoptstring "sw" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "save", 0, NULL, 's' },
 | 
			
		||||
	{ "warn", 0, NULL, 'w' },
 | 
			
		||||
	longopts_COMMON
 | 
			
		||||
};
 | 
			
		||||
static const char * const longopts_help[] = {
 | 
			
		||||
	"saves the time",
 | 
			
		||||
	"no error if no reference file",
 | 
			
		||||
	longopts_help_COMMON
 | 
			
		||||
};
 | 
			
		||||
#include "_usage.c"
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
swclock(int argc, char **argv)
 | 
			
		||||
{
 | 
			
		||||
	int opt, sflag = 0, wflag = 0;
 | 
			
		||||
	const char *file = RC_SHUTDOWNTIME;
 | 
			
		||||
	struct stat sb;
 | 
			
		||||
	struct timeval tv;
 | 
			
		||||
 | 
			
		||||
	while ((opt = getopt_long(argc, argv, getoptstring,
 | 
			
		||||
		    longopts, (int *) 0)) != -1)
 | 
			
		||||
	{
 | 
			
		||||
		switch (opt) {
 | 
			
		||||
		case 's':
 | 
			
		||||
			sflag = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'w':
 | 
			
		||||
			wflag = 1;
 | 
			
		||||
			break;
 | 
			
		||||
		case_RC_COMMON_GETOPT;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (optind < argc)
 | 
			
		||||
		file = argv[optind++];
 | 
			
		||||
 | 
			
		||||
	if (sflag) {
 | 
			
		||||
		if (stat(file, &sb) == -1) {
 | 
			
		||||
			opt = open(file, O_WRONLY | O_CREAT, 0644);
 | 
			
		||||
			if (opt == -1)
 | 
			
		||||
				eerrorx("swclock: open: %s", strerror(errno));
 | 
			
		||||
			close(opt);
 | 
			
		||||
		} else
 | 
			
		||||
			if (utime(file, NULL) == -1)
 | 
			
		||||
				eerrorx("swclock: utime: %s", strerror(errno));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (stat(file, &sb) == -1) {
 | 
			
		||||
		if (wflag != 0 && errno == ENOENT)
 | 
			
		||||
			ewarn("swclock: `%s': %s", file, strerror(errno));
 | 
			
		||||
		else
 | 
			
		||||
			eerrorx("swclock: `%s': %s", file, strerror(errno));
 | 
			
		||||
		return 0;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	tv.tv_sec = sb.st_mtime;
 | 
			
		||||
	tv.tv_usec = 0;
 | 
			
		||||
 | 
			
		||||
	if (settimeofday(&tv, NULL) == -1)
 | 
			
		||||
		eerrorx("swclock: settimeofday: %s", strerror(errno));
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user