Compare commits
	
		
			138 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | ea047033c4 | ||
|   | 2bad4da891 | ||
|   | 3c5244fb6a | ||
|   | f1134f4efe | ||
|   | 9f68514f8a | ||
|   | b16625e625 | ||
|   | 5dc13a0ff2 | ||
|   | c094c75f34 | ||
|   | 0e925c511d | ||
|   | 9ae469289d | ||
|   | d8ed89971b | ||
|   | a537bd7abb | ||
|   | a13f2b91b2 | ||
|   | b5a7222fe0 | ||
|   | ace8dfdaae | ||
|   | 7056107725 | ||
|   | 5df511e9e4 | ||
|   | 60ede6b687 | ||
|   | c2f2533db0 | ||
|   | e627ad4804 | ||
|   | 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 | ||
|   | 5bfb7d6c77 | ||
|   | 12c8248b5f | ||
|   | 820ef6dab6 | ||
|   | 87884db667 | ||
|   | 94077d264e | ||
|   | 3351c8b4c3 | ||
|   | a8214af2fe | ||
|   | 9a372812c7 | ||
|   | 3fa9015b8e | ||
|   | 3b5a8b331e | ||
|   | b3a04e797e | ||
|   | 92e2f2c7cc | ||
|   | ad23d5b8db | ||
|   | 62410eaf4b | ||
|   | fd80b6fc67 | ||
|   | 5d130cc45c | ||
|   | 1c3c2cf6d8 | ||
|   | 171e856ec8 | ||
|   | beaa71df0a | ||
|   | 7eaf71176b | ||
|   | 2c1f6a16e1 | ||
|   | e82653782e | ||
|   | e52b5f59c2 | ||
|   | 8a7e4d38a7 | ||
|   | 47dd5e37cb | ||
|   | e277ae57ef | ||
|   | 69f052b611 | ||
|   | e4eacf02ca | ||
|   | 30c3561b6b | ||
|   | 5f2850366e | ||
|   | 1cb7eec31f | ||
|   | cd7883d25d | ||
|   | 62b49b2a3a | ||
|   | 4c814a0a28 | ||
|   | 36dde4e7f2 | ||
|   | 649f63d882 | ||
|   | 55a28f5d25 | ||
|   | 6c09421375 | ||
|   | 79359f77cc | ||
|   | f79a7a7be1 | ||
|   | 73482cf13a | ||
|   | 0910c455d3 | ||
|   | f5e06bc55a | ||
|   | e7ae08c38d | ||
|   | 6da0abc085 | ||
|   | b34df9dd81 | ||
|   | 6f02069746 | ||
|   | d4c7207ef3 | 
							
								
								
									
										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. | ||||||
|  |  | ||||||
|   | |||||||
| @@ -38,7 +38,7 @@ Who: | |||||||
|  |  | ||||||
| When: 1.0 | When: 1.0 | ||||||
|  |  | ||||||
| Why: Depprecated in favor of extra_commands, extra_started_commands | Why: Deprecated in favor of extra_commands, extra_started_commands | ||||||
| 	 and extra_stopped_commands. | 	 and extra_stopped_commands. | ||||||
|  |  | ||||||
| Who: | Who: | ||||||
| @@ -47,7 +47,7 @@ Who: | |||||||
|  |  | ||||||
| When: 1.0 | When: 1.0 | ||||||
|  |  | ||||||
| Why: Depprecated in favor of executable scripts in @SYSCONFDIR@/local.d | Why: Deprecated in favor of executable scripts in @SYSCONFDIR@/local.d | ||||||
|  |  | ||||||
| Who: | Who: | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| NAME=		openrc | NAME=		openrc | ||||||
| VERSION=	0.20.5 | VERSION=	0.22.3 | ||||||
| PKG=		${NAME}-${VERSION} | PKG=		${NAME}-${VERSION} | ||||||
|   | |||||||
							
								
								
									
										40
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								NEWS.md
									
									
									
									
									
								
							| @@ -3,6 +3,46 @@ | |||||||
| 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.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 | ||||||
|  |  | ||||||
|  | This version adds a daemon supervisor which can start daemons and | ||||||
|  | restart them if they crash. See supervise-daemon-guide.md in the | ||||||
|  | distribution for details on its use. | ||||||
|  |  | ||||||
|  | It is now possible to mark certain mount points as critical. If these | ||||||
|  | mount points are unable to be mounted, localmount or netmount will fail. | ||||||
|  | This is handled in /etc/conf.d/localmount and /etc/conf.d/netmount. See | ||||||
|  | these files for the setup. | ||||||
|  |  | ||||||
|  | The deprecation messages in 0.13.x for runscript and rc are now | ||||||
|  | made visible in preparation for the removal of these binaries in 1.0. | ||||||
|  |  | ||||||
|  | The steps you should take to get rid of these warnings is to run openrc | ||||||
|  | in initialization steps instead of rc and change the shebang lines in | ||||||
|  | service scripts to refer to "openrc-run" instead of "runscript". | ||||||
|  |  | ||||||
|  | In 0.21.4, a modules-load service was added. This works like the | ||||||
|  | equivalent service in systemd. It looks for files named *.conf first in | ||||||
|  | /usr/lib/modules-load.d, then /run/modules-load.d, then | ||||||
|  | /etc/modules-load.d. These files contain a list of modules, one per | ||||||
|  | line, which should be loaded into the kernel. If a file name appears in | ||||||
|  | /run/modules-load.d, it overrides a file of the same name in | ||||||
|  | /usr/lib/modules-load.d. A file appearing in /etc/modules-load.d | ||||||
|  | overrides a file of the same name in both previous directories. | ||||||
|  |  | ||||||
| ## OpenRC-0.19 | ## OpenRC-0.19 | ||||||
|  |  | ||||||
| This version adds a net-online service. By default, this | This version adds a net-online service. By default, this | ||||||
|   | |||||||
| @@ -43,9 +43,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. | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								conf.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,2 +0,0 @@ | |||||||
| network |  | ||||||
| staticroute |  | ||||||
| @@ -1,19 +1,17 @@ | |||||||
| 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 tmpfiles \ | ||||||
| 		${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=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab \ | ||||||
| 	net-online | 	net-online | ||||||
| @@ -21,9 +19,3 @@ CONF-Linux=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab \ | |||||||
| 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} $@ |  | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ wipe_tmp="YES" | |||||||
| # This may be useful if you need the kernel boot log afterwards | # This may be useful if you need the kernel boot log afterwards | ||||||
| log_dmesg="YES" | log_dmesg="YES" | ||||||
|  |  | ||||||
| # Save the previous dmesg log to dmesc.old | # Save the previous dmesg log to dmesg.old | ||||||
| # This may be useful if you need to compare the current boot to the | # This may be useful if you need to compare the current boot to the | ||||||
| # previous one. | # previous one. | ||||||
| #previous_dmesg=no | #previous_dmesg=no | ||||||
|   | |||||||
| @@ -2,8 +2,9 @@ | |||||||
| # This could be useful for some NFS related work. | # This could be useful for some NFS related work. | ||||||
| #no_umounts="/dir1:/var/dir2" | #no_umounts="/dir1:/var/dir2" | ||||||
| # | # | ||||||
| # Ignore errors when mounting local file systems. | # Mark certain mount points as critical. | ||||||
| # This should be left alone unless you know what you are doing. If it is | # This contains aspace separated list of mount points which should be | ||||||
| # set to yes, not only will we allow mount failures, but we will ignore | # considered critical. If one of these mount points cannot be mounted, | ||||||
| # syntax errors in fstab. | # localmount will fail. | ||||||
| #ignore_mount_errors="NO" | # By default, this is empty. | ||||||
|  | #critical_mounts="/home /var" | ||||||
|   | |||||||
| @@ -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,6 +1,6 @@ | |||||||
| # 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 to the default gateway is | ||||||
|   | |||||||
| @@ -38,3 +38,10 @@ | |||||||
| # other words, please change it to be more suited to your system. | # other words, please change it to be more suited to your system. | ||||||
| # | # | ||||||
| rc_need="net" | rc_need="net" | ||||||
|  | # | ||||||
|  | # Mark certain mount points as critical. | ||||||
|  | # This contains aspace separated list of mount points which should be | ||||||
|  | # considered critical. If one of these mount points cannot be mounted, | ||||||
|  | # netmount will fail. | ||||||
|  | # By default, this is empty. | ||||||
|  | #critical_mounts="/home /var" | ||||||
|   | |||||||
							
								
								
									
										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
									
								
								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} $^ > $@ |  | ||||||
|   | |||||||
| @@ -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="" |  | ||||||
|  |  | ||||||
							
								
								
									
										269
									
								
								guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										269
									
								
								guide.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,269 @@ | |||||||
|  | # Purpose and description | ||||||
|  |  | ||||||
|  | OpenRC is an init system for Unixoid operating systems. It takes care of  | ||||||
|  | startup and shutdown of the whole system, including services. | ||||||
|  |  | ||||||
|  | It evolved out of the Gentoo "Baselayout" package which was a custom pure-shell  | ||||||
|  | startup solution. (This was both hard to maintain and debug, and not very  | ||||||
|  | performant) | ||||||
|  |  | ||||||
|  | Most of the core parts are written in C99 for performance and flexibility  | ||||||
|  | reasons, while everything else is posix sh. | ||||||
|  | The License is 2-clause BSD | ||||||
|  |  | ||||||
|  | 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  | ||||||
|  | least) and HURD. | ||||||
|  |  | ||||||
|  | Services are stateful (i.e. `start`; `start` will lead to "it's already started") | ||||||
|  |  | ||||||
|  | # Startup | ||||||
|  |  | ||||||
|  | Usually PID1 (aka. `init`) calls the OpenRC binary (`/sbin/openrc` by default). | ||||||
|  | (The default setup assumes sysvinit for this) | ||||||
|  |  | ||||||
|  | openrc scans the runlevels (default: `/etc/runlevels`) and builds a dependency | ||||||
|  | graph, then starts the needed service scripts, either serialized (default) or in  | ||||||
|  | parallel. | ||||||
|  |  | ||||||
|  | When all the init scripts are started openrc terminates. There is no persistent  | ||||||
|  | daemon. (Integration with tools like monit, runit or s6 can be done) | ||||||
|  |  | ||||||
|  | # Shutdown | ||||||
|  |  | ||||||
|  | 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. | ||||||
|  |  | ||||||
|  | # Modifying Service Scripts | ||||||
|  |  | ||||||
|  | Any service can, at any time, be started/stopped/restarted by executing  | ||||||
|  | `rc-service someservice start`, `rc-service someservice stop`, etc. | ||||||
|  | Another, less preferred method, is to run the service script directly, | ||||||
|  | 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  | ||||||
|  | first, and stopping network will stop apache first. | ||||||
|  |  | ||||||
|  | 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  | ||||||
|  | without invoking the (possibly broken) stop function of the service script. | ||||||
|  |  | ||||||
|  | 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  | ||||||
|  | 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 | ||||||
|  | and Ubuntu (`service nginx start` etc.) | ||||||
|  |  | ||||||
|  | # Runlevels | ||||||
|  |  | ||||||
|  | OpenRC has a concept of runlevels, similar to what sysvinit historically  | ||||||
|  | offered. A runlevel is basically a collection of services that needs to be  | ||||||
|  | started. Instead of random numbers they are named, and users can create their  | ||||||
|  | own if needed. This allows, for example, to have a default runlevel with  | ||||||
|  | "everything" enabled, and a "powersaving" runlevel where some services are  | ||||||
|  | disabled. | ||||||
|  |  | ||||||
|  | The `rc-status` helper will print all currently active runlevels and the state | ||||||
|  | of init scripts in them: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | # rc-status | ||||||
|  |  * Caching service dependencies ... [ ok ] | ||||||
|  | Runlevel: default | ||||||
|  |  modules                     [  started  ] | ||||||
|  |  lvm                         [  started  ] | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | All runlevels are represented as folders in `/etc/runlevels/` with symlinks to  | ||||||
|  | the actual init scripts. | ||||||
|  |  | ||||||
|  | Calling openrc with an argument (`openrc default`) will switch to that | ||||||
|  | runlevel; this will start and stop services as needed. | ||||||
|  |  | ||||||
|  | Managing runlevels is usually done through the `rc-update` helper, but could of  | ||||||
|  | course be done by hand if desired. | ||||||
|  | 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  | ||||||
|  | the initscript by hand. | ||||||
|  |  | ||||||
|  | FIXME: Document stacked runlevels | ||||||
|  |  | ||||||
|  | The default startup uses the runlevels `boot`, `sysinit` and `default`, in that  | ||||||
|  | order. Shutdown uses the `shutdown` runlevel. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | # Syntax of Service Scripts | ||||||
|  |  | ||||||
|  | Service scripts are shell scripts. OpenRC aims at using only the standardized  | ||||||
|  | POSIX sh subset for portability reasons. The default interpreter (build-time  | ||||||
|  | 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  | ||||||
|  | others. Using busybox sh has been difficult as it replaces commands with  | ||||||
|  | builtins that don't offer the expected features. | ||||||
|  |  | ||||||
|  | The interpreter for initscripts is `#!/sbin/openrc-run`. | ||||||
|  | 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) | ||||||
|  |  | ||||||
|  | A `depend` function declares the dependencies of this service script. | ||||||
|  | All scripts must have start/stop/status functions, but defaults are provided. | ||||||
|  | Extra functions can be added easily: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | extra_commands="checkconfig" | ||||||
|  | checkconfig() { | ||||||
|  | 	doSomething | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | This exports the checkconfig function so that `/etc/init.d/someservice  | ||||||
|  | checkconfig` will be available, and it "just" runs this function. | ||||||
|  |  | ||||||
|  | While commands defined in `extra_commands` are always available, commands | ||||||
|  | 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 | ||||||
|  | stopped. This can be used for implementing graceful reload and similar | ||||||
|  | behaviour. | ||||||
|  |  | ||||||
|  | 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  | ||||||
|  | restart function is in general not going to work.  | ||||||
|  | restart is internally mapped to `stop()` + `start()` (plus handling dependencies). | ||||||
|  | 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: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | [ "$RC_CMD" = restart ] && do_something | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | # The Depend Function | ||||||
|  |  | ||||||
|  | This function declares the dependencies for a service script. This | ||||||
|  | determines the order the service scripts start. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | depend() { | ||||||
|  | 	need net | ||||||
|  | 	use dns logger netmount | ||||||
|  | 	want coolservice | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | `need` declares a hard dependency - net always needs to be started before this  | ||||||
|  | 	service does | ||||||
|  |  | ||||||
|  | `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. | ||||||
|  | 	`want` is between need and use - try to start coolservice if it is | ||||||
|  | 	installed on the system, regardless of whether it is in the | ||||||
|  | 	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  | ||||||
|  | 	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  | ||||||
|  | 	satisfies a cron dependency | ||||||
|  |  | ||||||
|  | `keyword` allows platform-specific overrides, e.g. `keyword -lxc` makes this  | ||||||
|  | 	service script a noop in lxc containers. Useful for things like keymaps,  | ||||||
|  | 	module loading etc. that are either platform-specific or not available  | ||||||
|  | 	in containers/virtualization/... | ||||||
|  |  | ||||||
|  | FIXME: Anything missing in this list? | ||||||
|  |  | ||||||
|  | # The Default Functions | ||||||
|  |  | ||||||
|  | All service scripts are assumed to have the following functions: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | start() | ||||||
|  | stop() | ||||||
|  | status() | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | 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  | ||||||
|  | needed. | ||||||
|  |  | ||||||
|  | The default functions assume the following variables to be set in the service  | ||||||
|  | script: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | command= | ||||||
|  | command_args= | ||||||
|  | pidfile= | ||||||
|  | `` | ||||||
|  |  | ||||||
|  | Thus the 'smallest' service scripts can be half a dozen lines long | ||||||
|  |  | ||||||
|  | # The Magic of `conf.d` | ||||||
|  |  | ||||||
|  | Most service scripts need default values. It would be fragile to | ||||||
|  | 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/` | ||||||
|  |  | ||||||
|  | This allows you to set random startup-related things easily. Example: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | conf.d/foo: | ||||||
|  | START_OPTS="--extraparameter sausage" | ||||||
|  |  | ||||||
|  | init.d/foo: | ||||||
|  | start() { | ||||||
|  | 	/usr/sbin/foo-daemon ${STARTOPTS} | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | The big advantage of this split is that most of the time editing of the init  | ||||||
|  | script can be avoided. | ||||||
|  |  | ||||||
|  | # Start-Stop-Daemon | ||||||
|  |  | ||||||
|  | OpenRC has its own modified version of s-s-d, which is historically related and  | ||||||
|  | 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  | ||||||
|  | other convenience functions related to managing daemons. | ||||||
|  |  | ||||||
|  | # `/etc/rc.conf` | ||||||
|  |  | ||||||
|  | This file manages the default configuration for OpenRC, and it has examples of  | ||||||
|  | per-service-script variables. | ||||||
|  |  | ||||||
|  | Among these are `rc_parallel` (for parallelized startup), `rc_log` (logs all boot  | ||||||
|  | messages to a file), and a few others. | ||||||
|  |  | ||||||
|  | # ulimit and CGroups | ||||||
|  |  | ||||||
|  | Setting `ulimit` and `nice` values per service can be done through the `rc_ulimit` | ||||||
|  | variable. | ||||||
|  |  | ||||||
|  | Under Linux, OpenRC can optionally use CGroups for process management. | ||||||
|  | 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  | ||||||
|  | service. It is easy to find orphan processes of a service that persist after  | ||||||
|  | `stop()`, but by default these will NOT be terminated. | ||||||
|  | To change this add `rc_cgroup_cleanup="yes"` in the `conf.d` files for services  | ||||||
|  | where you desire this functionality. | ||||||
|  |  | ||||||
|  | # Caching | ||||||
|  |  | ||||||
|  | For performance reasons OpenRC keeps a cache of pre-parsed initscript metadata | ||||||
|  | (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 | ||||||
|  | change it'll re-source the relevant files and update the cache | ||||||
|  |  | ||||||
|  | # Convenience functions | ||||||
|  |  | ||||||
|  | OpenRC has wrappers for many common output tasks in libeinfo. | ||||||
|  | This allows to print colour-coded status notices and other things. | ||||||
|  | To make the output consistent the bundled initscripts all use ebegin/eend to  | ||||||
|  | print nice messages. | ||||||
							
								
								
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,5 @@ | |||||||
| binfmt | binfmt | ||||||
|  | modules-load | ||||||
| bootmisc | bootmisc | ||||||
| fsck | fsck | ||||||
| hostname | hostname | ||||||
| @@ -11,7 +12,6 @@ network | |||||||
| root | root | ||||||
| savecache | savecache | ||||||
| swap | swap | ||||||
| swapfiles |  | ||||||
| sysctl | sysctl | ||||||
| urandom | urandom | ||||||
| devfs | devfs | ||||||
| @@ -37,6 +37,7 @@ pf | |||||||
| rarpd | rarpd | ||||||
| rc-enabled | rc-enabled | ||||||
| rpcbind | rpcbind | ||||||
|  | runsvdir | ||||||
| savecore | savecore | ||||||
| swap-blk | swap-blk | ||||||
| swclock | swclock | ||||||
|   | |||||||
| @@ -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 tmpfiles.setup.in  \ | ||||||
| 	tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}} | 	swclock.in 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,14 +15,14 @@ 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 \ | ||||||
| 		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=	binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \ | ||||||
| 		killprocs.in modules.in mount-ro.in mtab.in numlock.in \ | 		killprocs.in modules.in modules-load.in mount-ro.in mtab.in numlock.in \ | ||||||
| 		procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in | 		procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in | ||||||
|  |  | ||||||
| # Generic BSD scripts | # Generic BSD scripts | ||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	after procfs | 	after procfs | ||||||
| 	use modules devfs | 	use modules devfs | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	need localmount termencoding | 	need localmount termencoding | ||||||
| 	after hotplug bootmisc modules | 	after hotplug bootmisc modules | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	provide dev-mount | 	provide dev-mount | ||||||
| 	before dev | 	before dev | ||||||
| 	keyword -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| mount_dev() | mount_dev() | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ description="Set the dmesg level for a cleaner boot" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	before dev modules | 	before dev modules | ||||||
| 	keyword -lxc -prefix -systemd-nspawn -vserver | 	keyword -docker -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ _IFS=" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use dev clock modules | 	use dev clock modules | ||||||
| 	keyword -jail -openvz -prefix -systemd-nspawn -timeout -vserver -lxc -uml | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml | ||||||
| } | } | ||||||
|  |  | ||||||
| _abort() { | _abort() { | ||||||
|   | |||||||
| @@ -12,15 +12,25 @@ | |||||||
| description="Sets the hostname of the machine." | description="Sets the hostname of the machine." | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	keyword -prefix -systemd-nspawn -lxc | 	keyword -docker -lxc -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|  |  | ||||||
| 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,12 +30,13 @@ 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 * | ||||||
| 	fi | 	fi | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|  |  | ||||||
| setupopts() | setupopts() | ||||||
| @@ -69,9 +70,28 @@ _hwclock() | |||||||
| 	return 1 | 	return 1 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | get_noadjfile() | ||||||
|  | { | ||||||
|  | 	if ! yesno $clock_adjfile; then | ||||||
|  | 		# Some implementations don't handle adjustments | ||||||
|  | 		if LC_ALL=C hwclock --help 2>&1 | grep -q "\-\-noadjfile"; then | ||||||
|  | 			echo --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 | ||||||
| @@ -81,26 +101,27 @@ 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 | ||||||
|  |  | ||||||
| 	# Always set the kernel's time zone. | 	# Always set the kernel's time zone. | ||||||
| 	_hwclock --systz $utc_cmd $clock_args | 	_hwclock --systz $utc_cmd $(get_noadjfile) $clock_args | ||||||
| 	: $(( retval += $? )) | 	: $(( retval += $? )) | ||||||
|  |  | ||||||
| 	if [ -e /etc/adjtime ] && yesno $clock_adjfile; then | 	if [ -e /etc/adjtime ] && yesno $clock_adjfile; then | ||||||
| 		_hwclock --adjust $utc_cmd | 		_hwclock --adjust $utc_cmd $(get_noadjfile) | ||||||
| 		: $(( retval += $? )) | 		: $(( retval += $? )) | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	if yesno ${clock_hctosys:-YES}; then | 	if yesno ${clock_hctosys:-YES}; then | ||||||
| 		_hwclock --hctosys $utc_cmd $clock_args | 		_hwclock --hctosys $utc_cmd $(get_noadjfile) $clock_args | ||||||
| 		: $(( retval += $? )) | 		: $(( retval += $? )) | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| @@ -122,14 +143,7 @@ stop() | |||||||
|  |  | ||||||
| 	ebegin "Setting hardware clock using the system clock" "[$utc]" | 	ebegin "Setting hardware clock using the system clock" "[$utc]" | ||||||
|  |  | ||||||
| 	if ! yesno $clock_adjfile; then | 	_hwclock --systohc $utc_cmd $(get_noadjfile) $clock_args | ||||||
| 		# Some implementations don't handle adjustments |  | ||||||
| 		if LC_ALL=C hwclock --help 2>&1 | grep -q "\-\-noadjfile"; then |  | ||||||
| 			utc_cmd="$utc_cmd --noadjfile" |  | ||||||
| 		fi |  | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	_hwclock --systohc $utc_cmd $clock_args |  | ||||||
| 	retval=$? | 	retval=$? | ||||||
|  |  | ||||||
| 	eend $retval "Failed to sync clocks" | 	eend $retval "Failed to sync clocks" | ||||||
| @@ -144,5 +158,5 @@ save() | |||||||
| show() | show() | ||||||
| { | { | ||||||
| 	setupopts | 	setupopts | ||||||
| 	hwclock --show "$utc_cmd" $clock_args | 	hwclock --show "$utc_cmd" $(get_noadjfile) $clock_args | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	need localmount termencoding | 	need localmount termencoding | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -20,10 +20,8 @@ start() | |||||||
| { | { | ||||||
| 	ebegin "Terminating remaining processes" | 	ebegin "Terminating remaining processes" | ||||||
| 	killall5 -15 ${killall5_opts} | 	killall5 -15 ${killall5_opts} | ||||||
| 	sleep 1 |  | ||||||
| 	eend 0 | 	eend 0 | ||||||
| 	ebegin "Killing remaining processes" | 	ebegin "Killing remaining processes" | ||||||
| 	killall5 -9 ${killall5_opts} | 	killall5 -9 ${killall5_opts} | ||||||
| 	sleep 1 |  | ||||||
| 	eend 0 | 	eend 0 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -16,13 +16,13 @@ depend() | |||||||
| 	need fsck | 	need fsck | ||||||
| 	use lvm modules mtab | 	use lvm modules mtab | ||||||
| 	after lvm modules | 	after lvm modules | ||||||
| 	keyword -jail -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
| { | { | ||||||
| 	# Mount local filesystems in /etc/fstab. | 	# Mount local filesystems in /etc/fstab. | ||||||
| 	local 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},no${x}" | ||||||
| 	done | 	done | ||||||
| @@ -37,13 +37,17 @@ start() | |||||||
| 	mount -at "$types" $no_netdev | 	mount -at "$types" $no_netdev | ||||||
| 	eend $? "Some local filesystem failed to mount" | 	eend $? "Some local filesystem failed to mount" | ||||||
| 	rc=$? | 	rc=$? | ||||||
| 	if [ "$RC_UNAME" != Linux ]; then | 	if [ -z "$critical_mounts" ]; then | ||||||
| 		rc=0 | 		rc=0 | ||||||
| 	elif yesno "${ignore_mount_errors:-NO}"; then | 	else | ||||||
| 		if [ $rc -ne 0 ]; then | 		for x in ${critical_mounts}; do | ||||||
| 			ewarn "localmount: errors detected, but ignored" | 		fstabinfo -q $x || continue | ||||||
|  | 		if ! mountinfo -q $x; then | ||||||
|  | 			critical=x | ||||||
|  | 			eerror "Failed to mount $x" | ||||||
| 		fi | 		fi | ||||||
| 		rc=0 | 		done | ||||||
|  | 		[ -z "$critical" ] && rc=0 | ||||||
| 	fi | 	fi | ||||||
| 	return $rc | 	return $rc | ||||||
| } | } | ||||||
| @@ -95,8 +99,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,12 +21,10 @@ 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" | ||||||
| @@ -35,8 +33,3 @@ start() | |||||||
| 	fi | 	fi | ||||||
| 	eend $? | 	eend $? | ||||||
| } | } | ||||||
|  |  | ||||||
| stop() |  | ||||||
| { |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|   | |||||||
							
								
								
									
										72
									
								
								init.d/modules-load.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								init.d/modules-load.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | #!@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. | ||||||
|  |  | ||||||
|  | description="Loads a list of modules from systemd-compatible locations." | ||||||
|  |  | ||||||
|  | depend() | ||||||
|  | { | ||||||
|  | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
|  | } | ||||||
|  |  | ||||||
|  | find_modfiles() | ||||||
|  | { | ||||||
|  | 	local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d" | ||||||
|  | 	local basenames files fn x y | ||||||
|  | 	for x in $dirs; do | ||||||
|  | 		[ ! -d $x ] && continue | ||||||
|  | 		for y in $x/*.conf; do | ||||||
|  | 			[ -f $y ] && basenames="${basenames}\n${y##*/}" | ||||||
|  | 		done | ||||||
|  | 	done | ||||||
|  | 	basenames=$(printf "$basenames" | sort -u) | ||||||
|  | 	for x in $basenames; do | ||||||
|  | 		for y in $dirs; do | ||||||
|  | 			[ -r $y/$x ] && | ||||||
|  | 				fn=$y/$x | ||||||
|  | 		done | ||||||
|  | 		files="$files $fn" | ||||||
|  | 	done | ||||||
|  | 	echo $files | ||||||
|  | } | ||||||
|  |  | ||||||
|  | load_modules() | ||||||
|  | { | ||||||
|  | 	local file m modules rc x | ||||||
|  | 	file=$1 | ||||||
|  | 	[ -z "$file" ] && return 0 | ||||||
|  | 	while read m x; do | ||||||
|  | 		case $m in | ||||||
|  | 			\;*) continue ;; | ||||||
|  | 			\#*) continue ;; | ||||||
|  | 			*) modules="$modules $m" | ||||||
|  | 			;; | ||||||
|  | 		esac | ||||||
|  | 	done < $file | ||||||
|  | 	for x in $modules; do | ||||||
|  | 		ebegin "Loading module $x" | ||||||
|  | 		case "$RC_UNAME" in | ||||||
|  | 			FreeBSD) kldload "$x"; rc=$? ;; | ||||||
|  | 			Linux) modprobe --use-blacklist -q "$x"; rc=$? ;; | ||||||
|  | 			*) ;; | ||||||
|  | 		esac | ||||||
|  | 		eend $rc "Failed to load $x" | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start() | ||||||
|  | { | ||||||
|  | 	local x | ||||||
|  | 	files=$(find_modfiles) | ||||||
|  | 	for x in $files; do | ||||||
|  | 		load_modules $x | ||||||
|  | 	done | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
| @@ -14,10 +14,22 @@ description="Loads a user defined list of kernel modules." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use isapnp | 	use isapnp | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	want modules-load | ||||||
|  | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | FreeBSD_modules() | ||||||
|  | { | ||||||
|  | 	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 do not have module | 	# Should not fail if kernel do not have module | ||||||
| 	# support compiled in ... | 	# support compiled in ... | ||||||
| @@ -63,8 +75,17 @@ 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 -q "$mpargs" "$x" "$args" | ||||||
| 		eend $? "Failed to load $x" && : $(( cnt += 1 )) | 		eend $? "Failed to load $x" && : $(( cnt += 1 )) | ||||||
| 	done | 	done | ||||||
| 	einfo "Autoloaded $cnt module(s)" | 	einfo "Autoloaded $cnt module(s)" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | start() | ||||||
|  | { | ||||||
|  | 	case "$RC_UNAME" in | ||||||
|  | 		FreeBSD|Linux) ${RC_UNAME}_modules ;; | ||||||
|  | 		*) ;; | ||||||
|  | 	esac | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ description="Re-mount filesytems read-only for a clean reboot." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need killprocs savecache | 	need killprocs savecache | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
| @@ -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,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	after modules | 	after modules | ||||||
| 	need sysfs | 	need sysfs | ||||||
| 	keyword -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| get_interfaces() | get_interfaces() | ||||||
| @@ -42,8 +42,8 @@ get_default_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 | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ depend() | |||||||
| 	want $mywant | 	want $mywant | ||||||
| 	use afc-client amd openvpn | 	use afc-client amd openvpn | ||||||
| 	use dns | 	use dns | ||||||
| 	keyword -jail -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
| @@ -37,13 +37,22 @@ start() | |||||||
| 	ebegin "Mounting network filesystems" | 	ebegin "Mounting network filesystems" | ||||||
| 	mount -at $fs | 	mount -at $fs | ||||||
| 	rc=$? | 	rc=$? | ||||||
| 	if [ "$RC_UNAME" = Linux ]; then | 	if [ "$RC_UNAME" = Linux ] && [ $rc = 0 ]; then | ||||||
| 		mount -a -O _netdev | 		mount -a -O _netdev | ||||||
| 		rc=$? | 		rc=$? | ||||||
| 	fi | 	fi | ||||||
| 	ewend $rc "Could not mount all network filesystems" | 	ewend $rc "Could not mount all network filesystems" | ||||||
| 	if [ "$RC_UNAME" != Linux ]; then | 	if [ -z "$critical_mounts" ]; then | ||||||
| 		rc=0 | 		rc=0 | ||||||
|  | 	else | ||||||
|  | 		for x in ${critical_mounts}; do | ||||||
|  | 		fstabinfo -q $x || continue | ||||||
|  | 		if ! mountinfo -q $x; then | ||||||
|  | 			critical=x | ||||||
|  | 			eerror "Failed to mount $x" | ||||||
|  | 		fi | ||||||
|  | 		done | ||||||
|  | 		[ -z "$critical" ] && rc=0 | ||||||
| 	fi | 	fi | ||||||
| 	return $rc | 	return $rc | ||||||
| } | } | ||||||
| @@ -72,7 +81,7 @@ stop() | |||||||
| 	retval=$? | 	retval=$? | ||||||
|  |  | ||||||
| 	eoutdent | 	eoutdent | ||||||
| 	if [ "$RC_UNAME" = Linux ]; then | 	if [ "$RC_UNAME" = Linux ] && [ $retval = 0 ]; then | ||||||
| 		umount -a -O _netdev | 		umount -a -O _netdev | ||||||
| 		retval=$? | 		retval=$? | ||||||
| 	fi | 	fi | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| _setleds() | _setleds() | ||||||
|   | |||||||
| @@ -13,16 +13,22 @@ description="Mounts misc filesystems in /proc." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use modules devfs | 	use devfs | ||||||
|  | 	want modules | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| 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 \ | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ description="Mount the root fs read/write" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need fsck | 	need fsck | ||||||
| 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
							
								
								
									
										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 nettree 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 | ||||||
|   | |||||||
| @@ -12,14 +12,13 @@ | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	before localmount | 	before localmount | ||||||
| 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | 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 -jail -openvz -prefix -systemd-nspawn -vserver -lxc |  | ||||||
| } |  | ||||||
|  |  | ||||||
| start() |  | ||||||
| { |  | ||||||
| 	ebegin "Activating additional swap space" |  | ||||||
| 	case "$RC_UNAME" in |  | ||||||
| 		NetBSD|OpenBSD) swapctl -A -t noblk >/dev/null;; |  | ||||||
| 		*)		swapon -a >/dev/null;; |  | ||||||
| 	esac |  | ||||||
| 	eend 0 # If swapon has nothing todo it errors, so always return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| stop() |  | ||||||
| { |  | ||||||
| 	ebegin "Deactivating additional swap space" |  | ||||||
| 	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 |  | ||||||
| } |  | ||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	before * | 	before * | ||||||
| 	provide clock | 	provide clock | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|  |  | ||||||
| # swclock is an OpenRC built in | # swclock is an OpenRC built in | ||||||
|   | |||||||
| @@ -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" |  | ||||||
| } |  | ||||||
| @@ -1,26 +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 -systemd-nspawn -vserver |  | ||||||
| } |  | ||||||
|  |  | ||||||
| start() |  | ||||||
| { |  | ||||||
| 	local quiet |  | ||||||
| 	yesno $rc_verbose || quiet=-q |  | ||||||
|  |  | ||||||
| 	ebegin "Configuring kernel parameters" |  | ||||||
| 	sysctl ${quiet} --system |  | ||||||
| 	eend $? "Unable to configure some kernel parameters" |  | ||||||
| } |  | ||||||
| @@ -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" | ||||||
| } | } | ||||||
| @@ -15,7 +15,8 @@ sysfs_opts=nodev,noexec,nosuid | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	keyword -lxc -prefix -systemd-nspawn -vserver | 	want modules | ||||||
|  | 	keyword -docker -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| mount_sys() | mount_sys() | ||||||
| @@ -88,19 +89,34 @@ mount_misc() | |||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	# setup up kernel support for efivarfs | 	# Setup Kernel Support for persistent storage | ||||||
| 	# slightly complicated, as if it's build as a module but NOT yet loaded, | 	if [ -d /sys/fs/pstore ] && ! mountinfo -q /sys/fs/pstore; then | ||||||
| 	# it will NOT appear in /proc/filesystems yet | 		if grep -qs 'pstore$' /proc/filesystems; then | ||||||
| 	if [ -d /sys/firmware/efi/efivars ] \ | 			ebegin "Mounting persistent storage (pstore) filesystem" | ||||||
| 		&& ! mountinfo -q /sys/firmware/efi/efivars; then | 			mount -t pstore pstore -o ${sysfs_opts} /sys/fs/pstore | ||||||
| 		modprobe -q efivarfs |  | ||||||
| 		if grep -qs efivarfs /proc/filesystems; then |  | ||||||
| 			ebegin "Mounting efivarfs filesystem" |  | ||||||
| 			mount -n -t efivarfs -o ${sysfs_opts} \ |  | ||||||
| 				efivarfs /sys/firmware/efi/efivars |  | ||||||
| 			eend $? | 			eend $? | ||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
|  | 	# set up kernel support for efivarfs | ||||||
|  | 	# The presence of /sys/firmware/efi indicates that the system was | ||||||
|  | 	# booted in efi mode. | ||||||
|  | 	if [ -d /sys/firmware/efi ]; then | ||||||
|  | 		if [ ! -d /sys/firmware/efi/efivars ] && | ||||||
|  | 			modprobe -q efivarfs; then | ||||||
|  | 			ewarn "The efivarfs module needs to be configured in " \ | ||||||
|  | 				  "@SYSCONFDIR@/conf.d/modules or built in" | ||||||
|  | 		fi | ||||||
|  | 		if [ -d /sys/firmware/efi/efivars ] && | ||||||
|  | 			! mountinfo -q /sys/firmware/efi/efivars; then | ||||||
|  | 			if grep -qs efivarfs /proc/filesystems; then | ||||||
|  | 				ebegin "Mounting efivarfs filesystem" | ||||||
|  | 				mount -n -t efivarfs -o ${sysfs_opts} \ | ||||||
|  | 					efivarfs /sys/firmware/efi/efivars | ||||||
|  | 				eend $? | ||||||
|  | 			fi | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
| } | } | ||||||
|  |  | ||||||
| mount_cgroups() | mount_cgroups() | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	keyword -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| 	use root | 	use root | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ description="Initializes the random number generator." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -jail -lxc -openvz -prefix -systemd-nspawn | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|  |  | ||||||
| save_seed() | save_seed() | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ MAN3=		einfo.3 \ | |||||||
| 		rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \ | 		rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \ | ||||||
| 		rc_runlevel.3 rc_service.3 rc_stringlist.3 | 		rc_runlevel.3 rc_service.3 rc_stringlist.3 | ||||||
| MAN8=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | MAN8=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | ||||||
| 		service.8 start-stop-daemon.8 | 		service.8 start-stop-daemon.8 supervise-daemon.8 | ||||||
|  |  | ||||||
| ifeq (${OS},Linux) | ifeq (${OS},Linux) | ||||||
| MAN8 += rc-sstat.8 | MAN8 += rc-sstat.8 | ||||||
|   | |||||||
| @@ -95,10 +95,17 @@ String describing the service. | |||||||
| .It Ar description_$command | .It Ar description_$command | ||||||
| String describing the extra command. | String describing the extra command. | ||||||
| .It Ar supervisor | .It Ar supervisor | ||||||
| Supervisor to use to monitor this daemon. If this is unset, | Supervisor to use to monitor this daemon. If this is unset or invalid, | ||||||
| start-stop-daemon will be used. The only alternate supervisor we support | start-stop-daemon will be used. | ||||||
| in this release is S6 from Skarnet software. To use this, set | Currently, we support s6 from scarnet software, and supervise-daemon | ||||||
|  | which is a light-weight supervisor internal to OpenRC. | ||||||
|  | To use s6, set | ||||||
| supervisor=s6. | supervisor=s6. | ||||||
|  | or set | ||||||
|  | supervisor=supervise-daemon | ||||||
|  | to use supervise-daemon. | ||||||
|  | Note that supervise-daemon is still in early development, so it is | ||||||
|  | considered experimental. | ||||||
| .It Ar s6_service_path | .It Ar s6_service_path | ||||||
| The path to the s6 service directory if you are monitoring this service | The path to the s6 service directory if you are monitoring this service | ||||||
| with S6. The default is /var/svc.d/${RC_SVCNAME}. | with S6. The default is /var/svc.d/${RC_SVCNAME}. | ||||||
| @@ -112,22 +119,52 @@ List of arguments passed to start-stop-daemon when starting the daemon. | |||||||
| .It Ar command | .It Ar command | ||||||
| Daemon to start or stop via | Daemon to start or stop via | ||||||
| .Nm start-stop-daemon | .Nm start-stop-daemon | ||||||
|  | or | ||||||
|  | .Nm supervise-daemon | ||||||
| if no start or stop function is defined by the service. | 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_background | .It Ar command_args_background | ||||||
| Set this to "true", "yes" or "1" (case-insensitive) to force the daemon into | This variable should be used if the daemon you are starting with | ||||||
| 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. | 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 | ||||||
|  | List of arguments to pass to the daemon when starting via | ||||||
|  | .Nm supervise-daemon . | ||||||
|  | to force the daemon to stay in the foreground | ||||||
|  | .It Ar command_background | ||||||
|  | Set this to "true", "yes" or "1" (case-insensitive) if you want  | ||||||
|  | .Xr start-stop-daemon 8 | ||||||
|  | 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 | ||||||
|  | .Xr supervise-daemon 8 | ||||||
| will chroot into this path before writing the pid file or starting the daemon. | will chroot into this path before writing the pid file or starting the daemon. | ||||||
| .It Ar pidfile | .It Ar pidfile | ||||||
| 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 | ||||||
| @@ -143,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 | ||||||
|   | |||||||
| @@ -20,6 +20,14 @@ | |||||||
| .Ar service cmd | .Ar service cmd | ||||||
| .Op Ar ... | .Op Ar ... | ||||||
| .Nm | .Nm | ||||||
|  | .Op Fl I , -ifinactive | ||||||
|  | .Ar service cmd | ||||||
|  | .Op Ar ... | ||||||
|  | .Nm | ||||||
|  | .Op Fl N , -ifnotstarted | ||||||
|  | .Ar service cmd | ||||||
|  | .Op Ar ... | ||||||
|  | .Nm | ||||||
| .Fl e , -exists | .Fl e , -exists | ||||||
| .Ar service | .Ar service | ||||||
| .Nm | .Nm | ||||||
| @@ -36,6 +44,13 @@ If | |||||||
| is given then | is given then | ||||||
| .Nm | .Nm | ||||||
| returns 0 even if the service does not exist. | returns 0 even if the service does not exist. | ||||||
|  | If | ||||||
|  | .Fl I , -ifinactive | ||||||
|  | or | ||||||
|  | .Fl N , -ifnotstarted | ||||||
|  | is given then | ||||||
|  | .Nm | ||||||
|  | returns 0 if the service exists but is in the wrong state. | ||||||
| .Pp | .Pp | ||||||
| If given the | If given the | ||||||
| .Fl l , -list | .Fl l , -list | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
							
								
								
									
										142
									
								
								man/supervise-daemon.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										142
									
								
								man/supervise-daemon.8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,142 @@ | |||||||
|  | .\" 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. | ||||||
|  | .\" | ||||||
|  | .Dd April 27, 2016 | ||||||
|  | .Dt supervise-DAEMON 8 SMM | ||||||
|  | .Os OpenRC | ||||||
|  | .Sh NAME | ||||||
|  | .Nm supervise-daemon | ||||||
|  | .Nd starts a daemon and restarts it if it crashes | ||||||
|  | .Sh SYNOPSIS | ||||||
|  | .Nm | ||||||
|  | .Fl d , -chdir | ||||||
|  | .Ar path | ||||||
|  | .Fl e , -env | ||||||
|  | .Ar var=value | ||||||
|  | .Fl g , -group | ||||||
|  | .Ar group | ||||||
|  | .Fl I , -ionice | ||||||
|  | .Ar arg | ||||||
|  | .Fl k , -umask | ||||||
|  | .Ar value | ||||||
|  | .Fl N , -nicelevel | ||||||
|  | .Ar level | ||||||
|  | .Fl p , -pidfile | ||||||
|  | .Ar pidfile | ||||||
|  | .Fl u , -user | ||||||
|  | .Ar user | ||||||
|  | .Fl r , -chroot | ||||||
|  | .Ar chrootpath | ||||||
|  | .Fl 1 , -stdout | ||||||
|  | .Ar logfile | ||||||
|  | .Fl 2 , -stderr | ||||||
|  | .Ar logfile | ||||||
|  | .Fl S , -start | ||||||
|  | .Ar daemon | ||||||
|  | .Op Fl - | ||||||
|  | .Op Ar arguments | ||||||
|  | .Nm | ||||||
|  | .Fl K , -stop | ||||||
|  | .Ar daemon | ||||||
|  | .Fl p , -pidfile | ||||||
|  | .Ar pidfile | ||||||
|  | .Fl r , -chroot | ||||||
|  | .Ar chrootpath | ||||||
|  | .Sh DESCRIPTION | ||||||
|  | .Nm | ||||||
|  | provides a consistent method of starting, stopping and restarting | ||||||
|  | daemons. If | ||||||
|  | .Fl K , -stop | ||||||
|  | is not provided, then we assume we are starting the daemon. | ||||||
|  | .Nm | ||||||
|  | only works with daemons which do not fork. Also, it uses its own pid | ||||||
|  | file, so the daemon should not write a pid file, or the pid file passed | ||||||
|  | to  | ||||||
|  | .Nm | ||||||
|  | should not be the one the daemon writes. | ||||||
|  | .Pp | ||||||
|  | Here are the options to specify the daemon and how it should start or stop: | ||||||
|  | .Bl -tag -width indent | ||||||
|  | .It Fl p , -pidfile Ar pidfile | ||||||
|  | When starting, we write a | ||||||
|  | .Ar pidfile | ||||||
|  | so we know which supervisor to stop.  When stopping we only stop the pid(s) | ||||||
|  | listed in the | ||||||
|  | .Ar pidfile . | ||||||
|  | .It Fl u , -user Ar user Ns Op : Ns Ar group | ||||||
|  | Start the daemon as the | ||||||
|  | .Ar user | ||||||
|  | and update $HOME accordingly or stop daemons | ||||||
|  | owned by the user. You can optionally append a | ||||||
|  | .Ar group | ||||||
|  | name here also. | ||||||
|  | .It Fl v , -verbose | ||||||
|  | Print the action(s) that are taken just before doing them. | ||||||
|  | .Pp | ||||||
|  | The options are as follows: | ||||||
|  | .Bl -tag -width indent | ||||||
|  | .It Fl d , -chdir Ar path | ||||||
|  | chdir to this directory before starting the daemon. | ||||||
|  | .It Fl e , -env Ar VAR=VALUE | ||||||
|  | Set the environment variable VAR to VALUE. | ||||||
|  | .It Fl g , -group Ar group | ||||||
|  | Start the daemon as in the group. | ||||||
|  | .It Fl I , -ionice Ar class Ns Op : Ns Ar data | ||||||
|  | Modifies the IO scheduling priority of the daemon. | ||||||
|  | Class can be 0 for none, 1 for real time, 2 for best effort and 3 for idle. | ||||||
|  | Data can be from 0 to 7 inclusive. | ||||||
|  | .It Fl k , -umask Ar mode | ||||||
|  | Set the umask of the daemon. | ||||||
|  | .It Fl N , -nicelevel Ar level | ||||||
|  | Modifies the scheduling priority of the daemon. | ||||||
|  | .It Fl r , -chroot Ar path | ||||||
|  | chroot to this directory before starting the daemon. All other paths, such | ||||||
|  | as the path to the daemon, chdir and pidfile, should be relative to the chroot. | ||||||
|  | .It Fl u , -user Ar user | ||||||
|  | Start the daemon as the specified user. | ||||||
|  | .It Fl 1 , -stdout Ar logfile | ||||||
|  | Redirect the standard output of the process to logfile. | ||||||
|  | Must be an absolute pathname, but relative to the path optionally given with | ||||||
|  | .Fl r , -chroot . | ||||||
|  | The logfile can also be a named pipe. | ||||||
|  | .It Fl 2 , -stderr Ar logfile | ||||||
|  | The same thing as | ||||||
|  | .Fl 1 , -stdout | ||||||
|  | but with the standard error output. | ||||||
|  | .El | ||||||
|  | .Sh ENVIRONMENT | ||||||
|  | .Va SSD_NICELEVEL | ||||||
|  | can also set the scheduling priority of the daemon, but the command line | ||||||
|  | option takes precedence. | ||||||
|  | .Sh NOTE | ||||||
|  | .Nm | ||||||
|  | uses | ||||||
|  | .Xr getopt 3 | ||||||
|  | to parse its options, which allows it to accept the `--' option which will | ||||||
|  | cause it to stop processing options at that point. Any subsequent arguments | ||||||
|  | are passed as arguments to the daemon to start and used when finding a daemon | ||||||
|  | to stop or signal. | ||||||
|  | .Sh SEE ALSO | ||||||
|  | .Xr chdir 2 , | ||||||
|  | .Xr chroot 2 , | ||||||
|  | .Xr getopt 3 , | ||||||
|  | .Xr nice 2 , | ||||||
|  | .Xr rc_find_pids 3 | ||||||
|  | .Sh BUGS | ||||||
|  | .Nm | ||||||
|  | cannot stop an interpreted daemon that no longer exists without a pidfile. | ||||||
|  | .Sh HISTORY | ||||||
|  | .Nm | ||||||
|  | first appeared in Debian. | ||||||
|  | .Pp | ||||||
|  | This is a complete re-implementation with the process finding code in the | ||||||
|  | OpenRC library (librc, -lrc) so other programs can make use of it. | ||||||
|  | .Sh AUTHORS | ||||||
|  | .An William Hubbs <w.d.hubbs@gmail.com> | ||||||
							
								
								
									
										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} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,4 +3,6 @@ | |||||||
|  |  | ||||||
| ifeq (${MKPREFIX},yes) | ifeq (${MKPREFIX},yes) | ||||||
| CPPFLAGS+=	-DPREFIX | CPPFLAGS+=	-DPREFIX | ||||||
|  | PKG_PREFIX?=	$(PREFIX)/usr | ||||||
|  | SED_EXTRA=	-e '/_PATH=.*usr.bin/d' | ||||||
| endif | endif | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								mk/os.mk
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								mk/os.mk
									
									
									
									
									
								
							| @@ -13,7 +13,7 @@ | |||||||
| _OS_SH=		uname -s | tr '/' '-' | _OS_SH=		uname -s | tr '/' '-' | ||||||
| _OS:= 		$(shell ${_OS_SH}) | _OS:= 		$(shell ${_OS_SH}) | ||||||
| OS?= 		${_OS} | OS?= 		${_OS} | ||||||
| include ${MK}/os-${OS}.mk |  | ||||||
| include ${MK}/os-prefix.mk | include ${MK}/os-prefix.mk | ||||||
|  | include ${MK}/os-${OS}.mk | ||||||
|  |  | ||||||
| RC_LIB=		/$(LIBNAME)/rc | RC_LIB=		/$(LIBNAME)/rc | ||||||
|   | |||||||
| @@ -11,6 +11,7 @@ | |||||||
|  |  | ||||||
| AR?=			ar | AR?=			ar | ||||||
| CP?=			cp | CP?=			cp | ||||||
|  | PKG_CONFIG?=	pkg-config | ||||||
| ECHO?=			echo | ECHO?=			echo | ||||||
| INSTALL?=		install | INSTALL?=		install | ||||||
| RANLIB?=		ranlib | RANLIB?=		ranlib | ||||||
| @@ -26,7 +27,7 @@ ifeq (${MKPREFIX},yes) | |||||||
| UPREFIX= ${PREFIX}/usr | UPREFIX= ${PREFIX}/usr | ||||||
| endif | endif | ||||||
| endif | endif | ||||||
| LOCAL_PREFIX=		/usr/local | LOCAL_PREFIX=		$(UPREFIX)/local | ||||||
|  |  | ||||||
| PICFLAG?=		-fPIC | PICFLAG?=		-fPIC | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| ifeq (${MKTERMCAP},ncurses) | ifeq (${MKTERMCAP},ncurses) | ||||||
| TERMCAP_CFLAGS:=	$(shell pkg-config ncurses --cflags 2> /dev/null) | TERMCAP_CFLAGS:=	$(shell ${PKG_CONFIG} ncurses --cflags 2> /dev/null) | ||||||
| LTERMCAP:=			$(shell pkg-config ncurses --libs 2> /dev/null) | LTERMCAP:=			$(shell ${PKG_CONFIG} ncurses --libs 2> /dev/null) | ||||||
| ifeq ($(LTERMCAP),) | ifeq ($(LTERMCAP),) | ||||||
| LIBTERMCAP?=	-lncurses | LIBTERMCAP?=	-lncurses | ||||||
| else | else | ||||||
|   | |||||||
							
								
								
									
										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,8 +1,9 @@ | |||||||
| 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 | ||||||
| SHUTDOWN=	savecache ${SHUTDOWN-${OS}} | SHUTDOWN=	savecache ${SHUTDOWN-${OS}} | ||||||
| SYSINIT=	${SYSINIT-${OS}} | SYSINIT=	${SYSINIT-${OS}} | ||||||
|  |  | ||||||
| @@ -10,6 +11,7 @@ LEVELDIR=	${DESTDIR}/${SYSCONFDIR}/runlevels | |||||||
| SYSINITDIR=	${LEVELDIR}/sysinit | SYSINITDIR=	${LEVELDIR}/sysinit | ||||||
| BOOTDIR=	${LEVELDIR}/boot | BOOTDIR=	${LEVELDIR}/boot | ||||||
| DEFAULTDIR=	${LEVELDIR}/default | DEFAULTDIR=	${LEVELDIR}/default | ||||||
|  | NONETWORKDIR=	${LEVELDIR}/nonetwork | ||||||
| SHUTDOWNDIR=	${LEVELDIR}/shutdown | SHUTDOWNDIR=	${LEVELDIR}/shutdown | ||||||
|  |  | ||||||
| ifeq (${MKNET},yes) | ifeq (${MKNET},yes) | ||||||
| @@ -30,7 +32,7 @@ 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 | ||||||
|  |  | ||||||
| @@ -72,6 +74,14 @@ install: | |||||||
| 			fi; \ | 			fi; \ | ||||||
| 			ln -snf ${INITDIR}/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; done \ | 			ln -snf ${INITDIR}/"$$x" ${DEFAULTDIR}/"$$x" || exit $$?; done \ | ||||||
| 	fi | 	fi | ||||||
|  | 	if ! test -d "${NONETWORKDIR}"; then \ | ||||||
|  | 		${INSTALL} -d ${NONETWORKDIR} || exit $$?; \ | ||||||
|  | 		for x in ${NONETWORK}; do \ | ||||||
|  | 			if test "${MKPREFIX}" = yes; then \ | ||||||
|  | 				grep -q "keyword .*-prefix" ${INITFILES}/"$$x" && continue; \ | ||||||
|  | 			fi; \ | ||||||
|  | 			ln -snf ${INITDIR}/"$$x" ${NONETWORKDIR}/"$$x" || exit $$?; done \ | ||||||
|  | 	fi | ||||||
| 	if ! test -d "${SHUTDOWNDIR}"; then \ | 	if ! test -d "${SHUTDOWNDIR}"; then \ | ||||||
| 		${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \ | 		${INSTALL} -d ${SHUTDOWNDIR} || exit $$?; \ | ||||||
| 		for x in ${SHUTDOWN}; do \ | 		for x in ${SHUTDOWN}; do \ | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -1,7 +1,8 @@ | |||||||
| 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 tmpfiles.sh.in ${SRCS-${OS}} | ||||||
| INC=	rc-mount.sh functions.sh rc-functions.sh s6.sh start-stop-daemon.sh | INC=	rc-mount.sh functions.sh rc-functions.sh runit.sh s6.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 tmpfiles.sh ${BIN-${OS}} | ||||||
|  |  | ||||||
| INSTALLAFTER=	_installafter | INSTALLAFTER=	_installafter | ||||||
|   | |||||||
| @@ -22,7 +22,7 @@ apply_file() { | |||||||
|  |  | ||||||
| 	### FILE FORMAT ### | 	### FILE FORMAT ### | ||||||
| 	# See https://www.kernel.org/doc/Documentation/binfmt_misc.txt | 	# See https://www.kernel.org/doc/Documentation/binfmt_misc.txt | ||||||
| 	while read line; do | 	while read -r line; do | ||||||
| 		LINENUM=$(( LINENUM+1 )) | 		LINENUM=$(( LINENUM+1 )) | ||||||
| 		case $line in | 		case $line in | ||||||
| 			\#*) continue ;; | 			\#*) continue ;; | ||||||
|   | |||||||
| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -21,7 +21,7 @@ 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 [ "$(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 | ||||||
| 		einfo "/proc is already mounted" | 		einfo "/proc is already mounted" | ||||||
| @@ -85,7 +85,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 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -153,7 +153,9 @@ 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 ;; | ||||||
| 		?*) | 		?*) | ||||||
| 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | ||||||
| 			;; | 			;; | ||||||
| @@ -165,7 +167,9 @@ 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 ;; | ||||||
| 		?*) | 		?*) | ||||||
| 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | ||||||
| 			;; | 			;; | ||||||
| @@ -177,7 +181,9 @@ 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 ;; | ||||||
| 		?*) | 		?*) | ||||||
| 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | 			ewarn "Invalid supervisor, \"$supervisor\", using start-stop-daemon" | ||||||
| 			;; | 			;; | ||||||
| @@ -187,6 +193,15 @@ status() | |||||||
|  |  | ||||||
| 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%%.*} | ||||||
| @@ -203,18 +218,11 @@ 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" | ||||||
|  |  | ||||||
| # Set verbose mode | # Set verbose mode | ||||||
| if yesno "${rc_verbose:-$RC_VERBOSE}"; then | if yesno "${rc_verbose:-$RC_VERBOSE}"; then | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										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,15 +38,20 @@ 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 \ | ||||||
| 		${procname:+--name} $procname \ | 		${procname:+--name} $procname \ | ||||||
| 		${pidfile:+--pidfile} $pidfile \ | 		${pidfile:+--pidfile} $pidfile \ | ||||||
| 		${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 "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" | 		[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" | ||||||
| 		[ -n "${procname}" ] && service_set_value "procname" "${procname}" | 		[ -n "${procname}" ] && service_set_value "procname" "${procname}" | ||||||
| 		return 0 | 		return 0 | ||||||
| @@ -61,22 +66,27 @@ 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 startpidfile="$(service_get_value "pidfile")" | 	local startpidfile="$(service_get_value "pidfile")" | ||||||
| 	local startprocname="$(service_get_value "procname")" | 	local startprocname="$(service_get_value "procname")" | ||||||
| 	command="${startcommand:-$command}" | 	command="${startcommand:-$command}" | ||||||
|  | 	chroot="${startchroot:-$chroot}" | ||||||
| 	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} $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() | ||||||
|   | |||||||
							
								
								
									
										58
									
								
								sh/supervise-daemon.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								sh/supervise-daemon.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | |||||||
|  | # start / stop / status functions for supervise-daemon | ||||||
|  |  | ||||||
|  | # 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. | ||||||
|  |  | ||||||
|  | supervise_start() | ||||||
|  | { | ||||||
|  | 	if [ -z "$command" ]; then | ||||||
|  | 		ewarn "The command variable is undefined." | ||||||
|  | 		ewarn "There is nothing for ${name:-$RC_SVCNAME} to start." | ||||||
|  | 		return 1 | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	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 \ | ||||||
|  | 		${chroot:+--chroot} $chroot \ | ||||||
|  | 		${pidfile:+--pidfile} $pidfile \ | ||||||
|  | 		${command_user+--user} $command_user \ | ||||||
|  | 		$supervise_daemon_args \ | ||||||
|  | 		$command \ | ||||||
|  | 		-- $command_args $command_args_foreground | ||||||
|  | 	rc=$? | ||||||
|  | 	if [ $rc = 0 ]; then | ||||||
|  | 		[ -n "${chroot}" ] && service_set_value "chroot" "${chroot}" | ||||||
|  | 		[ -n "${pidfile}" ] && service_set_value "pidfile" "${pidfile}" | ||||||
|  | 	fi | ||||||
|  | 	eend $rc "failed to start ${name:-$RC_SVCNAME}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | supervise_stop() | ||||||
|  | { | ||||||
|  | 	local startchroot="$(service_get_value "chroot")" | ||||||
|  | 	local startpidfile="$(service_get_value "pidfile")" | ||||||
|  | 	chroot="${startchroot:-$chroot}" | ||||||
|  | 	pidfile="${startpidfile:-$pidfile}" | ||||||
|  | 	[ -n "$pidfile" ] || return 0 | ||||||
|  | 	ebegin "Stopping ${name:-$RC_SVCNAME}" | ||||||
|  | 	supervise-daemon --stop \ | ||||||
|  | 		${pidfile:+--pidfile} $chroot$pidfile \ | ||||||
|  | 		${stopsig:+--signal} $stopsig | ||||||
|  |  | ||||||
|  | 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | supervise_status() | ||||||
|  | { | ||||||
|  | 	_status | ||||||
|  | } | ||||||
| @@ -10,8 +10,10 @@ | |||||||
| # http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles | # http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles | ||||||
| # | # | ||||||
| # See the tmpfiles.d manpage as well: | # See the tmpfiles.d manpage as well: | ||||||
|  | # https://www.freedesktop.org/software/systemd/man/tmpfiles.d.html | ||||||
|  | # This script should match the old manpage | ||||||
| # http://0pointer.de/public/systemd-man/tmpfiles.d.html | # http://0pointer.de/public/systemd-man/tmpfiles.d.html | ||||||
| # This script should match the manpage as of 2012/03/12 | # as of 2012/03/12 and also implements some more recent features | ||||||
| # | # | ||||||
|  |  | ||||||
| DRYRUN=0 | DRYRUN=0 | ||||||
| @@ -33,12 +35,28 @@ warninvalid() { | |||||||
| 	error=$(( error+1 )) | 	error=$(( error+1 )) | ||||||
| } >&2 | } >&2 | ||||||
|  |  | ||||||
|  | invalid_option() { | ||||||
|  | 	printf "tmpfiles: invalid option '%s'\n" "$1" >&2 | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
| dryrun_or_real() { | dryrun_or_real() { | ||||||
| 	local dryrun= | 	local dryrun= | ||||||
| 	[ $DRYRUN -eq 1 ] && dryrun=echo | 	[ $DRYRUN -eq 1 ] && dryrun=echo | ||||||
| 	$dryrun "$@" | 	$dryrun "$@" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | _chattr() { | ||||||
|  | 	local attr="$2" | ||||||
|  | 	case $attr in | ||||||
|  | 		[+-=]*) : ;; | ||||||
|  | 		'') return ;; | ||||||
|  | 		*) attr="+$attr" ;; | ||||||
|  | 	esac | ||||||
|  | 	local IFS= | ||||||
|  | 	dryrun_or_real chattr $1 "$attr" -- $3 | ||||||
|  | } | ||||||
|  |  | ||||||
| relabel() { | relabel() { | ||||||
| 	local path | 	local path | ||||||
| 	local paths=$1 mode=$2 uid=$3 gid=$4 | 	local paths=$1 mode=$2 uid=$3 gid=$4 | ||||||
| @@ -158,6 +176,37 @@ _v() { | |||||||
| 	_d "$@" | 	_d "$@" | ||||||
| } | } | ||||||
|  |  | ||||||
|  | _q() { | ||||||
|  | 	# Similar to _v. However, make sure that the subvolume will be assigned | ||||||
|  | 	# to the same higher-level quota groups as the subvolume it has | ||||||
|  | 	# been created in. | ||||||
|  | 	# TODO: Implement btrfs subvol creation. | ||||||
|  | 	_d "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _Q() { | ||||||
|  | 	# Similar to q. However, instead of copying the higher-level quota | ||||||
|  | 	# group assignments from the parent as-is, the lowest quota group | ||||||
|  | 	# of the parent subvolume is determined that is not the | ||||||
|  | 	# leaf quota group. | ||||||
|  | 	# TODO: Implement btrfs subvol creation. | ||||||
|  | 	_d "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _h() { | ||||||
|  | 	# Set file/directory attributes. Lines of this type accept | ||||||
|  | 	# shell-style globs in place of normal path names. | ||||||
|  | 	# The format of the argument field matches chattr | ||||||
|  | 	_chattr '' "$6" "$1" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _H() { | ||||||
|  | 	# Recursively set file/directory attributes. Lines of this type accept | ||||||
|  | 	# shell-syle globs in place of normal path names. | ||||||
|  | 	# Does not follow symlinks | ||||||
|  | 	_chattr -R "$6" "$1" | ||||||
|  | } | ||||||
|  |  | ||||||
| _L() { | _L() { | ||||||
| 	# Create a symlink if it doesn't exist yet | 	# Create a symlink if it doesn't exist yet | ||||||
| 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
| @@ -259,35 +308,7 @@ _Z() { | |||||||
| BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0 | BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0 | ||||||
| EXCLUDE= | EXCLUDE= | ||||||
| PREFIX= | PREFIX= | ||||||
| FILE= | FILES= | ||||||
| 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 | while [ $# -gt 0 ]; do | ||||||
| 	case $1 in | 	case $1 in | ||||||
| @@ -299,6 +320,8 @@ while [ $# -gt 0 ]; do | |||||||
| 		--dryrun|--dry-run) DRYRUN=1 ;; | 		--dryrun|--dry-run) DRYRUN=1 ;; | ||||||
| 		--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;; | 		--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;; | ||||||
| 		--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;; | 		--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;; | ||||||
|  | 		-*) invalid_option "$1" ;; | ||||||
|  | 		*) FILES="${FILES} $1" | ||||||
| 	esac | 	esac | ||||||
| 	shift | 	shift | ||||||
| done | done | ||||||
| @@ -313,10 +336,49 @@ if [ "$CREATE$REMOVE" = '00' ]; then | |||||||
| 	exit 1 | 	exit 1 | ||||||
| fi | fi | ||||||
|  |  | ||||||
|  | # 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='' | ||||||
|  |  | ||||||
|  | if [ -z "${FILES}" ]; then | ||||||
|  | 	# 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} | ||||||
|  | 	FILES="$(printf "${tmpfiles_basenames}\n" | sort -u )" | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | tmpfiles_d='' | ||||||
|  |  | ||||||
|  | for b in ${FILES} ; do | ||||||
|  | 	if [ "${b##*/}" != "${b}" ]; then | ||||||
|  | 		# The user specified a path on the command line | ||||||
|  | 		# Just pass it through unaltered | ||||||
|  | 		tmpfiles_d="${tmpfiles_d} ${b}" | ||||||
|  | 	else | ||||||
|  | 		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}" | ||||||
|  | 	fi | ||||||
|  | done | ||||||
|  |  | ||||||
| error=0 | error=0 | ||||||
|  |  | ||||||
| # loop through the gathered fragments, sorted globally by filename. | # loop through the gathered fragments, sorted globally by filename. | ||||||
| # `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf' | # `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf' | ||||||
|  | FILE= | ||||||
| for FILE in $tmpfiles_d ; do | for FILE in $tmpfiles_d ; do | ||||||
| 	LINENUM=0 | 	LINENUM=0 | ||||||
|  |  | ||||||
| @@ -353,7 +415,7 @@ for FILE in $tmpfiles_d ; do | |||||||
|  |  | ||||||
| 		# whine about invalid entries | 		# whine about invalid entries | ||||||
| 		case $cmd in | 		case $cmd in | ||||||
| 			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;; | 			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z|q|Q|h|H) ;; | ||||||
| 			*) warninvalid ; continue ;; | 			*) warninvalid ; continue ;; | ||||||
| 		esac | 		esac | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
| @@ -404,6 +404,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 +419,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 +445,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 |  | ||||||
|   | |||||||
| @@ -285,6 +285,9 @@ detect_container(const char *systype) | |||||||
| 		return RC_SYS_RKT; | 		return RC_SYS_RKT; | ||||||
| 	else if (file_regex("/proc/1/environ", "container=systemd-nspawn")) | 	else if (file_regex("/proc/1/environ", "container=systemd-nspawn")) | ||||||
| 		return RC_SYS_SYSTEMD_NSPAWN; | 		return RC_SYS_SYSTEMD_NSPAWN; | ||||||
|  | 	else if (exists("/.dockerenv")) | ||||||
|  | 		return RC_SYS_DOCKER; | ||||||
|  | 	/* old test, I'm not sure when this was valid. */ | ||||||
| 	else if (file_regex("/proc/1/environ", "container=docker")) | 	else if (file_regex("/proc/1/environ", "container=docker")) | ||||||
| 		return RC_SYS_DOCKER; | 		return RC_SYS_DOCKER; | ||||||
| #endif | #endif | ||||||
|   | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user