Compare commits
	
		
			134 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5534b22c63 | ||
| 
						 | 
					477e3dd8c1 | ||
| 
						 | 
					678e7adeb2 | ||
| 
						 | 
					b087a751de | ||
| 
						 | 
					bc05fb7551 | ||
| 
						 | 
					e5c2a378f3 | ||
| 
						 | 
					3c1a71bd9d | ||
| 
						 | 
					fcb826a451 | ||
| 
						 | 
					fde3902d06 | ||
| 
						 | 
					d7bbb0f583 | ||
| 
						 | 
					21ca2b746c | ||
| 
						 | 
					6a79aef015 | ||
| 
						 | 
					4a269674b7 | ||
| 
						 | 
					eea4decdd1 | ||
| 
						 | 
					d4d0f25a48 | ||
| 
						 | 
					1cb44092fc | ||
| 
						 | 
					4207e46622 | ||
| 
						 | 
					f6ea16159e | ||
| 
						 | 
					9047ea4cb0 | ||
| 
						 | 
					d7f5a696c1 | ||
| 
						 | 
					6f614cd3f3 | ||
| 
						 | 
					85c1930acf | ||
| 
						 | 
					96bd0c004c | ||
| 
						 | 
					b693af9055 | ||
| 
						 | 
					6dcb692986 | ||
| 
						 | 
					e2e652e469 | ||
| 
						 | 
					b73941f0c3 | ||
| 
						 | 
					c304522131 | ||
| 
						 | 
					92325b44ba | ||
| 
						 | 
					074d90f5a4 | ||
| 
						 | 
					7056b56b3c | ||
| 
						 | 
					d5c3b85e3f | ||
| 
						 | 
					1ab2249448 | ||
| 
						 | 
					a15cff21c6 | ||
| 
						 | 
					45aa36cc62 | ||
| 
						 | 
					d3f833179b | ||
| 
						 | 
					abe552b969 | ||
| 
						 | 
					856eafb006 | ||
| 
						 | 
					f27d60add9 | ||
| 
						 | 
					8ad460c54c | ||
| 
						 | 
					72c0824961 | ||
| 
						 | 
					5b7e3490ef | ||
| 
						 | 
					dd61e6bfc3 | ||
| 
						 | 
					204971c6e2 | ||
| 
						 | 
					3552f0ae54 | ||
| 
						 | 
					42cb848829 | ||
| 
						 | 
					e0ac661419 | ||
| 
						 | 
					6414c3bc39 | ||
| 
						 | 
					4f9bd7e4db | ||
| 
						 | 
					bf539f2196 | ||
| 
						 | 
					20b60ea904 | ||
| 
						 | 
					f53c8baef3 | ||
| 
						 | 
					be06cd250e | ||
| 
						 | 
					003657c973 | ||
| 
						 | 
					4fd144c0a6 | ||
| 
						 | 
					c44c904a61 | ||
| 
						 | 
					78146b0e14 | ||
| 
						 | 
					deaae7ab5c | ||
| 
						 | 
					3d2c2f0b87 | ||
| 
						 | 
					6a0c033a64 | ||
| 
						 | 
					6710316a18 | ||
| 
						 | 
					61882821e0 | ||
| 
						 | 
					969546bcf0 | ||
| 
						 | 
					d0ae7ffc25 | ||
| 
						 | 
					b71bcc2422 | ||
| 
						 | 
					24010dcb48 | ||
| 
						 | 
					0a76627345 | ||
| 
						 | 
					bbf98befb8 | ||
| 
						 | 
					316903fbf0 | ||
| 
						 | 
					66a9788435 | ||
| 
						 | 
					bf73363f22 | ||
| 
						 | 
					d6c30ab12a | ||
| 
						 | 
					0d1f1010c2 | ||
| 
						 | 
					83bb827edf | ||
| 
						 | 
					c146b96691 | ||
| 
						 | 
					6cabaf274d | ||
| 
						 | 
					1edb5f6fd9 | ||
| 
						 | 
					c4d7e02abd | ||
| 
						 | 
					a4e0d675e1 | ||
| 
						 | 
					8a8032478a | ||
| 
						 | 
					ac53c9a658 | ||
| 
						 | 
					b02ff466fa | ||
| 
						 | 
					6bd0f2d096 | ||
| 
						 | 
					63f8ae466f | ||
| 
						 | 
					841b883825 | ||
| 
						 | 
					ba10793b0b | ||
| 
						 | 
					d4d5593238 | ||
| 
						 | 
					d5db5489be | ||
| 
						 | 
					d06db93d59 | ||
| 
						 | 
					8c14d0c476 | ||
| 
						 | 
					04debf6f25 | ||
| 
						 | 
					c289774b00 | ||
| 
						 | 
					9dd8ee330d | ||
| 
						 | 
					5d5856c193 | ||
| 
						 | 
					686e172207 | ||
| 
						 | 
					fef6268f8d | ||
| 
						 | 
					556dbff99d | ||
| 
						 | 
					69ac78d76a | ||
| 
						 | 
					4018dfc8de | ||
| 
						 | 
					353bb9bc9a | ||
| 
						 | 
					73cdf10f1f | ||
| 
						 | 
					1a55d46645 | ||
| 
						 | 
					cae3976ef1 | ||
| 
						 | 
					da28a3d367 | ||
| 
						 | 
					ca8c29ee60 | ||
| 
						 | 
					f62253b833 | ||
| 
						 | 
					f2c2e2dd5a | ||
| 
						 | 
					94b98430cb | ||
| 
						 | 
					b19d0a40d7 | ||
| 
						 | 
					0c229faf7e | ||
| 
						 | 
					3092e310ac | ||
| 
						 | 
					671911762d | ||
| 
						 | 
					7d68839e9e | ||
| 
						 | 
					5341a925c1 | ||
| 
						 | 
					3adb8fb389 | ||
| 
						 | 
					8927a37fb7 | ||
| 
						 | 
					b085b2cda5 | ||
| 
						 | 
					daf9397764 | ||
| 
						 | 
					2984504c88 | ||
| 
						 | 
					35e8386c24 | ||
| 
						 | 
					2108285d64 | ||
| 
						 | 
					a3133fec25 | ||
| 
						 | 
					314ae3dc78 | ||
| 
						 | 
					695be59083 | ||
| 
						 | 
					c962678dd6 | ||
| 
						 | 
					3a1262703f | ||
| 
						 | 
					20035210bd | ||
| 
						 | 
					7f84b5d741 | ||
| 
						 | 
					8bca2cd4b3 | ||
| 
						 | 
					ac8ad169ae | ||
| 
						 | 
					5537994002 | ||
| 
						 | 
					5af5d12f3e | ||
| 
						 | 
					b2c92b88cc | ||
| 
						 | 
					1b32af1722 | 
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,4 @@
 | 
				
			|||||||
*.bz2
 | 
					*.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*.diff
 | 
					*.diff
 | 
				
			||||||
*.patch
 | 
					*.patch
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,9 +22,6 @@ or recognize the nofail option in fstab.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CONFIG_SETFONT -- The setfont applet does not support the -u option from kbd.
 | 
					CONFIG_SETFONT -- The setfont applet does not support the -u option from kbd.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFIG_IP -- The ip applet  doesn't support the "scope" modifier for
 | 
					 | 
				
			||||||
"ip route add" and "ip address add".
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
CONFIG_BB_SYSCTL -- The sysctl applet does not support the --system command
 | 
					CONFIG_BB_SYSCTL -- The sysctl applet does not support the --system command
 | 
				
			||||||
line switch.
 | 
					line switch.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							@@ -13,7 +13,7 @@ MK=			${TOP}/mk
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
include ${TOP}/Makefile.inc
 | 
					include ${TOP}/Makefile.inc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SUBDIR=		conf.d etc init.d local.d man scripts sh src sysctl.d
 | 
					SUBDIR=		conf.d etc init.d local.d man scripts sh src support sysctl.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Build pkgconfig or not
 | 
					# Build pkgconfig or not
 | 
				
			||||||
MKPKGCONFIG?=	yes
 | 
					MKPKGCONFIG?=	yes
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
NAME=		openrc
 | 
					NAME=		openrc
 | 
				
			||||||
VERSION=	0.21.7
 | 
					VERSION=	0.24.2
 | 
				
			||||||
PKG=		${NAME}-${VERSION}
 | 
					PKG=		${NAME}-${VERSION}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										43
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								NEWS.md
									
									
									
									
									
								
							@@ -3,6 +3,49 @@
 | 
				
			|||||||
This file will contain a list of notable changes for each release. Note
 | 
					This file will contain a list of notable changes for each release. Note
 | 
				
			||||||
the information in this file is in reverse order.
 | 
					the information in this file is in reverse order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC-0.24.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version starts cleaning up the dependencies so that rc_parallel
 | 
				
			||||||
 | 
					will work correctly.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The first step in this process is to remove the 'before *' from the
 | 
				
			||||||
 | 
					depend functions in the clock services. This means some  services not
 | 
				
			||||||
 | 
					controlled by OpenRC may now start before instead of after the clock
 | 
				
			||||||
 | 
					service. If it is important for these services to start after the clock
 | 
				
			||||||
 | 
					service, they need to have 'after clock' added to their depend
 | 
				
			||||||
 | 
					functions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC-0.24
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since the deptree2dot tool and the perl requirement are completely
 | 
				
			||||||
 | 
					optional, the deptree2dot tool has been moved to the support directory.
 | 
				
			||||||
 | 
					As a result, the MKTOOLS=yes/no switch has been removed from the makefiles.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version adds the agetty service which can be used to spawn
 | 
				
			||||||
 | 
					agetty on a specific terminal. This is currently documented in the
 | 
				
			||||||
 | 
					agetty-guide.md file at the top level of this distribution.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC-0.23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The tmpfiles.d processing code, which was part of previous versions of
 | 
				
			||||||
 | 
					OpenRC, has been separated into its own package [1]. If you need to
 | 
				
			||||||
 | 
					process systemd style tmpfiles.d files, please install this package.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[1] https://github.com/openrc/opentmpfiles
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC-0.22
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In previous versions of OpenRC, configuration information was processed
 | 
				
			||||||
 | 
					so that service-specific configuration stored in /etc/conf.d/* was
 | 
				
			||||||
 | 
					overridden by global configuration stored in /etc/rc.conf. This release
 | 
				
			||||||
 | 
					reverses that. Global configuration is now overridden by
 | 
				
			||||||
 | 
					service-specific configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The swapfiles service, which was basically a copy of the swap service,
 | 
				
			||||||
 | 
					has been removed. If you are only using swap partitions, this change
 | 
				
			||||||
 | 
					will not affect you. If you are using swap files, please adjust the
 | 
				
			||||||
 | 
					dependencies of the swap service as shown in /etc/conf.d/swap.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## OpenRC-0.21
 | 
					## OpenRC-0.21
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This version adds a daemon supervisor which can start daemons and
 | 
					This version adds a daemon supervisor which can start daemons and
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,6 @@ MKSELINUX=yes
 | 
				
			|||||||
MKSTATICLIBS=no
 | 
					MKSTATICLIBS=no
 | 
				
			||||||
MKTERMCAP=ncurses
 | 
					MKTERMCAP=ncurses
 | 
				
			||||||
MKTERMCAP=termcap
 | 
					MKTERMCAP=termcap
 | 
				
			||||||
MKTOOLS=yes
 | 
					 | 
				
			||||||
PKG_PREFIX=/usr/pkg
 | 
					PKG_PREFIX=/usr/pkg
 | 
				
			||||||
LOCAL_PREFIX=/usr/local
 | 
					LOCAL_PREFIX=/usr/local
 | 
				
			||||||
PREFIX=/usr/local
 | 
					PREFIX=/usr/local
 | 
				
			||||||
@@ -43,9 +42,6 @@ We don't support building a static OpenRC with PAM.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
You may need to use `PROGLDFLAGS=-Wl,-Bstatic` on glibc instead of just `-static`.
 | 
					You may need to use `PROGLDFLAGS=-Wl,-Bstatic` on glibc instead of just `-static`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you debug memory under valgrind, add `-DDEBUG_MEMORY`
 | 
					 | 
				
			||||||
to your `CPPFLAGS` so that all malloc memory should be freed at exit.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
If you are building OpenRC for a Gentoo Prefix installation, add `MKPREFIX=yes`.
 | 
					If you are building OpenRC for a Gentoo Prefix installation, add `MKPREFIX=yes`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`PKG_PREFIX` should be set to where packages install to by default.
 | 
					`PKG_PREFIX` should be set to where packages install to by default.
 | 
				
			||||||
@@ -76,10 +72,6 @@ Obviously, if you're installing this onto a system that does not use
 | 
				
			|||||||
OpenRC by default then you may wish to backup the above listed files,
 | 
					OpenRC by default then you may wish to backup the above listed files,
 | 
				
			||||||
remove them and then install so that the OS hooks into OpenRC.
 | 
					remove them and then install so that the OS hooks into OpenRC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`init.d.misc` is not installed by default as the scripts will need
 | 
					 | 
				
			||||||
tweaking on a per distro basis. They are also non essential to the
 | 
					 | 
				
			||||||
operation of the system.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Reporting Bugs
 | 
					## Reporting Bugs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you are using Gentoo Linux, bugs can be filed on their bugzilla under
 | 
					If you are using Gentoo Linux, bugs can be filed on their bugzilla under
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										19
									
								
								agetty-guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								agetty-guide.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					# Setting up the agetty service in OpenRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The agetty service is an OpenRC specific way to monitor and respawn a
 | 
				
			||||||
 | 
					getty, using agetty, on Linux. To use this method, make sure you aren't
 | 
				
			||||||
 | 
					spawning a getty manager for this port some other way (such as through
 | 
				
			||||||
 | 
					sysvinit/inittab), then run the following commands as root.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Note that [port] refers to the port you are spawning the getty on, and
 | 
				
			||||||
 | 
					not the full path to it. For example, tty0 or ttyS0instead of /dev/tty0
 | 
				
			||||||
 | 
					or /dev/ttyS0.
 | 
				
			||||||
 | 
					tty0 or ttyS0, not the full path to it (for example, tty0 or ttyS0 and
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					# cd /etc/init.d
 | 
				
			||||||
 | 
					# ln -s agetty agetty.[port]
 | 
				
			||||||
 | 
					# cd /etc/conf.d
 | 
				
			||||||
 | 
					# cp agetty agetty.[port]
 | 
				
			||||||
 | 
					#rc-update add agetty.[port] [runlevel]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
							
								
								
									
										2
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,2 +0,0 @@
 | 
				
			|||||||
network
 | 
					 | 
				
			||||||
staticroute
 | 
					 | 
				
			||||||
@@ -1,29 +1,20 @@
 | 
				
			|||||||
include ../mk/net.mk
 | 
					include ../mk/net.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DIR=	${CONFDIR}
 | 
					DIR=	${CONFDIR}
 | 
				
			||||||
CONF=	bootmisc fsck hostname localmount netmount urandom tmpfiles \
 | 
					CONF=	bootmisc fsck hostname localmount netmount swap urandom ${CONF-${OS}}
 | 
				
			||||||
		${CONF-${OS}}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq (${MKNET},yes)
 | 
					ifeq (${MKNET},yes)
 | 
				
			||||||
CONF+= network staticroute
 | 
					CONF+= network staticroute
 | 
				
			||||||
TARGETS+=	network staticroute
 | 
					 | 
				
			||||||
CLEANFILES+=	network staticroute
 | 
					 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MK=	../mk
 | 
					MK=	../mk
 | 
				
			||||||
include ${MK}/os.mk
 | 
					include ${MK}/os.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONF-FreeBSD=	ipfw moused powerd rarpd savecore syscons
 | 
					CONF-FreeBSD=	ipfw modules moused powerd rarpd savecore syscons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONF-Linux=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab \
 | 
					CONF-Linux=	agetty consolefont devfs dmesg hwclock keymaps killprocs modules \
 | 
				
			||||||
	net-online
 | 
						mtab net-online
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONF-NetBSD=	moused rarpd savecore
 | 
					CONF-NetBSD=	moused rarpd savecore
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include ${MK}/scripts.mk
 | 
					include ${MK}/scripts.mk
 | 
				
			||||||
 | 
					 | 
				
			||||||
network: network.in network${SFX}
 | 
					 | 
				
			||||||
	cat $^ > $@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
staticroute: staticroute${SFX}
 | 
					 | 
				
			||||||
	cp $@${SFX} $@
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								conf.d/agetty
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								conf.d/agetty
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					# Set the baud rate of the terminal line
 | 
				
			||||||
 | 
					#baud=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# set the terminal type
 | 
				
			||||||
 | 
					#termtype="linux"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# extra options to pass to agetty for this port
 | 
				
			||||||
 | 
					#agetty_options=""
 | 
				
			||||||
@@ -1,18 +1,22 @@
 | 
				
			|||||||
# You can define a list modules for a specific kernel version,
 | 
					# Linux users can define a list of modules for a specific kernel version,
 | 
				
			||||||
# a released kernel version, a main kernel version or just a list.
 | 
					# a released kernel version, a main kernel version or all kernel versions.
 | 
				
			||||||
# The most specific versioned variable will take precedence.
 | 
					# The most specific versioned variable will take precedence.
 | 
				
			||||||
 | 
					# FreeBSD users can only use the modules="foo bar" setting.
 | 
				
			||||||
#modules_2_6_23_gentoo_r5="ieee1394 ohci1394"
 | 
					#modules_2_6_23_gentoo_r5="ieee1394 ohci1394"
 | 
				
			||||||
#modules_2_6_23="tun ieee1394"
 | 
					#modules_2_6_23="tun ieee1394"
 | 
				
			||||||
#modules_2_6="tun"
 | 
					#modules_2_6="tun"
 | 
				
			||||||
#modules_2="ipv6"
 | 
					#modules_2="ipv6"
 | 
				
			||||||
#modules="ohci1394"
 | 
					#modules="ohci1394"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# You can give modules a different name when they load - the new name
 | 
					# Linux users can give modules a different name when they load - the new name
 | 
				
			||||||
# will also be used to pick arguments below.
 | 
					# will also be used to pick arguments below.
 | 
				
			||||||
 | 
					# This is not supported on FreeBSD.
 | 
				
			||||||
#modules="dummy:dummy1"
 | 
					#modules="dummy:dummy1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Give the modules some arguments if needed, per version if necessary.
 | 
					# Linux users can give the modules some arguments if needed, per version
 | 
				
			||||||
 | 
					# if necessary.
 | 
				
			||||||
# Again, the most specific versioned variable will take precedence.
 | 
					# Again, the most specific versioned variable will take precedence.
 | 
				
			||||||
 | 
					# This is not supported on FreeBSD.
 | 
				
			||||||
#module_ieee1394_args="debug"
 | 
					#module_ieee1394_args="debug"
 | 
				
			||||||
#module_ieee1394_args_2_6_23_gentoo_r5="debug2"
 | 
					#module_ieee1394_args_2_6_23_gentoo_r5="debug2"
 | 
				
			||||||
#module_ieee1394_args_2_6_23="debug3"
 | 
					#module_ieee1394_args_2_6_23="debug3"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,15 @@
 | 
				
			|||||||
# The interfaces setting controls which interfaces the net-online
 | 
					# The interfaces setting controls which interfaces the net-online
 | 
				
			||||||
# service considers in deciding whether the network is active. By
 | 
					# service considers in deciding whether the network is active. The
 | 
				
			||||||
# default, it is all ethernet or wireless LAN interfaces.
 | 
					# default is all interfaces that support ethernet.
 | 
				
			||||||
#interfaces=""
 | 
					#interfaces=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This setting controls whether a ping to the default gateway is
 | 
					# This setting controls whether a ping test is included in the test for
 | 
				
			||||||
# included in the test for network connectivity after all interfaces
 | 
					# network connectivity after all interfaces are active.
 | 
				
			||||||
# are active.
 | 
					#include_ping_test=no
 | 
				
			||||||
#ping_default_gateway=no
 | 
					
 | 
				
			||||||
 | 
					# This setting is the host to attempt to ping if the above is yes.
 | 
				
			||||||
 | 
					# The default is google.com.
 | 
				
			||||||
 | 
					#ping_test_host=some.host.name
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The timeout setting controls how long the net-online service waits
 | 
					# The timeout setting controls how long the net-online service waits
 | 
				
			||||||
# for the network to be configured.
 | 
					# for the network to be configured.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										80
									
								
								conf.d/network
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								conf.d/network
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,80 @@
 | 
				
			|||||||
 | 
					# Assign static IP addresses and run custom scripts per interface.
 | 
				
			||||||
 | 
					# Seperate commands with ;
 | 
				
			||||||
 | 
					# Prefix with ! to run a shell script.
 | 
				
			||||||
 | 
					# Use \$int to represent the interface
 | 
				
			||||||
 | 
					#ifconfig_eth0="192.168.0.10 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You also have ifup_eth0 and ifdown_eth0 to run other commands when
 | 
				
			||||||
 | 
					# eth0 is started and stopped.
 | 
				
			||||||
 | 
					# You should note that we don't stop the network at system shutdown by default.
 | 
				
			||||||
 | 
					# If you really need this, then set keep_network=NO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Lastly, the interfaces variable pulls in virtual interfaces that cannot
 | 
				
			||||||
 | 
					# be automatically detected.
 | 
				
			||||||
 | 
					#interfaces="br0 bond0 vlan0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can also use files instead of variables here if you like:
 | 
				
			||||||
 | 
					# /etc/ifconfig.eth0 is equivalent to ifconfig_eth0
 | 
				
			||||||
 | 
					# /etc/ip.eth0 is equivalent to ifconfig_eth0
 | 
				
			||||||
 | 
					# /etc/ifup.eth0 is equivalent to ifup_eth0
 | 
				
			||||||
 | 
					# /etc/ifdown.eth0 is equivalent to ifdown_eth0
 | 
				
			||||||
 | 
					# Any files found will automatically be put into the interfaces variable.
 | 
				
			||||||
 | 
					# You don't need to escape variables in files, so use $int instead of \$int.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you require DHCP, you should install dhcpcd and add it to the boot or
 | 
				
			||||||
 | 
					# default runlevel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# NIS users can set the domain name here
 | 
				
			||||||
 | 
					#domainname="foobar"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can add a default route.
 | 
				
			||||||
 | 
					# The way this is done is slightly different depending on the operating system.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# *BSD:
 | 
				
			||||||
 | 
					#defaultroute="192.168.0.1"
 | 
				
			||||||
 | 
					#defaultroute6="2001:a:b:c"
 | 
				
			||||||
 | 
					#Hurd/Linux (ifconfig):
 | 
				
			||||||
 | 
					#defaultroute="gw 192.168.0.1"
 | 
				
			||||||
 | 
					#defaultroute6="gw 2001:a:b:c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The remainder of this file applies to Linux only and shows how
 | 
				
			||||||
 | 
					# iproute2 is supported along with other examples.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ifconfig under Linux is not that powerful and doesn't easily handle
 | 
				
			||||||
 | 
					# multiple addresses
 | 
				
			||||||
 | 
					# On the other hand, iproute2 is quite powerful and is also supported
 | 
				
			||||||
 | 
					#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# You can also use iproute2 to add the default route.
 | 
				
			||||||
 | 
					#defaultiproute="via 192.168.0.1"
 | 
				
			||||||
 | 
					#defaultiproute6="via 2001:a:b:c"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# ip doesn't handle MTU like ifconfig, but we can do it like so
 | 
				
			||||||
 | 
					#ifup_eth0="ip link set \$int mtu 1500"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create a bonded interface
 | 
				
			||||||
 | 
					#interfaces="bond0"
 | 
				
			||||||
 | 
					#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
 | 
				
			||||||
 | 
					#ifconfig_bond0="192.168.0.10 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					#ifdown_bond0="rmmod bonding"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create tap interface and a bridge interface.
 | 
				
			||||||
 | 
					# We add the tap to the bridge.
 | 
				
			||||||
 | 
					# An external program, like dhcpcd, will configure the IP on the bridge
 | 
				
			||||||
 | 
					#interfaces="tun0 br0"
 | 
				
			||||||
 | 
					#ifup_tun0="tunctl -t \$int"
 | 
				
			||||||
 | 
					#ifdown_tun0="tunctl -d \$int"
 | 
				
			||||||
 | 
					#ifup_br0="brctl addbr \$int; brctl add \$int eth1; brtctl add \$int eth2"
 | 
				
			||||||
 | 
					#ifdown_br0="ifconfig \$int down; btctl delbr \$int"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create VLAN
 | 
				
			||||||
 | 
					#interfaces="eth0_2 eth0_3 eth0_4"
 | 
				
			||||||
 | 
					#ifup_eth0="vconfig add \$int 2; vconfig add \$int 3; vconfig add \$int 4"
 | 
				
			||||||
 | 
					#ifconfig_eth0_2="192.168.2.10 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					#ifconfig_eth0_3="192.168.3.10 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					#ifconfig_eth0_4="192.168.4.10 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					#ifdown_eth0="vconfig rem \$int.2; vconfig rem \$int.3; vconfig rem \$int.4"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Normally you would use wpa_supplicant to configure wireless, but you can
 | 
				
			||||||
 | 
					# use iwconfig also
 | 
				
			||||||
 | 
					#ifup_wlan0="iwconfig \$int key s:secretkey enc open essid foobar"
 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
# You can assign a default route
 | 
					 | 
				
			||||||
#defaultroute="192.168.0.1"
 | 
					 | 
				
			||||||
#defaultroute6="2001:a:b:c"
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
# You can assign a default route
 | 
					 | 
				
			||||||
#defaultroute="192.168.0.1"
 | 
					 | 
				
			||||||
#defaultroute6="2001:a:b:c"
 | 
					 | 
				
			||||||
@@ -1,4 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
# You can assign a default route
 | 
					 | 
				
			||||||
#defaultroute="gw 192.168.0.1"
 | 
					 | 
				
			||||||
#defaultroute6="gw 2001:a:b:c"
 | 
					 | 
				
			||||||
@@ -1,43 +0,0 @@
 | 
				
			|||||||
 | 
					 | 
				
			||||||
# You can assign a default route
 | 
					 | 
				
			||||||
#defaultroute="gw 192.168.0.1"
 | 
					 | 
				
			||||||
#defaultroute6="gw 2001:a:b:c"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ifconfig under Linux is not that powerful and doesn't easily handle
 | 
					 | 
				
			||||||
# multiple addresses
 | 
					 | 
				
			||||||
# On the other hand, ip (iproute2) is quite powerful and is also supported
 | 
					 | 
				
			||||||
#ip_eth0="192.168.0.10/24; 192.168.10.10/24"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# You can also use ip to add the default route.
 | 
					 | 
				
			||||||
#defaultiproute="via 192.168.0.1"
 | 
					 | 
				
			||||||
#defaultiproute6="via 2001:a:b:c"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# ip doesn't handle MTU like ifconfig, but we can do it like so
 | 
					 | 
				
			||||||
#ifup_eth0="ip link set \$int mtu 1500"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Create a bonded interface
 | 
					 | 
				
			||||||
#interfaces="bond0"
 | 
					 | 
				
			||||||
#ifup_bond0="modprobe bonding; ifconfig \$int up; ifenslave \$int bge0"
 | 
					 | 
				
			||||||
#ifconfig_bond0="192.168.0.10 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
#ifdown_bond0="rmmod bonding"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Create tap interface and a bridge interface.
 | 
					 | 
				
			||||||
# We add the tap to the bridge.
 | 
					 | 
				
			||||||
# An external program, like dhcpcd, will configure the IP on the bridge
 | 
					 | 
				
			||||||
#interfaces="tun0 br0"
 | 
					 | 
				
			||||||
#ifup_tun0="tunctl -t \$int"
 | 
					 | 
				
			||||||
#ifdown_tun0="tunctl -d \$int"
 | 
					 | 
				
			||||||
#ifup_br0="brctl addbr \$int; brctl add \$int eth1; brtctl add \$int eth2"
 | 
					 | 
				
			||||||
#ifdown_br0="ifconfig \$int down; btctl delbr \$int"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Create VLAN
 | 
					 | 
				
			||||||
#interfaces="eth0_2 eth0_3 eth0_4"
 | 
					 | 
				
			||||||
#ifup_eth0="vconfig add \$int 2; vconfig add \$int 3; vconfig add \$int 4"
 | 
					 | 
				
			||||||
#ifconfig_eth0_2="192.168.2.10 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
#ifconfig_eth0_3="192.168.3.10 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
#ifconfig_eth0_4="192.168.4.10 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
#ifdown_eth0="vconfig rem \$int.2; vconfig rem \$int.3; vconfig rem \$int.4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Normally you would use wpa_supplicant to configure wireless, but you can
 | 
					 | 
				
			||||||
# use iwconfig also
 | 
					 | 
				
			||||||
#ifup_wlan0="iwconfig \$int key s:secretkey enc open essid foobar"
 | 
					 | 
				
			||||||
@@ -1,28 +0,0 @@
 | 
				
			|||||||
# Assign static IP addresses and run custom scripts per interface.
 | 
					 | 
				
			||||||
# Seperate commands with ;
 | 
					 | 
				
			||||||
# Prefix with ! to run a shell script.
 | 
					 | 
				
			||||||
# Use \$int to represent the interface
 | 
					 | 
				
			||||||
#ifconfig_eth0="192.168.0.10 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# You also have ifup_eth0 and ifdown_eth0 to run other commands when
 | 
					 | 
				
			||||||
# eth0 is started and stopped.
 | 
					 | 
				
			||||||
# You should note that we don't stop the network at system shutdown by default.
 | 
					 | 
				
			||||||
# If you really need this, then set keep_network=NO
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Lastly, the interfaces variable pulls in virtual interfaces that cannot
 | 
					 | 
				
			||||||
# be automatically detected.
 | 
					 | 
				
			||||||
#interfaces="br0 bond0 vlan0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# You can also use files instead of variables here if you like:
 | 
					 | 
				
			||||||
# /etc/ifconfig.eth0 is equivalent to ifconfig_eth0
 | 
					 | 
				
			||||||
# /etc/ip.eth0 is equivalent to ifconfig_eth0
 | 
					 | 
				
			||||||
# /etc/ifup.eth0 is equivalent to ifup_eth0
 | 
					 | 
				
			||||||
# /etc/ifdown.eth0 is equivalent to ifdown_eth0
 | 
					 | 
				
			||||||
# Any files found will automatically be put into the interfaces variable.
 | 
					 | 
				
			||||||
# You don't need to escape variables in files, so use $int instead of \$int.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# If you require DHCP, you should install dhcpcd and it to the boot or
 | 
					 | 
				
			||||||
# default runlevel.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# NIS users can set the domain name here
 | 
					 | 
				
			||||||
#domainname="foobar"
 | 
					 | 
				
			||||||
							
								
								
									
										26
									
								
								conf.d/staticroute
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								conf.d/staticroute
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					# Static routes are defined differently depending on your operating
 | 
				
			||||||
 | 
					# system, so please be sure to use the correct syntax.
 | 
				
			||||||
 | 
					# Do not use this file to define the default route.
 | 
				
			||||||
 | 
					# In all settings, multiple routes should be separated using ; or new lines.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define static routes on Linux using route. See route(8) for syntax.
 | 
				
			||||||
 | 
					#staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1
 | 
				
			||||||
 | 
					#net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define static routes on Linux using iproute2. See ip(8) for syntax.
 | 
				
			||||||
 | 
					#staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define static routes on GNU/Hurd. See route(8) for syntax.
 | 
				
			||||||
 | 
					# /etc/route.conf(5) takes precedence over this configuration.
 | 
				
			||||||
 | 
					# FIXME: "net ..." not supported
 | 
				
			||||||
 | 
					#staticroute="net 192.168.0.0 -netmask 255.255.255.0 --address 10.73.1.1
 | 
				
			||||||
 | 
					#net 192.168.1.0 -netmask 255.255.255.0 --address 10.73.1.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define static routes on GNU/KFreeBSD. See route(8) for syntax.
 | 
				
			||||||
 | 
					#staticroute="net 192.168.0.0 10.73.1.1 netmask 255.255.255.0
 | 
				
			||||||
 | 
					#net 192.168.1.0 10.73.1.1 netmask 255.255.255.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define static routes on other BSD systems. See route(8) for syntax.
 | 
				
			||||||
 | 
					# /etc/route.conf(5) takes precedence over this configuration.
 | 
				
			||||||
 | 
					#staticroute="net 192.168.0.0 -netmask 255.255.255.0 10.73.1.1
 | 
				
			||||||
 | 
					#net 192.168.1.0 -netmask 255.255.255.0 10.73.1.1"
 | 
				
			||||||
@@ -1,6 +0,0 @@
 | 
				
			|||||||
# Separate multiple routes using ; or new lines.
 | 
					 | 
				
			||||||
# /etc/route.conf(5) takes precedence over this configuration.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Example static routes. See route(8) for syntax.
 | 
					 | 
				
			||||||
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 10.73.1.1
 | 
					 | 
				
			||||||
#net 192.168.1.0 -netmask 255.255.255.0 10.73.1.1"
 | 
					 | 
				
			||||||
@@ -1,5 +0,0 @@
 | 
				
			|||||||
# Separate multiple routes using ; or new lines.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Example static routes. See route(8) for syntax.
 | 
					 | 
				
			||||||
#staticroute="net 192.168.0.0 10.73.1.1 netmask 255.255.255.0
 | 
					 | 
				
			||||||
#net 192.168.1.0 10.73.1.1 netmask 255.255.255.0"
 | 
					 | 
				
			||||||
@@ -1,7 +0,0 @@
 | 
				
			|||||||
# Separate multiple routes using ; or new lines.
 | 
					 | 
				
			||||||
# /etc/route.conf(5) takes precedence over this configuration.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Example static routes. See route(8) for syntax.
 | 
					 | 
				
			||||||
# FIXME: "net ..." not supported
 | 
					 | 
				
			||||||
#staticroute="net 192.168.0.0 -netmask 255.255.255.0 --address 10.73.1.1
 | 
					 | 
				
			||||||
#net 192.168.1.0 -netmask 255.255.255.0 --address 10.73.1.1"
 | 
					 | 
				
			||||||
@@ -1,8 +0,0 @@
 | 
				
			|||||||
# Separate multiple routes using ; or new lines.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Example static routes. See route(8) for syntax.
 | 
					 | 
				
			||||||
#staticroute="net 192.168.0.0 netmask 255.255.255.0 gw 10.73.1.1
 | 
					 | 
				
			||||||
#net 192.168.1.0 netmask 255.255.255.0 gw 10.73.1.1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Example static routes using iproute2. See ip(8) for syntax.
 | 
					 | 
				
			||||||
#staticiproute="192.168.0.0/24 via 10.73.1.1; 192.168.1.0/24 via 10.73.1.1"
 | 
					 | 
				
			||||||
							
								
								
									
										13
									
								
								conf.d/swap
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								conf.d/swap
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					# If you are only using local swap partitions, you should not change
 | 
				
			||||||
 | 
					# this file. Otherwise, you need to uncomment the below rc_before line
 | 
				
			||||||
 | 
					# followed by the appropriate rc_need line.
 | 
				
			||||||
 | 
					#rc_before="!localmount"
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# If you are using swap files stored on local file systems, uncomment
 | 
				
			||||||
 | 
					# this line.
 | 
				
			||||||
 | 
					#rc_need="localmount"
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# If you are using swap files stored on network file systems or swap
 | 
				
			||||||
 | 
					# partitions stored on network block devices such as iSCSI, uncomment
 | 
				
			||||||
 | 
					# this line.
 | 
				
			||||||
 | 
					#rc_need="netmount"
 | 
				
			||||||
@@ -1,3 +0,0 @@
 | 
				
			|||||||
# Extra options for tmpfiles.sh
 | 
					 | 
				
			||||||
#tmpfiles_opts="--verbose"
 | 
					 | 
				
			||||||
tmpfiles_opts=""
 | 
					 | 
				
			||||||
							
								
								
									
										1
									
								
								etc/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								etc/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,3 +1,2 @@
 | 
				
			|||||||
rc.conf
 | 
					 | 
				
			||||||
rc
 | 
					rc
 | 
				
			||||||
rc.shutdown
 | 
					rc.shutdown
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,8 @@
 | 
				
			|||||||
DIR=	${SYSCONFDIR}
 | 
					DIR=	${SYSCONFDIR}
 | 
				
			||||||
SRCS=	rc.conf.in rc.in rc.shutdown.in
 | 
					SRCS=	rc.in rc.shutdown.in
 | 
				
			||||||
BIN=	${BIN-${OS}}
 | 
					BIN=	${BIN-${OS}}
 | 
				
			||||||
CONF=	rc.conf ${BIN-${OS}}
 | 
					CONF=	rc.conf ${BIN-${OS}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CLEANFILES+=	rc.conf
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MK=	../mk
 | 
					MK=	../mk
 | 
				
			||||||
include ${MK}/os.mk
 | 
					include ${MK}/os.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,6 +21,3 @@ CONF-NetBSD=
 | 
				
			|||||||
SED_EXTRA=	${SED_EXTRA-${OS}}
 | 
					SED_EXTRA=	${SED_EXTRA-${OS}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include ${MK}/scripts.mk
 | 
					include ${MK}/scripts.mk
 | 
				
			||||||
 | 
					 | 
				
			||||||
rc.conf: rc.conf.in rc.conf.${OS}
 | 
					 | 
				
			||||||
	${SED} ${SED_REPLACE} ${SED_EXTRA} $^ > $@
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@
 | 
				
			|||||||
# /var/log/rc.log
 | 
					# /var/log/rc.log
 | 
				
			||||||
# NOTE: Linux systems require the devfs service to be started before
 | 
					# NOTE: Linux systems require the devfs service to be started before
 | 
				
			||||||
# logging can take place and as such cannot log the sysinit runlevel.
 | 
					# logging can take place and as such cannot log the sysinit runlevel.
 | 
				
			||||||
#rc_logger="YES"
 | 
					#rc_logger="NO"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Through rc_log_path you can specify a custom log file.
 | 
					# Through rc_log_path you can specify a custom log file.
 | 
				
			||||||
# The default value is: /var/log/rc.log
 | 
					# The default value is: /var/log/rc.log
 | 
				
			||||||
@@ -117,6 +117,9 @@
 | 
				
			|||||||
# Some daemons are started and stopped via start-stop-daemon.
 | 
					# Some daemons are started and stopped via start-stop-daemon.
 | 
				
			||||||
# We can set some things on a per service basis, like the nicelevel.
 | 
					# We can set some things on a per service basis, like the nicelevel.
 | 
				
			||||||
#SSD_NICELEVEL="-19"
 | 
					#SSD_NICELEVEL="-19"
 | 
				
			||||||
 | 
					# Or the ionice level. The format is class[:data] , just like the
 | 
				
			||||||
 | 
					# --ionice start-stop-daemon parameter.
 | 
				
			||||||
 | 
					#SSD_IONICELEVEL="2:2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Pass ulimit parameters
 | 
					# Pass ulimit parameters
 | 
				
			||||||
# If you are using bash in POSIX mode for your shell, note that the
 | 
					# If you are using bash in POSIX mode for your shell, note that the
 | 
				
			||||||
@@ -146,6 +149,102 @@
 | 
				
			|||||||
#rc_foo_bar_after="clock"
 | 
					#rc_foo_bar_after="clock"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# You can also remove dependencies.
 | 
					# You can also remove dependencies.
 | 
				
			||||||
# This is mainly used for saying which servies do NOT provide net.
 | 
					# This is mainly used for saying which services do NOT provide net.
 | 
				
			||||||
#rc_net_tap0_provide="!net"
 | 
					#rc_net_tap0_provide="!net"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This is the subsystem type.
 | 
				
			||||||
 | 
					# It is used to match against keywords set by the keyword call in the
 | 
				
			||||||
 | 
					# depend function of service scripts.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# It should be set to the value representing the environment this file is
 | 
				
			||||||
 | 
					# PRESENTLY in, not the virtualization the environment is capable of.
 | 
				
			||||||
 | 
					# If it is commented out, automatic detection will be used.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# The list below shows all possible settings as well as the host
 | 
				
			||||||
 | 
					# operating systems where they can be used and autodetected.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# ""               - nothing special
 | 
				
			||||||
 | 
					# "docker"         - Docker container manager (Linux)
 | 
				
			||||||
 | 
					# "jail"           - Jail (DragonflyBSD or FreeBSD)
 | 
				
			||||||
 | 
					# "lxc"            - Linux Containers
 | 
				
			||||||
 | 
					# "openvz"         - Linux OpenVZ
 | 
				
			||||||
 | 
					# "prefix"         - Prefix
 | 
				
			||||||
 | 
					# "rkt"            - CoreOS container management system (Linux)
 | 
				
			||||||
 | 
					# "subhurd"        - Hurd subhurds (to be checked)
 | 
				
			||||||
 | 
					# "systemd-nspawn" - Container created by systemd-nspawn (Linux)
 | 
				
			||||||
 | 
					# "uml"            - Usermode Linux
 | 
				
			||||||
 | 
					# "vserver"        - Linux vserver
 | 
				
			||||||
 | 
					# "xen0"           - Xen0 Domain (Linux and NetBSD)
 | 
				
			||||||
 | 
					# "xenU"           - XenU Domain (Linux and NetBSD)
 | 
				
			||||||
 | 
					#rc_sys=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# on Linux and Hurd, this is the number of ttys allocated for logins
 | 
				
			||||||
 | 
					# It is used in the consolefont, keymaps, numlock and termencoding
 | 
				
			||||||
 | 
					# service scripts.
 | 
				
			||||||
 | 
					rc_tty_number=12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##############################################################################
 | 
				
			||||||
 | 
					# LINUX CGROUPS RESOURCE MANAGEMENT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you have cgroups turned on in your kernel, this switch controls
 | 
				
			||||||
 | 
					# whether or not a group for each controller is mounted under
 | 
				
			||||||
 | 
					# /sys/fs/cgroup.
 | 
				
			||||||
 | 
					# None of the other options in this section work if this is set to "NO".
 | 
				
			||||||
 | 
					#rc_controller_cgroups="YES"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The following settings allow you to set up values for the cgroup
 | 
				
			||||||
 | 
					# controllers for your services.
 | 
				
			||||||
 | 
					# They can be set in this file;, however, if you do this, the settings
 | 
				
			||||||
 | 
					# will apply to all of your services.
 | 
				
			||||||
 | 
					# If you want different settings for each service, place the settings in
 | 
				
			||||||
 | 
					# /etc/conf.d/foo for service foo.
 | 
				
			||||||
 | 
					# The format is to specify the names of the settings followed by their
 | 
				
			||||||
 | 
					# values. Each variable can hold multiple settings.
 | 
				
			||||||
 | 
					# For example, you would use this to set the cpu.shares setting in the
 | 
				
			||||||
 | 
					# cpu controller to 512 for your service.
 | 
				
			||||||
 | 
					# rc_cgroup_cpu="
 | 
				
			||||||
 | 
					# cpu.shares 512
 | 
				
			||||||
 | 
					# "
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#For more information about the adjustments that can be made with
 | 
				
			||||||
 | 
					#cgroups, see Documentation/cgroups/* in the linux kernel source tree.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the blkio controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_blkio=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the cpu controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_cpu=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add this service to the cpuacct controller (any value means yes).
 | 
				
			||||||
 | 
					#rc_cgroup_cpuacct=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the cpuset controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_cpuset=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the devices controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_devices=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the hugetlb controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_hugetlb=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the memory controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_memory=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the net_cls controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_net_cls=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the net_prio controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_net_prio=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set the pids controller settings for this service.
 | 
				
			||||||
 | 
					#rc_cgroup_pids=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set this to YES if you want all of the processes in a service's cgroup
 | 
				
			||||||
 | 
					# killed when the service is stopped or restarted.
 | 
				
			||||||
 | 
					# This should not be set globally because it kills all of the service's
 | 
				
			||||||
 | 
					# child processes, and most of the time this is undesirable. Please set
 | 
				
			||||||
 | 
					# it in /etc/conf.d/<service>.
 | 
				
			||||||
 | 
					# To perform this cleanup manually for a stopped service, you can
 | 
				
			||||||
 | 
					# execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or
 | 
				
			||||||
 | 
					# rc-service <service> cgroup_cleanup.
 | 
				
			||||||
 | 
					# rc_cgroup_cleanup="NO"
 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# DragonFly BSD SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on DragonFly BSD:
 | 
					 | 
				
			||||||
# ""        - nothing special
 | 
					 | 
				
			||||||
# "jail"    - DragonFly BSD jails
 | 
					 | 
				
			||||||
# "prefix"  - Prefix
 | 
					 | 
				
			||||||
# If this is commented out, automatic detection will be used.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This should be set to the value representing the environment this file is
 | 
					 | 
				
			||||||
# PRESENTLY in, not the virtualization the environment is capable of.
 | 
					 | 
				
			||||||
#rc_sys=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# FreeBSD SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on FreeBSD:
 | 
					 | 
				
			||||||
# ""        - nothing special
 | 
					 | 
				
			||||||
# "jail"    - FreeBSD jails
 | 
					 | 
				
			||||||
# "prefix"  - Prefix
 | 
					 | 
				
			||||||
# If this is commented out, automatic detection will be used.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This should be set to the value representing the environment this file is
 | 
					 | 
				
			||||||
# PRESENTLY in, not the virtualization the environment is capable of.
 | 
					 | 
				
			||||||
#rc_sys=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# GNU/Hurd SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on GNU/Hurd:
 | 
					 | 
				
			||||||
# ""        - nothing special
 | 
					 | 
				
			||||||
# "subhurd" - Hurd subhurds (to be checked)
 | 
					 | 
				
			||||||
# 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=""
 | 
					 | 
				
			||||||
# This is the number of tty's used in most of the rc-scripts (like
 | 
					 | 
				
			||||||
# consolefont, numlock, etc ...)
 | 
					 | 
				
			||||||
#rc_tty_number=6?
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# GNU/kFreeBSD SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on GNU/kFreeBSD:
 | 
					 | 
				
			||||||
# ""        - nothing special
 | 
					 | 
				
			||||||
# "jail"    - FreeBSD jails (not yet implemented)
 | 
					 | 
				
			||||||
# 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=""
 | 
					 | 
				
			||||||
@@ -1,90 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# LINUX SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on Linux:
 | 
					 | 
				
			||||||
# ""               - nothing special
 | 
					 | 
				
			||||||
# "docker"         - Docker container manager
 | 
					 | 
				
			||||||
# "lxc"            - Linux Containers
 | 
					 | 
				
			||||||
# "openvz"         - Linux OpenVZ
 | 
					 | 
				
			||||||
# "prefix"         - Prefix
 | 
					 | 
				
			||||||
# "rkt"            - CoreOS container management system
 | 
					 | 
				
			||||||
# "uml"            - Usermode Linux
 | 
					 | 
				
			||||||
# "vserver"        - Linux vserver
 | 
					 | 
				
			||||||
# "systemd-nspawn" - Container created by the systemd-nspawn utility
 | 
					 | 
				
			||||||
# "xen0"           - Xen0 Domain
 | 
					 | 
				
			||||||
# "xenU"           - XenU Domain
 | 
					 | 
				
			||||||
# 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=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the number of tty's used in most of the rc-scripts (like
 | 
					 | 
				
			||||||
# consolefont, numlock, etc ...)
 | 
					 | 
				
			||||||
rc_tty_number=12
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##############################################################################
 | 
					 | 
				
			||||||
# CGROUPS RESOURCE MANAGEMENT
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# If you have cgroups turned on in your kernel, this switch controls
 | 
					 | 
				
			||||||
# whether or not a group for each controller is mounted under
 | 
					 | 
				
			||||||
# /sys/fs/cgroup.
 | 
					 | 
				
			||||||
# None of the other options in this section work if this is set to "NO".
 | 
					 | 
				
			||||||
#rc_controller_cgroups="YES"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The following settings allow you to set up values for the cgroup
 | 
					 | 
				
			||||||
# controllers for your services.
 | 
					 | 
				
			||||||
# They can be set in this file;, however, if you do this, the settings
 | 
					 | 
				
			||||||
# will apply to all of your services.
 | 
					 | 
				
			||||||
# If you want different settings for each service, place the settings in
 | 
					 | 
				
			||||||
# /etc/conf.d/foo for service foo.
 | 
					 | 
				
			||||||
# The format is to specify the names of the settings followed by their
 | 
					 | 
				
			||||||
# values. Each variable can hold multiple settings.
 | 
					 | 
				
			||||||
# For example, you would use this to set the cpu.shares setting in the
 | 
					 | 
				
			||||||
# cpu controller to 512 for your service.
 | 
					 | 
				
			||||||
# rc_cgroup_cpu="
 | 
					 | 
				
			||||||
# cpu.shares 512
 | 
					 | 
				
			||||||
# "
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
#For more information about the adjustments that can be made with
 | 
					 | 
				
			||||||
#cgroups, see Documentation/cgroups/* in the linux kernel source tree.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the blkio controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_blkio=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the cpu controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_cpu=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Add this service to the cpuacct controller (any value means yes).
 | 
					 | 
				
			||||||
#rc_cgroup_cpuacct=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the cpuset controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_cpuset=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the devices controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_devices=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the hugetlb controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_hugetlb=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the memory controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_memory=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the net_cls controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_net_cls=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the net_prio controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_net_prio=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set the pids controller settings for this service.
 | 
					 | 
				
			||||||
#rc_cgroup_pids=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set this to YES if yu want all of the processes in a service's cgroup
 | 
					 | 
				
			||||||
# killed when the service is stopped or restarted.
 | 
					 | 
				
			||||||
# This should not be set globally because it kills all of the service's
 | 
					 | 
				
			||||||
# child processes, and most of the time this is undesirable. Please set
 | 
					 | 
				
			||||||
# it in /etc/conf.d/<service>.
 | 
					 | 
				
			||||||
# To perform this cleanup manually for a stopped service, you can
 | 
					 | 
				
			||||||
# execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or
 | 
					 | 
				
			||||||
# rc-service <service> cgroup_cleanup.
 | 
					 | 
				
			||||||
# rc_cgroup_cleanup="NO"
 | 
					 | 
				
			||||||
@@ -1,14 +0,0 @@
 | 
				
			|||||||
##############################################################################
 | 
					 | 
				
			||||||
# NetBSD SPECIFIC OPTIONS
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# This is the subsystem type. Valid options on NetBSD:
 | 
					 | 
				
			||||||
# ""        - nothing special
 | 
					 | 
				
			||||||
# "prefix"  - Prefix
 | 
					 | 
				
			||||||
# "xen0"    - Xen0 Domain
 | 
					 | 
				
			||||||
# "xenU"    - XenU Domain
 | 
					 | 
				
			||||||
# If this is commented out, automatic detection will be used.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# 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=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -14,7 +14,7 @@ trap : SIGINT SIGQUIT
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Try and use stuff in /lib over anywhere else so we can shutdown
 | 
					# Try and use stuff in /lib over anywhere else so we can shutdown
 | 
				
			||||||
# local mounts correctly.
 | 
					# local mounts correctly.
 | 
				
			||||||
LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LDLIBRARY_PATH}" ; export LD_LIBRARY_PATH
 | 
					LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" ; export LD_LIBRARY_PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# If $TERM is not set then assume default of @TERM@
 | 
					# If $TERM is not set then assume default of @TERM@
 | 
				
			||||||
# This gives us a nice colour boot :)
 | 
					# This gives us a nice colour boot :)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										122
									
								
								guide.md
									
									
									
									
									
								
							
							
						
						
									
										122
									
								
								guide.md
									
									
									
									
									
								
							@@ -16,14 +16,14 @@ Current size is about 10k LoC C, and about 4k LoC shell.
 | 
				
			|||||||
OpenRC is known to work on Linux, many BSDs (FreeBSD, OpenBSD, DragonFlyBSD at 
 | 
					OpenRC is known to work on Linux, many BSDs (FreeBSD, OpenBSD, DragonFlyBSD at 
 | 
				
			||||||
least) and HURD.
 | 
					least) and HURD.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Services are stateful (i.e. start; start will lead to "it's already started")
 | 
					Services are stateful (i.e. `start`; `start` will lead to "it's already started")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Startup
 | 
					# Startup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Usually PID1 (aka. init) calls the OpenRC binary ("/sbin/openrc" by default).
 | 
					Usually PID1 (aka. `init`) calls the OpenRC binary (`/sbin/openrc` by default).
 | 
				
			||||||
(The default setup assumes sysvinit for this)
 | 
					(The default setup assumes sysvinit for this)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
openrc scans the runlevels (default: "/etc/runlevels") and builds a dependency 
 | 
					openrc scans the runlevels (default: `/etc/runlevels`) and builds a dependency
 | 
				
			||||||
graph, then starts the needed service scripts, either serialized (default) or in 
 | 
					graph, then starts the needed service scripts, either serialized (default) or in 
 | 
				
			||||||
parallel.
 | 
					parallel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -32,29 +32,29 @@ daemon. (Integration with tools like monit, runit or s6 can be done)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Shutdown
 | 
					# Shutdown
 | 
				
			||||||
 | 
					
 | 
				
			||||||
On change to runlevel 0/6 or running "reboot", "halt" etc., openrc stops all 
 | 
					On change to runlevel 0/6 or running `reboot`, `halt` etc., openrc stops all
 | 
				
			||||||
services that are started and runs the services in the "shutdown" runlevel.
 | 
					services that are started and runs the services in the `shutdown` runlevel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Modifying Service Scripts
 | 
					# Modifying Service Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Any service can, at any time, be started/stopped/restarted by executing 
 | 
					Any service can, at any time, be started/stopped/restarted by executing 
 | 
				
			||||||
"rc-service someservice start", "rc-service someservice stop", etc.
 | 
					`rc-service someservice start`, `rc-service someservice stop`, etc.
 | 
				
			||||||
Another, less preferred method, is to run the service script directly,
 | 
					Another, less preferred method, is to run the service script directly,
 | 
				
			||||||
e.g. "/etc/init.d/service start", "/etc/init.d/service stop", etc.
 | 
					e.g. `/etc/init.d/service start`, `/etc/init.d/service stop`, etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OpenRC will take care of dependencies, e.g starting apache will start network 
 | 
					OpenRC will take care of dependencies, e.g starting apache will start network 
 | 
				
			||||||
first, and stopping network will stop apache first.
 | 
					first, and stopping network will stop apache first.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There is a special command "zap" that makes OpenRC 'forget' that a service is 
 | 
					There is a special command `zap` that makes OpenRC 'forget' that a service is
 | 
				
			||||||
started; this is mostly useful to reset a crashed service to stopped state 
 | 
					started; this is mostly useful to reset a crashed service to stopped state 
 | 
				
			||||||
without invoking the (possibly broken) stop function of the service script.
 | 
					without invoking the (possibly broken) stop function of the service script.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Calling "openrc" without any arguments will try to reset all services so
 | 
					Calling `openrc` without any arguments will try to reset all services so
 | 
				
			||||||
that the current runlevel is satisfied; if you manually started apache it will be 
 | 
					that the current runlevel is satisfied; if you manually started apache it will be 
 | 
				
			||||||
stopped, and if squid died but is in the current runlevel it'll be restarted.
 | 
					stopped, and if squid died but is in the current runlevel it'll be restarted.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There is a "service" helper that emulates the syntax seen on e.g. older Redhat 
 | 
					There is a `service` helper that emulates the syntax seen on e.g. older Redhat
 | 
				
			||||||
and Ubuntu ("service nginx start" etc.)
 | 
					and Ubuntu (`service nginx start` etc.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Runlevels
 | 
					# Runlevels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -65,100 +65,112 @@ own if needed. This allows, for example, to have a default runlevel with
 | 
				
			|||||||
"everything" enabled, and a "powersaving" runlevel where some services are 
 | 
					"everything" enabled, and a "powersaving" runlevel where some services are 
 | 
				
			||||||
disabled.
 | 
					disabled.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The "rc-status" helper will print all currently active runlevels and the state 
 | 
					The `rc-status` helper will print all currently active runlevels and the state
 | 
				
			||||||
of init scripts in them:
 | 
					of init scripts in them:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
# rc-status
 | 
					# rc-status
 | 
				
			||||||
 * Caching service dependencies ... [ ok ]
 | 
					 * Caching service dependencies ... [ ok ]
 | 
				
			||||||
Runlevel: default
 | 
					Runlevel: default
 | 
				
			||||||
 modules                     [  started  ]
 | 
					 modules                     [  started  ]
 | 
				
			||||||
 lvm                         [  started  ]
 | 
					 lvm                         [  started  ]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
All runlevels are represented as folders in /etc/runlevels/ with symlinks to 
 | 
					All runlevels are represented as folders in `/etc/runlevels/` with symlinks to 
 | 
				
			||||||
the actual init scripts.
 | 
					the actual init scripts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Calling openrc with an argument ("openrc default") will switch to that
 | 
					Calling openrc with an argument (`openrc default`) will switch to that
 | 
				
			||||||
runlevel; this will start and stop services as needed.
 | 
					runlevel; this will start and stop services as needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Managing runlevels is usually done through the "rc-update" helper, but could of 
 | 
					Managing runlevels is usually done through the `rc-update` helper, but could of 
 | 
				
			||||||
course be done by hand if desired.
 | 
					course be done by hand if desired.
 | 
				
			||||||
e.g. "rc-update add nginx default" - add nginx to the default runlevel
 | 
					e.g. `rc-update add nginx default` - add nginx to the default runlevel
 | 
				
			||||||
Note: This will not auto-start nginx! You'd still have to trigger "rc" or run 
 | 
					Note: This will not auto-start nginx! You'd still have to trigger `rc` or run 
 | 
				
			||||||
the initscript by hand.
 | 
					the initscript by hand.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FIXME: Document stacked runlevels
 | 
					FIXME: Document stacked runlevels
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default startup uses the runlevels "boot", "sysinit" and "default", in that 
 | 
					The default startup uses the runlevels `boot`, `sysinit` and `default`, in that 
 | 
				
			||||||
order. Shutdown uses the "shutdown" runlevel.
 | 
					order. Shutdown uses the `shutdown` runlevel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Syntax of Service Scripts
 | 
					# Syntax of Service Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Service scripts are shell scripts. OpenRC aims at using only the standardized 
 | 
					Service scripts are shell scripts. OpenRC aims at using only the standardized 
 | 
				
			||||||
POSIX sh subset for portability reasons. The default interpreter (build-time 
 | 
					POSIX sh subset for portability reasons. The default interpreter (build-time 
 | 
				
			||||||
toggle) is /bin/sh, so using for example mksh is not a problem.
 | 
					toggle) is `/bin/sh`, so using for example mksh is not a problem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OpenRC has been tested with busybox sh, ash, dash, bash, mksh, zsh and possibly 
 | 
					OpenRC has been tested with busybox sh, ash, dash, bash, mksh, zsh and possibly 
 | 
				
			||||||
others. Using busybox sh has been difficult as it replaces commands with 
 | 
					others. Using busybox sh has been difficult as it replaces commands with 
 | 
				
			||||||
builtins that don't offer the expected features.
 | 
					builtins that don't offer the expected features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The interpreter for initscripts is #!/sbin/openrc-run
 | 
					The interpreter for initscripts is `#!/sbin/openrc-run`.
 | 
				
			||||||
Not using this interpreter will break the use of dependencies and is not 
 | 
					Not using this interpreter will break the use of dependencies and is not 
 | 
				
			||||||
supported. (iow: if you insist on using #!/bin/sh you're on your own)
 | 
					supported. (iow: if you insist on using `#!/bin/sh` you're on your own)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
A "depend" function declares the dependencies of this service script.
 | 
					A `depend` function declares the dependencies of this service script.
 | 
				
			||||||
All scripts must have start/stop/status functions, but defaults are provided.
 | 
					All scripts must have start/stop/status functions, but defaults are provided.
 | 
				
			||||||
Extra functions can be added easily:
 | 
					Extra functions can be added easily:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
extra_commands="checkconfig"
 | 
					extra_commands="checkconfig"
 | 
				
			||||||
checkconfig() {
 | 
					checkconfig() {
 | 
				
			||||||
	doSomething
 | 
						doSomething
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This exports the checkconfig function so that "/etc/init.d/someservice 
 | 
					This exports the checkconfig function so that `/etc/init.d/someservice 
 | 
				
			||||||
checkconfig" will be available, and it "just" runs this function.
 | 
					checkconfig` will be available, and it "just" runs this function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
While commands defined in extra_commands are always available, commands
 | 
					While commands defined in `extra_commands` are always available, commands
 | 
				
			||||||
defined in extra_started_commands will only work when the service is started
 | 
					defined in `extra_started_commands` will only work when the service is started
 | 
				
			||||||
and those defined in extra_stopped_commands will only work when the service is
 | 
					and those defined in `extra_stopped_commands` will only work when the service is
 | 
				
			||||||
stopped. This can be used for implementing graceful reload and similar
 | 
					stopped. This can be used for implementing graceful reload and similar
 | 
				
			||||||
behaviour.
 | 
					behaviour.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Adding a restart function will not work, this is a design decision within 
 | 
					Adding a restart function will not work, this is a design decision within 
 | 
				
			||||||
OpenRC. Since there may be dependencies involved (e.g. network -> apache) a 
 | 
					OpenRC. Since there may be dependencies involved (e.g. network -> apache) a 
 | 
				
			||||||
restart function is in general not going to work. 
 | 
					restart function is in general not going to work. 
 | 
				
			||||||
restart is internally mapped to stop() + start() (plus handling dependencies).
 | 
					restart is internally mapped to `stop()` + `start()` (plus handling dependencies).
 | 
				
			||||||
If a service needs to behave differently when it is being restarted vs
 | 
					If a service needs to behave differently when it is being restarted vs
 | 
				
			||||||
started or stopped, it should test the $RC_CMD variable, for example:
 | 
					started or stopped, it should test the `$RC_CMD` variable, for example:
 | 
				
			||||||
 | 
					 | 
				
			||||||
    [ "$RC_CMD" = restart ] && do_something
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					[ "$RC_CMD" = restart ] && do_something
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The Depend Function
 | 
					# The Depend Function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This function declares the dependencies for a service script. This
 | 
					This function declares the dependencies for a service script. This
 | 
				
			||||||
determines the order the service scripts start.
 | 
					determines the order the service scripts start.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
depend() {
 | 
					depend() {
 | 
				
			||||||
	need net
 | 
						need net
 | 
				
			||||||
	use dns logger netmount
 | 
						use dns logger netmount
 | 
				
			||||||
	want coolservice
 | 
						want coolservice
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"need" declares a hard dependency - net always needs to be started before this 
 | 
					`need` declares a hard dependency - net always needs to be started before this 
 | 
				
			||||||
	service does
 | 
						service does
 | 
				
			||||||
"use" is a soft dependency - if dns, logger or netmount is in this runlevel 
 | 
					
 | 
				
			||||||
 | 
					`use` is a soft dependency - if dns, logger or netmount is in this runlevel 
 | 
				
			||||||
	start it before, but we don't care if it's not in this runlevel.
 | 
						start it before, but we don't care if it's not in this runlevel.
 | 
				
			||||||
	"want" is between need and use - try to start coolservice if it is
 | 
						`want` is between need and use - try to start coolservice if it is
 | 
				
			||||||
	installed on the system, regardless of whether it is in the
 | 
						installed on the system, regardless of whether it is in the
 | 
				
			||||||
	runlevel, but we don't care if it starts.
 | 
						runlevel, but we don't care if it starts.
 | 
				
			||||||
"before" declares that we need to be started before another service
 | 
					
 | 
				
			||||||
"after" declares that we need to be started after another service, without 
 | 
					`before` declares that we need to be started before another service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`after` declares that we need to be started after another service, without 
 | 
				
			||||||
	creating a dependency (so on calling stop the two are independent)
 | 
						creating a dependency (so on calling stop the two are independent)
 | 
				
			||||||
"provide" allows multiple implementations to provide one service type, e.g.:
 | 
					
 | 
				
			||||||
	'provide cron' is set in all cron-daemons, so any one of them started 
 | 
					`provide` allows multiple implementations to provide one service type, e.g.:
 | 
				
			||||||
 | 
						`provide cron` is set in all cron-daemons, so any one of them started 
 | 
				
			||||||
	satisfies a cron dependency
 | 
						satisfies a cron dependency
 | 
				
			||||||
"keyword" allows platform-specific overrides, e.g. "keyword -lxc" makes this 
 | 
					
 | 
				
			||||||
 | 
					`keyword` allows platform-specific overrides, e.g. `keyword -lxc` makes this 
 | 
				
			||||||
	service script a noop in lxc containers. Useful for things like keymaps, 
 | 
						service script a noop in lxc containers. Useful for things like keymaps, 
 | 
				
			||||||
	module loading etc. that are either platform-specific or not available 
 | 
						module loading etc. that are either platform-specific or not available 
 | 
				
			||||||
	in containers/virtualization/...
 | 
						in containers/virtualization/...
 | 
				
			||||||
@@ -169,31 +181,36 @@ FIXME: Anything missing in this list?
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
All service scripts are assumed to have the following functions:
 | 
					All service scripts are assumed to have the following functions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
stop()
 | 
					stop()
 | 
				
			||||||
status()
 | 
					status()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
There are default implementations in rc/sh/openrc-run.sh - this allows very 
 | 
					There are default implementations in `lib/rc/sh/openrc-run.sh` - this allows very 
 | 
				
			||||||
compact service scripts. These functions can be overridden per service script as 
 | 
					compact service scripts. These functions can be overridden per service script as 
 | 
				
			||||||
needed.
 | 
					needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default functions assume the following variables to be set in the service 
 | 
					The default functions assume the following variables to be set in the service 
 | 
				
			||||||
script:
 | 
					script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
command=
 | 
					command=
 | 
				
			||||||
command_args=
 | 
					command_args=
 | 
				
			||||||
pidfile=
 | 
					pidfile=
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Thus the 'smallest' service scripts can be half a dozen lines long
 | 
					Thus the 'smallest' service scripts can be half a dozen lines long
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The Magic of Conf.d
 | 
					# The Magic of `conf.d`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Most service scripts need default values. It would be fragile to
 | 
					Most service scripts need default values. It would be fragile to
 | 
				
			||||||
explicitly source some arbitrary files. By convention openrc-run will source
 | 
					explicitly source some arbitrary files. By convention `openrc-run` will source
 | 
				
			||||||
the matching file in /etc/conf.d/ for any script in /etc/init.d/
 | 
					the matching file in `/etc/conf.d/` for any script in `/etc/init.d/`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This allows you to set random startup-related things easily. Example:
 | 
					This allows you to set random startup-related things easily. Example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
conf.d/foo:
 | 
					conf.d/foo:
 | 
				
			||||||
START_OPTS="--extraparameter sausage"
 | 
					START_OPTS="--extraparameter sausage"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -201,6 +218,7 @@ init.d/foo:
 | 
				
			|||||||
start() {
 | 
					start() {
 | 
				
			||||||
	/usr/sbin/foo-daemon ${STARTOPTS}
 | 
						/usr/sbin/foo-daemon ${STARTOPTS}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The big advantage of this split is that most of the time editing of the init 
 | 
					The big advantage of this split is that most of the time editing of the init 
 | 
				
			||||||
script can be avoided.
 | 
					script can be avoided.
 | 
				
			||||||
@@ -213,34 +231,34 @@ mostly syntax-compatible to Debian's s-s-d, but has been rewritten from scratch.
 | 
				
			|||||||
It helps with starting daemons, backgrounding, creating PID files and many 
 | 
					It helps with starting daemons, backgrounding, creating PID files and many 
 | 
				
			||||||
other convenience functions related to managing daemons.
 | 
					other convenience functions related to managing daemons.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# /etc/rc.conf
 | 
					# `/etc/rc.conf`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This file manages the default configuration for OpenRC, and it has examples of 
 | 
					This file manages the default configuration for OpenRC, and it has examples of 
 | 
				
			||||||
per-service-script variables.
 | 
					per-service-script variables.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Among these are rc_parallel (for parallelized startup), rc_log (logs all boot 
 | 
					Among these are `rc_parallel` (for parallelized startup), `rc_log` (logs all boot 
 | 
				
			||||||
messages to a file), and a few others.
 | 
					messages to a file), and a few others.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ulimit and CGroups
 | 
					# ulimit and CGroups
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Setting ulimit and nice values per service can be done through the rc_ulimit 
 | 
					Setting `ulimit` and `nice` values per service can be done through the `rc_ulimit`
 | 
				
			||||||
variable.
 | 
					variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Under Linux, OpenRC can optionally use CGroups for process management.
 | 
					Under Linux, OpenRC can optionally use CGroups for process management.
 | 
				
			||||||
By default each service script's processes are migrated to their own CGroup.
 | 
					By default each service script's processes are migrated to their own CGroup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
By changing certain values in the conf.d file limits can be enforced per 
 | 
					By changing certain values in the `conf.d` file limits can be enforced per 
 | 
				
			||||||
service. It is easy to find orphan processes of a service that persist after 
 | 
					service. It is easy to find orphan processes of a service that persist after 
 | 
				
			||||||
stop(), but by default these will NOT be terminated.
 | 
					`stop()`, but by default these will NOT be terminated.
 | 
				
			||||||
To change this add rc_cgroup_cleanup="yes" in the conf.d files for services 
 | 
					To change this add `rc_cgroup_cleanup="yes"` in the `conf.d` files for services 
 | 
				
			||||||
where you desire this functionality.
 | 
					where you desire this functionality.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Caching
 | 
					# Caching
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For performance reasons OpenRC keeps a cache of pre-parsed initscript metadata
 | 
					For performance reasons OpenRC keeps a cache of pre-parsed initscript metadata
 | 
				
			||||||
(e.g. depend). The default location for this is /${RC_SVCDIR}/cache.
 | 
					(e.g. `depend`). The default location for this is `/${RC_SVCDIR}/cache`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The cache uses mtime to check for file staleness. Should any service script
 | 
					The cache uses `mtime` to check for file staleness. Should any service script
 | 
				
			||||||
change it'll re-source the relevant files and update the cache
 | 
					change it'll re-source the relevant files and update the cache
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Convenience functions
 | 
					# Convenience functions
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -12,7 +12,6 @@ network
 | 
				
			|||||||
root
 | 
					root
 | 
				
			||||||
savecache
 | 
					savecache
 | 
				
			||||||
swap
 | 
					swap
 | 
				
			||||||
swapfiles
 | 
					 | 
				
			||||||
sysctl
 | 
					sysctl
 | 
				
			||||||
urandom
 | 
					urandom
 | 
				
			||||||
devfs
 | 
					devfs
 | 
				
			||||||
@@ -38,6 +37,7 @@ pf
 | 
				
			|||||||
rarpd
 | 
					rarpd
 | 
				
			||||||
rc-enabled
 | 
					rc-enabled
 | 
				
			||||||
rpcbind
 | 
					rpcbind
 | 
				
			||||||
 | 
					runsvdir
 | 
				
			||||||
savecore
 | 
					savecore
 | 
				
			||||||
swap-blk
 | 
					swap-blk
 | 
				
			||||||
swclock
 | 
					swclock
 | 
				
			||||||
@@ -45,5 +45,3 @@ syslogd
 | 
				
			|||||||
termencoding
 | 
					termencoding
 | 
				
			||||||
ttys
 | 
					ttys
 | 
				
			||||||
wscons
 | 
					wscons
 | 
				
			||||||
tmpfiles.dev
 | 
					 | 
				
			||||||
tmpfiles.setup
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@ include ../mk/net.mk
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
DIR=	${INITDIR}
 | 
					DIR=	${INITDIR}
 | 
				
			||||||
SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
 | 
					SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \
 | 
				
			||||||
	netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \
 | 
						netmount.in osclock.in root.in savecache.in swap.in swclock.in \
 | 
				
			||||||
	tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}}
 | 
						sysctl.in runsvdir.in urandom.in s6-svscan.in ${SRCS-${OS}}
 | 
				
			||||||
BIN=	${OBJS}
 | 
					BIN=	${OBJS}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Are we installing our network scripts?
 | 
					# Are we installing our network scripts?
 | 
				
			||||||
@@ -15,15 +15,15 @@ MK=	../mk
 | 
				
			|||||||
include ${MK}/os.mk
 | 
					include ${MK}/os.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generic BSD scripts
 | 
					# Generic BSD scripts
 | 
				
			||||||
SRCS-FreeBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
 | 
					SRCS-FreeBSD=	hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \
 | 
				
			||||||
		rpcbind.in savecore.in syslogd.in
 | 
							rc-enabled.in rpcbind.in savecore.in syslogd.in
 | 
				
			||||||
# These are FreeBSD specific
 | 
					# These are FreeBSD specific
 | 
				
			||||||
SRCS-FreeBSD+=	adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
 | 
					SRCS-FreeBSD+=	adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \
 | 
				
			||||||
		modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
 | 
							modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SRCS-Linux=	binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \
 | 
					SRCS-Linux=	agetty.in binfmt.in devfs.in dmesg.in hwclock.in consolefont.in \
 | 
				
			||||||
		killprocs.in modules.in modules-load.in mount-ro.in mtab.in numlock.in \
 | 
						keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \
 | 
				
			||||||
		procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in
 | 
						numlock.in procfs.in net-online.in sysfs.in termencoding.in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generic BSD scripts
 | 
					# Generic BSD scripts
 | 
				
			||||||
SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
 | 
					SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
 | 
				
			||||||
@@ -31,9 +31,6 @@ SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \
 | 
				
			|||||||
# These are NetBSD specific
 | 
					# These are NetBSD specific
 | 
				
			||||||
SRCS-NetBSD+=	devdb.in swap-blk.in ttys.in wscons.in
 | 
					SRCS-NetBSD+=	devdb.in swap-blk.in ttys.in wscons.in
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.in: %${SFX}
 | 
					 | 
				
			||||||
	sed ${SED_REPLACE} ${SED_EXTRA} $< > $@
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
include ${MK}/scripts.mk
 | 
					include ${MK}/scripts.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_installafter_: realinstall
 | 
					_installafter_: realinstall
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								init.d/agetty.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								init.d/agetty.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					#!@SBINDIR@/openrc-run
 | 
				
			||||||
 | 
					# Copyright (c) 2017 The OpenRC Authors.
 | 
				
			||||||
 | 
					# See the Authors file at the top-level directory of this distribution and
 | 
				
			||||||
 | 
					# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description="start agetty on a terminal line"
 | 
				
			||||||
 | 
					supervisor=supervise-daemon
 | 
				
			||||||
 | 
					port="${RC_SVCNAME#*.}"
 | 
				
			||||||
 | 
					term_type="${term_type:-linux}"
 | 
				
			||||||
 | 
					command=/sbin/agetty
 | 
				
			||||||
 | 
					command_args_foreground="${agetty_options} ${port} ${baud} ${termtype}"
 | 
				
			||||||
 | 
					pidfile="/run/${RC_SVCNAME}.pid"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depend() {
 | 
				
			||||||
 | 
						after local
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start_pre() {
 | 
				
			||||||
 | 
						if [ -z "$port" ]; then
 | 
				
			||||||
 | 
							eerror "${RC_SVCNAME} cannot be started directly. You must create"
 | 
				
			||||||
 | 
							eerror "symbolic links to it for the ports you want to start"
 | 
				
			||||||
 | 
							eerror "agetty on and add those to the appropriate runlevels."
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -17,10 +17,20 @@ depend() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	# HOSTNAME variable used to be defined in caps in conf.d/hostname.
 | 
						local h source x
 | 
				
			||||||
	# It is also a magic variable in bash.
 | 
						if [ -s @SYSCONFDIR@/hostname ] && [ -r @SYSCONFDIR@/hostname ]; then
 | 
				
			||||||
	hostname=${hostname-${HOSTNAME-localhost}} # checkbashisms: false positive
 | 
						read h x <@SYSCONFDIR@/hostname
 | 
				
			||||||
	ebegin "Setting hostname to $hostname"
 | 
						source=" from @SYSCONFDIR@/hostname"
 | 
				
			||||||
	hostname "$hostname"
 | 
						else
 | 
				
			||||||
 | 
							# HOSTNAME variable used to be defined in caps in conf.d/hostname.
 | 
				
			||||||
 | 
							# It is also a magic variable in bash.
 | 
				
			||||||
 | 
							h=${hostname-${HOSTNAME}} # checkbashisms: false positive
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						if [ -z "$h" ]; then
 | 
				
			||||||
 | 
							einfo "Using default system hostname"
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						ebegin "Setting hostname to $h $source"
 | 
				
			||||||
 | 
						hostname "$h"
 | 
				
			||||||
	eend $? "Failed to set the hostname"
 | 
						eend $? "Failed to set the hostname"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,10 +30,12 @@ fi
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	provide clock
 | 
						provide clock
 | 
				
			||||||
 | 
						want modules
 | 
				
			||||||
	if yesno $clock_adjfile; then
 | 
						if yesno $clock_adjfile; then
 | 
				
			||||||
		use root
 | 
							use root
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		before *
 | 
							before binfmt bootmisc fsck hostname keymaps localmount loopback mtab
 | 
				
			||||||
 | 
							before procfs root swap sysctl termencoding urandom
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -79,9 +81,18 @@ get_noadjfile()
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rtc_exists()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local rtc=
 | 
				
			||||||
 | 
						for rtc in /dev/rtc /dev/rtc[0-9]*; do
 | 
				
			||||||
 | 
							[ -e "$rtc" ] && break
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						[ -e "$rtc" ]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local retval=0 errstr=""
 | 
						local retval=0 errstr="" modname
 | 
				
			||||||
	setupopts
 | 
						setupopts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ -z "$utc_cmd" ]; then
 | 
						if [ -z "$utc_cmd" ]; then
 | 
				
			||||||
@@ -91,12 +102,13 @@ start()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	ebegin "Setting system clock using the hardware clock [$utc]"
 | 
						ebegin "Setting system clock using the hardware clock [$utc]"
 | 
				
			||||||
	if [ -e /proc/modules ]; then
 | 
						if [ -e /proc/modules ]; then
 | 
				
			||||||
		local rtc=
 | 
							if ! rtc_exists; then
 | 
				
			||||||
		for rtc in /dev/rtc /dev/rtc[0-9]*; do
 | 
								for x in rtc-cmos rtc genrtc; do
 | 
				
			||||||
			[ -e "$rtc" ] && break
 | 
									modprobe -q $x && rtc_exists && modname="$x" && break
 | 
				
			||||||
		done
 | 
								done
 | 
				
			||||||
		if [ ! -e "${rtc}" ]; then
 | 
								[ -n "$modname" ] &&
 | 
				
			||||||
			modprobe -q rtc-cmos || modprobe -q rtc || modprobe -q genrtc
 | 
									ewarn "The $modname module needs to be configured in" \
 | 
				
			||||||
 | 
										"@SYSCONFDIR@/conf.d/modules or built in."
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,17 +14,18 @@ description="Mounts disks and swap according to /etc/fstab."
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	need fsck
 | 
						need fsck
 | 
				
			||||||
	use lvm modules mtab
 | 
						use lvm modules mtab root
 | 
				
			||||||
	after lvm modules
 | 
						after lvm modules root
 | 
				
			||||||
	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	# Mount local filesystems in /etc/fstab.
 | 
						# Mount local filesystems in /etc/fstab.
 | 
				
			||||||
 | 
						# The types variable must start with no, and must be a type
 | 
				
			||||||
	local critical= types="noproc" x= no_netdev= rc=
 | 
						local critical= types="noproc" x= no_netdev= rc=
 | 
				
			||||||
	for x in $net_fs_list $extra_net_fs_list; do
 | 
						for x in $net_fs_list $extra_net_fs_list; do
 | 
				
			||||||
		types="${types},no${x}"
 | 
							types="${types},${x}"
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ "$RC_UNAME" = Linux ]; then
 | 
						if [ "$RC_UNAME" = Linux ]; then
 | 
				
			||||||
@@ -99,8 +100,8 @@ stop()
 | 
				
			|||||||
				aufs_branch=$(sed 's/=.*//g' $x)
 | 
									aufs_branch=$(sed 's/=.*//g' $x)
 | 
				
			||||||
				eindent
 | 
									eindent
 | 
				
			||||||
				if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then
 | 
									if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then
 | 
				
			||||||
					ewarn "Failed to remove branch $aufs_branch from aufs \
 | 
										ewarn "Failed to remove branch $aufs_branch from aufs" \
 | 
				
			||||||
					$aufs_mount_point"
 | 
										"$aufs_mount_point"
 | 
				
			||||||
				fi
 | 
									fi
 | 
				
			||||||
				eoutdent
 | 
									eoutdent
 | 
				
			||||||
				sync
 | 
									sync
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,22 +21,14 @@ start()
 | 
				
			|||||||
	if [ "$RC_UNAME" = Linux ]; then
 | 
						if [ "$RC_UNAME" = Linux ]; then
 | 
				
			||||||
		ebegin "Bringing up network interface lo"
 | 
							ebegin "Bringing up network interface lo"
 | 
				
			||||||
		if command -v ip > /dev/null 2>&1; then
 | 
							if command -v ip > /dev/null 2>&1; then
 | 
				
			||||||
			ip addr add 127.0.0.1/8 dev lo brd + scope host
 | 
								ip addr add 127.0.0.1/8 dev lo brd +
 | 
				
			||||||
			ip route add 127.0.0.0/8 dev lo scope host
 | 
					 | 
				
			||||||
			ip link set lo up
 | 
								ip link set lo up
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			ifconfig lo 127.0.0.1 netmask 255.0.0.0
 | 
								ifconfig lo 127.0.0.1 netmask 255.0.0.0
 | 
				
			||||||
			route add -net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1
 | 
					 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		ebegin "Bringing up network interface lo0"
 | 
							ebegin "Bringing up network interface lo0"
 | 
				
			||||||
		ifconfig lo0 127.0.0.1 netmask 255.0.0.0
 | 
							ifconfig lo0 127.0.0.1 netmask 255.0.0.0
 | 
				
			||||||
		route -q add -inet 127.0.0.0 -netmask 255.0.0.0 127.0.0.1
 | 
					 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	eend $?
 | 
						eend $?
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
stop()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,7 +54,7 @@ load_modules()
 | 
				
			|||||||
		ebegin "Loading module $x"
 | 
							ebegin "Loading module $x"
 | 
				
			||||||
		case "$RC_UNAME" in
 | 
							case "$RC_UNAME" in
 | 
				
			||||||
			FreeBSD) kldload "$x"; rc=$? ;;
 | 
								FreeBSD) kldload "$x"; rc=$? ;;
 | 
				
			||||||
			Linux) modprobe -q "$x"; rc=$? ;;
 | 
								Linux) modprobe --use-blacklist -q "$x"; rc=$? ;;
 | 
				
			||||||
			*) ;;
 | 
								*) ;;
 | 
				
			||||||
		esac
 | 
							esac
 | 
				
			||||||
		eend $rc "Failed to load $x"
 | 
							eend $rc "Failed to load $x"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,9 +18,20 @@ depend()
 | 
				
			|||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					FreeBSD_modules()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	# Should not fail if kernel do not have module
 | 
						local cnt=0 x
 | 
				
			||||||
 | 
						for x in $modules; do
 | 
				
			||||||
 | 
							ebegin "Loading module $x"
 | 
				
			||||||
 | 
							kldload "$x"
 | 
				
			||||||
 | 
							eend $? "Failed to load $x" && : $(( cnt += 1 ))
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						einfo "Autoloaded $cnt module(s)"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux_modules()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# Should not fail if kernel does not have module
 | 
				
			||||||
	# support compiled in ...
 | 
						# support compiled in ...
 | 
				
			||||||
	[ ! -f /proc/modules ] && return 0
 | 
						[ ! -f /proc/modules ] && return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -37,22 +48,21 @@ start()
 | 
				
			|||||||
		x=${x%.*}
 | 
							x=${x%.*}
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local list= x= xx= y= args= mpargs= cnt=0 a=
 | 
						local list= x= xx= y= args= mpargs= a=
 | 
				
			||||||
	for x in $kv_variant_list ; do
 | 
						for x in $kv_variant_list ; do
 | 
				
			||||||
		eval list=\$modules_$(shell_var "$x")
 | 
							eval list=\$modules_$(shell_var "$x")
 | 
				
			||||||
		[ -n "$list" ] && break
 | 
							[ -n "$list" ] && break
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	[ -z "$list" ] && list=$modules
 | 
						[ -z "$list" ] && list=$modules
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						[ -n "$list" ] && ebegin "Loading kernel modules"
 | 
				
			||||||
	for x in $list; do
 | 
						for x in $list; do
 | 
				
			||||||
		a=${x#*:}
 | 
							a=${x#*:}
 | 
				
			||||||
		if [ "$a" = "$x" ]; then
 | 
							if [ "$a" = "$x" ]; then
 | 
				
			||||||
			unset mpargs
 | 
								unset mpargs
 | 
				
			||||||
			ebegin "Loading module $x"
 | 
					 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
			x=${x%%:*}
 | 
								x=${x%%:*}
 | 
				
			||||||
			mpargs="-o $a"
 | 
								mpargs="-o $a"
 | 
				
			||||||
			ebegin "Loading module $x as $a"
 | 
					 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
		aa=$(shell_var "$a")
 | 
							aa=$(shell_var "$a")
 | 
				
			||||||
		xx=$(shell_var "$x")
 | 
							xx=$(shell_var "$x")
 | 
				
			||||||
@@ -64,8 +74,16 @@ start()
 | 
				
			|||||||
		done
 | 
							done
 | 
				
			||||||
		[ -z "$args" ] && eval args=\$module_${aa}_args
 | 
							[ -z "$args" ] && eval args=\$module_${aa}_args
 | 
				
			||||||
		[ -z "$args" ] && eval args=\$module_${xx}_args
 | 
							[ -z "$args" ] && eval args=\$module_${xx}_args
 | 
				
			||||||
		eval modprobe -q "$mpargs" "$x" "$args"
 | 
							eval modprobe --use-blacklist --verbose "$mpargs" "$x" "$args"
 | 
				
			||||||
		eend $? "Failed to load $x" && : $(( cnt += 1 ))
 | 
					 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	einfo "Autoloaded $cnt module(s)"
 | 
						[ -n "$list" ] && eend
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
 | 
							FreeBSD|Linux) ${RC_UNAME}_modules ;;
 | 
				
			||||||
 | 
							*) ;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,6 +34,9 @@ start()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|/run|${rc_svcdir}" x= fs=
 | 
						local m="/dev|/dev/.*|/proc|/proc.*|/sys|/sys/.*|/run|${rc_svcdir}" x= fs=
 | 
				
			||||||
	m="$m|/bin|/sbin|/lib(32|64)?|/libexec"
 | 
						m="$m|/bin|/sbin|/lib(32|64)?|/libexec"
 | 
				
			||||||
 | 
						if [ -e "$rc_svcdir"/usr_premounted ]; then
 | 
				
			||||||
 | 
							m="$m|/usr"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
	# RC_NO_UMOUNTS is an env var that can be set by plugins
 | 
						# RC_NO_UMOUNTS is an env var that can be set by plugins
 | 
				
			||||||
	local IFS="$IFS:"
 | 
						local IFS="$IFS:"
 | 
				
			||||||
	for x in $no_umounts $RC_NO_UMOUNTS; do
 | 
						for x in $no_umounts $RC_NO_UMOUNTS; do
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,6 +15,7 @@ depend()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	after modules
 | 
						after modules
 | 
				
			||||||
	need sysfs
 | 
						need sysfs
 | 
				
			||||||
 | 
						provide network-online
 | 
				
			||||||
	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
 | 
						keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,23 +28,10 @@ get_interfaces()
 | 
				
			|||||||
	done
 | 
						done
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
get_default_gateway()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local cmd gateway
 | 
					 | 
				
			||||||
	if command -v ip > /dev/null 2>&1; then
 | 
					 | 
				
			||||||
		cmd="ip route show"
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		cmd=route
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	set -- $($cmd | grep default)
 | 
					 | 
				
			||||||
	[ "$2" != via ] && gateway="$2" || gateway="$3"
 | 
					 | 
				
			||||||
	printf "%s" $gateway
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start ()
 | 
					start ()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local carriers configured dev gateway ifcount infinite interfaces
 | 
						local carriers configured dev gateway ifcount infinite
 | 
				
			||||||
	local rc state timeout x
 | 
						local rc state x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ebegin "Checking to see if the network is online"
 | 
						ebegin "Checking to see if the network is online"
 | 
				
			||||||
	rc=0
 | 
						rc=0
 | 
				
			||||||
@@ -66,10 +54,15 @@ start ()
 | 
				
			|||||||
	: $((timeout -= 1))
 | 
						: $((timeout -= 1))
 | 
				
			||||||
 done
 | 
					 done
 | 
				
			||||||
 ! $infinite && [ $timeout -eq 0 ] && rc=1
 | 
					 ! $infinite && [ $timeout -eq 0 ] && rc=1
 | 
				
			||||||
 if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then
 | 
					 include_ping_test=${include_ping_test:-${ping_default_gateway}}
 | 
				
			||||||
 	gateway="$(get_default_gateway)"
 | 
					 if [ -n "${ping_default_gateway}" ]; then
 | 
				
			||||||
 	if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then
 | 
					 ewarn "ping_default_gateway is deprecated, please use include_ping_test"
 | 
				
			||||||
		rc=1
 | 
					 fi
 | 
				
			||||||
 | 
					 if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then
 | 
				
			||||||
 | 
					 	ping_test_host="${ping_test_host:-google.com}"
 | 
				
			||||||
 | 
					 	if [ -n "$ping_test_host" ]; then
 | 
				
			||||||
 | 
							ping -c 1 $ping_test_host > /dev/null 2>&1
 | 
				
			||||||
 | 
							rc=$?
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 fi
 | 
					 fi
 | 
				
			||||||
 eend $rc "The network is offline"
 | 
					 eend $rc "The network is offline"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,10 +20,12 @@ depend()
 | 
				
			|||||||
			*) mywant="$mywant nfsclient"; break ;;
 | 
								*) mywant="$mywant nfsclient"; break ;;
 | 
				
			||||||
		esac
 | 
							esac
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
						after root
 | 
				
			||||||
 	config /etc/fstab
 | 
					 	config /etc/fstab
 | 
				
			||||||
	want $mywant
 | 
						want $mywant
 | 
				
			||||||
	use afc-client amd openvpn
 | 
						use afc-client amd openvpn
 | 
				
			||||||
	use dns
 | 
						use dns
 | 
				
			||||||
 | 
						use root
 | 
				
			||||||
	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,8 @@ description="Mounts misc filesystems in /proc."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	use modules devfs
 | 
						use devfs
 | 
				
			||||||
 | 
						want modules
 | 
				
			||||||
	need localmount
 | 
						need localmount
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -21,8 +22,13 @@ depend()
 | 
				
			|||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	# Setup Kernel Support for miscellaneous Binary Formats
 | 
						# Setup Kernel Support for miscellaneous Binary Formats
 | 
				
			||||||
	if [ -d /proc/sys/fs/binfmt_misc -a ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
						if [ -d /proc/sys/fs/binfmt_misc ] &&
 | 
				
			||||||
		modprobe -q binfmt-misc
 | 
							[ ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
				
			||||||
 | 
							if ! grep -qs binfmt_misc /proc/filesystems &&
 | 
				
			||||||
 | 
								modprobe -q binfmt-misc; then
 | 
				
			||||||
 | 
								ewarn "The binfmt-misc module needs to be configured in" \
 | 
				
			||||||
 | 
									"@SYSCONFDIR@/conf.d/modules or built in."
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
		if grep -qs binfmt_misc /proc/filesystems; then
 | 
							if grep -qs binfmt_misc /proc/filesystems; then
 | 
				
			||||||
			ebegin "Mounting misc binary format filesystem"
 | 
								ebegin "Mounting misc binary format filesystem"
 | 
				
			||||||
			mount -t binfmt_misc -o nodev,noexec,nosuid \
 | 
								mount -t binfmt_misc -o nodev,noexec,nosuid \
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								init.d/runsvdir.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								init.d/runsvdir.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#!@SBINDIR@/openrc-run
 | 
				
			||||||
 | 
					# Copyright (c) 2016 The OpenRC Authors.
 | 
				
			||||||
 | 
					# See the Authors file at the top-level directory of this distribution and
 | 
				
			||||||
 | 
					# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					command=/usr/bin/runsvdir
 | 
				
			||||||
 | 
					command_background=yes
 | 
				
			||||||
 | 
					pidfile=/var/run/runsvdir.pid
 | 
				
			||||||
 | 
					command_args="-P $RC_SVCDIR/sv 'log: ...........................................................................................................................................................................................................................................................................................................................................................................................................'"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start_pre()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						checkpath -m 0755 -o root:root -d ${RC_SVCDIR}/sv
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -49,7 +49,7 @@ start()
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
	ebegin "Saving dependency cache"
 | 
						ebegin "Saving dependency cache"
 | 
				
			||||||
	local rc=0 save=
 | 
						local rc=0 save=
 | 
				
			||||||
	for x in deptree depconfig shutdowntime softlevel rc.log; do
 | 
						for x in shutdowntime softlevel rc.log; do
 | 
				
			||||||
		[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
 | 
							[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	if [ -n "$save" ]; then
 | 
						if [ -n "$save" ]; then
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,6 @@ start()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	ebegin "Activating swap devices"
 | 
						ebegin "Activating swap devices"
 | 
				
			||||||
	case "$RC_UNAME" in
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
		Linux)		swapon -a -e >/dev/null;;
 | 
					 | 
				
			||||||
		NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
 | 
							NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;;
 | 
				
			||||||
		*)		swapon -a >/dev/null;;
 | 
							*)		swapon -a >/dev/null;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
@@ -29,12 +28,6 @@ start()
 | 
				
			|||||||
stop()
 | 
					stop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ebegin "Deactivating swap devices"
 | 
						ebegin "Deactivating swap devices"
 | 
				
			||||||
 | 
					 | 
				
			||||||
	# 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
 | 
					 | 
				
			||||||
	cd "$RC_SVCDIR"
 | 
					 | 
				
			||||||
	umount -a -t tmpfs 2>/dev/null
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	case "$RC_UNAME" in
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
		NetBSD|OpenBSD)	swapctl -U -t noblk >/dev/null;;
 | 
							NetBSD|OpenBSD)	swapctl -U -t noblk >/dev/null;;
 | 
				
			||||||
		*)		swapoff -a >/dev/null;;
 | 
							*)		swapoff -a >/dev/null;;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
#!@SBINDIR@/openrc-run
 | 
					 | 
				
			||||||
# Copyright (c) 2007-2015 The OpenRC Authors.
 | 
					 | 
				
			||||||
# See the Authors file at the top-level directory of this distribution and
 | 
					 | 
				
			||||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of OpenRC. It is subject to the license terms in
 | 
					 | 
				
			||||||
# the LICENSE file found in the top-level directory of this
 | 
					 | 
				
			||||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
					 | 
				
			||||||
# This file may not be copied, modified, propagated, or distributed
 | 
					 | 
				
			||||||
# except according to the terms contained in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	need localmount
 | 
					 | 
				
			||||||
	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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"
 | 
					 | 
				
			||||||
	case "$RC_UNAME" in
 | 
					 | 
				
			||||||
		Linux)
 | 
					 | 
				
			||||||
			if [ -e /proc/swaps ]; then
 | 
					 | 
				
			||||||
				while read filename type rest; do
 | 
					 | 
				
			||||||
					case "$type" in
 | 
					 | 
				
			||||||
						file) swapoff $filename >/dev/null;;
 | 
					 | 
				
			||||||
					esac
 | 
					 | 
				
			||||||
					case "$filename" in
 | 
					 | 
				
			||||||
						/dev/loop*) swapoff $filename >/dev/null;;
 | 
					 | 
				
			||||||
					esac
 | 
					 | 
				
			||||||
				done < /proc/swaps
 | 
					 | 
				
			||||||
			fi
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
	eend 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -13,7 +13,10 @@ description="Sets the local clock to the mtime of a given file."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	before *
 | 
						before adjkerntz binfmt bootmisc devdb dumpon fsck hostid hostname keymaps
 | 
				
			||||||
 | 
						before localmount loopback modules mtab network newsyslog procfs root
 | 
				
			||||||
 | 
						before savecore staticroute swap swap-blk syscons sysctl syslogd
 | 
				
			||||||
 | 
						before termencoding ttys urandom wscons
 | 
				
			||||||
	provide clock
 | 
						provide clock
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,38 +0,0 @@
 | 
				
			|||||||
#!@SBINDIR@/openrc-run
 | 
					 | 
				
			||||||
# Copyright (c) 2007-2015 The OpenRC Authors.
 | 
					 | 
				
			||||||
# See the Authors file at the top-level directory of this distribution and
 | 
					 | 
				
			||||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of OpenRC. It is subject to the license terms in
 | 
					 | 
				
			||||||
# the LICENSE file found in the top-level directory of this
 | 
					 | 
				
			||||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
					 | 
				
			||||||
# This file may not be copied, modified, propagated, or distributed
 | 
					 | 
				
			||||||
# except according to the terms contained in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	before bootmisc logger
 | 
					 | 
				
			||||||
	keyword -prefix
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
					 | 
				
			||||||
	local retval=0 var= comments= conf=
 | 
					 | 
				
			||||||
	ebegin "Configuring kernel parameters"
 | 
					 | 
				
			||||||
	eindent
 | 
					 | 
				
			||||||
	for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
 | 
					 | 
				
			||||||
		if [ -r "$conf" ]; then
 | 
					 | 
				
			||||||
			vebegin "applying $conf"
 | 
					 | 
				
			||||||
			while read var comments; do
 | 
					 | 
				
			||||||
				case "$var" in
 | 
					 | 
				
			||||||
				""|"#"*) continue;;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
				sysctl -w "$var" >/dev/null || retval=1
 | 
					 | 
				
			||||||
			done < "$conf"
 | 
					 | 
				
			||||||
			veend $retval
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	eoutdent
 | 
					 | 
				
			||||||
	eend $retval "Some errors were encountered"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,39 +0,0 @@
 | 
				
			|||||||
#!@PREFIX@/sbin/openrc-run
 | 
					 | 
				
			||||||
# Copyright (c) 2007-2015 The OpenRC Authors.
 | 
					 | 
				
			||||||
# See the Authors file at the top-level directory of this distribution and
 | 
					 | 
				
			||||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of OpenRC. It is subject to the license terms in
 | 
					 | 
				
			||||||
# the LICENSE file found in the top-level directory of this
 | 
					 | 
				
			||||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
					 | 
				
			||||||
# This file may not be copied, modified, propagated, or distributed
 | 
					 | 
				
			||||||
# except according to the terms contained in the LICENSE file.
 | 
					 | 
				
			||||||
#FIXME: Modify for GNU/Hurd
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	before bootmisc logger
 | 
					 | 
				
			||||||
	keyword -prefix
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
					 | 
				
			||||||
	local retval=0 var= comments= conf=
 | 
					 | 
				
			||||||
	ebegin "Configuring kernel parameters"
 | 
					 | 
				
			||||||
	eindent
 | 
					 | 
				
			||||||
	for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
 | 
					 | 
				
			||||||
		if [ -r "$conf" ]; then
 | 
					 | 
				
			||||||
			vebegin "applying $conf"
 | 
					 | 
				
			||||||
			while read var comments; do
 | 
					 | 
				
			||||||
				case "$var" in
 | 
					 | 
				
			||||||
				""|"#"*) continue;;
 | 
					 | 
				
			||||||
				esac
 | 
					 | 
				
			||||||
				sysctl -w "$var" >/dev/null || retval=1
 | 
					 | 
				
			||||||
			done < "$conf"
 | 
					 | 
				
			||||||
			veend $retval
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	eoutdent
 | 
					 | 
				
			||||||
	eend $retval "Some errors were encountered"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -12,14 +12,13 @@
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	before bootmisc logger
 | 
						before bootmisc logger
 | 
				
			||||||
	keyword -prefix
 | 
						keyword -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					BSD_sysctl()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
						[ -e /etc/sysctl.conf ] || return 0
 | 
				
			||||||
	local retval=0 var= comments= conf=
 | 
						local retval=0 var= comments= conf=
 | 
				
			||||||
	ebegin "Configuring kernel parameters"
 | 
					 | 
				
			||||||
	eindent
 | 
						eindent
 | 
				
			||||||
	for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
 | 
						for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
 | 
				
			||||||
		if [ -r "$conf" ]; then
 | 
							if [ -r "$conf" ]; then
 | 
				
			||||||
@@ -34,5 +33,25 @@ start()
 | 
				
			|||||||
		fi
 | 
							fi
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	eoutdent
 | 
						eoutdent
 | 
				
			||||||
	eend $retval "Some errors were encountered"
 | 
						return $retval
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Linux_sysctl()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local quiet
 | 
				
			||||||
 | 
						yesno $rc_verbose || quiet=-q
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sysctl ${quiet} --system
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local rc=0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ebegin "Configuring kernel parameters"
 | 
				
			||||||
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
 | 
						*BSD|GNU) BSD_sysctl; rc=$? ;;
 | 
				
			||||||
 | 
						Linux) Linux_sysctl; rc=$? ;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						eend $rc "Unable to configure some kernel parameters"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -97,18 +97,13 @@ mount_misc()
 | 
				
			|||||||
		fi
 | 
							fi
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# setup up kernel support for efivarfs
 | 
						# set up kernel support for efivarfs
 | 
				
			||||||
	# slightly complicated, as if it's build as a module but NOT yet loaded,
 | 
						if [ -d /sys/firmware/efi/efivars ] &&
 | 
				
			||||||
	# it will NOT appear in /proc/filesystems yet
 | 
							! mountinfo -q /sys/firmware/efi/efivars; then
 | 
				
			||||||
	if [ -d /sys/firmware/efi/efivars ] \
 | 
							ebegin "Mounting efivarfs filesystem"
 | 
				
			||||||
		&& ! mountinfo -q /sys/firmware/efi/efivars; then
 | 
							mount -n -t efivarfs -o ${sysfs_opts} \
 | 
				
			||||||
		modprobe -q efivarfs
 | 
								efivarfs /sys/firmware/efi/efivars 2> /dev/null
 | 
				
			||||||
		if grep -qs efivarfs /proc/filesystems; then
 | 
							eend 0
 | 
				
			||||||
			ebegin "Mounting efivarfs filesystem"
 | 
					 | 
				
			||||||
			mount -n -t efivarfs -o ${sysfs_opts} \
 | 
					 | 
				
			||||||
				efivarfs /sys/firmware/efi/efivars
 | 
					 | 
				
			||||||
			eend $?
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
#!@SBINDIR@/openrc-run
 | 
					 | 
				
			||||||
# Copyright 1999-2012 Gentoo Foundation
 | 
					 | 
				
			||||||
# Released under the 2-clause BSD license.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
description="Set up tmpfiles.d entries"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	use dev-mount
 | 
					 | 
				
			||||||
	before dev
 | 
					 | 
				
			||||||
	keyword -prefix -vserver
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	ebegin "Setting up tmpfiles.d entries for /dev"
 | 
					 | 
				
			||||||
	@LIBEXECDIR@/sh/tmpfiles.sh --prefix=/dev --create --boot ${tmpfiles_opts}
 | 
					 | 
				
			||||||
	eend $?
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,19 +0,0 @@
 | 
				
			|||||||
#!@SBINDIR@/openrc-run
 | 
					 | 
				
			||||||
# Copyright 1999-2012 Gentoo Foundation
 | 
					 | 
				
			||||||
# Released under the 2-clause BSD license.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
description="Set up tmpfiles.d entries"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	need localmount
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	ebegin "Setting up tmpfiles.d entries"
 | 
					 | 
				
			||||||
	@LIBEXECDIR@/sh/tmpfiles.sh --exclude-prefix=/dev --create --remove --boot \
 | 
					 | 
				
			||||||
		${tmpfiles_opts}
 | 
					 | 
				
			||||||
	eend $?
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -8,7 +8,7 @@ service is stopped.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
All files are processed in lexical order.
 | 
					All files are processed in lexical order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Keep in mind that files in this directory are processed sequencially,
 | 
					Keep in mind that files in this directory are processed sequentially,
 | 
				
			||||||
and the local service is not considered started or stopped until
 | 
					and the local service is not considered started or stopped until
 | 
				
			||||||
everything is processed, so if you have a process which takes a long
 | 
					everything is processed, so if you have a process which takes a long
 | 
				
			||||||
time to run, it can delay your boot or shutdown processing.
 | 
					time to run, it can delay your boot or shutdown processing.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,7 +97,7 @@ String describing the extra command.
 | 
				
			|||||||
.It Ar supervisor
 | 
					.It Ar supervisor
 | 
				
			||||||
Supervisor to use to monitor this daemon. If this is unset or invalid,
 | 
					Supervisor to use to monitor this daemon. If this is unset or invalid,
 | 
				
			||||||
start-stop-daemon will be used.
 | 
					start-stop-daemon will be used.
 | 
				
			||||||
Currently, we support s6 from scarnet software, and supervise-daemon
 | 
					Currently, we support s6 from skarnet software, and supervise-daemon
 | 
				
			||||||
which is a light-weight supervisor internal to OpenRC.
 | 
					which is a light-weight supervisor internal to OpenRC.
 | 
				
			||||||
To use s6, set
 | 
					To use s6, set
 | 
				
			||||||
supervisor=s6.
 | 
					supervisor=s6.
 | 
				
			||||||
@@ -125,15 +125,35 @@ if no start or stop function is defined by the service.
 | 
				
			|||||||
.It Ar command_args
 | 
					.It Ar command_args
 | 
				
			||||||
List of arguments to pass to the daemon when starting via
 | 
					List of arguments to pass to the daemon when starting via
 | 
				
			||||||
.Nm start-stop-daemon .
 | 
					.Nm start-stop-daemon .
 | 
				
			||||||
 | 
					.It Ar command_args_background
 | 
				
			||||||
 | 
					This variable should be used if the daemon you are starting with
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
 | 
					runs in the foreground by default but has its own command line options
 | 
				
			||||||
 | 
					to request that it background and write a pid file. It should be set to
 | 
				
			||||||
 | 
					those options. It should not be used at the same time as
 | 
				
			||||||
 | 
					command_background, because command_background requests that
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
 | 
					go into the background before executing the daemon.
 | 
				
			||||||
.It Ar command_args_foreground
 | 
					.It Ar command_args_foreground
 | 
				
			||||||
List of arguments to pass to the daemon when starting via
 | 
					List of arguments to pass to the daemon when starting via
 | 
				
			||||||
.Nm supervise-daemon .
 | 
					.Nm supervise-daemon .
 | 
				
			||||||
to force the daemon to stay in the foreground
 | 
					to force the daemon to stay in the foreground
 | 
				
			||||||
.It Ar command_background
 | 
					.It Ar command_background
 | 
				
			||||||
Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into
 | 
					Set this to "true", "yes" or "1" (case-insensitive) if you want 
 | 
				
			||||||
the background. This implies the "--make-pidfile" and "--pidfile" option of
 | 
					 | 
				
			||||||
.Xr start-stop-daemon 8
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
so the pidfile variable must be set.
 | 
					to force the daemon into the background. This forces the
 | 
				
			||||||
 | 
					"--make-pidfile" and "--pidfile" options, so the pidfile variable must be set.
 | 
				
			||||||
 | 
					.It Ar command_progress
 | 
				
			||||||
 | 
					Set this to "true", "yes" or "1" (case-insensitive) if you want 
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
 | 
					to display a progress meter when waiting for a daemon to stop.
 | 
				
			||||||
 | 
					.It Ar command_user
 | 
				
			||||||
 | 
					If the daemon does not support changing to a different user id, you can
 | 
				
			||||||
 | 
					use this to change the user id before
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
 | 
					or
 | 
				
			||||||
 | 
					.Xr supervise-daemon 8
 | 
				
			||||||
 | 
					launches the daemon
 | 
				
			||||||
.It Ar chroot
 | 
					.It Ar chroot
 | 
				
			||||||
.Xr start-stop-daemon 8
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
and
 | 
					and
 | 
				
			||||||
@@ -143,6 +163,8 @@ will chroot into this path before writing the pid file or starting the daemon.
 | 
				
			|||||||
Pidfile to use for the above defined command.
 | 
					Pidfile to use for the above defined command.
 | 
				
			||||||
.It Ar name
 | 
					.It Ar name
 | 
				
			||||||
Display name used for the above defined command.
 | 
					Display name used for the above defined command.
 | 
				
			||||||
 | 
					.It Ar procname
 | 
				
			||||||
 | 
					Process name to match when signaling the daemon.
 | 
				
			||||||
.It Ar stopsig
 | 
					.It Ar stopsig
 | 
				
			||||||
Signal to send when stopping the daemon.
 | 
					Signal to send when stopping the daemon.
 | 
				
			||||||
.It Ar retry
 | 
					.It Ar retry
 | 
				
			||||||
@@ -158,6 +180,10 @@ used along with in_background_fake to support re-entrant services.
 | 
				
			|||||||
.It Ar in_background_fake
 | 
					.It Ar in_background_fake
 | 
				
			||||||
Space separated list of commands which should always succeed when
 | 
					Space separated list of commands which should always succeed when
 | 
				
			||||||
in_background is yes.
 | 
					in_background is yes.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
 | 
					Keep in mind that eval is used to process chroot, command, command_args_*,
 | 
				
			||||||
 | 
					command_user, pidfile and procname. This may affect how they are
 | 
				
			||||||
 | 
					evaluated depending on how they are quoted.
 | 
				
			||||||
.El
 | 
					.El
 | 
				
			||||||
.Sh DEPENDENCIES
 | 
					.Sh DEPENDENCIES
 | 
				
			||||||
You should define a
 | 
					You should define a
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,8 @@ Show all runlevels and their services.
 | 
				
			|||||||
List all services that have crashed.
 | 
					List all services that have crashed.
 | 
				
			||||||
.It Fl l , -list
 | 
					.It Fl l , -list
 | 
				
			||||||
List all defined runlevels.
 | 
					List all defined runlevels.
 | 
				
			||||||
 | 
					.It Fl m , -manual
 | 
				
			||||||
 | 
					Show all manually started services.
 | 
				
			||||||
.It Fl r , -runlevel
 | 
					.It Fl r , -runlevel
 | 
				
			||||||
Print the current runlevel name.
 | 
					Print the current runlevel name.
 | 
				
			||||||
.It Fl s , -servicelist
 | 
					.It Fl s , -servicelist
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -55,7 +55,7 @@ is used.
 | 
				
			|||||||
.It Fl p , -pidfile Ar pidfile
 | 
					.It Fl p , -pidfile Ar pidfile
 | 
				
			||||||
When starting, we expect the daemon to create a valid
 | 
					When starting, we expect the daemon to create a valid
 | 
				
			||||||
.Ar pidfile
 | 
					.Ar pidfile
 | 
				
			||||||
within a reasonable amount of time. When stopping we only stop the pid(s)
 | 
					within a reasonable amount of time. When stopping we only stop the first pid
 | 
				
			||||||
listed in the
 | 
					listed in the
 | 
				
			||||||
.Ar pidfile .
 | 
					.Ar pidfile .
 | 
				
			||||||
.It Fl n , -name Ar name
 | 
					.It Fl n , -name Ar name
 | 
				
			||||||
@@ -153,6 +153,10 @@ The retry specification can be either a timeout in seconds or multiple
 | 
				
			|||||||
signal/timeout pairs (like SIGTERM/5).
 | 
					signal/timeout pairs (like SIGTERM/5).
 | 
				
			||||||
.El
 | 
					.El
 | 
				
			||||||
.Sh ENVIRONMENT
 | 
					.Sh ENVIRONMENT
 | 
				
			||||||
 | 
					.Va SSD_IONICELEVEL
 | 
				
			||||||
 | 
					can also set the IO scheduling priority of the daemon, but the command line
 | 
				
			||||||
 | 
					option takes precedence.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
.Va SSD_NICELEVEL
 | 
					.Va SSD_NICELEVEL
 | 
				
			||||||
can also set the scheduling priority of the daemon, but the command line
 | 
					can also set the scheduling priority of the daemon, but the command line
 | 
				
			||||||
option takes precedence.
 | 
					option takes precedence.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										10
									
								
								mk/dist.mk
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								mk/dist.mk
									
									
									
									
									
								
							@@ -11,9 +11,9 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
GITREF?=	${VERSION}
 | 
					GITREF?=	${VERSION}
 | 
				
			||||||
DISTPREFIX?=	${NAME}-${VERSION}
 | 
					DISTPREFIX?=	${NAME}-${VERSION}
 | 
				
			||||||
DISTFILE?=	${DISTPREFIX}.tar.bz2
 | 
					DISTFILE?=	${DISTPREFIX}.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CLEANFILES+=	${NAME}-*.tar.bz2
 | 
					CLEANFILES+=	${NAME}-*.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CHANGELOG_LIMIT?= --after="1 year ago"
 | 
					CHANGELOG_LIMIT?= --after="1 year ago"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -21,13 +21,13 @@ _SNAP_SH=	date -u +%Y%m%d%H%M
 | 
				
			|||||||
_SNAP:=		$(shell ${_SNAP_SH})
 | 
					_SNAP:=		$(shell ${_SNAP_SH})
 | 
				
			||||||
SNAP=		${_SNAP}
 | 
					SNAP=		${_SNAP}
 | 
				
			||||||
SNAPDIR=	${DISTPREFIX}-${SNAP}
 | 
					SNAPDIR=	${DISTPREFIX}-${SNAP}
 | 
				
			||||||
SNAPFILE=	${SNAPDIR}.tar.bz2
 | 
					SNAPFILE=	${SNAPDIR}.tar.gz
 | 
				
			||||||
 | 
					
 | 
				
			||||||
changelog:
 | 
					changelog:
 | 
				
			||||||
	git log ${CHANGELOG_LIMIT} --format=full > ChangeLog
 | 
						git log ${CHANGELOG_LIMIT} --format=full > ChangeLog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dist:
 | 
					dist:
 | 
				
			||||||
	git archive --prefix=${DISTPREFIX}/ ${GITREF} | bzip2 > ${DISTFILE}
 | 
						git archive --prefix=${DISTPREFIX}/ ${GITREF} --output=${DISTFILE}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
distcheck: dist
 | 
					distcheck: dist
 | 
				
			||||||
	rm -rf ${DISTPREFIX}
 | 
						rm -rf ${DISTPREFIX}
 | 
				
			||||||
@@ -42,7 +42,7 @@ snapshot:
 | 
				
			|||||||
	cp -RPp * /tmp/${SNAPDIR}
 | 
						cp -RPp * /tmp/${SNAPDIR}
 | 
				
			||||||
	(cd /tmp/${SNAPDIR}; make clean)
 | 
						(cd /tmp/${SNAPDIR}; make clean)
 | 
				
			||||||
	rm -rf /tmp/${SNAPDIR}/.git 2>/dev/null || true
 | 
						rm -rf /tmp/${SNAPDIR}/.git 2>/dev/null || true
 | 
				
			||||||
	tar -cvjpf ${SNAPFILE} -C /tmp ${SNAPDIR}
 | 
						tar -cvzpf ${SNAPFILE} -C /tmp ${SNAPDIR}
 | 
				
			||||||
	rm -rf /tmp/${SNAPDIR}
 | 
						rm -rf /tmp/${SNAPDIR}
 | 
				
			||||||
	ls -l ${SNAPFILE}
 | 
						ls -l ${SNAPFILE}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,5 +11,5 @@
 | 
				
			|||||||
SFX=		.GNU.in
 | 
					SFX=		.GNU.in
 | 
				
			||||||
PKG_PREFIX?=	/usr
 | 
					PKG_PREFIX?=	/usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
 | 
					CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
 | 
				
			||||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
					LIBDL=		-Wl,-Bdynamic -ldl
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
SFX=		.Linux.in
 | 
					SFX=		.Linux.in
 | 
				
			||||||
PKG_PREFIX?=	/usr
 | 
					PKG_PREFIX?=	/usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS+=	-D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
 | 
					CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
 | 
				
			||||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
					LIBDL=		-Wl,-Bdynamic -ldl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq (${MKSELINUX},yes)
 | 
					ifeq (${MKSELINUX},yes)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,6 +59,9 @@ MANPREFIX?=		${UPREFIX}/share
 | 
				
			|||||||
MANDIR?=		${MANPREFIX}/man
 | 
					MANDIR?=		${MANPREFIX}/man
 | 
				
			||||||
MANMODE?=		0444
 | 
					MANMODE?=		0444
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DATADIR?=		${UPREFIX}/share/openrc
 | 
				
			||||||
 | 
					DATAMODE?=		0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DOCDIR?=		${UPREFIX}/share/doc
 | 
					DOCDIR?=		${UPREFIX}/share/doc
 | 
				
			||||||
DOCMODE?=		0644
 | 
					DOCMODE?=		0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										41
									
								
								runit-guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								runit-guide.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					# Using runit with OpenRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Beginning with OpenRC-0.21, we support using runit [1] in place of
 | 
				
			||||||
 | 
					start-stop-daemon for monitoring and restarting daemons.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Setup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Documenting runit in detail is beyond the scope of this guide. It will
 | 
				
			||||||
 | 
					document how to set up OpenRC services to communicate with runit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Use Default start, stop and status functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you write your own start, stop and status functions in your service
 | 
				
			||||||
 | 
					script, none of this will work. You must allow OpenRC to use the default
 | 
				
			||||||
 | 
					functions.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Dependencies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All OpenRC service scripts that want their daemons monitored by runit
 | 
				
			||||||
 | 
					should have the following line added to their dependencies to make sure
 | 
				
			||||||
 | 
					the runit scan directory is being monitored.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					need runsvdir
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Variable Settings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The most important setting is the supervisor variable. At the top of
 | 
				
			||||||
 | 
					your service script, you should set this variable as follows:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					supervisor=runit
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The second variable you need is runit_service. This is the path to the
 | 
				
			||||||
 | 
					runit service you wish to control via OpenRC. The default is
 | 
				
			||||||
 | 
					/etc/sv/${RC_SVCNAME}. This means that for an OpenRC service
 | 
				
			||||||
 | 
					/etc/init.d/foo, you will need to create the same runit service in
 | 
				
			||||||
 | 
					/etc/sv/foo.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is very early support, so feel free to file bugs if you have
 | 
				
			||||||
 | 
					issues.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[1] http://www.smarden.org/runit
 | 
				
			||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
include ../mk/net.mk
 | 
					include ../mk/net.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BOOT=		bootmisc fsck hostname localmount loopback \
 | 
					BOOT=		bootmisc fsck hostname localmount loopback \
 | 
				
			||||||
		root swap swapfiles sysctl urandom ${BOOT-${OS}}
 | 
							root swap sysctl urandom ${BOOT-${OS}}
 | 
				
			||||||
DEFAULT=	local netmount
 | 
					DEFAULT=	local netmount
 | 
				
			||||||
NONETWORK=	local
 | 
					NONETWORK=	local
 | 
				
			||||||
SHUTDOWN=	savecache ${SHUTDOWN-${OS}}
 | 
					SHUTDOWN=	savecache ${SHUTDOWN-${OS}}
 | 
				
			||||||
@@ -32,14 +32,13 @@ SYSINIT-${OS}=
 | 
				
			|||||||
BOOT-BSD=	hostid newsyslog savecore syslogd swap-blk
 | 
					BOOT-BSD=	hostid newsyslog savecore syslogd swap-blk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generic BSD stuff
 | 
					# Generic BSD stuff
 | 
				
			||||||
BOOT-FreeBSD+=	hostid newsyslog savecore syslogd
 | 
					BOOT-FreeBSD+=	hostid modules newsyslog savecore syslogd
 | 
				
			||||||
# FreeBSD specific stuff
 | 
					# FreeBSD specific stuff
 | 
				
			||||||
BOOT-FreeBSD+=	adjkerntz dumpon syscons
 | 
					BOOT-FreeBSD+=	adjkerntz dumpon syscons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs termencoding \
 | 
					BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs termencoding
 | 
				
			||||||
	tmpfiles.setup
 | 
					 | 
				
			||||||
SHUTDOWN-Linux=	killprocs mount-ro
 | 
					SHUTDOWN-Linux=	killprocs mount-ro
 | 
				
			||||||
SYSINIT-Linux=	devfs dmesg sysfs tmpfiles.dev
 | 
					SYSINIT-Linux=	devfs dmesg sysfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generic BSD stuff
 | 
					# Generic BSD stuff
 | 
				
			||||||
BOOT-NetBSD+=	hostid newsyslog savecore syslogd
 | 
					BOOT-NetBSD+=	hostid newsyslog savecore syslogd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
# Using S6 with OpenRC
 | 
					# Using S6 with OpenRC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Beginning with OpenRC-0.16, we support using the s6 supervision suite
 | 
					Beginning with OpenRC-0.16, we support using the s6 supervision suite
 | 
				
			||||||
from Skarmet Software in place of start-stop-daemon for monitoring
 | 
					from Skarnet Software in place of start-stop-daemon for monitoring
 | 
				
			||||||
daemons [1].
 | 
					daemons [1].
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Setup
 | 
					## Setup
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ endif
 | 
				
			|||||||
_installafter:
 | 
					_installafter:
 | 
				
			||||||
ifeq (${OS},Linux)
 | 
					ifeq (${OS},Linux)
 | 
				
			||||||
	${INSTALL} -d ${DESTDIR}${SBINDIR}
 | 
						${INSTALL} -d ${DESTDIR}${SBINDIR}
 | 
				
			||||||
	ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
 | 
						ln -sf ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include ${MK}/scripts.mk
 | 
					include ${MK}/scripts.mk
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -6,6 +6,5 @@ cgroup-release-agent.sh
 | 
				
			|||||||
init.sh
 | 
					init.sh
 | 
				
			||||||
init-early.sh
 | 
					init-early.sh
 | 
				
			||||||
rc-cgroup.sh
 | 
					rc-cgroup.sh
 | 
				
			||||||
tmpfiles.sh
 | 
					 | 
				
			||||||
migrate-to-run.sh
 | 
					migrate-to-run.sh
 | 
				
			||||||
binfmt.sh
 | 
					binfmt.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
DIR=	${LIBEXECDIR}/sh
 | 
					DIR=	${LIBEXECDIR}/sh
 | 
				
			||||||
SRCS=	init.sh.in functions.sh.in gendepends.sh.in \
 | 
					SRCS=	init.sh.in functions.sh.in gendepends.sh.in \
 | 
				
			||||||
	openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}}
 | 
						openrc-run.sh.in rc-functions.sh.in ${SRCS-${OS}}
 | 
				
			||||||
INC=	functions.sh rc-mount.sh rc-functions.sh s6.sh start-stop-daemon.sh \
 | 
					INC=	rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \
 | 
				
			||||||
		supervise-daemon.sh
 | 
							start-stop-daemon.sh supervise-daemon.sh
 | 
				
			||||||
BIN=	gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}}
 | 
					BIN=	gendepends.sh init.sh openrc-run.sh ${BIN-${OS}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INSTALLAFTER=	_installafter
 | 
					INSTALLAFTER=	_installafter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -74,11 +74,22 @@ do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		# Only generate dependencies for OpenRC scripts
 | 
							# Only generate dependencies for OpenRC scripts
 | 
				
			||||||
		read one two three <"$RC_SERVICE"
 | 
							read one two three <"$RC_SERVICE"
 | 
				
			||||||
		[ "$one" = "#!@SBINDIR@/runscript" ] || \
 | 
							case "$one" in
 | 
				
			||||||
		[ "$one" = "#!@SBINDIR@/openrc-run" ] || \
 | 
								\#*/openrc-run) ;;
 | 
				
			||||||
		[ "$one" = "#!" -a "$two" = "@SBINDIR@/runscript" ] || \
 | 
								\#*/runscript) ;;
 | 
				
			||||||
		[ "$one" = "#!" -a "$two" = "@SBINDIR@/openrc-run" ] || \
 | 
								\#!)
 | 
				
			||||||
			continue
 | 
									case "$two" in
 | 
				
			||||||
 | 
										*/openrc-run) ;;
 | 
				
			||||||
 | 
										*/runscript) ;;
 | 
				
			||||||
 | 
										*)
 | 
				
			||||||
 | 
											continue
 | 
				
			||||||
 | 
											;;
 | 
				
			||||||
 | 
									esac
 | 
				
			||||||
 | 
									;;
 | 
				
			||||||
 | 
								*)
 | 
				
			||||||
 | 
									continue
 | 
				
			||||||
 | 
									;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
		unset one two three
 | 
							unset one two three
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME
 | 
							RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,7 +57,7 @@ case "$(openrc --sys)" in
 | 
				
			|||||||
esac
 | 
					esac
 | 
				
			||||||
retval=$?
 | 
					retval=$?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
 | 
					if [ -e "$RC_LIBEXECDIR"/cache/softlevel ]; then
 | 
				
			||||||
	cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
						cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ ebegin "Creating $RC_SVCDIR"
 | 
				
			|||||||
mkdir -p $RC_SVCDIR
 | 
					mkdir -p $RC_SVCDIR
 | 
				
			||||||
eend $?
 | 
					eend $?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
 | 
					if [ -e "$RC_LIBEXECDIR"/cache/softlevel ]; then
 | 
				
			||||||
    cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
					    cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ ebegin "Creating $RC_SVCDIR"
 | 
				
			|||||||
mkdir -p $RC_SVCDIR
 | 
					mkdir -p $RC_SVCDIR
 | 
				
			||||||
eend $?
 | 
					eend $?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
 | 
					if [ -e "$RC_LIBEXECDIR"/cache/softlevel ]; then
 | 
				
			||||||
    cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
					    cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,16 @@ if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then
 | 
				
			|||||||
	done
 | 
						done
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# check for md5sum, and probably /usr too
 | 
				
			||||||
 | 
					if command -v md5sum >/dev/null; then
 | 
				
			||||||
 | 
						got_md5sum=true
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
						eerror "md5sum is missing, which suggests /usr is not mounted"
 | 
				
			||||||
 | 
						eerror "If you have separate /usr, it must be mounted by initramfs"
 | 
				
			||||||
 | 
						eerror "If not, you should check coreutils is installed correctly"
 | 
				
			||||||
 | 
						got_md5sum=false
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# By default VServer already has /proc mounted, but OpenVZ does not!
 | 
					# By default VServer already has /proc mounted, but OpenVZ does not!
 | 
				
			||||||
# However, some of our users have an old proc image in /proc
 | 
					# However, some of our users have an old proc image in /proc
 | 
				
			||||||
# NFC how they managed that, but the end result means we have to test if
 | 
					# NFC how they managed that, but the end result means we have to test if
 | 
				
			||||||
@@ -21,9 +31,12 @@ fi
 | 
				
			|||||||
mountproc=true
 | 
					mountproc=true
 | 
				
			||||||
f=/proc/self/environ
 | 
					f=/proc/self/environ
 | 
				
			||||||
if [ -e $f ]; then
 | 
					if [ -e $f ]; then
 | 
				
			||||||
	if [ "$(VAR=a cat $f)" = "$(VAR=b cat $f)" ]; then
 | 
						if $got_md5sum && [ "$(VAR=a md5sum $f)" = "$(VAR=b md5sum $f)" ]; then
 | 
				
			||||||
		eerror "You have cruft in /proc that should be deleted"
 | 
							eerror "You have cruft in /proc that should be deleted"
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
 | 
							# If they don't have md5sum, this will fail in pretty ways if
 | 
				
			||||||
 | 
							# /proc isn't really mounted.  Oh well, their system is busted
 | 
				
			||||||
 | 
							# anyway, and they get to keep the pieces.
 | 
				
			||||||
		einfo "/proc is already mounted"
 | 
							einfo "/proc is already mounted"
 | 
				
			||||||
		mountproc=false
 | 
							mountproc=false
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
@@ -31,11 +44,9 @@ fi
 | 
				
			|||||||
unset f
 | 
					unset f
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if $mountproc; then
 | 
					if $mountproc; then
 | 
				
			||||||
	procfs="proc"
 | 
					 | 
				
			||||||
	[ "$RC_UNAME" = "GNU/kFreeBSD" ] && proc="linprocfs"
 | 
					 | 
				
			||||||
	ebegin "Mounting /proc"
 | 
						ebegin "Mounting /proc"
 | 
				
			||||||
	if ! fstabinfo --mount /proc; then
 | 
						if ! fstabinfo --mount /proc; then
 | 
				
			||||||
		mount -n -t "$procfs" -o noexec,nosuid,nodev proc /proc
 | 
							mount -n -t proc -o noexec,nosuid,nodev proc /proc
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	eend $?
 | 
						eend $?
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
@@ -85,7 +96,7 @@ if grep -Eq "[[:space:]]+xenfs$" /proc/filesystems; then
 | 
				
			|||||||
	eend $?
 | 
						eend $?
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ -e "$RC_LIBEXECDIR"/cache/deptree ]; then
 | 
					if [ -e "$RC_LIBEXECDIR"/cache/softlevel ]; then
 | 
				
			||||||
	cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
						cp -p "$RC_LIBEXECDIR"/cache/* "$RC_SVCDIR" 2>/dev/null
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -146,13 +146,13 @@ _status()
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Template start / stop / status functions
 | 
					 | 
				
			||||||
# These functions select the appropriate function to call from the
 | 
					# These functions select the appropriate function to call from the
 | 
				
			||||||
# supervisor modules
 | 
					# supervisor modules
 | 
				
			||||||
start()
 | 
					default_start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local func=ssd_start
 | 
						local func=ssd_start
 | 
				
			||||||
	case "$supervisor" in
 | 
						case "$supervisor" in
 | 
				
			||||||
 | 
							runit) func=runit_start ;;
 | 
				
			||||||
		s6) func=s6_start ;;
 | 
							s6) func=s6_start ;;
 | 
				
			||||||
		supervise-daemon) func=supervise_start ;;
 | 
							supervise-daemon) func=supervise_start ;;
 | 
				
			||||||
		?*)
 | 
							?*)
 | 
				
			||||||
@@ -162,10 +162,11 @@ start()
 | 
				
			|||||||
	$func
 | 
						$func
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
stop()
 | 
					default_stop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local func=ssd_stop
 | 
						local func=ssd_stop
 | 
				
			||||||
	case "$supervisor" in
 | 
						case "$supervisor" in
 | 
				
			||||||
 | 
							runit) func=runit_stop ;;
 | 
				
			||||||
		s6) func=s6_stop ;;
 | 
							s6) func=s6_stop ;;
 | 
				
			||||||
		supervise-daemon) func=supervise_stop ;;
 | 
							supervise-daemon) func=supervise_stop ;;
 | 
				
			||||||
		?*)
 | 
							?*)
 | 
				
			||||||
@@ -175,10 +176,11 @@ stop()
 | 
				
			|||||||
	$func
 | 
						$func
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
status()
 | 
					default_status()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local func=ssd_status
 | 
						local func=ssd_status
 | 
				
			||||||
	case "$supervisor" in
 | 
						case "$supervisor" in
 | 
				
			||||||
 | 
							runit) func=runit_status ;;
 | 
				
			||||||
		s6) func=s6_status ;;
 | 
							s6) func=s6_status ;;
 | 
				
			||||||
		supervise-daemon) func=supervise_status ;;
 | 
							supervise-daemon) func=supervise_status ;;
 | 
				
			||||||
		?*)
 | 
							?*)
 | 
				
			||||||
@@ -188,8 +190,37 @@ status()
 | 
				
			|||||||
	$func
 | 
						$func
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Template start / stop / status functions
 | 
				
			||||||
 | 
					# package init scripts may override these, but the bodies are as minimal as
 | 
				
			||||||
 | 
					# possible, so that the init scripts can creatively wrap default_*
 | 
				
			||||||
 | 
					# functions.
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						default_start
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stop()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						default_stop
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					status()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						default_status
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Start debug output
 | 
				
			||||||
yesno $RC_DEBUG && set -x
 | 
					yesno $RC_DEBUG && set -x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Load configuration settings. First the global ones, then any
 | 
				
			||||||
 | 
					# service-specific settings.
 | 
				
			||||||
 | 
					sourcex -e "@SYSCONFDIR@/rc.conf"
 | 
				
			||||||
 | 
					if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then
 | 
				
			||||||
 | 
						for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do
 | 
				
			||||||
 | 
							sourcex -e "$_f"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_conf_d=${RC_SERVICE%/*}/../conf.d
 | 
					_conf_d=${RC_SERVICE%/*}/../conf.d
 | 
				
			||||||
# If we're net.eth0 or openvpn.work then load net or openvpn config
 | 
					# If we're net.eth0 or openvpn.work then load net or openvpn config
 | 
				
			||||||
_c=${RC_SVCNAME%%.*}
 | 
					_c=${RC_SVCNAME%%.*}
 | 
				
			||||||
@@ -206,16 +237,8 @@ if ! sourcex -e "$_conf_d/$RC_SVCNAME.$RC_RUNLEVEL"; then
 | 
				
			|||||||
fi
 | 
					fi
 | 
				
			||||||
unset _conf_d
 | 
					unset _conf_d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Load any system overrides
 | 
					 | 
				
			||||||
sourcex -e "@SYSCONFDIR@/rc.conf"
 | 
					 | 
				
			||||||
if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then
 | 
					 | 
				
			||||||
	for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do
 | 
					 | 
				
			||||||
		sourcex -e "$_f"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# load service supervisor functions
 | 
					# load service supervisor functions
 | 
				
			||||||
 | 
					sourcex "@LIBEXECDIR@/sh/runit.sh"
 | 
				
			||||||
sourcex "@LIBEXECDIR@/sh/s6.sh"
 | 
					sourcex "@LIBEXECDIR@/sh/s6.sh"
 | 
				
			||||||
sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
 | 
					sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh"
 | 
				
			||||||
sourcex "@LIBEXECDIR@/sh/supervise-daemon.sh"
 | 
					sourcex "@LIBEXECDIR@/sh/supervise-daemon.sh"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ cgroup_set_values()
 | 
				
			|||||||
	while [ -n "$1" -a "$controller" != "cpuacct" ]; do
 | 
						while [ -n "$1" -a "$controller" != "cpuacct" ]; do
 | 
				
			||||||
		case "$1" in
 | 
							case "$1" in
 | 
				
			||||||
			$controller.*)
 | 
								$controller.*)
 | 
				
			||||||
				if [ -n "$name" -a -f "$cgroup/$name" -a -n "$val" ]; then
 | 
									if [ -n "$name" -a -w "$cgroup/$name" -a -n "$val" ]; then
 | 
				
			||||||
					veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val"
 | 
										veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val"
 | 
				
			||||||
					printf "%s" "$val" > "$cgroup/$name"
 | 
										printf "%s" "$val" > "$cgroup/$name"
 | 
				
			||||||
				fi
 | 
									fi
 | 
				
			||||||
@@ -68,12 +68,12 @@ cgroup_set_values()
 | 
				
			|||||||
		esac
 | 
							esac
 | 
				
			||||||
		shift
 | 
							shift
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	if [ -n "$name" -a -f "$cgroup/$name" -a -n "$val" ]; then
 | 
						if [ -n "$name" -a -w "$cgroup/$name" -a -n "$val" ]; then
 | 
				
			||||||
		veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val"
 | 
							veinfo "$RC_SVCNAME: Setting $cgroup/$name to $val"
 | 
				
			||||||
		printf "%s" "$val" > "$cgroup/$name"
 | 
							printf "%s" "$val" > "$cgroup/$name"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if [ -f "$cgroup/tasks" ]; then
 | 
						if [ -w "$cgroup/tasks" ]; then
 | 
				
			||||||
		veinfo "$RC_SVCNAME: adding to $cgroup/tasks"
 | 
							veinfo "$RC_SVCNAME: adding to $cgroup/tasks"
 | 
				
			||||||
		printf "%d" 0 > "$cgroup/tasks"
 | 
							printf "%d" 0 > "$cgroup/tasks"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
@@ -88,14 +88,14 @@ cgroup_add_service()
 | 
				
			|||||||
    # cgroups. But may lead to a problems where that inheriting
 | 
					    # cgroups. But may lead to a problems where that inheriting
 | 
				
			||||||
    # is needed.
 | 
					    # is needed.
 | 
				
			||||||
	for d in /sys/fs/cgroup/* ; do
 | 
						for d in /sys/fs/cgroup/* ; do
 | 
				
			||||||
		[ -f "${d}"/tasks ] && printf "%d" 0 > "${d}"/tasks
 | 
							[ -w "${d}"/tasks ] && printf "%d" 0 > "${d}"/tasks
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	openrc_cgroup=/sys/fs/cgroup/openrc
 | 
						openrc_cgroup=/sys/fs/cgroup/openrc
 | 
				
			||||||
	if [ -d "$openrc_cgroup" ]; then
 | 
						if [ -d "$openrc_cgroup" ]; then
 | 
				
			||||||
		cgroup="$openrc_cgroup/$RC_SVCNAME"
 | 
							cgroup="$openrc_cgroup/$RC_SVCNAME"
 | 
				
			||||||
		mkdir -p "$cgroup"
 | 
							mkdir -p "$cgroup"
 | 
				
			||||||
		[ -f "$cgroup/tasks" ] && printf "%d" 0 > "$cgroup/tasks"
 | 
							[ -w "$cgroup/tasks" ] && printf "%d" 0 > "$cgroup/tasks"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,6 +85,40 @@ get_bootparam()
 | 
				
			|||||||
	return 1
 | 
						return 1
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_bootparam_value()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local match="$1" which_value="$2" sep="$3" result value
 | 
				
			||||||
 | 
						if [ -n "$match" -a -r /proc/cmdline ]; then
 | 
				
			||||||
 | 
							set -- $(cat /proc/cmdline)
 | 
				
			||||||
 | 
							while [ -n "$1" ]; do
 | 
				
			||||||
 | 
								case "$1" in
 | 
				
			||||||
 | 
									$match=*)
 | 
				
			||||||
 | 
										value="${1##*=}"
 | 
				
			||||||
 | 
										case "$which_value" in
 | 
				
			||||||
 | 
											all)
 | 
				
			||||||
 | 
												[ -z "$sep" ] && sep=' '
 | 
				
			||||||
 | 
												if [ -z "$result" ]; then
 | 
				
			||||||
 | 
													result="$value"
 | 
				
			||||||
 | 
												else
 | 
				
			||||||
 | 
													result="${result}${sep}${value}"
 | 
				
			||||||
 | 
												fi
 | 
				
			||||||
 | 
												;;
 | 
				
			||||||
 | 
											last)
 | 
				
			||||||
 | 
												result="$value"
 | 
				
			||||||
 | 
												;;
 | 
				
			||||||
 | 
											*)
 | 
				
			||||||
 | 
												result="$value"
 | 
				
			||||||
 | 
												break
 | 
				
			||||||
 | 
												;;
 | 
				
			||||||
 | 
										esac
 | 
				
			||||||
 | 
										;;
 | 
				
			||||||
 | 
								esac
 | 
				
			||||||
 | 
								shift
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						echo $result
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Called from openrc-run.sh or gendepends.sh
 | 
					# Called from openrc-run.sh or gendepends.sh
 | 
				
			||||||
_get_containers() {
 | 
					_get_containers() {
 | 
				
			||||||
	local c
 | 
						local c
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										52
									
								
								sh/runit.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								sh/runit.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					# Copyright (c) 2016 The OpenRC Authors.
 | 
				
			||||||
 | 
					# See the Authors file at the top-level directory of this distribution and
 | 
				
			||||||
 | 
					# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					#    except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					# Released under the 2-clause BSD license.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runit_start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local service_path service_link
 | 
				
			||||||
 | 
						service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
 | 
				
			||||||
 | 
						if [ ! -d "${service_path}" ]; then
 | 
				
			||||||
 | 
							eerror "Runit service ${service_path} not found"
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						service_link="${RC_SVCDIR}/sv/${service_path##*/}"
 | 
				
			||||||
 | 
						ebegin "Starting ${name:-$RC_SVCNAME}"
 | 
				
			||||||
 | 
						ln -snf "${service_path}" "${service_link}"
 | 
				
			||||||
 | 
						sv start "${service_link}" > /dev/null 2>&1
 | 
				
			||||||
 | 
						eend $? "Failed to start ${name:-$RC_SVCNAME}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runit_stop()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local service_path service_link
 | 
				
			||||||
 | 
						service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
 | 
				
			||||||
 | 
						if [ ! -d "${service_path}" ]; then
 | 
				
			||||||
 | 
							eerror "Runit service ${service_path} not found"
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						service_link="${RC_SVCDIR}/sv/${service_path##*/}"
 | 
				
			||||||
 | 
						ebegin "Stopping ${name:-$RC_SVCNAME}"
 | 
				
			||||||
 | 
						sv stop "${service_link}" > /dev/null 2>&1 &&
 | 
				
			||||||
 | 
						rm "${service_link}"
 | 
				
			||||||
 | 
						eend $? "Failed to stop ${name:-$RC_SVCNAME}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					runit_status()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local service_path service_link
 | 
				
			||||||
 | 
						service_path="${runit_service:-/etc/sv/${RC_SVCNAME}}"
 | 
				
			||||||
 | 
						if [ ! -d "${service_path}" ]; then
 | 
				
			||||||
 | 
							eerror "Runit service ${service_path} not found"
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						service_link="${RC_SVCDIR}/sv/${service_path##*/}"
 | 
				
			||||||
 | 
						sv status "${service_link}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										4
									
								
								sh/s6.sh
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								sh/s6.sh
									
									
									
									
									
								
							@@ -30,7 +30,7 @@ s6_start()
 | 
				
			|||||||
	sleep 1.5
 | 
						sleep 1.5
 | 
				
			||||||
	set -- $(s6-svstat "${s6_service_link}")
 | 
						set -- $(s6-svstat "${s6_service_link}")
 | 
				
			||||||
	[ "$1" = "up" ]
 | 
						[ "$1" = "up" ]
 | 
				
			||||||
	eend $? "Failed to start $RC_SVCNAME"
 | 
						eend $? "Failed to start ${name:-$RC_SVCNAME}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
s6_stop()
 | 
					s6_stop()
 | 
				
			||||||
@@ -44,7 +44,7 @@ s6_stop()
 | 
				
			|||||||
	s6-svc -wD -d -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
 | 
						s6-svc -wD -d -T ${s6_service_timeout_stop:-10000} "${s6_service_link}"
 | 
				
			||||||
	set -- $(s6-svstat "${s6_service_link}")
 | 
						set -- $(s6-svstat "${s6_service_link}")
 | 
				
			||||||
	[ "$1" = "down" ]
 | 
						[ "$1" = "down" ]
 | 
				
			||||||
	eend $? "Failed to stop $RC_SVCNAME"
 | 
						eend $? "Failed to stop ${name:-$RC_SVCNAME}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
s6_status()
 | 
					s6_status()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -38,6 +38,9 @@ ssd_start()
 | 
				
			|||||||
		service_inactive && _inactive=true
 | 
							service_inactive && _inactive=true
 | 
				
			||||||
		mark_service_inactive
 | 
							mark_service_inactive
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
						#the eval call is necessary for cases like:
 | 
				
			||||||
 | 
						# command_args="this \"is a\" test"
 | 
				
			||||||
 | 
						# to work properly.
 | 
				
			||||||
	eval start-stop-daemon --start \
 | 
						eval start-stop-daemon --start \
 | 
				
			||||||
		--exec $command \
 | 
							--exec $command \
 | 
				
			||||||
		${chroot:+--chroot} $chroot \
 | 
							${chroot:+--chroot} $chroot \
 | 
				
			||||||
@@ -46,7 +49,7 @@ ssd_start()
 | 
				
			|||||||
		${command_user+--user} $command_user \
 | 
							${command_user+--user} $command_user \
 | 
				
			||||||
		$_background $start_stop_daemon_args \
 | 
							$_background $start_stop_daemon_args \
 | 
				
			||||||
		-- $command_args $command_args_background
 | 
							-- $command_args $command_args_background
 | 
				
			||||||
	if eend $? "Failed to start $RC_SVCNAME"; then
 | 
						if eend $? "Failed to start ${name:-$RC_SVCNAME}"; then
 | 
				
			||||||
		service_set_value "command" "${command}"
 | 
							service_set_value "command" "${command}"
 | 
				
			||||||
		[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
 | 
							[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
 | 
				
			||||||
		[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
 | 
							[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
 | 
				
			||||||
@@ -63,6 +66,7 @@ ssd_start()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ssd_stop()
 | 
					ssd_stop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						local _progress=
 | 
				
			||||||
	local startcommand="$(service_get_value "command")"
 | 
						local startcommand="$(service_get_value "command")"
 | 
				
			||||||
	local startchroot="$(service_get_value "chroot")"
 | 
						local startchroot="$(service_get_value "chroot")"
 | 
				
			||||||
	local startpidfile="$(service_get_value "pidfile")"
 | 
						local startpidfile="$(service_get_value "pidfile")"
 | 
				
			||||||
@@ -72,15 +76,17 @@ ssd_stop()
 | 
				
			|||||||
	pidfile="${startpidfile:-$pidfile}"
 | 
						pidfile="${startpidfile:-$pidfile}"
 | 
				
			||||||
	procname="${startprocname:-$procname}"
 | 
						procname="${startprocname:-$procname}"
 | 
				
			||||||
	[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
 | 
						[ -n "$command" -o -n "$procname" -o -n "$pidfile" ] || return 0
 | 
				
			||||||
 | 
						yesno "${command_progress}" && _progress=--progress
 | 
				
			||||||
	ebegin "Stopping ${name:-$RC_SVCNAME}"
 | 
						ebegin "Stopping ${name:-$RC_SVCNAME}"
 | 
				
			||||||
	start-stop-daemon --stop \
 | 
						start-stop-daemon --stop \
 | 
				
			||||||
		${retry:+--retry} $retry \
 | 
							${retry:+--retry} $retry \
 | 
				
			||||||
		${command:+--exec} $command \
 | 
							${command:+--exec} $command \
 | 
				
			||||||
		${procname:+--name} $procname \
 | 
							${procname:+--name} $procname \
 | 
				
			||||||
		${pidfile:+--pidfile} $chroot$pidfile \
 | 
							${pidfile:+--pidfile} $chroot$pidfile \
 | 
				
			||||||
		${stopsig:+--signal} $stopsig
 | 
							${stopsig:+--signal} $stopsig \
 | 
				
			||||||
 | 
							${_progress}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eend $? "Failed to stop $RC_SVCNAME"
 | 
						eend $? "Failed to stop ${name:-$RC_SVCNAME}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ssd_status()
 | 
					ssd_status()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,9 @@ supervise_start()
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ebegin "Starting ${name:-$RC_SVCNAME}"
 | 
						ebegin "Starting ${name:-$RC_SVCNAME}"
 | 
				
			||||||
 | 
						# The eval call is necessary for cases like:
 | 
				
			||||||
 | 
						# command_args="this \"is a\" test"
 | 
				
			||||||
 | 
						# to work properly.
 | 
				
			||||||
	eval supervise-daemon --start \
 | 
						eval supervise-daemon --start \
 | 
				
			||||||
		${chroot:+--chroot} $chroot \
 | 
							${chroot:+--chroot} $chroot \
 | 
				
			||||||
		${pidfile:+--pidfile} $pidfile \
 | 
							${pidfile:+--pidfile} $pidfile \
 | 
				
			||||||
@@ -31,7 +34,7 @@ supervise_start()
 | 
				
			|||||||
		[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
 | 
							[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}"
 | 
				
			||||||
		[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
 | 
							[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	eend $rc "failed to start $RC_SVCNAME"
 | 
						eend $rc "failed to start ${name:-$RC_SVCNAME}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
supervise_stop()
 | 
					supervise_stop()
 | 
				
			||||||
@@ -46,7 +49,7 @@ supervise_stop()
 | 
				
			|||||||
		${pidfile:+--pidfile} $chroot$pidfile \
 | 
							${pidfile:+--pidfile} $chroot$pidfile \
 | 
				
			||||||
		${stopsig:+--signal} $stopsig
 | 
							${stopsig:+--signal} $stopsig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eend $? "Failed to stop $RC_SVCNAME"
 | 
						eend $? "Failed to stop ${name:-$RC_SVCNAME}"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
supervise_status()
 | 
					supervise_status()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,395 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
# This is a reimplementation of the systemd tmpfiles.d code
 | 
					 | 
				
			||||||
# Control creation, deletion, and cleaning of volatile and temporary files
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2012 Gentoo Foundation
 | 
					 | 
				
			||||||
# Released under the 2-clause BSD license.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This instance is a pure-POSIX sh version, written by Robin H Johnson
 | 
					 | 
				
			||||||
# <robbat2@gentoo.org>, based on the Arch Linux version as of 2012/01/01:
 | 
					 | 
				
			||||||
# http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# See the tmpfiles.d manpage as well:
 | 
					 | 
				
			||||||
# http://0pointer.de/public/systemd-man/tmpfiles.d.html
 | 
					 | 
				
			||||||
# This script should match the manpage as of 2012/03/12
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DRYRUN=0
 | 
					 | 
				
			||||||
CHECKPATH="@LIBEXECDIR@/bin/checkpath"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
checkprefix() {
 | 
					 | 
				
			||||||
	n=$1
 | 
					 | 
				
			||||||
	shift
 | 
					 | 
				
			||||||
	for x in $@; do
 | 
					 | 
				
			||||||
		case $n in
 | 
					 | 
				
			||||||
			${x}*) return 0 ;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	return 1
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
warninvalid() {
 | 
					 | 
				
			||||||
	printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE"
 | 
					 | 
				
			||||||
	error=$(( error+1 ))
 | 
					 | 
				
			||||||
} >&2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dryrun_or_real() {
 | 
					 | 
				
			||||||
	local dryrun=
 | 
					 | 
				
			||||||
	[ $DRYRUN -eq 1 ] && dryrun=echo
 | 
					 | 
				
			||||||
	$dryrun "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
relabel() {
 | 
					 | 
				
			||||||
	local path
 | 
					 | 
				
			||||||
	local paths=$1 mode=$2 uid=$3 gid=$4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for path in ${paths}; do
 | 
					 | 
				
			||||||
		if [ -e "$path" ]; then
 | 
					 | 
				
			||||||
			[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path"
 | 
					 | 
				
			||||||
			[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path"
 | 
					 | 
				
			||||||
			[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path"
 | 
					 | 
				
			||||||
			[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path"
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
splitpath() {
 | 
					 | 
				
			||||||
    local path=$1
 | 
					 | 
				
			||||||
    while [ -n "$path" ]; do
 | 
					 | 
				
			||||||
        echo $path
 | 
					 | 
				
			||||||
        path=${path%/*}
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_restorecon() {
 | 
					 | 
				
			||||||
    local path=$1
 | 
					 | 
				
			||||||
    if [ -x /sbin/restorecon ]; then
 | 
					 | 
				
			||||||
        dryrun_or_real restorecon -F $(splitpath "$path")
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_b() {
 | 
					 | 
				
			||||||
	# Create a block device node if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
	if [ ! -e "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real mknod -m $mode $path b ${arg%:*} ${arg#*:}
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
		dryrun_or_real chown $uid:$gid $path
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_c() {
 | 
					 | 
				
			||||||
	# Create a character device node if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
	if [ ! -e "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real mknod -m $mode $path c ${arg%:*} ${arg#*:}
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
		dryrun_or_real chown $uid:$gid $path
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_C() {
 | 
					 | 
				
			||||||
	# recursively copy a file or directory
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
	if [ ! -e "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real cp -r "$arg" "$path"
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
		[ $uid != '-' ] && dryrun_or_real chown "$uid" "$path"
 | 
					 | 
				
			||||||
		[ $gid != '-' ] && dryrun_or_real chgrp "$gid" "$path"
 | 
					 | 
				
			||||||
		[ $mode != '-' ] && dryrun_or_real chmod "$mode" "$path"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_f() {
 | 
					 | 
				
			||||||
	# Create a file if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [ ! -e "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real $CHECKPATH -fq -m "$mode" -o "$uid:$gid" "$path"
 | 
					 | 
				
			||||||
		[ -z "$arg" ] || _w "$@"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_F() {
 | 
					 | 
				
			||||||
	# Create or truncate a file
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	dryrun_or_real $CHECKPATH -Fq -m "$mode" -o "$uid:$gid" "$path"
 | 
					 | 
				
			||||||
	[ -z "$arg" ] || _w "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_d() {
 | 
					 | 
				
			||||||
	# Create a directory if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [ ! -d "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real mkdir -p "$path" 2>/dev/null
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
		dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_D() {
 | 
					 | 
				
			||||||
	# Create or empty a directory
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} +
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [ $CREATE -gt 0 ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real mkdir -p "$path" 2>/dev/null
 | 
					 | 
				
			||||||
		_restorecon "$path"
 | 
					 | 
				
			||||||
		dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_v() {
 | 
					 | 
				
			||||||
	# Create a subvolume if the path does not exist yet and the file system
 | 
					 | 
				
			||||||
	# supports this (btrfs). Otherwise create a normal directory.
 | 
					 | 
				
			||||||
	# TODO: Implement btrfs subvol creation.
 | 
					 | 
				
			||||||
	_d "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_L() {
 | 
					 | 
				
			||||||
	# Create a symlink if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
	[ ! -e "$path" ] && dryrun_or_real ln -s "$arg" "$path"
 | 
					 | 
				
			||||||
	_restorecon "$path"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_p() {
 | 
					 | 
				
			||||||
	# Create a named pipe (FIFO) if it doesn't exist yet
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if [ ! -p "$path" ]; then
 | 
					 | 
				
			||||||
		dryrun_or_real $CHECKPATH -pq -m $mode -o "$uid:$gid" "$path"
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_x() {
 | 
					 | 
				
			||||||
	# Ignore a path during cleaning. Use this type to exclude paths from clean-up as
 | 
					 | 
				
			||||||
	# controlled with the Age parameter. Note that lines of this type do not
 | 
					 | 
				
			||||||
	# influence the effect of r or R lines. Lines of this type accept shell-style
 | 
					 | 
				
			||||||
	# globs in place of of normal path names.
 | 
					 | 
				
			||||||
	:
 | 
					 | 
				
			||||||
	# XXX: we don't implement this
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_X() {
 | 
					 | 
				
			||||||
	# Ignore a path during cleanup. Use this type to prevent path
 | 
					 | 
				
			||||||
	# removal as controled with the age parameter. Note that if path is
 | 
					 | 
				
			||||||
	# a directory, the content of the directory is not excluded from
 | 
					 | 
				
			||||||
	# clean-up, only the directory itself.
 | 
					 | 
				
			||||||
	# Lines of this type accept shell-style globs in place of normal path names.
 | 
					 | 
				
			||||||
	:
 | 
					 | 
				
			||||||
	# XXX: we don't implement this
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_r() {
 | 
					 | 
				
			||||||
	# Remove a file or directory if it exists. This may not be used to remove
 | 
					 | 
				
			||||||
	# non-empty directories, use R for that. Lines of this type accept shell-style
 | 
					 | 
				
			||||||
	# globs in place of normal path names.
 | 
					 | 
				
			||||||
	local path
 | 
					 | 
				
			||||||
	local paths=$1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $REMOVE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for path in ${paths}; do
 | 
					 | 
				
			||||||
		if [ -f "$path" ]; then
 | 
					 | 
				
			||||||
			dryrun_or_real rm -f "$path"
 | 
					 | 
				
			||||||
		elif [ -d "$path" ]; then
 | 
					 | 
				
			||||||
			dryrun_or_real rmdir "$path"
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_R() {
 | 
					 | 
				
			||||||
	# Recursively remove a path and all its subdirectories (if it is a directory).
 | 
					 | 
				
			||||||
	# Lines of this type accept shell-style globs in place of normal path names.
 | 
					 | 
				
			||||||
	local path
 | 
					 | 
				
			||||||
	local paths=$1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	[ $REMOVE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for path in ${paths}; do
 | 
					 | 
				
			||||||
		[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_w() {
 | 
					 | 
				
			||||||
	# Write the argument parameter to a file, if it exists.
 | 
					 | 
				
			||||||
	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6
 | 
					 | 
				
			||||||
	if [ -f "$path" ]; then
 | 
					 | 
				
			||||||
		if [ $DRYRUN -eq 1 ]; then
 | 
					 | 
				
			||||||
			echo "echo \"$arg\" >>\"$path\""
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			echo "$arg" >>"$path"
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_z() {
 | 
					 | 
				
			||||||
	# Set ownership, access mode and relabel security context of a file or
 | 
					 | 
				
			||||||
	# directory if it exists. Lines of this type accept shell-style globs in
 | 
					 | 
				
			||||||
	# place of normal path names.
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	relabel "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
_Z() {
 | 
					 | 
				
			||||||
	# Recursively set ownership, access mode and relabel security context of a
 | 
					 | 
				
			||||||
	# path and all its subdirectories (if it is a directory). Lines of this type
 | 
					 | 
				
			||||||
	# accept shell-style globs in place of normal path names.
 | 
					 | 
				
			||||||
	[ $CREATE -gt 0 ] || return 0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	CHOPTS=-R relabel "$@"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0
 | 
					 | 
				
			||||||
EXCLUDE=
 | 
					 | 
				
			||||||
PREFIX=
 | 
					 | 
				
			||||||
FILE=
 | 
					 | 
				
			||||||
fragments=
 | 
					 | 
				
			||||||
# XXX: The harcoding of /usr/lib/ is an explicit choice by upstream
 | 
					 | 
				
			||||||
tmpfiles_dirs='/usr/lib/tmpfiles.d/ /run/tmpfiles.d/ /etc/tmpfiles.d/'
 | 
					 | 
				
			||||||
tmpfiles_basenames=''
 | 
					 | 
				
			||||||
tmpfiles_d=''
 | 
					 | 
				
			||||||
# Build a list of sorted unique basenames
 | 
					 | 
				
			||||||
# directories declared later in the tmpfiles_d array will override earlier
 | 
					 | 
				
			||||||
# directories, on a per file basename basis.
 | 
					 | 
				
			||||||
# `/etc/tmpfiles.d/foo.conf' supersedes `/usr/lib/tmpfiles.d/foo.conf'.
 | 
					 | 
				
			||||||
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
 | 
					 | 
				
			||||||
for d in ${tmpfiles_dirs} ; do
 | 
					 | 
				
			||||||
	[ -d $d ] && for f in ${d}/*.conf ; do
 | 
					 | 
				
			||||||
		case "${f##*/}" in
 | 
					 | 
				
			||||||
			systemd.conf|systemd-*.conf) continue;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
		[ -f $f ] && tmpfiles_basenames="${tmpfiles_basenames}\n${f##*/}"
 | 
					 | 
				
			||||||
	done # for f in ${d}
 | 
					 | 
				
			||||||
done # for d in ${tmpfiles_dirs}
 | 
					 | 
				
			||||||
tmpfiles_basenames="$(printf "${tmpfiles_basenames}\n" | sort -u )"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
for b in $tmpfiles_basenames ; do
 | 
					 | 
				
			||||||
	real_f=''
 | 
					 | 
				
			||||||
	for d in $tmpfiles_dirs ; do
 | 
					 | 
				
			||||||
		f=${d}/${b}
 | 
					 | 
				
			||||||
		[ -f "${f}" ] && real_f=$f
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	[ -f "${real_f}" ] && tmpfiles_d="${tmpfiles_d} ${real_f}"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while [ $# -gt 0 ]; do
 | 
					 | 
				
			||||||
	case $1 in
 | 
					 | 
				
			||||||
		--boot) BOOT=1 ;;
 | 
					 | 
				
			||||||
		--create) CREATE=1 ;;
 | 
					 | 
				
			||||||
		--remove) REMOVE=1 ;;
 | 
					 | 
				
			||||||
		--clean) CLEAN=1 ;; # TODO: Not implemented
 | 
					 | 
				
			||||||
		--verbose) VERBOSE=1 ;;
 | 
					 | 
				
			||||||
		--dryrun|--dry-run) DRYRUN=1 ;;
 | 
					 | 
				
			||||||
		--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;;
 | 
					 | 
				
			||||||
		--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;;
 | 
					 | 
				
			||||||
	esac
 | 
					 | 
				
			||||||
	shift
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ $(( CLEAN )) -eq 1 ] ; then
 | 
					 | 
				
			||||||
	printf '%s clean mode is not implemented\n' "${0##*/}"
 | 
					 | 
				
			||||||
	exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [ "$CREATE$REMOVE" = '00' ]; then
 | 
					 | 
				
			||||||
	printf 'usage: %s [--exclude-prefix=path] [--prefix=path] [--boot] [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}"
 | 
					 | 
				
			||||||
	exit 1
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
error=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# loop through the gathered fragments, sorted globally by filename.
 | 
					 | 
				
			||||||
# `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf'
 | 
					 | 
				
			||||||
for FILE in $tmpfiles_d ; do
 | 
					 | 
				
			||||||
	LINENUM=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	### FILE FORMAT ###
 | 
					 | 
				
			||||||
	# XXX: We ignore the 'Age' parameter
 | 
					 | 
				
			||||||
	# 1    2              3    4    5    6   7
 | 
					 | 
				
			||||||
	# Cmd  Path           Mode UID  GID  Age Argument
 | 
					 | 
				
			||||||
	# d    /run/user      0755 root root 10d -
 | 
					 | 
				
			||||||
	# Mode, UID, GID, Age, Argument may be omitted!
 | 
					 | 
				
			||||||
	# If Cmd ends with !, the line is only processed if --boot is passed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	# XXX: Upstream says whitespace is NOT permitted in the Path argument.
 | 
					 | 
				
			||||||
	# But IS allowed when globs are expanded for the x/r/R/z/Z types.
 | 
					 | 
				
			||||||
	while read cmd path mode uid gid age arg; do
 | 
					 | 
				
			||||||
		LINENUM=$(( LINENUM+1 ))
 | 
					 | 
				
			||||||
		FORCE=0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		# Unless we have both command and path, skip this line.
 | 
					 | 
				
			||||||
		if [ -z "$cmd" -o -z "$path" ]; then
 | 
					 | 
				
			||||||
			continue
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		case $cmd in
 | 
					 | 
				
			||||||
			\#*) continue ;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		while [ ${#cmd} -gt 1 ]; do
 | 
					 | 
				
			||||||
			case $cmd in
 | 
					 | 
				
			||||||
				*!) cmd=${cmd%!}; [ "$BOOT" -eq "1" ] || continue 2 ;;
 | 
					 | 
				
			||||||
				*+) cmd=${cmd%+}; FORCE=1; ;;
 | 
					 | 
				
			||||||
				*) warninvalid ; continue 2 ;;
 | 
					 | 
				
			||||||
			esac
 | 
					 | 
				
			||||||
		done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		# whine about invalid entries
 | 
					 | 
				
			||||||
		case $cmd in
 | 
					 | 
				
			||||||
			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;;
 | 
					 | 
				
			||||||
			*) warninvalid ; continue ;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		# fall back on defaults when parameters are passed as '-'
 | 
					 | 
				
			||||||
		if [ "$mode" = '-' -o "$mode" = '' ]; then
 | 
					 | 
				
			||||||
			case "$cmd" in
 | 
					 | 
				
			||||||
				p|f|F) mode=0644 ;;
 | 
					 | 
				
			||||||
				d|D|v) mode=0755 ;;
 | 
					 | 
				
			||||||
				C|z|Z|x|r|R|L) ;;
 | 
					 | 
				
			||||||
			esac
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ "$uid" = '-' -o "$uid" = '' ] && uid=0
 | 
					 | 
				
			||||||
		[ "$gid" = '-' -o "$gid" = '' ] && gid=0
 | 
					 | 
				
			||||||
		[ "$age" = '-' -o "$age" = '' ] && age=0
 | 
					 | 
				
			||||||
		[ "$arg" = '-' -o "$arg" = '' ] && arg=''
 | 
					 | 
				
			||||||
		set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ -n "$EXCLUDE" ] && checkprefix $path $EXCLUDE && continue
 | 
					 | 
				
			||||||
		[ -n "$PREFIX" ] && ! checkprefix $path $PREFIX && continue
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if [ $FORCE -gt 0 ]; then
 | 
					 | 
				
			||||||
			case $cmd in
 | 
					 | 
				
			||||||
				p|L|c|b) [ -f "$path" ] && dryrun_or_real rm -f "$path"
 | 
					 | 
				
			||||||
			esac
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@"
 | 
					 | 
				
			||||||
		_$cmd "$@"
 | 
					 | 
				
			||||||
		rc=$?
 | 
					 | 
				
			||||||
		if [ "${DRYRUN}" -eq "0" ]; then
 | 
					 | 
				
			||||||
			[ $rc -ne 0 ] && error=$((error + 1))
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
	done <$FILE
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exit $error
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# vim: set ts=2 sw=2 sts=2 noet ft=sh:
 | 
					 | 
				
			||||||
@@ -3,9 +3,5 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SUBDIR=		test libeinfo librc rc
 | 
					SUBDIR=		test libeinfo librc rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq (${MKTOOLS},yes)
 | 
					 | 
				
			||||||
SUBDIR+= tools
 | 
					 | 
				
			||||||
endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
MK=		../mk
 | 
					MK=		../mk
 | 
				
			||||||
include		${MK}/subdir.mk
 | 
					include		${MK}/subdir.mk
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,6 +71,7 @@ void elog(int, const char * EINFO_RESTRICT, ...) EINFO_PRINTF(2, 3);
 | 
				
			|||||||
 *
 | 
					 *
 | 
				
			||||||
 * The n suffix denotes that no new line should be printed.
 | 
					 * The n suffix denotes that no new line should be printed.
 | 
				
			||||||
 * The v suffix means only print if EINFO_VERBOSE is yes.
 | 
					 * The v suffix means only print if EINFO_VERBOSE is yes.
 | 
				
			||||||
 | 
					 * The x suffix means function will exit() returning failure.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
/*@{*/
 | 
					/*@{*/
 | 
				
			||||||
int einfon(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
 | 
					int einfon(const char * __EINFO_RESTRICT, ...) EINFO_PRINTF(1, 2);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "queue.h"
 | 
					#include "queue.h"
 | 
				
			||||||
#include "librc.h"
 | 
					#include "librc.h"
 | 
				
			||||||
 | 
					#include "helpers.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool
 | 
					bool
 | 
				
			||||||
rc_yesno(const char *value)
 | 
					rc_yesno(const char *value)
 | 
				
			||||||
@@ -118,7 +119,7 @@ rc_getline(char **line, size_t *len, FILE *fp)
 | 
				
			|||||||
librc_hidden_def(rc_getline)
 | 
					librc_hidden_def(rc_getline)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char *
 | 
					char *
 | 
				
			||||||
rc_proc_getent(const char *ent)
 | 
					rc_proc_getent(const char *ent _unused)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
	FILE *fp;
 | 
						FILE *fp;
 | 
				
			||||||
@@ -404,6 +405,12 @@ librc_hidden_def(rc_config_value)
 | 
				
			|||||||
 * each rc_conf_value call */
 | 
					 * each rc_conf_value call */
 | 
				
			||||||
static RC_STRINGLIST *rc_conf = NULL;
 | 
					static RC_STRINGLIST *rc_conf = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					_free_rc_conf(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						rc_stringlist_free(rc_conf);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
char *
 | 
					char *
 | 
				
			||||||
rc_conf_value(const char *setting)
 | 
					rc_conf_value(const char *setting)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -413,17 +420,13 @@ rc_conf_value(const char *setting)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	if (! rc_conf) {
 | 
						if (! rc_conf) {
 | 
				
			||||||
		rc_conf = rc_config_load(RC_CONF);
 | 
							rc_conf = rc_config_load(RC_CONF);
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
		atexit(_free_rc_conf);
 | 
							atexit(_free_rc_conf);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Support old configs. */
 | 
							/* Support old configs. */
 | 
				
			||||||
		if (exists(RC_CONF_OLD)) {
 | 
							if (exists(RC_CONF_OLD)) {
 | 
				
			||||||
			old = rc_config_load(RC_CONF_OLD);
 | 
								old = rc_config_load(RC_CONF_OLD);
 | 
				
			||||||
			TAILQ_CONCAT(rc_conf, old, entries);
 | 
								TAILQ_CONCAT(rc_conf, old, entries);
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
			free(old);
 | 
								free(old);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		rc_conf = rc_config_directory(rc_conf);
 | 
							rc_conf = rc_config_directory(rc_conf);
 | 
				
			||||||
@@ -443,11 +446,3 @@ rc_conf_value(const char *setting)
 | 
				
			|||||||
	return rc_config_value(rc_conf, setting);
 | 
						return rc_config_value(rc_conf, setting);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
librc_hidden_def(rc_conf_value)
 | 
					librc_hidden_def(rc_conf_value)
 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
static void
 | 
					 | 
				
			||||||
_free_rc_conf(void)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	rc_stringlist_free(rc_conf);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,6 +19,7 @@ const char librc_copyright[] = "Copyright (c) 2007-2008 Roy Marples";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#include "queue.h"
 | 
					#include "queue.h"
 | 
				
			||||||
#include "librc.h"
 | 
					#include "librc.h"
 | 
				
			||||||
 | 
					#include <helpers.h>
 | 
				
			||||||
#ifdef __FreeBSD__
 | 
					#ifdef __FreeBSD__
 | 
				
			||||||
#  include <sys/sysctl.h>
 | 
					#  include <sys/sysctl.h>
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
@@ -232,7 +233,7 @@ detect_prefix(const char *systype)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *
 | 
					static const char *
 | 
				
			||||||
detect_container(const char *systype)
 | 
					detect_container(const char *systype _unused)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef __FreeBSD__
 | 
					#ifdef __FreeBSD__
 | 
				
			||||||
	if (systype) {
 | 
						if (systype) {
 | 
				
			||||||
@@ -296,7 +297,7 @@ detect_container(const char *systype)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *
 | 
					static const char *
 | 
				
			||||||
detect_vm(const char *systype)
 | 
					detect_vm(const char *systype _unused)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef __NetBSD__
 | 
					#ifdef __NetBSD__
 | 
				
			||||||
	if (systype) {
 | 
						if (systype) {
 | 
				
			||||||
@@ -367,11 +368,12 @@ rc_parse_service_state(RC_SERVICE state)
 | 
				
			|||||||
 * specified runlevel in dependency order, including the
 | 
					 * specified runlevel in dependency order, including the
 | 
				
			||||||
 * specified runlevel. */
 | 
					 * specified runlevel. */
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list)
 | 
					get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list, RC_STRINGLIST *ancestor_list)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char path[PATH_MAX];
 | 
						char path[PATH_MAX];
 | 
				
			||||||
	RC_STRINGLIST *dirs;
 | 
						RC_STRINGLIST *dirs;
 | 
				
			||||||
	RC_STRING *d, *dn;
 | 
						RC_STRING *d, *parent;
 | 
				
			||||||
 | 
						const char *nextlevel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/*
 | 
						/*
 | 
				
			||||||
	 * If we haven't been passed a runlevel or a level list, or
 | 
						 * If we haven't been passed a runlevel or a level list, or
 | 
				
			||||||
@@ -395,8 +397,27 @@ get_runlevel_chain(const char *runlevel, RC_STRINGLIST *level_list)
 | 
				
			|||||||
	 */
 | 
						 */
 | 
				
			||||||
	snprintf(path, sizeof(path), "%s/%s", RC_RUNLEVELDIR, runlevel);
 | 
						snprintf(path, sizeof(path), "%s/%s", RC_RUNLEVELDIR, runlevel);
 | 
				
			||||||
	dirs = ls_dir(path, LS_DIR);
 | 
						dirs = ls_dir(path, LS_DIR);
 | 
				
			||||||
	TAILQ_FOREACH_SAFE(d, dirs, entries, dn)
 | 
						TAILQ_FOREACH(d, dirs, entries) {
 | 
				
			||||||
		get_runlevel_chain(d->value, level_list);
 | 
							nextlevel = d->value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Check for loop */
 | 
				
			||||||
 | 
							if (rc_stringlist_find(ancestor_list, nextlevel)) {
 | 
				
			||||||
 | 
								fprintf(stderr, "Loop detected in stacked runlevels attempting to enter runlevel %s!\n",
 | 
				
			||||||
 | 
								    nextlevel);
 | 
				
			||||||
 | 
								fprintf(stderr, "Ancestors:\n");
 | 
				
			||||||
 | 
								TAILQ_FOREACH(parent, ancestor_list, entries)
 | 
				
			||||||
 | 
									fprintf(stderr, "\t%s\n", parent->value);
 | 
				
			||||||
 | 
								exit(1);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							/* Add new ancestor */
 | 
				
			||||||
 | 
							rc_stringlist_add(ancestor_list, nextlevel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							get_runlevel_chain(nextlevel, level_list, ancestor_list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							rc_stringlist_delete(ancestor_list, nextlevel);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rc_stringlist_free(dirs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool
 | 
					bool
 | 
				
			||||||
@@ -500,9 +521,12 @@ librc_hidden_def(rc_runlevel_unstack)
 | 
				
			|||||||
RC_STRINGLIST *
 | 
					RC_STRINGLIST *
 | 
				
			||||||
rc_runlevel_stacks(const char *runlevel)
 | 
					rc_runlevel_stacks(const char *runlevel)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	RC_STRINGLIST *stack;
 | 
						RC_STRINGLIST *stack, *ancestor_list;
 | 
				
			||||||
	stack = rc_stringlist_new();
 | 
						stack = rc_stringlist_new();
 | 
				
			||||||
	get_runlevel_chain(runlevel, stack);
 | 
						ancestor_list = rc_stringlist_new();
 | 
				
			||||||
 | 
						rc_stringlist_add(ancestor_list, runlevel);
 | 
				
			||||||
 | 
						get_runlevel_chain(runlevel, stack, ancestor_list);
 | 
				
			||||||
 | 
						rc_stringlist_free(ancestor_list);
 | 
				
			||||||
	return stack;
 | 
						return stack;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
librc_hidden_def(rc_runlevel_stacks)
 | 
					librc_hidden_def(rc_runlevel_stacks)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	bool ok = false;
 | 
						bool ok = false;
 | 
				
			||||||
	char *service;
 | 
						char *service;
 | 
				
			||||||
	char *exec;
 | 
						char *exec;
 | 
				
			||||||
	int idx;
 | 
						int idx = 0;
 | 
				
			||||||
	RC_SERVICE state, bit;
 | 
						RC_SERVICE state, bit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	applet = basename_c(argv[0]);
 | 
						applet = basename_c(argv[0]);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -46,6 +46,7 @@
 | 
				
			|||||||
#include "_usage.h"
 | 
					#include "_usage.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *applet = NULL;
 | 
					const char *applet = NULL;
 | 
				
			||||||
 | 
					const char *procmounts = "/proc/mounts";
 | 
				
			||||||
const char *extraopts = "[mount1] [mount2] ...";
 | 
					const char *extraopts = "[mount1] [mount2] ...";
 | 
				
			||||||
const char *getoptstring = "f:F:n:N:o:O:p:P:iste:E:" getoptstring_COMMON;
 | 
					const char *getoptstring = "f:F:n:N:o:O:p:P:iste:E:" getoptstring_COMMON;
 | 
				
			||||||
const struct option longopts[] = {
 | 
					const struct option longopts[] = {
 | 
				
			||||||
@@ -323,7 +324,7 @@ find_mounts(struct args *args)
 | 
				
			|||||||
	int netdev;
 | 
						int netdev;
 | 
				
			||||||
	RC_STRINGLIST *list;
 | 
						RC_STRINGLIST *list;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((fp = fopen("/proc/self/mounts", "r")) == NULL)
 | 
						if ((fp = fopen(procmounts, "r")) == NULL)
 | 
				
			||||||
		eerrorx("getmntinfo: %s", strerror(errno));
 | 
							eerrorx("getmntinfo: %s", strerror(errno));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	list = rc_stringlist_new();
 | 
						list = rc_stringlist_new();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -247,7 +247,6 @@ cleanup(void)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	rc_plugin_unload();
 | 
						rc_plugin_unload();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	rc_stringlist_free(deptypes_b);
 | 
						rc_stringlist_free(deptypes_b);
 | 
				
			||||||
	rc_stringlist_free(deptypes_n);
 | 
						rc_stringlist_free(deptypes_n);
 | 
				
			||||||
	rc_stringlist_free(deptypes_nw);
 | 
						rc_stringlist_free(deptypes_nw);
 | 
				
			||||||
@@ -267,7 +266,6 @@ cleanup(void)
 | 
				
			|||||||
	free(service);
 | 
						free(service);
 | 
				
			||||||
	free(prefix);
 | 
						free(prefix);
 | 
				
			||||||
	free(runlevel);
 | 
						free(runlevel);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Buffer and lock all output messages so that we get readable content */
 | 
					/* Buffer and lock all output messages so that we get readable content */
 | 
				
			||||||
@@ -1097,9 +1095,7 @@ service_plugable(void)
 | 
				
			|||||||
			break;
 | 
								break;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	free(list);
 | 
						free(list);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	return allow;
 | 
						return allow;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1348,6 +1344,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
			    applet_list,
 | 
								    applet_list,
 | 
				
			||||||
			    runlevel, depoptions);
 | 
								    runlevel, depoptions);
 | 
				
			||||||
			rc_stringlist_free(tmplist);
 | 
								rc_stringlist_free(tmplist);
 | 
				
			||||||
 | 
								tmplist = NULL;
 | 
				
			||||||
			TAILQ_FOREACH(svc, services, entries)
 | 
								TAILQ_FOREACH(svc, services, entries)
 | 
				
			||||||
			    printf("%s ", svc->value);
 | 
								    printf("%s ", svc->value);
 | 
				
			||||||
			printf ("\n");
 | 
								printf ("\n");
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,6 +53,7 @@ static const char *const env_whitelist[] = {
 | 
				
			|||||||
	"EERROR_QUIET", "EINFO_QUIET",
 | 
						"EERROR_QUIET", "EINFO_QUIET",
 | 
				
			||||||
	"IN_BACKGROUND", "IN_HOTPLUG",
 | 
						"IN_BACKGROUND", "IN_HOTPLUG",
 | 
				
			||||||
	"LANG", "LC_MESSAGES", "TERM",
 | 
						"LANG", "LC_MESSAGES", "TERM",
 | 
				
			||||||
 | 
						"EINFO_COLOR", "EINFO_VERBOSE",
 | 
				
			||||||
	NULL
 | 
						NULL
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,11 +111,9 @@ env_filter(void)
 | 
				
			|||||||
			setenv(env->value, e + 1, 1);
 | 
								setenv(env->value, e + 1, 1);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	rc_stringlist_free(env_list);
 | 
						rc_stringlist_free(env_list);
 | 
				
			||||||
	rc_stringlist_free(env_allow);
 | 
						rc_stringlist_free(env_allow);
 | 
				
			||||||
	rc_stringlist_free(profile);
 | 
						rc_stringlist_free(profile);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
@@ -229,6 +228,7 @@ svc_lock(const char *applet)
 | 
				
			|||||||
	if (fd == -1)
 | 
						if (fd == -1)
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
 | 
						if (flock(fd, LOCK_EX | LOCK_NB) == -1) {
 | 
				
			||||||
 | 
							eerror("Call to flock failed: %s", strerror(errno));
 | 
				
			||||||
		close(fd);
 | 
							close(fd);
 | 
				
			||||||
		return -1;
 | 
							return -1;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -334,7 +334,19 @@ void selinux_setup(char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	/* extract the type from the context */
 | 
						/* extract the type from the context */
 | 
				
			||||||
	curr_con = context_new(curr_context);
 | 
						curr_con = context_new(curr_context);
 | 
				
			||||||
	curr_t = xstrdup(context_type_get(curr_con));
 | 
						if (!curr_con) {
 | 
				
			||||||
 | 
							free(curr_context);
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						curr_t = context_type_get(curr_con);
 | 
				
			||||||
 | 
						if (!curr_t) {
 | 
				
			||||||
 | 
							context_free(curr_con);
 | 
				
			||||||
 | 
							free(curr_context);
 | 
				
			||||||
 | 
							goto out;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						curr_t = xstrdup(curr_t);
 | 
				
			||||||
	/* dont need them anymore so free() now */
 | 
						/* dont need them anymore so free() now */
 | 
				
			||||||
	context_free(curr_con);
 | 
						context_free(curr_con);
 | 
				
			||||||
	free(curr_context);
 | 
						free(curr_context);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,9 +76,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		case 'e':
 | 
							case 'e':
 | 
				
			||||||
			service = rc_service_resolve(optarg);
 | 
								service = rc_service_resolve(optarg);
 | 
				
			||||||
			opt = service ? EXIT_SUCCESS : EXIT_FAILURE;
 | 
								opt = service ? EXIT_SUCCESS : EXIT_FAILURE;
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
			free(service);
 | 
								free(service);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			return opt;
 | 
								return opt;
 | 
				
			||||||
			/* NOTREACHED */
 | 
								/* NOTREACHED */
 | 
				
			||||||
		case 'i':
 | 
							case 'i':
 | 
				
			||||||
@@ -97,9 +95,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
			rc_stringlist_sort(&list);
 | 
								rc_stringlist_sort(&list);
 | 
				
			||||||
			TAILQ_FOREACH(s, list, entries)
 | 
								TAILQ_FOREACH(s, list, entries)
 | 
				
			||||||
			    printf("%s\n", s->value);
 | 
								    printf("%s\n", s->value);
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
			rc_stringlist_free(list);
 | 
								rc_stringlist_free(list);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			return EXIT_SUCCESS;
 | 
								return EXIT_SUCCESS;
 | 
				
			||||||
			/* NOTREACHED */
 | 
								/* NOTREACHED */
 | 
				
			||||||
		case 'r':
 | 
							case 'r':
 | 
				
			||||||
@@ -107,9 +103,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
			if (service == NULL)
 | 
								if (service == NULL)
 | 
				
			||||||
				return EXIT_FAILURE;
 | 
									return EXIT_FAILURE;
 | 
				
			||||||
			printf("%s\n", service);
 | 
								printf("%s\n", service);
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
			free(service);
 | 
								free(service);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
			return EXIT_SUCCESS;
 | 
								return EXIT_SUCCESS;
 | 
				
			||||||
			/* NOTREACHED */
 | 
								/* NOTREACHED */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,11 +29,12 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
const char *applet = NULL;
 | 
					const char *applet = NULL;
 | 
				
			||||||
const char *extraopts = NULL;
 | 
					const char *extraopts = NULL;
 | 
				
			||||||
const char *getoptstring = "aclrsu" getoptstring_COMMON;
 | 
					const char *getoptstring = "aclmrsu" getoptstring_COMMON;
 | 
				
			||||||
const struct option longopts[] = {
 | 
					const struct option longopts[] = {
 | 
				
			||||||
	{"all",         0, NULL, 'a'},
 | 
						{"all",         0, NULL, 'a'},
 | 
				
			||||||
	{"crashed",     0, NULL, 'c'},
 | 
						{"crashed",     0, NULL, 'c'},
 | 
				
			||||||
	{"list",        0, NULL, 'l'},
 | 
						{"list",        0, NULL, 'l'},
 | 
				
			||||||
 | 
						{"manual",        0, NULL, 'm'},
 | 
				
			||||||
	{"runlevel",    0, NULL, 'r'},
 | 
						{"runlevel",    0, NULL, 'r'},
 | 
				
			||||||
	{"servicelist", 0, NULL, 's'},
 | 
						{"servicelist", 0, NULL, 's'},
 | 
				
			||||||
	{"unused",      0, NULL, 'u'},
 | 
						{"unused",      0, NULL, 'u'},
 | 
				
			||||||
@@ -43,6 +44,7 @@ const char * const longopts_help[] = {
 | 
				
			|||||||
	"Show services from all run levels",
 | 
						"Show services from all run levels",
 | 
				
			||||||
	"Show crashed services",
 | 
						"Show crashed services",
 | 
				
			||||||
	"Show list of run levels",
 | 
						"Show list of run levels",
 | 
				
			||||||
 | 
						"Show manually started services",
 | 
				
			||||||
	"Show the name of the current runlevel",
 | 
						"Show the name of the current runlevel",
 | 
				
			||||||
	"Show service list",
 | 
						"Show service list",
 | 
				
			||||||
	"Show services not assigned to any runlevel",
 | 
						"Show services not assigned to any runlevel",
 | 
				
			||||||
@@ -50,7 +52,7 @@ const char * const longopts_help[] = {
 | 
				
			|||||||
};
 | 
					};
 | 
				
			||||||
const char *usagestring = ""						\
 | 
					const char *usagestring = ""						\
 | 
				
			||||||
	"Usage: rc-status [options] <runlevel>...\n"		\
 | 
						"Usage: rc-status [options] <runlevel>...\n"		\
 | 
				
			||||||
	"   or: rc-status [options] [-a | -c | -l | -r | -s | -u]";
 | 
						"   or: rc-status [options] [-a | -c | -l | -m | -r | -s | -u]";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static bool test_crashed = false;
 | 
					static bool test_crashed = false;
 | 
				
			||||||
static RC_DEPTREE *deptree;
 | 
					static RC_DEPTREE *deptree;
 | 
				
			||||||
@@ -176,9 +178,9 @@ print_stacked_services(const char *runlevel)
 | 
				
			|||||||
int main(int argc, char **argv)
 | 
					int main(int argc, char **argv)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    RC_STRING *s, *l, *t, *level;
 | 
					    RC_STRING *s, *l, *t, *level;
 | 
				
			||||||
 | 
						bool show_all = false;
 | 
				
			||||||
	char *p, *runlevel = NULL;
 | 
						char *p, *runlevel = NULL;
 | 
				
			||||||
	int opt, aflag = 0, retval = 0;
 | 
						int opt, retval = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	test_crashed = _rc_can_find_pids();
 | 
						test_crashed = _rc_can_find_pids();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -187,7 +189,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
				  (int *) 0)) != -1)
 | 
									  (int *) 0)) != -1)
 | 
				
			||||||
		switch (opt) {
 | 
							switch (opt) {
 | 
				
			||||||
		case 'a':
 | 
							case 'a':
 | 
				
			||||||
			aflag++;
 | 
								show_all = true;
 | 
				
			||||||
			levels = rc_runlevel_list();
 | 
								levels = rc_runlevel_list();
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
		case 'c':
 | 
							case 'c':
 | 
				
			||||||
@@ -205,6 +207,27 @@ int main(int argc, char **argv)
 | 
				
			|||||||
			TAILQ_FOREACH(l, levels, entries)
 | 
								TAILQ_FOREACH(l, levels, entries)
 | 
				
			||||||
				printf("%s\n", l->value);
 | 
									printf("%s\n", l->value);
 | 
				
			||||||
			goto exit;
 | 
								goto exit;
 | 
				
			||||||
 | 
							case 'm':
 | 
				
			||||||
 | 
								services = rc_services_in_runlevel(NULL);
 | 
				
			||||||
 | 
								levels = rc_runlevel_list();
 | 
				
			||||||
 | 
								TAILQ_FOREACH_SAFE(s, services, entries, t) {
 | 
				
			||||||
 | 
									TAILQ_FOREACH(l, levels, entries)
 | 
				
			||||||
 | 
										if (rc_service_in_runlevel(s->value, l->value)) {
 | 
				
			||||||
 | 
											TAILQ_REMOVE(services, s, entries);
 | 
				
			||||||
 | 
											free(s->value);
 | 
				
			||||||
 | 
											free(s);
 | 
				
			||||||
 | 
											break;
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								TAILQ_FOREACH_SAFE(s, services, entries, t)
 | 
				
			||||||
 | 
									if (rc_service_state(s->value) &
 | 
				
			||||||
 | 
										(RC_SERVICE_STOPPED | RC_SERVICE_HOTPLUGGED)) {
 | 
				
			||||||
 | 
										TAILQ_REMOVE(services, s, entries);
 | 
				
			||||||
 | 
										free(s->value);
 | 
				
			||||||
 | 
										free(s);
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								print_services(NULL, services);
 | 
				
			||||||
 | 
								goto exit;
 | 
				
			||||||
		case 'r':
 | 
							case 'r':
 | 
				
			||||||
			runlevel = rc_runlevel_get();
 | 
								runlevel = rc_runlevel_get();
 | 
				
			||||||
			printf("%s\n", runlevel);
 | 
								printf("%s\n", runlevel);
 | 
				
			||||||
@@ -265,7 +288,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		services = NULL;
 | 
							services = NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (aflag || argc < 2) {
 | 
						if (show_all || argc < 2) {
 | 
				
			||||||
		/* Show hotplugged services */
 | 
							/* Show hotplugged services */
 | 
				
			||||||
		print_level("Dynamic", "hotplugged");
 | 
							print_level("Dynamic", "hotplugged");
 | 
				
			||||||
		services = rc_services_in_state(RC_SERVICE_HOTPLUGGED);
 | 
							services = rc_services_in_state(RC_SERVICE_HOTPLUGGED);
 | 
				
			||||||
@@ -274,7 +297,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
		services = NULL;
 | 
							services = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Show manually started and unassigned depended services */
 | 
							/* Show manually started and unassigned depended services */
 | 
				
			||||||
		if (aflag) {
 | 
							if (show_all) {
 | 
				
			||||||
			rc_stringlist_free(levels);
 | 
								rc_stringlist_free(levels);
 | 
				
			||||||
			levels = rc_stringlist_new();
 | 
								levels = rc_stringlist_new();
 | 
				
			||||||
			if (!runlevel)
 | 
								if (!runlevel)
 | 
				
			||||||
@@ -331,7 +354,6 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
exit:
 | 
					exit:
 | 
				
			||||||
	free(runlevel);
 | 
						free(runlevel);
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	rc_stringlist_free(alist);
 | 
						rc_stringlist_free(alist);
 | 
				
			||||||
	rc_stringlist_free(needsme);
 | 
						rc_stringlist_free(needsme);
 | 
				
			||||||
	rc_stringlist_free(sservices);
 | 
						rc_stringlist_free(sservices);
 | 
				
			||||||
@@ -340,7 +362,6 @@ exit:
 | 
				
			|||||||
	rc_stringlist_free(types);
 | 
						rc_stringlist_free(types);
 | 
				
			||||||
	rc_stringlist_free(levels);
 | 
						rc_stringlist_free(levels);
 | 
				
			||||||
	rc_deptree_free(deptree);
 | 
						rc_deptree_free(deptree);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return retval;
 | 
						return retval;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										87
									
								
								src/rc/rc.c
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								src/rc/rc.c
									
									
									
									
									
								
							@@ -86,6 +86,12 @@ const char *usagestring = ""					\
 | 
				
			|||||||
#define DEVBOOT			"/dev/.rcboot"
 | 
					#define DEVBOOT			"/dev/.rcboot"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const char *applet = NULL;
 | 
					const char *applet = NULL;
 | 
				
			||||||
 | 
					static RC_STRINGLIST *main_hotplugged_services;
 | 
				
			||||||
 | 
					static RC_STRINGLIST *main_stop_services;
 | 
				
			||||||
 | 
					static RC_STRINGLIST *main_start_services;
 | 
				
			||||||
 | 
					static RC_STRINGLIST *main_types_nw;
 | 
				
			||||||
 | 
					static RC_STRINGLIST *main_types_nwua;
 | 
				
			||||||
 | 
					static RC_DEPTREE *main_deptree;
 | 
				
			||||||
static char *runlevel;
 | 
					static char *runlevel;
 | 
				
			||||||
static RC_HOOK hook_out;
 | 
					static RC_HOOK hook_out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -127,10 +133,8 @@ clean_failed(void)
 | 
				
			|||||||
static void
 | 
					static void
 | 
				
			||||||
cleanup(void)
 | 
					cleanup(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	RC_PID *p1 = LIST_FIRST(&service_pids);
 | 
						RC_PID *p1 = LIST_FIRST(&service_pids);
 | 
				
			||||||
	RC_PID *p2;
 | 
						RC_PID *p2;
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!rc_in_logger && !rc_in_plugin &&
 | 
						if (!rc_in_logger && !rc_in_plugin &&
 | 
				
			||||||
	    applet && (strcmp(applet, "rc") == 0 || strcmp(applet, "openrc") == 0))
 | 
						    applet && (strcmp(applet, "rc") == 0 || strcmp(applet, "openrc") == 0))
 | 
				
			||||||
@@ -152,21 +156,19 @@ cleanup(void)
 | 
				
			|||||||
		rc_logger_close();
 | 
							rc_logger_close();
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef DEBUG_MEMORY
 | 
					 | 
				
			||||||
	while (p1) {
 | 
						while (p1) {
 | 
				
			||||||
		p2 = LIST_NEXT(p1, entries);
 | 
							p2 = LIST_NEXT(p1, entries);
 | 
				
			||||||
		free(p1);
 | 
							free(p1);
 | 
				
			||||||
		p1 = p2;
 | 
							p1 = p2;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rc_stringlist_free(hotplugged_services);
 | 
						rc_stringlist_free(main_hotplugged_services);
 | 
				
			||||||
	rc_stringlist_free(stop_services);
 | 
						rc_stringlist_free(main_stop_services);
 | 
				
			||||||
	rc_stringlist_free(start_services);
 | 
						rc_stringlist_free(main_start_services);
 | 
				
			||||||
	rc_stringlist_free(types_nw);
 | 
						rc_stringlist_free(main_types_nw);
 | 
				
			||||||
	rc_stringlist_free(types_nwua);
 | 
						rc_stringlist_free(main_types_nwua);
 | 
				
			||||||
	rc_deptree_free(deptree);
 | 
						rc_deptree_free(main_deptree);
 | 
				
			||||||
	free(runlevel);
 | 
						free(runlevel);
 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static char
 | 
					static char
 | 
				
			||||||
@@ -662,7 +664,6 @@ do_start_services(const RC_STRINGLIST *start_services, bool parallel)
 | 
				
			|||||||
			interactive = want_interactive();
 | 
								interactive = want_interactive();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (interactive) {
 | 
							if (interactive) {
 | 
				
			||||||
			parallel = false;
 | 
					 | 
				
			||||||
	interactive_retry:
 | 
						interactive_retry:
 | 
				
			||||||
			printf("\n");
 | 
								printf("\n");
 | 
				
			||||||
			einfo("About to start the service %s",
 | 
								einfo("About to start the service %s",
 | 
				
			||||||
@@ -682,6 +683,8 @@ do_start_services(const RC_STRINGLIST *start_services, bool parallel)
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		pid = service_start(service->value);
 | 
							pid = service_start(service->value);
 | 
				
			||||||
 | 
							if (pid == -1)
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
		/* Remember the pid if we're running in parallel */
 | 
							/* Remember the pid if we're running in parallel */
 | 
				
			||||||
		if (pid > 0) {
 | 
							if (pid > 0) {
 | 
				
			||||||
			add_pid(pid);
 | 
								add_pid(pid);
 | 
				
			||||||
@@ -735,12 +738,6 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	const char *bootlevel = NULL;
 | 
						const char *bootlevel = NULL;
 | 
				
			||||||
	char *newlevel = NULL;
 | 
						char *newlevel = NULL;
 | 
				
			||||||
	const char *systype = NULL;
 | 
						const char *systype = NULL;
 | 
				
			||||||
	static RC_STRINGLIST *hotplugged_services;
 | 
					 | 
				
			||||||
	static RC_STRINGLIST *stop_services;
 | 
					 | 
				
			||||||
	static RC_STRINGLIST *start_services;
 | 
					 | 
				
			||||||
	static RC_STRINGLIST *types_nw;
 | 
					 | 
				
			||||||
	static RC_STRINGLIST *types_nwua;
 | 
					 | 
				
			||||||
	static RC_DEPTREE *deptree;
 | 
					 | 
				
			||||||
	RC_STRINGLIST *deporder = NULL;
 | 
						RC_STRINGLIST *deporder = NULL;
 | 
				
			||||||
	RC_STRINGLIST *tmplist;
 | 
						RC_STRINGLIST *tmplist;
 | 
				
			||||||
	RC_STRING *service;
 | 
						RC_STRING *service;
 | 
				
			||||||
@@ -943,7 +940,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Load our deptree */
 | 
						/* Load our deptree */
 | 
				
			||||||
	if ((deptree = _rc_deptree_load(0, ®en)) == NULL)
 | 
						if ((main_deptree = _rc_deptree_load(0, ®en)) == NULL)
 | 
				
			||||||
		eerrorx("failed to load deptree");
 | 
							eerrorx("failed to load deptree");
 | 
				
			||||||
	if (exists(RC_DEPTREE_SKEWED))
 | 
						if (exists(RC_DEPTREE_SKEWED))
 | 
				
			||||||
		ewarn("WARNING: clock skew detected!");
 | 
							ewarn("WARNING: clock skew detected!");
 | 
				
			||||||
@@ -965,27 +962,27 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	* in the new or current runlevel so we won't actually be stopping
 | 
						* in the new or current runlevel so we won't actually be stopping
 | 
				
			||||||
	* them all.
 | 
						* them all.
 | 
				
			||||||
	*/
 | 
						*/
 | 
				
			||||||
	stop_services = rc_services_in_state(RC_SERVICE_STARTED);
 | 
						main_stop_services = rc_services_in_state(RC_SERVICE_STARTED);
 | 
				
			||||||
	tmplist = rc_services_in_state(RC_SERVICE_INACTIVE);
 | 
						tmplist = rc_services_in_state(RC_SERVICE_INACTIVE);
 | 
				
			||||||
	TAILQ_CONCAT(stop_services, tmplist, entries);
 | 
						TAILQ_CONCAT(main_stop_services, tmplist, entries);
 | 
				
			||||||
	free(tmplist);
 | 
						free(tmplist);
 | 
				
			||||||
	tmplist = rc_services_in_state(RC_SERVICE_STARTING);
 | 
						tmplist = rc_services_in_state(RC_SERVICE_STARTING);
 | 
				
			||||||
	TAILQ_CONCAT(stop_services, tmplist, entries);
 | 
						TAILQ_CONCAT(main_stop_services, tmplist, entries);
 | 
				
			||||||
	free(tmplist);
 | 
						free(tmplist);
 | 
				
			||||||
	if (stop_services)
 | 
						if (main_stop_services)
 | 
				
			||||||
		rc_stringlist_sort(&stop_services);
 | 
							rc_stringlist_sort(&main_stop_services);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	types_nwua = rc_stringlist_new();
 | 
						main_types_nwua = rc_stringlist_new();
 | 
				
			||||||
	rc_stringlist_add(types_nwua, "ineed");
 | 
						rc_stringlist_add(main_types_nwua, "ineed");
 | 
				
			||||||
	rc_stringlist_add(types_nwua, "iwant");
 | 
						rc_stringlist_add(main_types_nwua, "iwant");
 | 
				
			||||||
	rc_stringlist_add(types_nwua, "iuse");
 | 
						rc_stringlist_add(main_types_nwua, "iuse");
 | 
				
			||||||
	rc_stringlist_add(types_nwua, "iafter");
 | 
						rc_stringlist_add(main_types_nwua, "iafter");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (stop_services) {
 | 
						if (main_stop_services) {
 | 
				
			||||||
		tmplist = rc_deptree_depends(deptree, types_nwua, stop_services,
 | 
							tmplist = rc_deptree_depends(main_deptree, main_types_nwua, main_stop_services,
 | 
				
			||||||
		    runlevel, depoptions | RC_DEP_STOP);
 | 
							    runlevel, depoptions | RC_DEP_STOP);
 | 
				
			||||||
		rc_stringlist_free(stop_services);
 | 
							rc_stringlist_free(main_stop_services);
 | 
				
			||||||
		stop_services = tmplist;
 | 
							main_stop_services = tmplist;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Create a list of all services which should be started for the new or
 | 
						/* Create a list of all services which should be started for the new or
 | 
				
			||||||
@@ -993,14 +990,14 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	 * runlevels.  Clearly, some of these will already be started so we
 | 
						 * runlevels.  Clearly, some of these will already be started so we
 | 
				
			||||||
	 * won't actually be starting them all.
 | 
						 * won't actually be starting them all.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	hotplugged_services = rc_services_in_state(RC_SERVICE_HOTPLUGGED);
 | 
						main_hotplugged_services = rc_services_in_state(RC_SERVICE_HOTPLUGGED);
 | 
				
			||||||
	start_services = rc_services_in_runlevel_stacked(newlevel ?
 | 
						main_start_services = rc_services_in_runlevel_stacked(newlevel ?
 | 
				
			||||||
	    newlevel : runlevel);
 | 
						    newlevel : runlevel);
 | 
				
			||||||
	if (strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 &&
 | 
						if (strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SHUTDOWN) != 0 &&
 | 
				
			||||||
	    strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SYSINIT) != 0)
 | 
						    strcmp(newlevel ? newlevel : runlevel, RC_LEVEL_SYSINIT) != 0)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		tmplist = rc_services_in_runlevel(RC_LEVEL_SYSINIT);
 | 
							tmplist = rc_services_in_runlevel(RC_LEVEL_SYSINIT);
 | 
				
			||||||
		TAILQ_CONCAT(start_services, tmplist, entries);
 | 
							TAILQ_CONCAT(main_start_services, tmplist, entries);
 | 
				
			||||||
		free(tmplist);
 | 
							free(tmplist);
 | 
				
			||||||
		/* If we are NOT headed for the single-user runlevel... */
 | 
							/* If we are NOT headed for the single-user runlevel... */
 | 
				
			||||||
		if (strcmp(newlevel ? newlevel : runlevel,
 | 
							if (strcmp(newlevel ? newlevel : runlevel,
 | 
				
			||||||
@@ -1011,13 +1008,13 @@ int main(int argc, char **argv)
 | 
				
			|||||||
				bootlevel) != 0)
 | 
									bootlevel) != 0)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				tmplist = rc_services_in_runlevel(bootlevel);
 | 
									tmplist = rc_services_in_runlevel(bootlevel);
 | 
				
			||||||
				TAILQ_CONCAT(start_services, tmplist, entries);
 | 
									TAILQ_CONCAT(main_start_services, tmplist, entries);
 | 
				
			||||||
				free(tmplist);
 | 
									free(tmplist);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if (hotplugged_services) {
 | 
								if (main_hotplugged_services) {
 | 
				
			||||||
				TAILQ_FOREACH(service, hotplugged_services,
 | 
									TAILQ_FOREACH(service, main_hotplugged_services,
 | 
				
			||||||
				    entries)
 | 
									    entries)
 | 
				
			||||||
				    rc_stringlist_addu(start_services,
 | 
									    rc_stringlist_addu(main_start_services,
 | 
				
			||||||
					service->value);
 | 
										service->value);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1026,8 +1023,8 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	parallel = rc_conf_yesno("rc_parallel");
 | 
						parallel = rc_conf_yesno("rc_parallel");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Now stop the services that shouldn't be running */
 | 
						/* Now stop the services that shouldn't be running */
 | 
				
			||||||
	if (stop_services && !nostop)
 | 
						if (main_stop_services && !nostop)
 | 
				
			||||||
		do_stop_services(types_nw, start_services, stop_services, deptree, newlevel, parallel, going_down);
 | 
							do_stop_services(main_types_nw, main_start_services, main_stop_services, main_deptree, newlevel, parallel, going_down);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Wait for our services to finish */
 | 
						/* Wait for our services to finish */
 | 
				
			||||||
	wait_for_services();
 | 
						wait_for_services();
 | 
				
			||||||
@@ -1059,8 +1056,8 @@ int main(int argc, char **argv)
 | 
				
			|||||||
	hook_out = RC_HOOK_RUNLEVEL_START_OUT;
 | 
						hook_out = RC_HOOK_RUNLEVEL_START_OUT;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Re-add our hotplugged services if they stopped */
 | 
						/* Re-add our hotplugged services if they stopped */
 | 
				
			||||||
	if (hotplugged_services)
 | 
						if (main_hotplugged_services)
 | 
				
			||||||
		TAILQ_FOREACH(service, hotplugged_services, entries)
 | 
							TAILQ_FOREACH(service, main_hotplugged_services, entries)
 | 
				
			||||||
		    rc_service_mark(service->value, RC_SERVICE_HOTPLUGGED);
 | 
							    rc_service_mark(service->value, RC_SERVICE_HOTPLUGGED);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __linux__
 | 
					#ifdef __linux__
 | 
				
			||||||
@@ -1076,7 +1073,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* If we have a list of services to start then... */
 | 
						/* If we have a list of services to start then... */
 | 
				
			||||||
	if (start_services) {
 | 
						if (main_start_services) {
 | 
				
			||||||
		/* Get a list of the chained runlevels which compose the target runlevel */
 | 
							/* Get a list of the chained runlevels which compose the target runlevel */
 | 
				
			||||||
		RC_STRINGLIST *runlevel_chain = rc_runlevel_stacks(runlevel);
 | 
							RC_STRINGLIST *runlevel_chain = rc_runlevel_stacks(runlevel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1089,7 +1086,7 @@ int main(int argc, char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			/* Start those services. */
 | 
								/* Start those services. */
 | 
				
			||||||
			rc_stringlist_sort(&run_services);
 | 
								rc_stringlist_sort(&run_services);
 | 
				
			||||||
			deporder = rc_deptree_depends(deptree, types_nwua, run_services, rlevel->value, depoptions | RC_DEP_START);
 | 
								deporder = rc_deptree_depends(main_deptree, main_types_nwua, run_services, rlevel->value, depoptions | RC_DEP_START);
 | 
				
			||||||
			rc_stringlist_free(run_services);
 | 
								rc_stringlist_free(run_services);
 | 
				
			||||||
			run_services = deporder;
 | 
								run_services = deporder;
 | 
				
			||||||
			do_start_services(run_services, parallel);
 | 
								do_start_services(run_services, parallel);
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user