Compare commits
	
		
			72 Commits
		
	
	
		
			openrc-0.9
			...
			openrc-0.9
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d670dbddf7 | ||
| 
						 | 
					f1a19aed78 | ||
| 
						 | 
					3247184d86 | ||
| 
						 | 
					32c506a4c8 | ||
| 
						 | 
					04db6c3d39 | ||
| 
						 | 
					3c602e7422 | ||
| 
						 | 
					e4146c0945 | ||
| 
						 | 
					9e3fc7f3f5 | ||
| 
						 | 
					06d6701785 | ||
| 
						 | 
					297720787f | ||
| 
						 | 
					47c3b28459 | ||
| 
						 | 
					f18763bcd8 | ||
| 
						 | 
					dd2b4a067a | ||
| 
						 | 
					44e4c21f05 | ||
| 
						 | 
					bc581530e5 | ||
| 
						 | 
					04afaa3c03 | ||
| 
						 | 
					a21a2c3e32 | ||
| 
						 | 
					a5509d6819 | ||
| 
						 | 
					0c866e1a31 | ||
| 
						 | 
					1c7d3165e4 | ||
| 
						 | 
					8199dee8d6 | ||
| 
						 | 
					a5ad5ba971 | ||
| 
						 | 
					79d6f10926 | ||
| 
						 | 
					5396bf1851 | ||
| 
						 | 
					6913f1deb6 | ||
| 
						 | 
					09c8c8ed9f | ||
| 
						 | 
					d9dc5dc423 | ||
| 
						 | 
					8c55f1e50d | ||
| 
						 | 
					94661b1d22 | ||
| 
						 | 
					b9cc589882 | ||
| 
						 | 
					0baa57a880 | ||
| 
						 | 
					f5e7e76852 | ||
| 
						 | 
					5021c119c7 | ||
| 
						 | 
					29a1ad3d18 | ||
| 
						 | 
					659f7c2bc8 | ||
| 
						 | 
					497ff7ee41 | ||
| 
						 | 
					0fcc6251fc | ||
| 
						 | 
					7da8394a8e | ||
| 
						 | 
					0ff23f20e8 | ||
| 
						 | 
					cea71369e9 | ||
| 
						 | 
					fb4aa20d05 | ||
| 
						 | 
					5a8344a3d1 | ||
| 
						 | 
					2d2751c433 | ||
| 
						 | 
					6be8a0679b | ||
| 
						 | 
					58e04035ed | ||
| 
						 | 
					ab9cf25197 | ||
| 
						 | 
					7ea5c614d9 | ||
| 
						 | 
					5d441dd376 | ||
| 
						 | 
					44019f6542 | ||
| 
						 | 
					de5cee2c21 | ||
| 
						 | 
					3ad501218d | ||
| 
						 | 
					43a155a313 | ||
| 
						 | 
					fb00b10669 | ||
| 
						 | 
					8b4fc05ff2 | ||
| 
						 | 
					ced60319e3 | ||
| 
						 | 
					cacea4e7f3 | ||
| 
						 | 
					ce4c9b5397 | ||
| 
						 | 
					426b94bd69 | ||
| 
						 | 
					06b8084b2c | ||
| 
						 | 
					e3d0fe06bd | ||
| 
						 | 
					319f5003c6 | ||
| 
						 | 
					30a565f80d | ||
| 
						 | 
					6e2fbf6a0f | ||
| 
						 | 
					2990e5a2e3 | ||
| 
						 | 
					85c90f9a1d | ||
| 
						 | 
					c529a57650 | ||
| 
						 | 
					9c0edc5c52 | ||
| 
						 | 
					d729f9d0f2 | ||
| 
						 | 
					fdc8849e56 | ||
| 
						 | 
					30a56cdb46 | ||
| 
						 | 
					14625346c0 | ||
| 
						 | 
					c3be42006b | 
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
include Makefile.inc
 | 
			
		||||
 | 
			
		||||
SUBDIR=		conf.d doc etc init.d local.d man net scripts sh src
 | 
			
		||||
SUBDIR=		conf.d doc etc init.d local.d sysctl.d man net scripts sh src
 | 
			
		||||
 | 
			
		||||
# Build pkgconfig or not
 | 
			
		||||
MKPKGCONFIG?=	yes
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
NAME=		openrc
 | 
			
		||||
VERSION=	0.9.8.3
 | 
			
		||||
VERSION=	0.9.9.1
 | 
			
		||||
PKG=		${NAME}-${VERSION}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										15
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								README
									
									
									
									
									
								
							@@ -12,7 +12,6 @@ LIBNAME=lib64
 | 
			
		||||
DESTDIR=/tmp/openrc-image
 | 
			
		||||
MKPAM=pam
 | 
			
		||||
MKPKGCONFIG=no
 | 
			
		||||
MKRCSYS=prefix
 | 
			
		||||
MKSELINUX=yes
 | 
			
		||||
MKSTATICLIBS=no
 | 
			
		||||
MKTERMCAP=ncurses
 | 
			
		||||
@@ -34,20 +33,6 @@ LOCAL_PREFIX should be set when to where user maintained packages are.
 | 
			
		||||
Only set LOCAL_PREFIX if different from PKG_PREFIX.
 | 
			
		||||
PREFIX should be set when OpenRC is not installed to /.
 | 
			
		||||
 | 
			
		||||
MKRCSYS should be set only if you need to specify a default system
 | 
			
		||||
subtype. The subtype should be set to match the type of environment the
 | 
			
		||||
file is installed into, not the virtualization the environment is
 | 
			
		||||
capable of handling. Here is a list of subtypes and their meanings.
 | 
			
		||||
 | 
			
		||||
jail	FreeBSD jail
 | 
			
		||||
lxc	Linux container
 | 
			
		||||
openvz	Linux OpenVZ
 | 
			
		||||
prefix	Linux and *BSD prefix system
 | 
			
		||||
uml	UsermodeLinux
 | 
			
		||||
vserver	Linux vserver
 | 
			
		||||
xen0 Linux and NetBSD xen0 Domain
 | 
			
		||||
xenU Linux and NetBSD xenU Domain
 | 
			
		||||
 | 
			
		||||
If any of the following files exist then we do not overwrite them
 | 
			
		||||
/etc/devd.conf
 | 
			
		||||
/etc/rc
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										2
									
								
								TODO
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								TODO
									
									
									
									
									
								
							@@ -1,4 +1,4 @@
 | 
			
		||||
- ensure all forks block, restore and unblock signals. needs review 
 | 
			
		||||
- ensure all forks block, restore and unblock signals. needs review
 | 
			
		||||
 | 
			
		||||
- add support somehow for optional translations
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,10 @@
 | 
			
		||||
# 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 "local".  Note that if you dual boot with Windows, then 
 | 
			
		||||
# Greenwich Mean Time).  If your 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 
 | 
			
		||||
# If you want to set the Hardware Clock to the current System Time
 | 
			
		||||
# during shutdown, then say "YES" here.
 | 
			
		||||
# You normally don't need to do this if you run a ntp daemon.
 | 
			
		||||
clock_systohc="NO"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,22 +1,18 @@
 | 
			
		||||
# 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 
 | 
			
		||||
# 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 
 | 
			
		||||
# (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"
 | 
			
		||||
 | 
			
		||||
# If you want to set the system time to the current hardware clock
 | 
			
		||||
# during bootup, then say "YES" here. You do not need this if you are
 | 
			
		||||
# running a modern kernel with CONFIG_RTC_HCTOSYS set to y.
 | 
			
		||||
# Also, be aware that if you set this to "NO", the system time will
 | 
			
		||||
# never be saved to the hardware clock unless you set
 | 
			
		||||
# clock_systohc="YES" above.
 | 
			
		||||
clock_hctosys="YES"
 | 
			
		||||
 
 | 
			
		||||
#clock_hctosys="YES"
 | 
			
		||||
 | 
			
		||||
# If you do not want to set the hardware clock to the current system
 | 
			
		||||
# time (software clock) during shutdown, set this to no.
 | 
			
		||||
#clock_systohc="YES"
 | 
			
		||||
 | 
			
		||||
# If you wish to pass any other arguments to hwclock during bootup,
 | 
			
		||||
# you may do so here. Alpha users may wish to use --arc or --srm here.
 | 
			
		||||
clock_args=""
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ windowkeys="NO"
 | 
			
		||||
extended_keymaps=""
 | 
			
		||||
#extended_keymaps="backspace keypad euro2"
 | 
			
		||||
 | 
			
		||||
# Tell dumpkeys(1) to interpret character action codes to be 
 | 
			
		||||
# Tell dumpkeys(1) to interpret character action codes to be
 | 
			
		||||
# from the specified character set.
 | 
			
		||||
# This only matters if you set unicode="yes" in /etc/rc.conf.
 | 
			
		||||
# For a list of valid sets, run `dumpkeys --help`
 | 
			
		||||
 
 | 
			
		||||
@@ -11,6 +11,6 @@
 | 
			
		||||
 | 
			
		||||
# You can also multiplex the init script for each device like so
 | 
			
		||||
#   ln -s moused /etc/init.d/moused.ums0
 | 
			
		||||
# This enables you to have a config file per mouse (forces moused_device 
 | 
			
		||||
# This enables you to have a config file per mouse (forces moused_device
 | 
			
		||||
# to ums0 in this case) and control each mouse.
 | 
			
		||||
# devd can also start and stop these mice, which laptop users will find handy.
 | 
			
		||||
 
 | 
			
		||||
@@ -586,10 +586,15 @@
 | 
			
		||||
#vlan_start_eth0="no"
 | 
			
		||||
 | 
			
		||||
# If you do the above then you may want to depend on eth0 like so
 | 
			
		||||
# rc_need_vlan1="net.eth0"
 | 
			
		||||
# rc_net_vlan1_need="net.eth0"
 | 
			
		||||
# NOTE: depend functions only work in /etc/conf.d/net
 | 
			
		||||
# and not in profile configs such as /etc/conf.d/net.foo
 | 
			
		||||
 | 
			
		||||
# Also, you might want to make eth0 not provide net in this case so that
 | 
			
		||||
# dependent services will start when the vlan is active instead of the
 | 
			
		||||
# physical interface.
 | 
			
		||||
# rc_net_eth0_provide="!net"
 | 
			
		||||
 | 
			
		||||
# MAC-VLAN support
 | 
			
		||||
# The following configuration can be used to create a new interface 'macvlan0'
 | 
			
		||||
# linked to 'eth0'
 | 
			
		||||
@@ -618,7 +623,7 @@
 | 
			
		||||
 | 
			
		||||
# If any of the slaves require extra configuration - for example wireless or
 | 
			
		||||
# ppp devices - we need to depend function on the bonded interfaces
 | 
			
		||||
#rc_need_bond0="net.eth0 net.eth1"
 | 
			
		||||
#rc_net_bond0_need="net.eth0 net.eth1"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#-----------------------------------------------------------------------------
 | 
			
		||||
@@ -735,7 +740,7 @@
 | 
			
		||||
# If the link require extra configuration - for example wireless or
 | 
			
		||||
# RFC 268 bridge - we need to depend on the bridge so they get
 | 
			
		||||
# configured correctly.
 | 
			
		||||
#rc_need_ppp0="net.nas0"
 | 
			
		||||
#rc_net_ppp0_need="net.nas0"
 | 
			
		||||
 | 
			
		||||
#WARNING: if MTU of the PPP interface is less than 1500 and you use this
 | 
			
		||||
#machine as a router, you should add the following rule to your firewall
 | 
			
		||||
@@ -847,7 +852,7 @@
 | 
			
		||||
 | 
			
		||||
# If any of the ports require extra configuration - for example wireless or
 | 
			
		||||
# ppp devices - we need to depend on them like so.
 | 
			
		||||
#rc_need_br0="net.eth0 net.eth1"
 | 
			
		||||
#rc_net_br0_need="net.eth0 net.eth1"
 | 
			
		||||
 | 
			
		||||
# Below is an example of configuring the bridge
 | 
			
		||||
# Consult "man brctl" for more details
 | 
			
		||||
@@ -898,7 +903,7 @@
 | 
			
		||||
# 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"
 | 
			
		||||
#rc_net_6to4_need="net.eth0"
 | 
			
		||||
# To ensure that eth0 is configured before 6to4. Of course, the tunnel could be
 | 
			
		||||
# any name and this also works for any configured interface.
 | 
			
		||||
# NOTE: If you're not using iproute2 then your 6to4 tunnel has to be called
 | 
			
		||||
 
 | 
			
		||||
@@ -24,14 +24,5 @@ SED_EXTRA=	${SED_EXTRA-${OS}}
 | 
			
		||||
 | 
			
		||||
include ${MK}/scripts.mk
 | 
			
		||||
 | 
			
		||||
# We can't use "ifndef" here because that treats set-but-empty
 | 
			
		||||
# as not-set which is not what we want
 | 
			
		||||
MKRCSYS ?= automagicplease
 | 
			
		||||
ifeq (${MKRCSYS},automagicplease)
 | 
			
		||||
# If the user isn't picking a default, then have the
 | 
			
		||||
# config go with runtime automagic detection #357247
 | 
			
		||||
rc.conf: SED_EXTRA += -e '/^rc_sys=""/s:^:\#:'
 | 
			
		||||
MKRCSYS =
 | 
			
		||||
endif
 | 
			
		||||
rc.conf: rc.conf.in rc.conf.${OS}
 | 
			
		||||
	${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,9 @@
 | 
			
		||||
# This is the subsystem type. Valid options on FreeBSD:
 | 
			
		||||
# ""        - nothing special
 | 
			
		||||
# "jail"    - FreeBSD jails
 | 
			
		||||
# "prefix"  - Prefix
 | 
			
		||||
# If this is commented out, automatic detection will be attempted.
 | 
			
		||||
# Note that automatic detection does not work in a prefix environment.
 | 
			
		||||
# If this is commented out, automatic detection will be used.
 | 
			
		||||
#
 | 
			
		||||
# This should be set to the value representing the environment this file is
 | 
			
		||||
# PRESENTLY in, not the virtualization the environment is capable of.
 | 
			
		||||
rc_sys="@RC_SYS_DEFAULT@"
 | 
			
		||||
#rc_sys=""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,18 +5,15 @@
 | 
			
		||||
# ""        - nothing special
 | 
			
		||||
# "lxc"     - Linux Containers
 | 
			
		||||
# "openvz"  - Linux OpenVZ
 | 
			
		||||
# "prefix"  - Prefix
 | 
			
		||||
# "uml"     - Usermode Linux
 | 
			
		||||
# "vserver" - Linux vserver
 | 
			
		||||
# "xen0"    - Xen0 Domain
 | 
			
		||||
# "xenU"    - XenU Domain
 | 
			
		||||
# If this is commented out, automatic detection will be attempted.
 | 
			
		||||
# Note that autodetection will not work in a prefix environment or in a
 | 
			
		||||
# linux container.
 | 
			
		||||
# If this is commented out, automatic detection will be used.
 | 
			
		||||
#
 | 
			
		||||
# This should be set to the value representing the environment this file is
 | 
			
		||||
# PRESENTLY in, not the virtualization the environment is capable of.
 | 
			
		||||
rc_sys="@RC_SYS_DEFAULT@"
 | 
			
		||||
#rc_sys=""
 | 
			
		||||
 | 
			
		||||
# This is the number of tty's used in most of the rc-scripts (like
 | 
			
		||||
# consolefont, numlock, etc ...)
 | 
			
		||||
 
 | 
			
		||||
@@ -3,13 +3,11 @@
 | 
			
		||||
 | 
			
		||||
# This is the subsystem type. Valid options on NetBSD:
 | 
			
		||||
# ""        - nothing special
 | 
			
		||||
# "prefix"  - Prefix
 | 
			
		||||
# "xen0"    - Xen0 Domain
 | 
			
		||||
# "xenU"    - XenU Domain
 | 
			
		||||
# If this is commented out, automatic detection will be attempted.
 | 
			
		||||
# Note that automatic detection does not work in a prefix environment.
 | 
			
		||||
# If this is commented out, automatic detection will be used.
 | 
			
		||||
#
 | 
			
		||||
# This should be set to the value representing the environment this file is
 | 
			
		||||
# PRESENTLY in, not the virtualization the environment is capable of.
 | 
			
		||||
rc_sys="@RC_SYS_DEFAULT@"
 | 
			
		||||
#rc_sys=""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,18 @@
 | 
			
		||||
# Global OpenRC configuration settings
 | 
			
		||||
 | 
			
		||||
# Set to "YES" if you want the rc system to try and start services
 | 
			
		||||
# in parallel for a slight speed improvement. When running in parallel we
 | 
			
		||||
# prefix the service output with its name as the output will get
 | 
			
		||||
# jumbled up.
 | 
			
		||||
# WARNING: whilst we have improved parallel, it can still potentially lock
 | 
			
		||||
# the boot process. Don't file bugs about this unless you can supply
 | 
			
		||||
# patches that fix it without breaking other things!
 | 
			
		||||
#rc_parallel="NO"
 | 
			
		||||
 | 
			
		||||
# Set rc_interactive to "YES" and you'll be able to press the I key during
 | 
			
		||||
# boot so you can choose to start specific services. Set to "NO" to disable
 | 
			
		||||
# this feature.
 | 
			
		||||
# this feature. 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.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -11,6 +11,7 @@ network
 | 
			
		||||
root
 | 
			
		||||
savecache
 | 
			
		||||
swap
 | 
			
		||||
swapfiles
 | 
			
		||||
sysctl
 | 
			
		||||
urandom
 | 
			
		||||
devfs
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,7 @@
 | 
			
		||||
DIR=	${INITDIR}
 | 
			
		||||
SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in netmount.in \
 | 
			
		||||
	network.in root.in savecache.in staticroute.in swap.in swclock.in \
 | 
			
		||||
	sysctl.in urandom.in ${SRCS-${OS}}
 | 
			
		||||
	network.in root.in savecache.in staticroute.in swap.in swapfiles.in \
 | 
			
		||||
	swclock.in sysctl.in urandom.in ${SRCS-${OS}}
 | 
			
		||||
BIN=	${OBJS}
 | 
			
		||||
 | 
			
		||||
INSTALLAFTER=	_installafter_net.lo
 | 
			
		||||
 
 | 
			
		||||
@@ -22,7 +22,7 @@ depend()
 | 
			
		||||
	   [ "$clock" != "UTC" -a ! -e /etc/wall_cmos_clock ]; then
 | 
			
		||||
		need root
 | 
			
		||||
	fi
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,12 +7,7 @@ depend()
 | 
			
		||||
	need localmount
 | 
			
		||||
	before logger
 | 
			
		||||
	after clock sysctl
 | 
			
		||||
	keyword -prefix -timeout
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dir_writable()
 | 
			
		||||
{
 | 
			
		||||
	mkdir "$1"/.test.$$ 2>/dev/null && rmdir "$1"/.test.$$
 | 
			
		||||
	keyword -timeout
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
: ${wipe_tmp:=${WIPE_TMP:-yes}}
 | 
			
		||||
@@ -25,7 +20,7 @@ cleanup_tmp_dir()
 | 
			
		||||
	if ! [ -d "$dir" ]; then
 | 
			
		||||
		mkdir -p "$dir" || return $?
 | 
			
		||||
	fi
 | 
			
		||||
	dir_writable "$dir" || return 1
 | 
			
		||||
	checkpath -W "$dir" || return 1
 | 
			
		||||
	chmod a+rwt "$dir" 2> /dev/null
 | 
			
		||||
	cd "$dir" || return 1
 | 
			
		||||
	if yesno $wipe_tmp; then
 | 
			
		||||
@@ -122,7 +117,7 @@ start()
 | 
			
		||||
		migrate_to_run	/var/run /run
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if dir_writable /var/run; then
 | 
			
		||||
	if checkpath -W /var/run; then
 | 
			
		||||
		ebegin "Creating user login records"
 | 
			
		||||
		local xtra=
 | 
			
		||||
		[ "$RC_UNAME" = NetBSD ] && xtra=x
 | 
			
		||||
@@ -164,7 +159,7 @@ start()
 | 
			
		||||
		cleanup_tmp_dir "$tmp"
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if dir_writable /tmp; then
 | 
			
		||||
	if checkpath -W /tmp; then
 | 
			
		||||
		# Make sure our X11 stuff have the correct permissions
 | 
			
		||||
		# Omit the chown as bootmisc is run before network is up
 | 
			
		||||
		# and users may be using lame LDAP auth #139411
 | 
			
		||||
@@ -177,7 +172,7 @@ start()
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if yesno $log_dmesg; then
 | 
			
		||||
		if $logw || dir_writable /var/log; then
 | 
			
		||||
		if $logw || checkpath -W /var/log; then
 | 
			
		||||
			# Create an 'after-boot' dmesg log
 | 
			
		||||
			if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ ]; then
 | 
			
		||||
				dmesg > /var/log/dmesg
 | 
			
		||||
@@ -186,7 +181,6 @@ start()
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	[ -w /etc/nologin ] && rm -f /etc/nologin
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount termencoding
 | 
			
		||||
	after hotplug bootmisc
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
	keyword -openvz -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
@@ -54,7 +54,7 @@ start()
 | 
			
		||||
	eend $retval
 | 
			
		||||
 | 
			
		||||
	# Store the last font so we can use it ASAP on boot
 | 
			
		||||
	if [ $retval -eq 0 -a -w "$RC_LIBEXECDIR" ]; then
 | 
			
		||||
	if [ $retval -eq 0 ] && checkpath -W "$RC_LIBEXECDIR"; then
 | 
			
		||||
		mkdir -p "$RC_LIBEXECDIR"/console
 | 
			
		||||
		for font in /usr/share/consolefonts/"$consolefont".*; do
 | 
			
		||||
			:
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ depend() {
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	before net.lo0
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start_pre() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ description="Mount system critical filesystems in /dev."
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	use dev
 | 
			
		||||
	keyword -prefix -vserver
 | 
			
		||||
	keyword -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start() {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ description="Configures a specific kernel dump device."
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	need swap
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start() {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ _IFS="
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use dev clock modules
 | 
			
		||||
	keyword -jail -openvz -prefix -timeout -vserver -lxc
 | 
			
		||||
	keyword -jail -openvz -timeout -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_abort() {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	use root
 | 
			
		||||
	before devd net
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_set()
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
description="Sets the hostname of the machine."
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	keyword -prefix -lxc
 | 
			
		||||
	keyword -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ depend()
 | 
			
		||||
	else
 | 
			
		||||
		before *
 | 
			
		||||
	fi
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
	keyword -openvz -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
setupopts()
 | 
			
		||||
@@ -94,7 +94,7 @@ start()
 | 
			
		||||
		"$utc_cmd" != --utc -o \
 | 
			
		||||
		-n "$clock_args" ];
 | 
			
		||||
	then
 | 
			
		||||
		if yesno $clock_hctosys; then
 | 
			
		||||
		if yesno ${clock_hctosys:-YES}; then
 | 
			
		||||
			_hwclock --hctosys $utc_cmd $clock_args
 | 
			
		||||
		else
 | 
			
		||||
			_hwclock --systz $utc_cmd $clock_args
 | 
			
		||||
@@ -111,7 +111,7 @@ stop()
 | 
			
		||||
{
 | 
			
		||||
	# Don't tweak the hardware clock on LiveCD halt.
 | 
			
		||||
	[ -n "$CDBOOT" ] && return 0
 | 
			
		||||
	yesno $clock_systohc || return 0
 | 
			
		||||
	yesno ${clock_systohc:-YES} || return 0
 | 
			
		||||
 | 
			
		||||
	local retval=0 errstr=""
 | 
			
		||||
	setupopts
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount termencoding
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
	keyword -openvz -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
@@ -63,7 +63,7 @@ start()
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Save the keymapping for use immediately at boot
 | 
			
		||||
	if [ -w "$RC_LIBEXECDIR" ]; then
 | 
			
		||||
	if checkpath -W "$RC_LIBEXECDIR"; then
 | 
			
		||||
		mkdir -p "$RC_LIBEXECDIR"/console
 | 
			
		||||
		dumpkeys >"$RC_LIBEXECDIR"/console/keymap
 | 
			
		||||
	fi
 | 
			
		||||
 
 | 
			
		||||
@@ -4,11 +4,6 @@
 | 
			
		||||
 | 
			
		||||
description="Kill all processes so we can unmount disks cleanly."
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Terminating remaining processes"
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ depend()
 | 
			
		||||
	need fsck
 | 
			
		||||
	use lvm modules mtab
 | 
			
		||||
	after lvm modules
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
	keyword -jail -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ extra_commands="restore"
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
restore()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ description="Loads a user defined list of kernel modules."
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	use isapnp
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
	keyword -openvz -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 -lxc
 | 
			
		||||
	keyword -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ description="Update /etc/mtab to match what the kernel knows about"
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need root
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -20,12 +20,14 @@ depend()
 | 
			
		||||
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	provide net
 | 
			
		||||
	keyword -shutdown -jail -prefix -vserver
 | 
			
		||||
	keyword -jail -vserver
 | 
			
		||||
 | 
			
		||||
	case "${IFACE}" in
 | 
			
		||||
		lo|lo0);;
 | 
			
		||||
		*) after net.lo net.lo0 dbus;;
 | 
			
		||||
		lo|lo0) provide lo;;
 | 
			
		||||
		*)
 | 
			
		||||
			after net.lo net.lo0 dbus
 | 
			
		||||
			provide net
 | 
			
		||||
			;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	if [ "$(command -v "depend_${IFVAR}")" = "depend_${IFVAR}" ]; then
 | 
			
		||||
@@ -37,6 +39,8 @@ depend()
 | 
			
		||||
		eval prov=\$rc_${dep}_${IFVAR}
 | 
			
		||||
		if [ -n "${prov}" ]; then
 | 
			
		||||
			${dep} ${prov}
 | 
			
		||||
			ewarn "rc_${dep}_${IFVAR} is deprecated."
 | 
			
		||||
			ewarn "Please use rc_net_${IFVAR}_${dep} instead."
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ depend()
 | 
			
		||||
	need net $pmap
 | 
			
		||||
	use afc-client amd autofs openvpn
 | 
			
		||||
	use dns nfs nfsmount portmap rpcbind rpc.statd rpc.lockd
 | 
			
		||||
	keyword -jail -prefix -vserver
 | 
			
		||||
	keyword -jail -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -13,7 +13,7 @@ depend()
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	provide net
 | 
			
		||||
	keyword -jail -prefix -vserver
 | 
			
		||||
	keyword -jail -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
uniqify()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ required_files="/etc/newsyslog.conf"
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
	keyword -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_setleds()
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@ extra_started_commands="reload"
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ depend()
 | 
			
		||||
	need localmount
 | 
			
		||||
	use logger
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start_pre()
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	use modules devfs
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -openvz -prefix -vserver -lxc
 | 
			
		||||
	keyword -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
@@ -20,6 +20,29 @@ start()
 | 
			
		||||
 | 
			
		||||
	[ -e /proc/filesystems ] || return 0
 | 
			
		||||
 | 
			
		||||
	# Setup Kernel Support for miscellaneous Binary Formats
 | 
			
		||||
	if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
			
		||||
		if grep -qs binfmt_misc /proc/filesystems; then
 | 
			
		||||
			ebegin "Mounting misc binary format filesystem"
 | 
			
		||||
			mount -t binfmt_misc -o nodev,noexec,nosuid \
 | 
			
		||||
				binfmt_misc /proc/sys/fs/binfmt_misc
 | 
			
		||||
			if eend $? ; then
 | 
			
		||||
				local fmts
 | 
			
		||||
				ebegin "Loading custom binary format handlers"
 | 
			
		||||
				fmts=$(grep -hsv -e '^[#;]' -e '^[[:space:]]*$' \
 | 
			
		||||
					/run/binfmt.d/*.conf \
 | 
			
		||||
					@SYSCONFDIR@/binfmt.d/*.conf \
 | 
			
		||||
					""/usr/lib/binfmt.d/*.conf)
 | 
			
		||||
				if [ -n "${fmts}" ]; then
 | 
			
		||||
					echo "${fmts}" > /proc/sys/fs/binfmt_misc/register
 | 
			
		||||
				fi
 | 
			
		||||
				eend $?
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	[ "$RC_SYS" == "OPENVZ" ] && return 0
 | 
			
		||||
 | 
			
		||||
	# Check what USB fs the kernel support.  Currently
 | 
			
		||||
	# 2.5+ kernels, and later 2.4 kernels have 'usbfs',
 | 
			
		||||
	# while older kernels have 'usbdevfs'.
 | 
			
		||||
@@ -37,27 +60,6 @@ start()
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Setup Kernel Support for miscellaneous Binary Formats
 | 
			
		||||
	if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
			
		||||
		if grep -qs binfmt_misc /proc/filesystems; then
 | 
			
		||||
			ebegin "Mounting misc binary format filesystem"
 | 
			
		||||
			mount -t binfmt_misc -o nodev,noexec,nosuid \
 | 
			
		||||
				binfmt_misc /proc/sys/fs/binfmt_misc
 | 
			
		||||
			if eend $? ; then
 | 
			
		||||
				local fmts
 | 
			
		||||
				ebegin "Loading custom binary format handlers"
 | 
			
		||||
				fmts=$(grep -hsv -e '^[#;]' -e '^[[:space:]]*$' \
 | 
			
		||||
					/run/binfmt.d/*.conf \
 | 
			
		||||
					"/etc"/binfmt.d/*.conf \
 | 
			
		||||
					""/usr/lib/binfmt.d/*.conf)
 | 
			
		||||
				if [ -n "${fmts}" ]; then
 | 
			
		||||
					echo "${fmts}" > /proc/sys/fs/binfmt_misc/register
 | 
			
		||||
				fi
 | 
			
		||||
				eend $?
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	# Setup Kernel Support for SELinux
 | 
			
		||||
	if [ -d /selinux ] && ! mountinfo -q /selinux; then
 | 
			
		||||
		if grep -qs selinuxfs /proc/filesystems; then
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ depend()
 | 
			
		||||
	need localmount net
 | 
			
		||||
	after *
 | 
			
		||||
	before local
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -7,26 +7,47 @@ description="Mount the root fs read/write"
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need fsck
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
	keyword -jail -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	case ",$(fstabinfo -o /)," in
 | 
			
		||||
	*,ro,*) return 0;;
 | 
			
		||||
		*,ro,*)
 | 
			
		||||
		;;
 | 
			
		||||
		*)
 | 
			
		||||
			# Check if the rootfs isn't already writable.
 | 
			
		||||
			if checkpath -W /; then
 | 
			
		||||
				rm -f /fastboot /forcefsck
 | 
			
		||||
			else
 | 
			
		||||
				ebegin "Remounting root filesystem read/write"
 | 
			
		||||
				case "$RC_UNAME" in
 | 
			
		||||
					Linux)
 | 
			
		||||
						mount -n -o remount,rw /
 | 
			
		||||
					;;
 | 
			
		||||
					*)
 | 
			
		||||
						mount -u -o rw /
 | 
			
		||||
					;;
 | 
			
		||||
				esac
 | 
			
		||||
				eend $? "Root filesystem could not be mounted read/write"
 | 
			
		||||
				if [ $?  -eq 0 ]; then
 | 
			
		||||
					rm -f /fastboot /forcefsck
 | 
			
		||||
				fi
 | 
			
		||||
			fi
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	if echo 2>/dev/null >/.test.$$; then
 | 
			
		||||
		rm -f /.test.$$ /fastboot /forcefsck
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	ebegin "Remounting root filesystem read/write"
 | 
			
		||||
	case "$RC_UNAME" in
 | 
			
		||||
		Linux)	mount -n -o remount,rw /;;
 | 
			
		||||
		*)	mount -u -o rw /;;
 | 
			
		||||
	esac
 | 
			
		||||
	if eend $? "Root filesystem could not be mounted read/write"; then
 | 
			
		||||
		rm -f /fastboot /forcefsck
 | 
			
		||||
	fi
 | 
			
		||||
	ebegin "Remounting filesystems"
 | 
			
		||||
	local mountpoint
 | 
			
		||||
	for mountpoint in $(fstabinfo); do
 | 
			
		||||
		case "${mountpoint}" in
 | 
			
		||||
			/)
 | 
			
		||||
			;;
 | 
			
		||||
			/*)
 | 
			
		||||
				mountinfo -q "${mountpoint}" && \
 | 
			
		||||
					fstabinfo --remount "${mountpoint}"
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
	eend 0
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ description="Saves a kernel dump."
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	provide net
 | 
			
		||||
	use network
 | 
			
		||||
	keyword -jail -prefix -vserver
 | 
			
		||||
	keyword -jail -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pre_flight_checks()
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	before fsck
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -4,14 +4,15 @@
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
	before localmount
 | 
			
		||||
	keyword -jail -openvz -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Activating swap devices"
 | 
			
		||||
	case "$RC_UNAME" in
 | 
			
		||||
		Linux)		swapon -a -e >/dev/null;;
 | 
			
		||||
		NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
 | 
			
		||||
		*)		swapon -a >/dev/null;;
 | 
			
		||||
	esac
 | 
			
		||||
@@ -23,7 +24,7 @@ stop()
 | 
			
		||||
	ebegin "Deactivating swap devices"
 | 
			
		||||
 | 
			
		||||
	# Try to unmount all tmpfs filesystems not in use, else a deadlock may
 | 
			
		||||
	# occure. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
 | 
			
		||||
	# occur. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
 | 
			
		||||
	cd "$RC_SVCDIR"
 | 
			
		||||
	umount -a -t tmpfs 2>/dev/null
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								init.d/swapfiles.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								init.d/swapfiles.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
#!@PREFIX@/sbin/runscript
 | 
			
		||||
# Copyright (c) 2007-2009 Roy Marples <roy@marples.name>
 | 
			
		||||
# Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -openvz -prefix -vserver -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Activating additional swap space"
 | 
			
		||||
	case "$RC_UNAME" in
 | 
			
		||||
		NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
 | 
			
		||||
		*)		swapon -a >/dev/null;;
 | 
			
		||||
	esac
 | 
			
		||||
	eend 0 # If swapon has nothing todo it errors, so always return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop()
 | 
			
		||||
{
 | 
			
		||||
	ebegin "Deactivating additional swap space"
 | 
			
		||||
 | 
			
		||||
	# Try to unmount all tmpfs filesystems not in use, else a deadlock may
 | 
			
		||||
	# occur. As $RC_SVCDIR may also be tmpfs we cd to it to lock it
 | 
			
		||||
	# fixme: Do we need this here since we are only unmounting swap files
 | 
			
		||||
	# and loopback swap?
 | 
			
		||||
	cd "$RC_SVCDIR"
 | 
			
		||||
	umount -a -t tmpfs 2>/dev/null
 | 
			
		||||
 | 
			
		||||
	case "$RC_UNAME" in
 | 
			
		||||
		Linux)
 | 
			
		||||
			while read filename type rest; do
 | 
			
		||||
				case "$type" in
 | 
			
		||||
					file) swapoff $filename >/dev/null;;
 | 
			
		||||
				esac
 | 
			
		||||
				case "$filename" in
 | 
			
		||||
					/dev/loop*) swapoff $filename >/dev/null;;
 | 
			
		||||
				esac
 | 
			
		||||
			done < /proc/swaps
 | 
			
		||||
			;;
 | 
			
		||||
	esac
 | 
			
		||||
	eend 0
 | 
			
		||||
}
 | 
			
		||||
@@ -8,7 +8,7 @@ depend()
 | 
			
		||||
{
 | 
			
		||||
	before *
 | 
			
		||||
	provide clock
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu -lxc
 | 
			
		||||
	keyword -openvz -uml -vserver -xenu -lxc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# swclock is an OpenRC built in
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -prefix
 | 
			
		||||
	keyword -jail
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start() {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	before bootmisc logger
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	before bootmisc logger
 | 
			
		||||
	keyword -prefix -vserver
 | 
			
		||||
	keyword -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ description="Mount the sys filesystem."
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	keyword -prefix -vserver
 | 
			
		||||
	keyword -vserver
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mount_sys()
 | 
			
		||||
@@ -74,15 +74,19 @@ mount_misc()
 | 
			
		||||
 | 
			
		||||
mount_cgroups()
 | 
			
		||||
{
 | 
			
		||||
	yesno ${rc_cgroups:-YES} || return 0
 | 
			
		||||
	if [ ! -e /proc/cgroups ]; then
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
	yesno ${rc_cgroups:-YES} && [ -e /proc/cgroups ] && \
 | 
			
		||||
		mountinfo -q /sys/fs/cgroup || return 0
 | 
			
		||||
 | 
			
		||||
	local agent="@LIBEXECDIR@/sh/cgroup-release-agent.sh"
 | 
			
		||||
	mkdir /sys/fs/cgroup/openrc
 | 
			
		||||
	mount -n -t cgroup \
 | 
			
		||||
		-o none,nodev,noexec,nosuid,name=openrc,release_agent="$agent" \
 | 
			
		||||
		openrc /sys/fs/cgroup/openrc
 | 
			
		||||
	echo 1 > /sys/fs/cgroup/openrc/notify_on_release
 | 
			
		||||
	while read name hier groups enabled rest; do
 | 
			
		||||
		case "${enabled}" in
 | 
			
		||||
			1)	mkdir /sys/fs/cgroup/${name}
 | 
			
		||||
				mount -t cgroup -o nodev,noexec,nosuid,${name} \
 | 
			
		||||
				mount -n -t cgroup -o nodev,noexec,nosuid,${name} \
 | 
			
		||||
					${name} /sys/fs/cgroup/${name}
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
 
 | 
			
		||||
@@ -16,5 +16,4 @@ depend()
 | 
			
		||||
	use net newsyslog
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,8 +9,8 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
			
		||||
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	keyword -openvz -prefix -uml -vserver -xenu
 | 
			
		||||
	need root
 | 
			
		||||
	keyword -openvz -uml -vserver -xenu
 | 
			
		||||
	use root
 | 
			
		||||
	after bootmisc
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +35,7 @@ start()
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Save the encoding for use immediately at boot
 | 
			
		||||
	if [ -w "$RC_LIBEXECDIR" ]; then
 | 
			
		||||
	if checkpath -W "$RC_LIBEXECDIR"; then
 | 
			
		||||
		mkdir -p "$RC_LIBEXECDIR"/console
 | 
			
		||||
		if yesno ${unicode:-${UNICODE}}; then
 | 
			
		||||
			echo "" > "$RC_LIBEXECDIR"/console/unicode
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	after fsck
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,7 @@ description="Initializes the random number generator."
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -jail -openvz -prefix
 | 
			
		||||
	keyword -jail -openvz
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
save_seed()
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,6 @@
 | 
			
		||||
depend()
 | 
			
		||||
{
 | 
			
		||||
	need localmount
 | 
			
		||||
	keyword -prefix
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start()
 | 
			
		||||
 
 | 
			
		||||
@@ -27,7 +27,7 @@ install:
 | 
			
		||||
	for man in ${MAN3}; do \
 | 
			
		||||
		${INSTALL} -m ${MANMODE} "$$man" ${DESTDIR}/${MANDIR}/man3 || exit $$?; \
 | 
			
		||||
		${MAKE_LINKS} \
 | 
			
		||||
	done	
 | 
			
		||||
	done
 | 
			
		||||
	${INSTALL} -d ${DESTDIR}/${MANDIR}/man8
 | 
			
		||||
	for man in ${MAN8}; do \
 | 
			
		||||
		${INSTALL} -m ${MANMODE} "$$man" ${DESTDIR}/${MANDIR}/man8 || exit $$?; \
 | 
			
		||||
 
 | 
			
		||||
@@ -115,7 +115,7 @@ to true.
 | 
			
		||||
These functions are designed to output a whole line, so they also
 | 
			
		||||
append a newline to the string. To stop this behaviour, you can use the
 | 
			
		||||
functions
 | 
			
		||||
.Fn einfon , 
 | 
			
		||||
.Fn einfon ,
 | 
			
		||||
.Fn ewarnn ,
 | 
			
		||||
.Fn eerrorn ,
 | 
			
		||||
.Fn einfovn ,
 | 
			
		||||
@@ -149,7 +149,7 @@ does the same as
 | 
			
		||||
.Fn eend
 | 
			
		||||
but prints
 | 
			
		||||
.Fa msg
 | 
			
		||||
instead of ok or !! in the color 
 | 
			
		||||
instead of ok or !! in the color
 | 
			
		||||
.Fa color
 | 
			
		||||
at the column
 | 
			
		||||
.Fa col .
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm rc-service
 | 
			
		||||
.Nd locate and run an OpenRC service with the given arguments 
 | 
			
		||||
.Nd locate and run an OpenRC service with the given arguments
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm
 | 
			
		||||
.Op Fl i , -ifexists
 | 
			
		||||
@@ -41,7 +41,7 @@
 | 
			
		||||
.Fl r , -resolve
 | 
			
		||||
.Ar service
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
Service scripts could be in different places on different systems. 
 | 
			
		||||
Service scripts could be in different places on different systems.
 | 
			
		||||
.Nm
 | 
			
		||||
locates the specified service and runs it with the given arguments.
 | 
			
		||||
If
 | 
			
		||||
 
 | 
			
		||||
@@ -33,8 +33,8 @@
 | 
			
		||||
.Op Ar runlevel
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
.Nm
 | 
			
		||||
gathers and displays information about the status of services 
 | 
			
		||||
in different runlevels.  The default behavior is to show information 
 | 
			
		||||
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 unassigned services that are not stopped,
 | 
			
		||||
but any runlevel can be quickly examined.
 | 
			
		||||
.Pp
 | 
			
		||||
 
 | 
			
		||||
@@ -26,7 +26,7 @@
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm rc-update
 | 
			
		||||
.Nd add and remove services to and from a runlevel 
 | 
			
		||||
.Nd add and remove services to and from a runlevel
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm
 | 
			
		||||
.Op Fl s , -stack
 | 
			
		||||
@@ -44,7 +44,7 @@
 | 
			
		||||
.Ar show
 | 
			
		||||
.Op Ar runlevel ...
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
OpenRC uses named runlevels.  Rather than editing some obscure 
 | 
			
		||||
OpenRC uses named runlevels.  Rather than editing some obscure
 | 
			
		||||
file or managing a directory of symlinks,
 | 
			
		||||
.Nm
 | 
			
		||||
exists to quickly add or delete services to and from from different runlevels.
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
.Sh LIBRARY
 | 
			
		||||
Run Command library (librc, -lrc)
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.In rc.h 
 | 
			
		||||
.In rc.h
 | 
			
		||||
.Ft bool Fn rc_deptree_update void
 | 
			
		||||
.Ft bool Fn rc_deptree_update_needed void
 | 
			
		||||
.Ft RC_DEPTREE Fn rc_deptree_load void
 | 
			
		||||
@@ -77,7 +77,7 @@ loads the deptree and returns a pointer to it which needs to be freed by
 | 
			
		||||
when done.
 | 
			
		||||
.Pp
 | 
			
		||||
.Fn rc_deptree_depend ,
 | 
			
		||||
.Fn rc_deptree_depends 
 | 
			
		||||
.Fn rc_deptree_depends
 | 
			
		||||
and
 | 
			
		||||
.Fn rc_deptree_order
 | 
			
		||||
return a list of services from the
 | 
			
		||||
 
 | 
			
		||||
@@ -31,7 +31,7 @@
 | 
			
		||||
.Sh LIBRARY
 | 
			
		||||
Run Command library (librc, -lrc)
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.In rc.h 
 | 
			
		||||
.In rc.h
 | 
			
		||||
.Ft "char *" Fn rc_runlevel_get void
 | 
			
		||||
.Ft bool Fn rc_runlevel_exists
 | 
			
		||||
.Ft "RC_STRINGLIST *" Fn rc_runlevel_list void
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@
 | 
			
		||||
.Sh LIBRARY
 | 
			
		||||
Run Command library (librc, -lrc)
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.In rc.h 
 | 
			
		||||
.In rc.h
 | 
			
		||||
.Ft bool Fn rc_service_add "const char *runlevel" "const char *service"
 | 
			
		||||
.Ft bool Fn rc_service_delete "const char *runlevel" "const char *service"
 | 
			
		||||
.Ft bool Fo rc_service_daemon_set
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,7 @@
 | 
			
		||||
Run Command library (librc, -lrc)
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.In rc.h
 | 
			
		||||
.Ft "RC_STRINGLIST *" Fn rc_stringlist_new void 
 | 
			
		||||
.Ft "RC_STRINGLIST *" Fn rc_stringlist_new void
 | 
			
		||||
.Ft "RC_STRING *" Fn rc_stringlist_add "RC_STRINGLIST *list" "const char *item"
 | 
			
		||||
.Ft "RC_STRING *" Fn rc_stringlist_addu "RC_STRINGLIST *list" "const char *item"
 | 
			
		||||
.Ft bool Fn rc_stringlist_delete RC_STRINGLIST "const char *item"
 | 
			
		||||
 
 | 
			
		||||
@@ -25,13 +25,14 @@
 | 
			
		||||
.Dt RUNSCRIPT 8 SMM
 | 
			
		||||
.Os OpenRC
 | 
			
		||||
.Sh NAME
 | 
			
		||||
.Nm runscript 
 | 
			
		||||
.Nm runscript
 | 
			
		||||
.Nd a means of hooking shell commands into a service
 | 
			
		||||
.Sh SYNOPSIS
 | 
			
		||||
.Nm
 | 
			
		||||
.Op Fl D , -nodeps
 | 
			
		||||
.Op Fl d , -debug
 | 
			
		||||
.Op Fl s , -ifstarted
 | 
			
		||||
.Op Fl S , -ifstopped
 | 
			
		||||
.Op Fl Z , -dry-run
 | 
			
		||||
.Op Ar command ...
 | 
			
		||||
.Sh DESCRIPTION
 | 
			
		||||
@@ -76,6 +77,8 @@ Set xtrace on in the shell to assist in debugging.
 | 
			
		||||
Ignore all dependency information the service supplies.
 | 
			
		||||
.It Fl s , -ifstarted
 | 
			
		||||
Only run the command if the service has been started.
 | 
			
		||||
.It Fl S , -ifstopped
 | 
			
		||||
Only run the command if the service has been stopped.
 | 
			
		||||
.It Fl q , -quiet
 | 
			
		||||
Turns off all informational output the service generates.
 | 
			
		||||
Output from any non OpenRC commands is not affected.
 | 
			
		||||
@@ -108,6 +111,11 @@ Daemon to start or stop via
 | 
			
		||||
if no start or stop function is defined by the service.
 | 
			
		||||
.It Ar command_args
 | 
			
		||||
List of arguments to pass to the daemon when starting.
 | 
			
		||||
.It Ar command_background
 | 
			
		||||
Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into
 | 
			
		||||
the background. This implies the "--make-pidfile" and "--pidfile" option of
 | 
			
		||||
.Xr start-stop-daemon 8
 | 
			
		||||
so the pidfile variable must be set.
 | 
			
		||||
.It Ar pidfile
 | 
			
		||||
Pidfile to use for the above defined command.
 | 
			
		||||
.It Ar name
 | 
			
		||||
@@ -127,7 +135,7 @@ Here is a list of the functions you can use in a
 | 
			
		||||
.Ic depend
 | 
			
		||||
function. You simply pass the names of the services to it to add to that
 | 
			
		||||
dependency type, or prefix it with ! to remove it.
 | 
			
		||||
.Bl -tag -width "RC_DEFAULTLEVEL" 
 | 
			
		||||
.Bl -tag -width "RC_DEFAULTLEVEL"
 | 
			
		||||
.It Ic need
 | 
			
		||||
The service will refuse to start until needed services have started and it
 | 
			
		||||
will refuse to stop until any services that need it have stopped.
 | 
			
		||||
@@ -159,16 +167,14 @@ Other services should wait indefinitely for this service to start. Use
 | 
			
		||||
this keyword if your service may take longer than 60 seconds to start.
 | 
			
		||||
.It Dv -jail
 | 
			
		||||
When in a jail, exclude this service from any dependencies. The service can
 | 
			
		||||
still be run directly. Set via 
 | 
			
		||||
.Ic rc_sys 
 | 
			
		||||
in 
 | 
			
		||||
still be run directly. Set via
 | 
			
		||||
.Ic rc_sys
 | 
			
		||||
in
 | 
			
		||||
.Pa /etc/rc.conf
 | 
			
		||||
.It Dv -lxc
 | 
			
		||||
Same as -jail, but for Linux Resource Containers (LXC).
 | 
			
		||||
.It Dv -openvz
 | 
			
		||||
Same as -jail, but for OpenVZ systems.
 | 
			
		||||
.It Dv -prefix
 | 
			
		||||
Same as -jail, but for Prefix systems.
 | 
			
		||||
.It Dv -uml
 | 
			
		||||
Same as -jail, but for UML systems.
 | 
			
		||||
.It Dv -vserver
 | 
			
		||||
@@ -307,6 +313,11 @@ Mark the service as inactive.
 | 
			
		||||
.Xc
 | 
			
		||||
Checks to see if the path exists, is of the right type, owned by the right
 | 
			
		||||
people and has the correct access modes. If not, then it corrects the path.
 | 
			
		||||
.It Ic checkpath
 | 
			
		||||
.Op Fl W , -writable
 | 
			
		||||
.Ar path
 | 
			
		||||
.Xc
 | 
			
		||||
checks to see if the path is writable.
 | 
			
		||||
.It Ic yesno Ar value
 | 
			
		||||
If
 | 
			
		||||
.Ar value
 | 
			
		||||
@@ -315,11 +326,18 @@ matches YES, TRUE, ON or 1 regardless of case then we return 0, otherwise 1.
 | 
			
		||||
.Sh ENVIRONMENT
 | 
			
		||||
.Nm
 | 
			
		||||
sets the following environment variables for use in the service scripts:
 | 
			
		||||
.Bl -tag -width "RC_DEFAULTLEVEL" 
 | 
			
		||||
.Bl -tag -width "RC_DEFAULTLEVEL"
 | 
			
		||||
.It Va RC_SVCNAME
 | 
			
		||||
Name of the service.
 | 
			
		||||
.It Va RC_RUNLEVEL
 | 
			
		||||
Current runlevel that rc is in.
 | 
			
		||||
Current runlevel that rc is in. Note that, in OpenRC, the reboot
 | 
			
		||||
runlevel is mapped to the shutdown runlevel. This was done because most
 | 
			
		||||
services do not need to know if a system is shutting down or rebooting.
 | 
			
		||||
If you are writing a service that does need to know this, see the
 | 
			
		||||
RC_REBOOT variable.
 | 
			
		||||
.It Va RC_REBOOT
 | 
			
		||||
This variable contains YES if the system is rebooting. If your service
 | 
			
		||||
needs to know the system is rebooting, you should test this variable.
 | 
			
		||||
.It Va RC_BOOTLEVEL
 | 
			
		||||
Boot runlevel chosen. Default is boot.
 | 
			
		||||
.It Va RC_DEFAULTLEVEL
 | 
			
		||||
@@ -365,9 +383,8 @@ rc_provide_tap1="!net"
 | 
			
		||||
# To put in in /etc/rc.conf you would do it like this
 | 
			
		||||
rc_net_tap1_provide="!net"
 | 
			
		||||
 | 
			
		||||
# It's also possible to negate keywords. This is mainly useful for prefix
 | 
			
		||||
# users testing OpenRC.
 | 
			
		||||
rc_keyword="!noprefix"
 | 
			
		||||
# It's also possible to negate keywords.
 | 
			
		||||
rc_keyword="-keyword"
 | 
			
		||||
.Ed
 | 
			
		||||
.Sh EXAMPLES
 | 
			
		||||
.Pp
 | 
			
		||||
@@ -410,7 +427,7 @@ depend()
 | 
			
		||||
	_need=`service_get_value need`
 | 
			
		||||
    else
 | 
			
		||||
	if _need_dbus; then
 | 
			
		||||
	   _need="${_need} dbus" 
 | 
			
		||||
	   _need="${_need} dbus"
 | 
			
		||||
	fi
 | 
			
		||||
    fi
 | 
			
		||||
    need ${_need}
 | 
			
		||||
 
 | 
			
		||||
@@ -58,7 +58,7 @@ is used in an OpenRC service, then OpenRC can in turn check to see if the
 | 
			
		||||
daemon is still running. If not, then the service is marked as crashed.
 | 
			
		||||
.Pp
 | 
			
		||||
Here are the options to specify the daemon and how it should start or stop:
 | 
			
		||||
.Bl -tag -width indent 
 | 
			
		||||
.Bl -tag -width indent
 | 
			
		||||
.It Fl x , -exec Ar daemon
 | 
			
		||||
The
 | 
			
		||||
.Ar daemon
 | 
			
		||||
 
 | 
			
		||||
@@ -4,5 +4,5 @@
 | 
			
		||||
SFX=		.Linux.in
 | 
			
		||||
PKG_PREFIX?=	/usr
 | 
			
		||||
 | 
			
		||||
CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=600
 | 
			
		||||
CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=700
 | 
			
		||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ _PKG_SED:=		$(shell ${_PKG_SED_SH})
 | 
			
		||||
_LCL_SED_SH=		if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi
 | 
			
		||||
_LCL_SED:=		$(shell ${_LCL_SED_SH})
 | 
			
		||||
 | 
			
		||||
SED_REPLACE=		-e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@RC_SYS_DEFAULT@:${MKRCSYS}:g' ${_PKG_SED} ${_LCL_SED}
 | 
			
		||||
SED_REPLACE=		-e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' ${_PKG_SED} ${_LCL_SED}
 | 
			
		||||
 | 
			
		||||
# Tweak our shell scripts
 | 
			
		||||
%.sh: %.sh.in
 | 
			
		||||
@@ -53,6 +53,6 @@ check test::
 | 
			
		||||
# so we ensure that it has a bogus argument
 | 
			
		||||
CLEANFILES+=	${OBJS}
 | 
			
		||||
clean:
 | 
			
		||||
	@if test -n "${CLEANFILES}"; then echo "rm -f ${CLEANFILES}"; rm -f ${CLEANFILES}; fi 
 | 
			
		||||
	@if test -n "${CLEANFILES}"; then echo "rm -f ${CLEANFILES}"; rm -f ${CLEANFILES}; fi
 | 
			
		||||
 | 
			
		||||
include ${MK}/gitignore.mk
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@
 | 
			
		||||
# Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
_+_ ?= +
 | 
			
		||||
ECHODIR ?= echo 
 | 
			
		||||
ECHODIR ?= echo
 | 
			
		||||
_SUBDIR = @${_+_}for x in ${SUBDIR}; do \
 | 
			
		||||
	if test -d $$x; then \
 | 
			
		||||
	${ECHODIR} "===> ${DIRPRFX}$$x (${@:realinstall=install})"; \
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ RANLIB?=		ranlib
 | 
			
		||||
SED?=			sed
 | 
			
		||||
SH=			/bin/sh
 | 
			
		||||
 | 
			
		||||
PREFIX?=	
 | 
			
		||||
PREFIX?=
 | 
			
		||||
_UPREFIX_SH=		case "${PREFIX}" in "") echo /usr;; *) echo "${PREFIX}";; esac
 | 
			
		||||
_UPREFIX:=		$(shell ${_UPREFIX_SH})
 | 
			
		||||
UPREFIX=		${_UPREFIX}
 | 
			
		||||
@@ -22,6 +22,7 @@ SYSCONFDIR?=		${PREFIX}/etc
 | 
			
		||||
INITDIR?=		${SYSCONFDIR}/init.d
 | 
			
		||||
CONFDIR?=		${SYSCONFDIR}/conf.d
 | 
			
		||||
LOCALDIR?=		${SYSCONFDIR}/local.d
 | 
			
		||||
SYSCTLDIR?=		${SYSCONFDIR}/sysctl.d
 | 
			
		||||
 | 
			
		||||
BINDIR?=		${PREFIX}/sbin
 | 
			
		||||
BINMODE?=		0755
 | 
			
		||||
@@ -43,6 +44,6 @@ MANDIR?=		${MANPREFIX}/man
 | 
			
		||||
MANMODE?=		0444
 | 
			
		||||
 | 
			
		||||
DOCDIR?=		${UPREFIX}/share/doc
 | 
			
		||||
DOCMODE?=		0644	
 | 
			
		||||
DOCMODE?=		0644
 | 
			
		||||
 | 
			
		||||
CONFMODE?=		0644
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,7 @@ bonding_pre_start()
 | 
			
		||||
		local oiface
 | 
			
		||||
		oiface=$IFACE
 | 
			
		||||
		if [ -n "${primary}" ]; then
 | 
			
		||||
			IFACE=$primary 
 | 
			
		||||
			IFACE=$primary
 | 
			
		||||
			_down
 | 
			
		||||
			IFACE=$oiface
 | 
			
		||||
			echo "+${primary}" >$sys_bonding_path/slaves
 | 
			
		||||
@@ -114,7 +114,7 @@ bonding_pre_start()
 | 
			
		||||
		for s in ${slaves}; do
 | 
			
		||||
			[ "${s}" = "${primary}" ] && continue
 | 
			
		||||
			if ! grep -q ${s} $sys_bonding_path/slaves; then
 | 
			
		||||
				IFACE=$s 
 | 
			
		||||
				IFACE=$s
 | 
			
		||||
				_down
 | 
			
		||||
				IFACE=$oiface
 | 
			
		||||
				echo "+${s}" >$sys_bonding_path/slaves
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										168
									
								
								net/ip6rd.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										168
									
								
								net/ip6rd.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,168 @@
 | 
			
		||||
# Copyright (c) 2011 by Gentoo Foundation
 | 
			
		||||
# Released under the 2-clause BSD license.
 | 
			
		||||
 | 
			
		||||
_config_vars="$_config_vars link prefix suffix ipv4mask relay"
 | 
			
		||||
 | 
			
		||||
ip6rd_depend()
 | 
			
		||||
{
 | 
			
		||||
	program ip
 | 
			
		||||
	after interface
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ip6rd_pre_start()
 | 
			
		||||
{
 | 
			
		||||
	# ALL interfaces run pre_start blocks, not just those with something
 | 
			
		||||
	# assigned, so we must check if we need to run on this interface before we
 | 
			
		||||
	# do so.
 | 
			
		||||
	local config
 | 
			
		||||
	eval config=\$config_${IFVAR}
 | 
			
		||||
	[ "$config" = "ip6rd" ] || return 0
 | 
			
		||||
 | 
			
		||||
	case "${MODULES}" in
 | 
			
		||||
		*" ifconfig "*)
 | 
			
		||||
			eerror "ifconfig is not supported for 6rd"
 | 
			
		||||
			eerror "Please emerge sys-apps/iproute2"
 | 
			
		||||
			return 1
 | 
			
		||||
			;;
 | 
			
		||||
	esac
 | 
			
		||||
 | 
			
		||||
	local host= suffix= relay= addr= iface=${IFACE} config_ip6rd= localip= ipv4mask=
 | 
			
		||||
	eval host=\$link_${IFVAR}
 | 
			
		||||
	if [ -z "${host}" ]; then
 | 
			
		||||
		eerror "link_${IFVAR} not set"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	eval host=\${link_${IFVAR}}
 | 
			
		||||
	eval ipv4mask=\${ipv4mask_${IFVAR}:-0}
 | 
			
		||||
	eval suffix=\${suffix_${IFVAR}:-1}
 | 
			
		||||
	eval relay=\${relay_${IFVAR}}
 | 
			
		||||
	eval prefix=\${prefix_${IFVAR}}
 | 
			
		||||
 | 
			
		||||
	IFACE=${host}
 | 
			
		||||
	addrs=$(_get_inet_addresses)
 | 
			
		||||
	IFACE=${iface}
 | 
			
		||||
	if [ -z "${addrs}" ]; then
 | 
			
		||||
		eerror "${host} is not configured with an IPv4 address"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
	# TODO: Get this settings from DHCP (Option 212)
 | 
			
		||||
	if [ -z "${prefix}" ]; then
 | 
			
		||||
		eerror "prefix_${IFVAR} not set"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
	if [ -z "${relay}" ]; then
 | 
			
		||||
		eerror "relay_${IFVAR} not set"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
	for addr in ${addrs}; do
 | 
			
		||||
		# Strip the subnet
 | 
			
		||||
		local ip="${addr%/*}" subnet="${addr#*/}"
 | 
			
		||||
		# We don't work on private IPv4 addresses
 | 
			
		||||
		if _ip6rd_inet_is_private_network "${ip}"
 | 
			
		||||
		then
 | 
			
		||||
			continue
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		local ip6= ip6_prefix="${prefix%::/*}" ip6_subnet="${prefix#*/}"
 | 
			
		||||
		ip6_subnet=$((ip6_subnet + (32-ipv4mask)))
 | 
			
		||||
		eval ip6="$(printf "${ip6_prefix}:%s::%s" \
 | 
			
		||||
		$(_ip6rd_prefix_shave_bits  ${ip} ${ipv4mask}) ${suffix})"
 | 
			
		||||
		veinfo "Derived IPv6 address: ${ip6}"
 | 
			
		||||
 | 
			
		||||
		# Now apply our IPv6 address to our config
 | 
			
		||||
		config_ip6rd="${config_ip6rd}${config_ip6rd:+ }${ip6}/${ip6_subnet}"
 | 
			
		||||
 | 
			
		||||
		if [ -n "${localip}" ]; then
 | 
			
		||||
			localip="any"
 | 
			
		||||
		else
 | 
			
		||||
			localip="${ip}"
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if [ -z "${config_ip6rd}" ]; then
 | 
			
		||||
		eerror "No global IPv4 addresses found on interface ${host}"
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	ebegin "Creating 6rd tunnel ${IFACE}"
 | 
			
		||||
	if [ "${IFACE}" != "sit0" ]; then
 | 
			
		||||
		_tunnel add "${IFACE}" mode sit ttl 255 remote any local "${localip}"
 | 
			
		||||
	fi
 | 
			
		||||
	_tunnel 6rd dev "${IFACE}" 6rd-prefix "${prefix}"
 | 
			
		||||
	eend $? || return 1
 | 
			
		||||
	_up
 | 
			
		||||
 | 
			
		||||
	routes_ip6rd="2003::/3 via ::${relay} metric 2147483647"
 | 
			
		||||
	service_set_value "config_ip6rd_$IFVAR" "$config_ip6rd"
 | 
			
		||||
	service_set_value "routes_ip6rd_$IFVAR" "$routes_ip6rd"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ip6rd_start()
 | 
			
		||||
{
 | 
			
		||||
	local config_ip6rd=$(service_get_value "config_ip6rd_$IFVAR")
 | 
			
		||||
	local routes_ip6rd=$(service_get_value "routes_ip6rd_$IFVAR")
 | 
			
		||||
 | 
			
		||||
	# Now apply our config
 | 
			
		||||
	eval config_${config_index}=\'"${config_ip6rd}"\'
 | 
			
		||||
	: $(( config_index -= 1 ))
 | 
			
		||||
 | 
			
		||||
	# Add a route for us, ensuring we don't delete anything else
 | 
			
		||||
	local routes="$(_get_array "routes_${IFVAR}")
 | 
			
		||||
$routes_ip6rd"
 | 
			
		||||
	eval routes_${IFVAR}=\$routes
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ip6rd_inet_atoi()
 | 
			
		||||
{
 | 
			
		||||
	local IFS="${IFS}." ipi=0 j=3
 | 
			
		||||
	for i in $1 ; do
 | 
			
		||||
	       ipi=$(( ipi | i << 8*j-- ))
 | 
			
		||||
	done
 | 
			
		||||
	echo ${ipi}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ip6rd_inet_itoa()
 | 
			
		||||
{
 | 
			
		||||
	local ipi=$1
 | 
			
		||||
	for i in 0 1 2 3; do
 | 
			
		||||
		if [ $i != 3 ] ; then
 | 
			
		||||
			printf "%d." $(( (ipi & ~((1<<24)-1)) >> 24 ))
 | 
			
		||||
			ipi=$(( (ipi & ((1<<24)-1)) << 8))
 | 
			
		||||
		else
 | 
			
		||||
			printf "%d\n" $(( (ipi & ~((1<<24)-1)) >> 24 ))
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ip6rd_inet_get_network()
 | 
			
		||||
{
 | 
			
		||||
	echo $(_ip6rd_inet_itoa $(( ($(_ip6rd_inet_atoi $1) & ((1<<$2)-1) << (32-$2) ) )) )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ip6rd_inet_is_private_network()
 | 
			
		||||
{
 | 
			
		||||
	if [ "$(_ip6rd_inet_get_network $1 16)" = "192.168.0.0" ]\
 | 
			
		||||
	  || [ "$(_ip6rd_inet_get_network $1 8)" = "10.0.0.0" ]\
 | 
			
		||||
	  || [ "$(_ip6rd_inet_get_network $1 12)" = "172.16.0.0" ]\
 | 
			
		||||
	  || [ "$(_ip6rd_inet_get_network $1 16)" = "169.254.0.0" ]
 | 
			
		||||
	then
 | 
			
		||||
		return 0;
 | 
			
		||||
	fi
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_ip6rd_prefix_shave_bits()
 | 
			
		||||
{
 | 
			
		||||
	local ipi=
 | 
			
		||||
	ipi=$((  ($(_ip6rd_inet_atoi $1) & (1<<(32-$2))-1) << $2))
 | 
			
		||||
	if [ $2 -le 16 ]
 | 
			
		||||
	then
 | 
			
		||||
		printf "%04x:%0$(( (16-$2>>2)+(($2%4)?1:0) ))x" \
 | 
			
		||||
		$((ipi >> 16)) $((ipi & (1<<(16-$2))-1))
 | 
			
		||||
	elif [ $2 -lt 32 ]
 | 
			
		||||
	then
 | 
			
		||||
		printf "%0$(( (32-$2>>2)+(($2%4)?1:0) ))x" \
 | 
			
		||||
		$((ipi >> 16))
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
BOOT=		bootmisc fsck hostname localmount \
 | 
			
		||||
		root swap sysctl urandom ${BOOT-${OS}}
 | 
			
		||||
		root swap swapfiles sysctl urandom ${BOOT-${OS}}
 | 
			
		||||
DEFAULT=	local netmount
 | 
			
		||||
SHUTDOWN=	savecache ${SHUTDOWN-${OS}}
 | 
			
		||||
SYSINIT=	${SYSINIT-${OS}}
 | 
			
		||||
@@ -41,34 +41,24 @@ install:
 | 
			
		||||
	if ! test -d "${SYSINITDIR}"; then \
 | 
			
		||||
		${INSTALL} -d ${SYSINITDIR} || exit $$?; \
 | 
			
		||||
		for x in ${SYSINIT}; do \
 | 
			
		||||
			if test -n "${PREFIX}"; then \
 | 
			
		||||
				grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; done \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${SYSINITDIR}/"$$x" || exit $$?; \
 | 
			
		||||
		done \
 | 
			
		||||
	fi
 | 
			
		||||
	if ! test -d "${BOOTDIR}"; then \
 | 
			
		||||
		${INSTALL} -d ${BOOTDIR} || exit $$?; \
 | 
			
		||||
		for x in ${BOOT}; do \
 | 
			
		||||
			if test -n "${PREFIX}"; then \
 | 
			
		||||
				grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${BOOTDIR}/"$$x" || exit $$?; \
 | 
			
		||||
		done \
 | 
			
		||||
	fi
 | 
			
		||||
	if ! test -d "${DEFAULTDIR}"; then \
 | 
			
		||||
		${INSTALL} -d ${DEFAULTDIR} || exit $$?; \
 | 
			
		||||
		for x in ${DEFAULT}; do \
 | 
			
		||||
			if test -n "${PREFIX}"; then \
 | 
			
		||||
				grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; done \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; \
 | 
			
		||||
		done \
 | 
			
		||||
	fi
 | 
			
		||||
	if ! test -d "${SHUTDOWNDIR}"; then \
 | 
			
		||||
		${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \
 | 
			
		||||
		for x in ${SHUTDOWN}; do \
 | 
			
		||||
			if test -n "${PREFIX}"; then \
 | 
			
		||||
				grep -q "keyword .*noprefix" ${INITDIR}/"$$x" && continue; \
 | 
			
		||||
			fi; \
 | 
			
		||||
			ln -snf ${PREFIX}/etc/init.d/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -3,6 +3,7 @@ gendepends.sh
 | 
			
		||||
init-common-post.sh
 | 
			
		||||
rc-functions.sh
 | 
			
		||||
runscript.sh
 | 
			
		||||
cgroup-release-agent.sh
 | 
			
		||||
init.sh
 | 
			
		||||
init-early.sh
 | 
			
		||||
ifwatchd-carrier.sh
 | 
			
		||||
 
 | 
			
		||||
@@ -5,6 +5,19 @@
 | 
			
		||||
: ${CONSOLE:=/dev/console}
 | 
			
		||||
: ${RC_LIBEXECDIR:=@LIBEXECDIR@}
 | 
			
		||||
 | 
			
		||||
service_present()
 | 
			
		||||
{
 | 
			
		||||
	local p="/etc/runlevels/$1/$2"
 | 
			
		||||
	# fail if the file doesn't exist
 | 
			
		||||
	[ ! -e "$p" ] && return 1
 | 
			
		||||
	# succeed if $RC_SYS empty, can't check further, assume script will run
 | 
			
		||||
	[ -z "$RC_SYS" ] && return 0
 | 
			
		||||
	# fail if file contains "-$RC_SYS", because then it won't run
 | 
			
		||||
	egrep -qi "^[[:space:]]*keyword[[:space:]].*-$RC_SYS\>" "$p" && return 1
 | 
			
		||||
	# succeed otherwise
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if [ -e "$RC_LIBEXECDIR"/console/unicode ]; then
 | 
			
		||||
	termencoding="%G"
 | 
			
		||||
	kmode="-u"
 | 
			
		||||
@@ -14,8 +27,8 @@ else
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Try and set a font and as early as we can
 | 
			
		||||
if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \
 | 
			
		||||
	 -o -e /etc/runlevels/"$RC_BOOTLEVEL"/consolefont ]; then
 | 
			
		||||
if service_present "$RC_DEFAULTLEVEL" consolefont ||
 | 
			
		||||
   service_present "$RC_BOOTLEVEL" consolefont; then
 | 
			
		||||
	printf "\033%s" "$termencoding" >"$CONSOLE" 2>/dev/null
 | 
			
		||||
	if [ -r "$RC_LIBEXECDIR"/console/font -a -x /usr/bin/setfont ]; then
 | 
			
		||||
		font="$(cat "$RC_LIBEXECDIR"/console/font)"
 | 
			
		||||
@@ -25,8 +38,8 @@ if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/consolefont \
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Try and set a keyboard map as early as possible
 | 
			
		||||
if [ -e /etc/runlevels/"$RC_DEFAULTLEVEL"/keymaps \
 | 
			
		||||
	 -o -e /etc/runlevels/"$RC_BOOTLEVEL"/keymaps ]; then
 | 
			
		||||
if service_present "$RC_DEFAULTLEVEL" keymaps ||
 | 
			
		||||
   service_present "$RC_BOOTLEVEL" keymaps; then
 | 
			
		||||
	kbd_mode $kmode -C "$CONSOLE" 2>/dev/null
 | 
			
		||||
	if [ -r "$RC_LIBEXECDIR"/console/keymap ]; then
 | 
			
		||||
		loadkeys -q "$RC_LIBEXECDIR"/console/keymap 2>/dev/null
 | 
			
		||||
 
 | 
			
		||||
@@ -124,7 +124,11 @@ start()
 | 
			
		||||
	local _background=
 | 
			
		||||
	ebegin "Starting ${name:-$RC_SVCNAME}"
 | 
			
		||||
	if yesno "${command_background}"; then
 | 
			
		||||
		_background="--background --pidfile"
 | 
			
		||||
		if [ -z "${pidfile}" ]; then
 | 
			
		||||
			eend 1 "command_background option used but no pidfile specified"
 | 
			
		||||
			return 1
 | 
			
		||||
		fi
 | 
			
		||||
		_background="--background --make-pidfile"
 | 
			
		||||
	fi
 | 
			
		||||
	if yesno "$start_inactive"; then
 | 
			
		||||
		local _inactive=false
 | 
			
		||||
@@ -185,6 +189,14 @@ unset _conf_d
 | 
			
		||||
# Load any system overrides
 | 
			
		||||
sourcex -e "@SYSCONFDIR@/rc.conf"
 | 
			
		||||
 | 
			
		||||
if [ "$RC_UNAME" = "Linux" -a "$1" = "start" ]; then
 | 
			
		||||
	if [ -d /sys/fs/cgroup/openrc ]; then
 | 
			
		||||
		mkdir -p /sys/fs/cgroup/openrc/${RC_SVCNAME}
 | 
			
		||||
		echo $$ > /sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks
 | 
			
		||||
	fi
 | 
			
		||||
	#todo: add processes to cgroups based on settings in conf.d
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Apply any ulimit defined
 | 
			
		||||
[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && ulimit ${rc_ulimit:-$RC_ULIMIT}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@
 | 
			
		||||
#include <stdbool.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
 | 
			
		||||
#define RC_LEVEL_BOOT           "boot"
 | 
			
		||||
#define RC_LEVEL_DEFAULT        "default"
 | 
			
		||||
@@ -166,6 +167,12 @@ int svc_lock(const char *);
 | 
			
		||||
int svc_unlock(const char *, int);
 | 
			
		||||
pid_t exec_service(const char *, const char *);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Check whether path is writable or not,
 | 
			
		||||
 * this also works properly with read-only filesystems
 | 
			
		||||
 */
 | 
			
		||||
int is_writable(const char *);
 | 
			
		||||
 | 
			
		||||
#define service_start(service) exec_service(service, "start");
 | 
			
		||||
#define service_stop(service)  exec_service(service, "stop");
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "librc.h"
 | 
			
		||||
#include "einfo.h"
 | 
			
		||||
 | 
			
		||||
bool
 | 
			
		||||
rc_yesno(const char *value)
 | 
			
		||||
@@ -127,6 +128,53 @@ rc_getline(char **line, size_t *len, FILE *fp)
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_getline)
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
char *
 | 
			
		||||
rc_proc_getent(const char *ent)
 | 
			
		||||
{
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
	char *proc, *p, *value = NULL;
 | 
			
		||||
	size_t i, len;
 | 
			
		||||
 | 
			
		||||
	if (!exists("/proc/cmdline"))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(fp = fopen("/proc/cmdline", "r"))) {
 | 
			
		||||
		eerror("failed to open `/proc/cmdline': %s", strerror(errno));
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	proc = NULL;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
 | 
			
		||||
		eerror("rc_getline: %s", strerror(errno));
 | 
			
		||||
 | 
			
		||||
	if (proc != NULL) {
 | 
			
		||||
		len = strlen(ent);
 | 
			
		||||
 | 
			
		||||
		while ((p = strsep(&proc, " "))) {
 | 
			
		||||
			if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
 | 
			
		||||
				p += len;
 | 
			
		||||
 | 
			
		||||
				if (*p == '=')
 | 
			
		||||
					p++;
 | 
			
		||||
 | 
			
		||||
				value = xstrdup(p);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!value)
 | 
			
		||||
		errno = ENOENT;
 | 
			
		||||
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
	free(proc);
 | 
			
		||||
 | 
			
		||||
	return value;
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_proc_getent)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
RC_STRINGLIST *
 | 
			
		||||
rc_config_list(const char *file)
 | 
			
		||||
{
 | 
			
		||||
@@ -166,6 +214,64 @@ rc_config_list(const char *file)
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_config_list)
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Override some specific rc.conf options on the kernel command line
 | 
			
		||||
 */
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config)
 | 
			
		||||
{
 | 
			
		||||
	RC_STRINGLIST *overrides;
 | 
			
		||||
	RC_STRING *cline, *override, *config_np;
 | 
			
		||||
	char *tmp = NULL;
 | 
			
		||||
	char *value = NULL;
 | 
			
		||||
	size_t varlen = 0;
 | 
			
		||||
	size_t len = 0;
 | 
			
		||||
 | 
			
		||||
	overrides = rc_stringlist_new();
 | 
			
		||||
 | 
			
		||||
	/* A list of variables which may be overridden on the kernel command line */
 | 
			
		||||
	rc_stringlist_add(overrides, "rc_parallel");
 | 
			
		||||
 | 
			
		||||
	TAILQ_FOREACH(override, overrides, entries) {
 | 
			
		||||
		varlen = strlen(override->value);
 | 
			
		||||
		value = rc_proc_getent(override->value);
 | 
			
		||||
 | 
			
		||||
		/* No need to continue if there's nothing to override */
 | 
			
		||||
		if (!value) {
 | 
			
		||||
			free(value);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (value != NULL) {
 | 
			
		||||
			len = varlen + strlen(value) + 2;
 | 
			
		||||
			tmp = xmalloc(sizeof(char) * len);
 | 
			
		||||
			snprintf(tmp, len, "%s=%s", override->value, value);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/*
 | 
			
		||||
		 * Whenever necessary remove the old config entry first to prevent
 | 
			
		||||
		 * duplicates
 | 
			
		||||
		 */
 | 
			
		||||
		TAILQ_FOREACH_SAFE(cline, config, entries, config_np) {
 | 
			
		||||
			if (strncmp(override->value, cline->value, varlen) == 0
 | 
			
		||||
				&& cline->value[varlen] == '=') {
 | 
			
		||||
				rc_stringlist_delete(config, cline->value);
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		/* Add the option (var/value) to the current config */
 | 
			
		||||
		rc_stringlist_add(config, tmp);
 | 
			
		||||
 | 
			
		||||
		free(tmp);
 | 
			
		||||
		free(value);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rc_stringlist_free(overrides);
 | 
			
		||||
	return config;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
RC_STRINGLIST *
 | 
			
		||||
rc_config_load(const char *file)
 | 
			
		||||
{
 | 
			
		||||
@@ -239,6 +345,13 @@ rc_config_load(const char *file)
 | 
			
		||||
	}
 | 
			
		||||
	rc_stringlist_free(list);
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
	/* Only override rc.conf settings */
 | 
			
		||||
	if (strcmp(file, RC_CONF) == 0) {
 | 
			
		||||
		config = rc_config_override(config);
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return config;
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_config_load)
 | 
			
		||||
@@ -279,10 +392,13 @@ rc_conf_value(const char *setting)
 | 
			
		||||
		atexit(_free_rc_conf);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		/* Support old configs */
 | 
			
		||||
		/* Support old configs, but complain about it. */
 | 
			
		||||
		if (exists(RC_CONF_OLD)) {
 | 
			
		||||
			old = rc_config_load(RC_CONF_OLD);
 | 
			
		||||
			TAILQ_CONCAT(rc_conf, old, entries);
 | 
			
		||||
			ewarn("Your system still has %s", RC_CONF_OLD);
 | 
			
		||||
			ewarn("Please migrate to the appropriate settings in %s", RC_CONF);
 | 
			
		||||
			ewarn("and delete %s.", RC_CONF_OLD);
 | 
			
		||||
#ifdef DEBUG_MEMORY
 | 
			
		||||
			free(old);
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -216,7 +216,6 @@ rc_sys_v2(void)
 | 
			
		||||
		}
 | 
			
		||||
		/* Now do detection */
 | 
			
		||||
		__STRING_SWITCH(systype)
 | 
			
		||||
		__STRING_CASE(RC_SYS_PREFIX)	{ return RC_SYS_PREFIX; }
 | 
			
		||||
#ifdef __FreeBSD__
 | 
			
		||||
		__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; }
 | 
			
		||||
#endif /* __FreeBSD__ */
 | 
			
		||||
@@ -246,10 +245,6 @@ librc_hidden_def(rc_sys_v2)
 | 
			
		||||
const char *
 | 
			
		||||
rc_sys_v1(void)
 | 
			
		||||
{
 | 
			
		||||
#ifdef PREFIX
 | 
			
		||||
	return RC_SYS_PREFIX;
 | 
			
		||||
#else
 | 
			
		||||
 | 
			
		||||
#ifdef __FreeBSD__
 | 
			
		||||
	int jailed = 0;
 | 
			
		||||
	size_t len = sizeof(jailed);
 | 
			
		||||
@@ -286,7 +281,6 @@ rc_sys_v1(void)
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	return NULL;
 | 
			
		||||
#endif /* PREFIX */
 | 
			
		||||
}
 | 
			
		||||
librc_hidden_def(rc_sys_v1)
 | 
			
		||||
 | 
			
		||||
@@ -492,7 +486,7 @@ rc_service_exists(const char *service)
 | 
			
		||||
{
 | 
			
		||||
	char *file;
 | 
			
		||||
	bool retval = false;
 | 
			
		||||
	int len;
 | 
			
		||||
	size_t len;
 | 
			
		||||
	struct stat buf;
 | 
			
		||||
 | 
			
		||||
	if (!service) {
 | 
			
		||||
 
 | 
			
		||||
@@ -87,6 +87,7 @@ librc_hidden_proto(rc_find_pids)
 | 
			
		||||
librc_hidden_proto(rc_getfile)
 | 
			
		||||
librc_hidden_proto(rc_getline)
 | 
			
		||||
librc_hidden_proto(rc_newer_than)
 | 
			
		||||
librc_hidden_proto(rc_proc_getent)
 | 
			
		||||
librc_hidden_proto(rc_older_than)
 | 
			
		||||
librc_hidden_proto(rc_runlevel_exists)
 | 
			
		||||
librc_hidden_proto(rc_runlevel_get)
 | 
			
		||||
 
 | 
			
		||||
@@ -276,7 +276,6 @@ bool rc_service_daemons_crashed(const char *);
 | 
			
		||||
#define RC_SYS_JAIL    "JAIL"
 | 
			
		||||
#define RC_SYS_OPENVZ  "OPENVZ"
 | 
			
		||||
#define RC_SYS_LXC     "LXC"
 | 
			
		||||
#define RC_SYS_PREFIX  "PREFIX"
 | 
			
		||||
#define RC_SYS_UML     "UML"
 | 
			
		||||
#define RC_SYS_VSERVER "VSERVER"
 | 
			
		||||
#define RC_SYS_XEN0    "XEN0"
 | 
			
		||||
@@ -361,6 +360,13 @@ bool rc_newer_than(const char *, const char *, time_t *, char *);
 | 
			
		||||
 * @return true if source is older than target, otherwise false */
 | 
			
		||||
bool rc_older_than(const char *, const char *, time_t *, char *);
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
/*! Read variables/values from /proc/cmdline
 | 
			
		||||
 * @param value
 | 
			
		||||
 * @return pointer to the value, otherwise NULL */
 | 
			
		||||
char *rc_proc_getent(const char *);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/*! Update the cached dependency tree if it's older than any init script,
 | 
			
		||||
 * its configuration file or an external configuration file the init script
 | 
			
		||||
 * has specified.
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ global:
 | 
			
		||||
	rc_getline;
 | 
			
		||||
	rc_newer_than;
 | 
			
		||||
	rc_older_than;
 | 
			
		||||
	rc_proc_getent;
 | 
			
		||||
	rc_runlevel_exists;
 | 
			
		||||
	rc_runlevel_get;
 | 
			
		||||
	rc_runlevel_list;
 | 
			
		||||
 
 | 
			
		||||
@@ -32,7 +32,6 @@
 | 
			
		||||
#include <sys/types.h>
 | 
			
		||||
#include <sys/stat.h>
 | 
			
		||||
 | 
			
		||||
#include <features.h>
 | 
			
		||||
#include <errno.h>
 | 
			
		||||
#include <fcntl.h>
 | 
			
		||||
#include <getopt.h>
 | 
			
		||||
@@ -56,24 +55,36 @@ typedef enum {
 | 
			
		||||
 | 
			
		||||
extern const char *applet;
 | 
			
		||||
 | 
			
		||||
/* TODO: SELinux
 | 
			
		||||
 * This needs a LOT of SELinux loving
 | 
			
		||||
 * See systemd's src/label.c:label_mkdir
 | 
			
		||||
 */
 | 
			
		||||
static int
 | 
			
		||||
do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc)
 | 
			
		||||
{
 | 
			
		||||
	struct stat st;
 | 
			
		||||
	int fd, flags;
 | 
			
		||||
	int r;
 | 
			
		||||
	int u;
 | 
			
		||||
 | 
			
		||||
	if (stat(path, &st)) {
 | 
			
		||||
	if (stat(path, &st) || trunc) {
 | 
			
		||||
		if (type == inode_file) {
 | 
			
		||||
			einfo("%s: creating file", path);
 | 
			
		||||
			if (!mode) /* 664 */
 | 
			
		||||
				mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH;
 | 
			
		||||
			flags = O_CREAT|O_NDELAY|O_WRONLY|O_NOCTTY;
 | 
			
		||||
#ifdef __USE_XOPEN2K8
 | 
			
		||||
			flags |= O_CLOEXEC|O_NOFOLLOW;
 | 
			
		||||
#ifdef O_CLOEXEC
 | 
			
		||||
			flags |= O_CLOEXEC;
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef O_NOFOLLOW
 | 
			
		||||
			flags |= O_NOFOLLOW;
 | 
			
		||||
#endif
 | 
			
		||||
			if (trunc)
 | 
			
		||||
				flags |= O_TRUNC;
 | 
			
		||||
			if ((fd = open(path, flags, mode)) == -1) {
 | 
			
		||||
			u = umask(0);
 | 
			
		||||
			fd = open(path, flags, mode);
 | 
			
		||||
			umask(u);
 | 
			
		||||
			if (fd == -1) {
 | 
			
		||||
				eerror("%s: open: %s", applet, strerror(errno));
 | 
			
		||||
				return -1;
 | 
			
		||||
			}
 | 
			
		||||
@@ -82,7 +93,11 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
 | 
			
		||||
			einfo("%s: creating directory", path);
 | 
			
		||||
			if (!mode) /* 775 */
 | 
			
		||||
				mode = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
 | 
			
		||||
			if (mkdir(path, mode) == -1) {
 | 
			
		||||
			u = umask(0);
 | 
			
		||||
			/* We do not recursively create parents */
 | 
			
		||||
			r = mkdir(path, mode);
 | 
			
		||||
			umask(u);
 | 
			
		||||
			if (r == -1 && errno != EEXIST) {
 | 
			
		||||
				eerror("%s: mkdir: %s", applet,
 | 
			
		||||
				    strerror (errno));
 | 
			
		||||
				return -1;
 | 
			
		||||
@@ -92,7 +107,10 @@ do_check(char *path, uid_t uid, gid_t gid, mode_t mode, inode_t type, bool trunc
 | 
			
		||||
			einfo("%s: creating fifo", path);
 | 
			
		||||
			if (!mode) /* 600 */
 | 
			
		||||
				mode = S_IRUSR | S_IWUSR;
 | 
			
		||||
			if (mkfifo(path, mode) == -1) {
 | 
			
		||||
			u = umask(0);
 | 
			
		||||
			r = mkfifo(path, mode);
 | 
			
		||||
			umask(u);
 | 
			
		||||
			if (r == -1 && errno != EEXIST) {
 | 
			
		||||
				eerror("%s: mkfifo: %s", applet,
 | 
			
		||||
				    strerror (errno));
 | 
			
		||||
				return -1;
 | 
			
		||||
@@ -167,8 +185,8 @@ parse_owner(struct passwd **user, struct group **group, const char *owner)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define extraopts "path1 path2 ..."
 | 
			
		||||
#define getoptstring "dDfFpm:o:" getoptstring_COMMON
 | 
			
		||||
#define extraopts "path1 [path2] [...]"
 | 
			
		||||
#define getoptstring "dDfFpm:o:W:" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "directory",          0, NULL, 'd'},
 | 
			
		||||
	{ "directory-truncate", 0, NULL, 'D'},
 | 
			
		||||
@@ -177,6 +195,7 @@ static const struct option longopts[] = {
 | 
			
		||||
	{ "pipe",               0, NULL, 'p'},
 | 
			
		||||
	{ "mode",               1, NULL, 'm'},
 | 
			
		||||
	{ "owner",              1, NULL, 'o'},
 | 
			
		||||
	{ "writable",           1, NULL, 'W'},
 | 
			
		||||
	longopts_COMMON
 | 
			
		||||
};
 | 
			
		||||
static const char * const longopts_help[] = {
 | 
			
		||||
@@ -187,6 +206,7 @@ static const char * const longopts_help[] = {
 | 
			
		||||
	"Create a named pipe (FIFO) if not exists",
 | 
			
		||||
	"Mode to check",
 | 
			
		||||
	"Owner to check (user:group)",
 | 
			
		||||
	"Check whether the path is writable or not",
 | 
			
		||||
	longopts_help_COMMON
 | 
			
		||||
};
 | 
			
		||||
#include "_usage.c"
 | 
			
		||||
@@ -231,6 +251,11 @@ checkpath(int argc, char **argv)
 | 
			
		||||
				eerrorx("%s: owner `%s' not found",
 | 
			
		||||
				    applet, optarg);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'W':
 | 
			
		||||
			if (argv[optind] != NULL)
 | 
			
		||||
				ewarn("-W/--writable takes only one path, everything else will be ignored");
 | 
			
		||||
			exit(!is_writable(optarg));
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case_RC_COMMON_GETOPT
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -93,9 +93,9 @@ getmntfile(const char *file)
 | 
			
		||||
extern const char *applet;
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
do_mount(struct ENT *ent)
 | 
			
		||||
do_mount(struct ENT *ent, bool remount)
 | 
			
		||||
{
 | 
			
		||||
	char *argv[8];
 | 
			
		||||
	char *argv[10];
 | 
			
		||||
	pid_t pid;
 | 
			
		||||
	int status;
 | 
			
		||||
 | 
			
		||||
@@ -104,9 +104,24 @@ do_mount(struct ENT *ent)
 | 
			
		||||
	argv[2] = ENT_OPTS(*ent);
 | 
			
		||||
	argv[3] = UNCONST("-t");
 | 
			
		||||
	argv[4] = ENT_TYPE(*ent);
 | 
			
		||||
	argv[5] = ENT_BLOCKDEVICE(*ent);
 | 
			
		||||
	argv[6] = ENT_FILE(*ent);
 | 
			
		||||
	argv[7] = NULL;
 | 
			
		||||
	if (!remount) {
 | 
			
		||||
		argv[5] = ENT_BLOCKDEVICE(*ent);
 | 
			
		||||
		argv[6] = ENT_FILE(*ent);
 | 
			
		||||
		argv[7] = NULL;
 | 
			
		||||
	} else {
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
		argv[5] = UNCONST("-o");
 | 
			
		||||
		argv[6] = UNCONST("remount");
 | 
			
		||||
		argv[7] = ENT_BLOCKDEVICE(*ent);
 | 
			
		||||
		argv[8] = ENT_FILE(*ent);
 | 
			
		||||
		argv[9] = NULL;
 | 
			
		||||
#else
 | 
			
		||||
		argv[5] = UNCONST("-u");
 | 
			
		||||
		argv[6] = ENT_BLOCKDEVICE(*ent);
 | 
			
		||||
		argv[7] = ENT_FILE(*ent);
 | 
			
		||||
		argv[8] = NULL;
 | 
			
		||||
#endif
 | 
			
		||||
	}
 | 
			
		||||
	switch (pid = vfork()) {
 | 
			
		||||
	case -1:
 | 
			
		||||
		eerrorx("%s: vfork: %s", applet, strerror(errno));
 | 
			
		||||
@@ -127,9 +142,10 @@ do_mount(struct ENT *ent)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define getoptstring "Mbmop:t:" getoptstring_COMMON
 | 
			
		||||
#define getoptstring "MRbmop:t:" getoptstring_COMMON
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "mount",          0, NULL, 'M' },
 | 
			
		||||
	{ "remount",        0, NULL, 'R' },
 | 
			
		||||
	{ "blockdevice",    0, NULL, 'b' },
 | 
			
		||||
	{ "mountargs",      0, NULL, 'm' },
 | 
			
		||||
	{ "options",        0, NULL, 'o' },
 | 
			
		||||
@@ -139,6 +155,7 @@ static const struct option longopts[] = {
 | 
			
		||||
};
 | 
			
		||||
static const char * const longopts_help[] = {
 | 
			
		||||
	"Mounts the filesytem from the mountpoint",
 | 
			
		||||
	"Remounts the filesystem based on the information in fstab",
 | 
			
		||||
	"Extract the block device",
 | 
			
		||||
	"Show arguments needed to mount the entry",
 | 
			
		||||
	"Extract the options field",
 | 
			
		||||
@@ -154,6 +171,7 @@ static const char * const longopts_help[] = {
 | 
			
		||||
#define OUTPUT_PASSNO    (1 << 4)
 | 
			
		||||
#define OUTPUT_BLOCKDEV  (1 << 5)
 | 
			
		||||
#define OUTPUT_MOUNT     (1 << 6)
 | 
			
		||||
#define OUTPUT_REMOUNT   (1 << 7)
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
fstabinfo(int argc, char **argv)
 | 
			
		||||
@@ -182,6 +200,9 @@ fstabinfo(int argc, char **argv)
 | 
			
		||||
		case 'M':
 | 
			
		||||
			output = OUTPUT_MOUNT;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'R':
 | 
			
		||||
			output = OUTPUT_REMOUNT;
 | 
			
		||||
			break;
 | 
			
		||||
		case 'b':
 | 
			
		||||
			output = OUTPUT_BLOCKDEV;
 | 
			
		||||
			break;
 | 
			
		||||
@@ -287,7 +308,11 @@ fstabinfo(int argc, char **argv)
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case OUTPUT_MOUNT:
 | 
			
		||||
			result += do_mount(ent);
 | 
			
		||||
			result += do_mount(ent, false);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case OUTPUT_REMOUNT:
 | 
			
		||||
			result += do_mount(ent, true);
 | 
			
		||||
			break;
 | 
			
		||||
 | 
			
		||||
		case OUTPUT_MOUNTARGS:
 | 
			
		||||
 
 | 
			
		||||
@@ -280,7 +280,7 @@ rc_logger_open(const char *level)
 | 
			
		||||
			 * logfile or its basedir may be read-only during sysinit and
 | 
			
		||||
			 * shutdown so skip the error in this case
 | 
			
		||||
			 */
 | 
			
		||||
			if ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0)) {
 | 
			
		||||
			if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0))) {
 | 
			
		||||
				log_error = 1;
 | 
			
		||||
				eerror("Error: fopen(%s) failed: %s", logfile, strerror(errno));
 | 
			
		||||
			}
 | 
			
		||||
@@ -288,8 +288,9 @@ rc_logger_open(const char *level)
 | 
			
		||||
 | 
			
		||||
		/* Try to keep the temporary log in case of errors */
 | 
			
		||||
		if (!log_error) {
 | 
			
		||||
			if (unlink(TMPLOG) == -1)
 | 
			
		||||
				eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno));
 | 
			
		||||
			if (errno != EROFS && ((strcmp(level, RC_LEVEL_SHUTDOWN) != 0) && (strcmp(level, RC_LEVEL_SYSINIT) != 0)))
 | 
			
		||||
				if (unlink(TMPLOG) == -1)
 | 
			
		||||
					eerror("Error: unlink(%s) failed: %s", TMPLOG, strerror(errno));
 | 
			
		||||
		} else if (exists(TMPLOG))
 | 
			
		||||
			eerrorx("Warning: temporary logfile left behind: %s", TMPLOG);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -331,3 +331,12 @@ parse_mode(mode_t *mode, char *text)
 | 
			
		||||
	errno = EINVAL;
 | 
			
		||||
	return -1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int
 | 
			
		||||
is_writable(const char *path)
 | 
			
		||||
{
 | 
			
		||||
	if (access(path, W_OK) == 0)
 | 
			
		||||
		return 1;
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										81
									
								
								src/rc/rc.c
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								src/rc/rc.c
									
									
									
									
									
								
							@@ -167,52 +167,6 @@ cleanup(void)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
static char *
 | 
			
		||||
proc_getent(const char *ent)
 | 
			
		||||
{
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
	char *proc, *p, *value = NULL;
 | 
			
		||||
	size_t i, len;
 | 
			
		||||
 | 
			
		||||
	if (!exists("/proc/cmdline"))
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	if (!(fp = fopen("/proc/cmdline", "r"))) {
 | 
			
		||||
		eerror("failed to open `/proc/cmdline': %s", strerror(errno));
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	proc = NULL;
 | 
			
		||||
	i = 0;
 | 
			
		||||
	if (rc_getline(&proc, &i, fp) == -1 || proc == NULL)
 | 
			
		||||
		eerror("rc_getline: %s", strerror(errno));
 | 
			
		||||
 | 
			
		||||
	if (proc != NULL) {
 | 
			
		||||
		len = strlen(ent);
 | 
			
		||||
 | 
			
		||||
		while ((p = strsep(&proc, " "))) {
 | 
			
		||||
			if (strncmp(ent, p, len) == 0 && (p[len] == '\0' || p[len] == ' ' || p[len] == '=')) {
 | 
			
		||||
				p += len;
 | 
			
		||||
 | 
			
		||||
				if (*p == '=')
 | 
			
		||||
					p++;
 | 
			
		||||
 | 
			
		||||
				value = xstrdup(p);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!value)
 | 
			
		||||
		errno = ENOENT;
 | 
			
		||||
 | 
			
		||||
	fclose(fp);
 | 
			
		||||
	free(proc);
 | 
			
		||||
 | 
			
		||||
	return value;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
static char
 | 
			
		||||
read_key(bool block)
 | 
			
		||||
{
 | 
			
		||||
@@ -352,15 +306,6 @@ open_shell(void)
 | 
			
		||||
	run_program(shell);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_dead static void
 | 
			
		||||
single_user(void)
 | 
			
		||||
{
 | 
			
		||||
	rc_logger_close();
 | 
			
		||||
	execl(SHUTDOWN, SHUTDOWN, "now", (char *) NULL);
 | 
			
		||||
	eerrorx("%s: unable to exec `" SHUTDOWN "': %s",
 | 
			
		||||
	    applet, strerror(errno));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static bool
 | 
			
		||||
set_krunlevel(const char *level)
 | 
			
		||||
{
 | 
			
		||||
@@ -388,11 +333,11 @@ set_krunlevel(const char *level)
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static int
 | 
			
		||||
static size_t
 | 
			
		||||
get_krunlevel(char *buffer, int buffer_len)
 | 
			
		||||
{
 | 
			
		||||
	FILE *fp;
 | 
			
		||||
	int i = 0;
 | 
			
		||||
	size_t i = 0;
 | 
			
		||||
 | 
			
		||||
	if (!exists(RC_KRUNLEVEL))
 | 
			
		||||
		return 0;
 | 
			
		||||
@@ -713,6 +658,7 @@ do_start_services(bool parallel)
 | 
			
		||||
			interactive = want_interactive();
 | 
			
		||||
 | 
			
		||||
		if (interactive) {
 | 
			
		||||
			parallel = false;
 | 
			
		||||
	interactive_retry:
 | 
			
		||||
			printf("\n");
 | 
			
		||||
			einfo("About to start the service %s",
 | 
			
		||||
@@ -880,16 +826,9 @@ main(int argc, char **argv)
 | 
			
		||||
			eerrorx("%s: %s", applet, strerror(errno));
 | 
			
		||||
			/* NOTREACHED */
 | 
			
		||||
		case 'S':
 | 
			
		||||
			if (rc_conf_value("rc_sys")) {
 | 
			
		||||
				bootlevel = rc_sys_v2();
 | 
			
		||||
				if (bootlevel)
 | 
			
		||||
					printf("%s\n", bootlevel);
 | 
			
		||||
			} else {
 | 
			
		||||
				ewarn("WARNING: rc_sys not defined in rc.conf. Falling back to automatic detection");
 | 
			
		||||
				bootlevel = rc_sys_v1();
 | 
			
		||||
				if (bootlevel)
 | 
			
		||||
					printf("%s\n", bootlevel);
 | 
			
		||||
			}
 | 
			
		||||
			bootlevel = rc_sys();
 | 
			
		||||
			if (bootlevel)
 | 
			
		||||
				printf("%s\n", bootlevel);
 | 
			
		||||
			exit(EXIT_SUCCESS);
 | 
			
		||||
			/* NOTREACHED */
 | 
			
		||||
		case_RC_COMMON_GETOPT
 | 
			
		||||
@@ -969,9 +908,9 @@ main(int argc, char **argv)
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
			if (strcmp(newlevel, RC_LEVEL_SYSINIT) == 0) {
 | 
			
		||||
				/* If we requested a runlevel, save it now */
 | 
			
		||||
				p = proc_getent("rc_runlevel");
 | 
			
		||||
				p = rc_proc_getent("rc_runlevel");
 | 
			
		||||
				if (p == NULL)
 | 
			
		||||
					p = proc_getent("softlevel");
 | 
			
		||||
					p = rc_proc_getent("softlevel");
 | 
			
		||||
				if (p != NULL) {
 | 
			
		||||
					set_krunlevel(p);
 | 
			
		||||
					free(p);
 | 
			
		||||
@@ -1123,7 +1062,7 @@ main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
	/* mark any services skipped as started */
 | 
			
		||||
	proc = p = proc_getent("noinit");
 | 
			
		||||
	proc = p = rc_proc_getent("noinit");
 | 
			
		||||
	if (proc) {
 | 
			
		||||
		while ((token = strsep(&p, ",")))
 | 
			
		||||
			rc_service_mark(token, RC_SERVICE_STARTED);
 | 
			
		||||
@@ -1144,7 +1083,7 @@ main(int argc, char **argv)
 | 
			
		||||
 | 
			
		||||
#ifdef __linux__
 | 
			
		||||
	/* mark any services skipped as stopped */
 | 
			
		||||
	proc = p = proc_getent("noinit");
 | 
			
		||||
	proc = p = rc_proc_getent("noinit");
 | 
			
		||||
	if (proc) {
 | 
			
		||||
		while ((token = strsep(&p, ",")))
 | 
			
		||||
			rc_service_mark(token, RC_SERVICE_STOPPED);
 | 
			
		||||
 
 | 
			
		||||
@@ -75,7 +75,7 @@
 | 
			
		||||
#define WARN_TIMEOUT	10		/* warn about this every N seconds */
 | 
			
		||||
 | 
			
		||||
static const char *applet;
 | 
			
		||||
static char *service, *runlevel, *ibsave, *prefix;;
 | 
			
		||||
static char *service, *runlevel, *ibsave, *prefix;
 | 
			
		||||
static RC_DEPTREE *deptree;
 | 
			
		||||
static RC_STRINGLIST *applet_list, *services, *tmplist;
 | 
			
		||||
static RC_STRINGLIST *restart_services, *need_services, *use_services;
 | 
			
		||||
@@ -288,6 +288,13 @@ cleanup(void)
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Buffer and lock all output messages so that we get readable content */
 | 
			
		||||
/* FIXME: Use a dynamic lock file that contains the tty/pts as well.
 | 
			
		||||
 * For example openrc-pts8.lock or openrc-tty1.lock.
 | 
			
		||||
 * Using a static lock file makes no sense, esp. in multi-user environments.
 | 
			
		||||
 * Why don't we use (f)printf, as it is thread-safe through POSIX already?
 | 
			
		||||
 * Bug: 360013
 | 
			
		||||
 */
 | 
			
		||||
static int
 | 
			
		||||
write_prefix(const char *buffer, size_t bytes, bool *prefixed)
 | 
			
		||||
{
 | 
			
		||||
@@ -297,14 +304,20 @@ write_prefix(const char *buffer, size_t bytes, bool *prefixed)
 | 
			
		||||
	ssize_t ret = 0;
 | 
			
		||||
	int fd = fileno(stdout), lock_fd = -1;
 | 
			
		||||
 | 
			
		||||
	/* Spin until we lock the prefix */
 | 
			
		||||
	for (;;) {
 | 
			
		||||
		lock_fd = open(PREFIX_LOCK, O_WRONLY | O_CREAT, 0664);
 | 
			
		||||
		if (lock_fd != -1)
 | 
			
		||||
			if (flock(lock_fd, LOCK_EX) == 0)
 | 
			
		||||
				break;
 | 
			
		||||
		close(lock_fd);
 | 
			
		||||
	/*
 | 
			
		||||
	 * Lock the prefix.
 | 
			
		||||
	 * open() may fail here when running as user, as RC_SVCDIR may not be writable.
 | 
			
		||||
	 */
 | 
			
		||||
	lock_fd = open(PREFIX_LOCK, O_WRONLY | O_CREAT, 0664);
 | 
			
		||||
 | 
			
		||||
	if (lock_fd != -1) {
 | 
			
		||||
		if (flock(lock_fd, LOCK_EX) != 0)
 | 
			
		||||
			eerror("flock() failed: %s", strerror(errno));
 | 
			
		||||
	}
 | 
			
		||||
#ifdef RC_DEBUG
 | 
			
		||||
	else
 | 
			
		||||
		ewarn("Couldn't open the prefix lock, please make sure you have enough permissions");
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	for (i = 0; i < bytes; i++) {
 | 
			
		||||
		/* We don't prefix eend calls (cursor up) */
 | 
			
		||||
@@ -332,6 +345,7 @@ write_prefix(const char *buffer, size_t bytes, bool *prefixed)
 | 
			
		||||
 | 
			
		||||
	/* Release the lock */
 | 
			
		||||
	close(lock_fd);
 | 
			
		||||
 | 
			
		||||
	return ret;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -1079,12 +1093,13 @@ service_plugable(void)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#include "_usage.h"
 | 
			
		||||
#define getoptstring "dDsvl:Z" getoptstring_COMMON
 | 
			
		||||
#define getoptstring "dDsSvl:Z" getoptstring_COMMON
 | 
			
		||||
#define extraopts "stop | start | restart | describe | zap"
 | 
			
		||||
static const struct option longopts[] = {
 | 
			
		||||
	{ "debug",      0, NULL, 'd'},
 | 
			
		||||
	{ "dry-run",    0, NULL, 'Z'},
 | 
			
		||||
	{ "ifstarted",  0, NULL, 's'},
 | 
			
		||||
	{ "ifstopped",  0, NULL, 'S'},
 | 
			
		||||
	{ "nodeps",     0, NULL, 'D'},
 | 
			
		||||
	{ "lockfd",     1, NULL, 'l'},
 | 
			
		||||
	longopts_COMMON
 | 
			
		||||
@@ -1093,6 +1108,7 @@ static const char *const longopts_help[] = {
 | 
			
		||||
	"set xtrace when running the script",
 | 
			
		||||
	"show what would be done",
 | 
			
		||||
	"only run commands when started",
 | 
			
		||||
	"only run commands when stopped",
 | 
			
		||||
	"ignore dependencies",
 | 
			
		||||
	"fd of the exclusive lock from rc",
 | 
			
		||||
	longopts_help_COMMON
 | 
			
		||||
@@ -1235,6 +1251,10 @@ runscript(int argc, char **argv)
 | 
			
		||||
			if (!(rc_service_state(service) & RC_SERVICE_STARTED))
 | 
			
		||||
				exit(EXIT_FAILURE);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'S':
 | 
			
		||||
			if (!(rc_service_state(service) & RC_SERVICE_STOPPED))
 | 
			
		||||
				exit(EXIT_FAILURE);
 | 
			
		||||
			break;
 | 
			
		||||
		case 'D':
 | 
			
		||||
			deps = false;
 | 
			
		||||
			break;
 | 
			
		||||
 
 | 
			
		||||
@@ -1178,20 +1178,18 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_PAM
 | 
			
		||||
		if (changeuser != NULL)
 | 
			
		||||
		if (changeuser != NULL) {
 | 
			
		||||
			pamr = pam_start("start-stop-daemon",
 | 
			
		||||
			    changeuser, &conv, &pamh);
 | 
			
		||||
		else
 | 
			
		||||
			pamr = pam_start("start-stop-daemon",
 | 
			
		||||
			    "nobody", &conv, &pamh);
 | 
			
		||||
 | 
			
		||||
		if (pamr == PAM_SUCCESS)
 | 
			
		||||
			pamr = pam_acct_mgmt(pamh, PAM_SILENT);
 | 
			
		||||
		if (pamr == PAM_SUCCESS)
 | 
			
		||||
			pamr = pam_open_session(pamh, PAM_SILENT);
 | 
			
		||||
		if (pamr != PAM_SUCCESS)
 | 
			
		||||
			eerrorx("%s: pam error: %s",
 | 
			
		||||
			    applet, pam_strerror(pamh, pamr));
 | 
			
		||||
			if (pamr == PAM_SUCCESS)
 | 
			
		||||
				pamr = pam_acct_mgmt(pamh, PAM_SILENT);
 | 
			
		||||
			if (pamr == PAM_SUCCESS)
 | 
			
		||||
				pamr = pam_open_session(pamh, PAM_SILENT);
 | 
			
		||||
			if (pamr != PAM_SUCCESS)
 | 
			
		||||
				eerrorx("%s: pam error: %s",
 | 
			
		||||
					applet, pam_strerror(pamh, pamr));
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
		if (gid && setgid(gid))
 | 
			
		||||
@@ -1219,15 +1217,17 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
			rc_stringlist_add(env_list, environ[i++]);
 | 
			
		||||
 | 
			
		||||
#ifdef HAVE_PAM
 | 
			
		||||
		pamenv = (const char *const *)pam_getenvlist(pamh);
 | 
			
		||||
		if (pamenv) {
 | 
			
		||||
			while (*pamenv) {
 | 
			
		||||
				/* Don't add strings unless they set a var */
 | 
			
		||||
				if (strchr(*pamenv, '='))
 | 
			
		||||
					putenv(xstrdup(*pamenv));
 | 
			
		||||
				else
 | 
			
		||||
					unsetenv(*pamenv);
 | 
			
		||||
				pamenv++;
 | 
			
		||||
		if (changeuser != NULL) {
 | 
			
		||||
			pamenv = (const char *const *)pam_getenvlist(pamh);
 | 
			
		||||
			if (pamenv) {
 | 
			
		||||
				while (*pamenv) {
 | 
			
		||||
					/* Don't add strings unless they set a var */
 | 
			
		||||
					if (strchr(*pamenv, '='))
 | 
			
		||||
						putenv(xstrdup(*pamenv));
 | 
			
		||||
					else
 | 
			
		||||
						unsetenv(*pamenv);
 | 
			
		||||
					pamenv++;
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
#endif
 | 
			
		||||
@@ -1304,7 +1304,7 @@ start_stop_daemon(int argc, char **argv)
 | 
			
		||||
		setsid();
 | 
			
		||||
		execvp(exec, argv);
 | 
			
		||||
#ifdef HAVE_PAM
 | 
			
		||||
		if (pamr == PAM_SUCCESS)
 | 
			
		||||
		if (changeuser != NULL && pamr == PAM_SUCCESS)
 | 
			
		||||
			pam_close_session(pamh, PAM_SILENT);
 | 
			
		||||
#endif
 | 
			
		||||
		eerrorx("%s: failed to exec `%s': %s",
 | 
			
		||||
 
 | 
			
		||||
@@ -32,6 +32,8 @@ rc_newer_than
 | 
			
		||||
rc_newer_than@@RC_1.0
 | 
			
		||||
rc_older_than
 | 
			
		||||
rc_older_than@@RC_1.0
 | 
			
		||||
rc_proc_getent
 | 
			
		||||
rc_proc_getent@@RC_1.0
 | 
			
		||||
rc_runlevel_exists
 | 
			
		||||
rc_runlevel_exists@@RC_1.0
 | 
			
		||||
rc_runlevel_get
 | 
			
		||||
 
 | 
			
		||||
@@ -10,7 +10,7 @@ si::sysinit:/sbin/rc sysinit
 | 
			
		||||
# Further system initialization, brings up the boot runlevel.
 | 
			
		||||
rc::bootwait:/sbin/rc boot
 | 
			
		||||
 | 
			
		||||
l0:0:wait:/sbin/rc shutdown 
 | 
			
		||||
l0:0:wait:/sbin/rc shutdown
 | 
			
		||||
l0s:0:wait:/sbin/halt -dhip
 | 
			
		||||
l1:S1:wait:/sbin/rc single
 | 
			
		||||
l2:2:wait:/sbin/rc nonetwork
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										6
									
								
								sysctl.d/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								sysctl.d/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
DIR=	${SYSCTLDIR}
 | 
			
		||||
CONF=	README
 | 
			
		||||
 | 
			
		||||
MK=		../mk
 | 
			
		||||
include ${MK}/os.mk
 | 
			
		||||
include ${MK}/scripts.mk
 | 
			
		||||
							
								
								
									
										13
									
								
								sysctl.d/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								sysctl.d/README
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
Kernel system variables configuration files
 | 
			
		||||
 | 
			
		||||
Files found under the /etc/sysctl.d directory that end with .conf are
 | 
			
		||||
parsed within sysctl(8) at boot time.  If you want to set kernel variables
 | 
			
		||||
you can either edit /etc/sysctl.conf or make a new file.
 | 
			
		||||
 | 
			
		||||
The filename isn't important, but don't make it a package name as it may clash
 | 
			
		||||
with something the package builder needs later. The file name must end
 | 
			
		||||
with .conf, or it will not be read.
 | 
			
		||||
 | 
			
		||||
The recommended location for local system settings is /etc/sysctl.d/local.conf
 | 
			
		||||
but as long as you follow the rules for the name of the file, anything will
 | 
			
		||||
work. see the sysctl.conf(5) man page for details of the format.
 | 
			
		||||
		Reference in New Issue
	
	Block a user