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.2 | ||||
| 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 | ||||
|   | ||||
| @@ -4,18 +4,14 @@ | ||||
| # 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. | ||||
|   | ||||
| @@ -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;; | ||||
| 	esac | ||||
|  | ||||
| 	if echo 2>/dev/null >/.test.$$; then | ||||
| 		rm -f /.test.$$ /fastboot /forcefsck | ||||
| 		return 0 | ||||
| 	fi | ||||
|  | ||||
| 		*,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 /;; | ||||
| 					Linux) | ||||
| 						mount -n -o remount,rw / | ||||
| 					;; | ||||
| 					*) | ||||
| 						mount -u -o rw / | ||||
| 					;; | ||||
| 				esac | ||||
| 	if eend $? "Root filesystem could not be mounted read/write"; then | ||||
| 				eend $? "Root filesystem could not be mounted read/write" | ||||
| 				if [ $?  -eq 0 ]; then | ||||
| 					rm -f /fastboot /forcefsck | ||||
| 				fi | ||||
| 			fi | ||||
| 		;; | ||||
| 	esac | ||||
|  | ||||
| 	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() | ||||
|   | ||||
| @@ -32,6 +32,7 @@ | ||||
| .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 | ||||
| @@ -167,8 +175,6 @@ in | ||||
| Same as -jail, but for Linux Resource Containers (LXC). | ||||
| .It Dv -openvz | ||||
| Same as -jail, but for OpenVZ systems. | ||||
| .It Dv -prefix | ||||
| Same as -jail, but for Prefix systems. | ||||
| .It Dv -uml | ||||
| Same as -jail, but for UML systems. | ||||
| .It Dv -vserver | ||||
| @@ -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 | ||||
| @@ -319,7 +330,14 @@ sets the following environment variables for use in the service scripts: | ||||
| .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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										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); | ||||
| 	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,6 +288,7 @@ rc_logger_open(const char *level) | ||||
|  | ||||
| 		/* Try to keep the temporary log in case of errors */ | ||||
| 		if (!log_error) { | ||||
| 			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)) | ||||
|   | ||||
| @@ -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; | ||||
| } | ||||
|   | ||||
							
								
								
									
										77
									
								
								src/rc/rc.c
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								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(); | ||||
| 			bootlevel = rc_sys(); | ||||
| 			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); | ||||
| 			} | ||||
| 			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 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) | ||||
| 				break; | ||||
| 		close(lock_fd); | ||||
|  | ||||
| 	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,12 +1178,9 @@ 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); | ||||
| @@ -1192,6 +1189,7 @@ start_stop_daemon(int argc, char **argv) | ||||
| 			if (pamr != PAM_SUCCESS) | ||||
| 				eerrorx("%s: pam error: %s", | ||||
| 					applet, pam_strerror(pamh, pamr)); | ||||
| 		} | ||||
| #endif | ||||
|  | ||||
| 		if (gid && setgid(gid)) | ||||
| @@ -1219,6 +1217,7 @@ start_stop_daemon(int argc, char **argv) | ||||
| 			rc_stringlist_add(env_list, environ[i++]); | ||||
|  | ||||
| #ifdef HAVE_PAM | ||||
| 		if (changeuser != NULL) { | ||||
| 			pamenv = (const char *const *)pam_getenvlist(pamh); | ||||
| 			if (pamenv) { | ||||
| 				while (*pamenv) { | ||||
| @@ -1230,6 +1229,7 @@ start_stop_daemon(int argc, char **argv) | ||||
| 					pamenv++; | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| #endif | ||||
|  | ||||
| 		TAILQ_FOREACH(env, env_list, entries) { | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										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