Compare commits
	
		
			20 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | ea047033c4 | ||
|   | 2bad4da891 | ||
|   | 3c5244fb6a | ||
|   | f1134f4efe | ||
|   | 9f68514f8a | ||
|   | b16625e625 | ||
|   | 5dc13a0ff2 | ||
|   | c094c75f34 | ||
|   | 0e925c511d | ||
|   | 9ae469289d | ||
|   | d8ed89971b | ||
|   | a537bd7abb | ||
|   | a13f2b91b2 | ||
|   | b5a7222fe0 | ||
|   | ace8dfdaae | ||
|   | 7056107725 | ||
|   | 5df511e9e4 | ||
|   | 60ede6b687 | ||
|   | c2f2533db0 | ||
|   | e627ad4804 | 
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -13,7 +13,7 @@ MK=			${TOP}/mk | |||||||
|  |  | ||||||
| include ${TOP}/Makefile.inc | include ${TOP}/Makefile.inc | ||||||
|  |  | ||||||
| SUBDIR=		conf.d etc init.d local.d man scripts sh src support sysctl.d | SUBDIR=		conf.d etc init.d local.d man scripts sh src sysctl.d | ||||||
|  |  | ||||||
| # Build pkgconfig or not | # Build pkgconfig or not | ||||||
| MKPKGCONFIG?=	yes | MKPKGCONFIG?=	yes | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| NAME=		openrc | NAME=		openrc | ||||||
| VERSION=	0.34.2 | VERSION=	0.22.3 | ||||||
| PKG=		${NAME}-${VERSION} | PKG=		${NAME}-${VERSION} | ||||||
|   | |||||||
							
								
								
									
										66
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										66
									
								
								NEWS.md
									
									
									
									
									
								
							| @@ -3,72 +3,6 @@ | |||||||
| 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.33 |  | ||||||
|  |  | ||||||
| This version removes the "service" binary which was just a copy of |  | ||||||
| "rc-service" provided for compatibility. |  | ||||||
|  |  | ||||||
| If you still need the "service" binary, as opposed to "rc-service", it is |  | ||||||
| recommended that you use something like Debian's init-system-helpers. |  | ||||||
| Otherwise, just use "rc-service" in place of "service". |  | ||||||
|  |  | ||||||
| ## OpenRC 0.31 |  | ||||||
|  |  | ||||||
| This version adds support for Control Groups version 2, which is |  | ||||||
| considered stable as of Linux-4.13. Please see /etc/rc.conf for |  | ||||||
| documentation on how to configure control groups. |  | ||||||
|  |  | ||||||
| ## OpenRC-0.28 |  | ||||||
|  |  | ||||||
| This version mounts efivars read only due to concerns about changes in |  | ||||||
| this file system making systems unbootable.  If you need to change something |  | ||||||
| in this path, you will need to re-mount it read-write, make the change |  | ||||||
| and re-mount it read-only. |  | ||||||
|  |  | ||||||
| Also, you can override this behavior by adding a line for efivars to |  | ||||||
| fstab if you want efivars mounted read-write. |  | ||||||
|  |  | ||||||
| For more information on this issue, see the following url: |  | ||||||
|  |  | ||||||
| https://github.com/openrc/openrc/issues/134 |  | ||||||
|  |  | ||||||
| ## OpenRC-0.25 |  | ||||||
|  |  | ||||||
| This version contains an OpenRC-specific implementation of init for |  | ||||||
| Linux which can be used in place of sysvinit or any other init process. |  | ||||||
| For information on its usage, see the man pages for openrc-init (8) and |  | ||||||
| openrc-shutdown (8). |  | ||||||
|  |  | ||||||
| ## OpenRC-0.24.1 |  | ||||||
|  |  | ||||||
| This version starts cleaning up the dependencies so that rc_parallel |  | ||||||
| will work correctly. |  | ||||||
|  |  | ||||||
| The first step in this process is to remove the 'before *' from the |  | ||||||
| depend functions in the clock services. This means some  services not |  | ||||||
| controlled by OpenRC may now start before instead of after the clock |  | ||||||
| service. If it is important for these services to start after the clock |  | ||||||
| service, they need to have 'after clock' added to their depend |  | ||||||
| functions. |  | ||||||
|  |  | ||||||
| ## OpenRC-0.24 |  | ||||||
|  |  | ||||||
| Since the deptree2dot tool and the perl requirement are completely |  | ||||||
| optional, the deptree2dot tool has been moved to the support directory. |  | ||||||
| As a result, the MKTOOLS=yes/no switch has been removed from the makefiles. |  | ||||||
|  |  | ||||||
| This version adds the agetty service which can be used to spawn |  | ||||||
| agetty on a specific terminal. This is currently documented in the |  | ||||||
| agetty-guide.md file at the top level of this distribution. |  | ||||||
|  |  | ||||||
| ## OpenRC-0.23 |  | ||||||
|  |  | ||||||
| The tmpfiles.d processing code, which was part of previous versions of |  | ||||||
| OpenRC, has been separated into its own package [1]. If you need to |  | ||||||
| process systemd style tmpfiles.d files, please install this package. |  | ||||||
|  |  | ||||||
| [1] https://github.com/openrc/opentmpfiles |  | ||||||
|  |  | ||||||
| ## OpenRC-0.22 | ## OpenRC-0.22 | ||||||
|  |  | ||||||
| In previous versions of OpenRC, configuration information was processed | In previous versions of OpenRC, configuration information was processed | ||||||
|   | |||||||
| @@ -28,9 +28,9 @@ MKPREFIX=yes | |||||||
| MKPKGCONFIG=no | MKPKGCONFIG=no | ||||||
| MKSELINUX=yes | MKSELINUX=yes | ||||||
| MKSTATICLIBS=no | MKSTATICLIBS=no | ||||||
| MKSYSVINIT=yes |  | ||||||
| MKTERMCAP=ncurses | MKTERMCAP=ncurses | ||||||
| MKTERMCAP=termcap | MKTERMCAP=termcap | ||||||
|  | MKTOOLS=yes | ||||||
| PKG_PREFIX=/usr/pkg | PKG_PREFIX=/usr/pkg | ||||||
| LOCAL_PREFIX=/usr/local | LOCAL_PREFIX=/usr/local | ||||||
| PREFIX=/usr/local | PREFIX=/usr/local | ||||||
| @@ -73,6 +73,10 @@ Obviously, if you're installing this onto a system that does not use | |||||||
| OpenRC by default then you may wish to backup the above listed files, | OpenRC by default then you may wish to backup the above listed files, | ||||||
| remove them and then install so that the OS hooks into OpenRC. | remove them and then install so that the OS hooks into OpenRC. | ||||||
|  |  | ||||||
|  | `init.d.misc` is not installed by default as the scripts will need | ||||||
|  | tweaking on a per distro basis. They are also non essential to the | ||||||
|  | operation of the system. | ||||||
|  |  | ||||||
| ## Reporting Bugs | ## Reporting Bugs | ||||||
|  |  | ||||||
| If you are using Gentoo Linux, bugs can be filed on their bugzilla under | If you are using Gentoo Linux, bugs can be filed on their bugzilla under | ||||||
|   | |||||||
| @@ -1,18 +0,0 @@ | |||||||
| # Setting up the agetty service in OpenRC |  | ||||||
|  |  | ||||||
| The agetty service is an OpenRC specific way to monitor and respawn a |  | ||||||
| getty, using agetty, on Linux. To use this method, make sure you aren't |  | ||||||
| spawning a getty manager for this port some other way (such as through |  | ||||||
| sysvinit/inittab), then run the following commands as root. |  | ||||||
|  |  | ||||||
| Note that [port] refers to the port you are spawning the getty on, for |  | ||||||
| example, tty1 or ttyS0. The full path to it, for example, /dev/tty1 |  | ||||||
| should not be used. |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| # cd /etc/init.d |  | ||||||
| # ln -s agetty agetty.[port] |  | ||||||
| # cd /etc/conf.d |  | ||||||
| # cp agetty agetty.[port] |  | ||||||
| #rc-update add agetty.[port] [runlevel] |  | ||||||
| ``` |  | ||||||
| @@ -1,7 +1,8 @@ | |||||||
| include ../mk/net.mk | include ../mk/net.mk | ||||||
|  |  | ||||||
| DIR=	${CONFDIR} | DIR=	${CONFDIR} | ||||||
| CONF=	bootmisc fsck hostname localmount netmount swap urandom ${CONF-${OS}} | CONF=	bootmisc fsck hostname localmount netmount swap urandom tmpfiles \ | ||||||
|  | 		${CONF-${OS}} | ||||||
|  |  | ||||||
| ifeq (${MKNET},yes) | ifeq (${MKNET},yes) | ||||||
| CONF+= network staticroute | CONF+= network staticroute | ||||||
| @@ -12,8 +13,8 @@ include ${MK}/os.mk | |||||||
|  |  | ||||||
| CONF-FreeBSD=	ipfw modules moused powerd rarpd savecore syscons | CONF-FreeBSD=	ipfw modules moused powerd rarpd savecore syscons | ||||||
|  |  | ||||||
| CONF-Linux=	agetty consolefont devfs dmesg hwclock keymaps killprocs modules \ | CONF-Linux=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab \ | ||||||
| 	mtab net-online | 	net-online | ||||||
|  |  | ||||||
| CONF-NetBSD=	moused rarpd savecore | CONF-NetBSD=	moused rarpd savecore | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,11 +0,0 @@ | |||||||
| # make agetty quiet |  | ||||||
| #quiet="yes" |  | ||||||
|  |  | ||||||
| # Set the baud rate of the terminal line |  | ||||||
| #baud="" |  | ||||||
|  |  | ||||||
| # set the terminal type |  | ||||||
| #term_type="linux" |  | ||||||
|  |  | ||||||
| # extra options to pass to agetty for this port |  | ||||||
| #agetty_options="" |  | ||||||
| @@ -1,6 +1,3 @@ | |||||||
| # If you wish to pass any options to kill_all during shutdown, | # If you wish to pass any options to killall5 during shutdown, | ||||||
| # you should do so here. | # you should do so here. | ||||||
| # |  | ||||||
| # The setting is called killall5_opts because the options here are meant |  | ||||||
| # to be identical to those you could pass to killall5. |  | ||||||
| killall5_opts="" | killall5_opts="" | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| #no_umounts="/dir1:/var/dir2" | #no_umounts="/dir1:/var/dir2" | ||||||
| # | # | ||||||
| # Mark certain mount points as critical. | # Mark certain mount points as critical. | ||||||
| # This contains a space separated list of mount points which should be | # This contains aspace separated list of mount points which should be | ||||||
| # considered critical. If one of these mount points cannot be mounted, | # considered critical. If one of these mount points cannot be mounted, | ||||||
| # localmount will fail. | # localmount will fail. | ||||||
| # By default, this is empty. | # By default, this is empty. | ||||||
|   | |||||||
| @@ -3,13 +3,10 @@ | |||||||
| # default is all interfaces that support ethernet. | # default is all interfaces that support ethernet. | ||||||
| #interfaces="" | #interfaces="" | ||||||
|  |  | ||||||
| # This setting controls whether a ping test is included in the test for | # This setting controls whether a ping to the default gateway is | ||||||
| # network connectivity after all interfaces are active. | # included in the test for network connectivity after all interfaces | ||||||
| #include_ping_test=no | # are active. | ||||||
|  | #ping_default_gateway=no | ||||||
| # This setting is the host to attempt to ping if the above is yes. |  | ||||||
| # The default is google.com. |  | ||||||
| #ping_test_host=some.host.name |  | ||||||
|  |  | ||||||
| # The timeout setting controls how long the net-online service waits | # The timeout setting controls how long the net-online service waits | ||||||
| # for the network to be configured. | # for the network to be configured. | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								conf.d/tmpfiles
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								conf.d/tmpfiles
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | # Extra options for tmpfiles.sh | ||||||
|  | #tmpfiles_opts="--verbose" | ||||||
|  | tmpfiles_opts="" | ||||||
							
								
								
									
										81
									
								
								etc/rc.conf
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								etc/rc.conf
									
									
									
									
									
								
							| @@ -48,7 +48,7 @@ | |||||||
| # /var/log/rc.log | # /var/log/rc.log | ||||||
| # NOTE: Linux systems require the devfs service to be started before | # NOTE: Linux systems require the devfs service to be started before | ||||||
| # logging can take place and as such cannot log the sysinit runlevel. | # logging can take place and as such cannot log the sysinit runlevel. | ||||||
| #rc_logger="NO" | #rc_logger="YES" | ||||||
|  |  | ||||||
| # Through rc_log_path you can specify a custom log file. | # Through rc_log_path you can specify a custom log file. | ||||||
| # The default value is: /var/log/rc.log | # The default value is: /var/log/rc.log | ||||||
| @@ -178,11 +178,6 @@ | |||||||
| # "xenU"           - XenU Domain (Linux and NetBSD) | # "xenU"           - XenU Domain (Linux and NetBSD) | ||||||
| #rc_sys="" | #rc_sys="" | ||||||
|  |  | ||||||
| # if  you use openrc-init, which is currently only available on Linux, |  | ||||||
| # this is the default runlevel to activate after "sysinit" and "boot" |  | ||||||
| # when booting. |  | ||||||
| #rc_default_runlevel="default" |  | ||||||
|  |  | ||||||
| # on Linux and Hurd, this is the number of ttys allocated for logins | # on Linux and Hurd, this is the number of ttys allocated for logins | ||||||
| # It is used in the consolefont, keymaps, numlock and termencoding | # It is used in the consolefont, keymaps, numlock and termencoding | ||||||
| # service scripts. | # service scripts. | ||||||
| @@ -191,43 +186,13 @@ rc_tty_number=12 | |||||||
| ############################################################################## | ############################################################################## | ||||||
| # LINUX CGROUPS RESOURCE MANAGEMENT | # LINUX CGROUPS RESOURCE MANAGEMENT | ||||||
|  |  | ||||||
| # This sets the mode used to mount cgroups. | # If you have cgroups turned on in your kernel, this switch controls | ||||||
| # "hybrid" mounts cgroups version 2 on /sys/fs/cgroup/unified and | # whether or not a group for each controller is mounted under | ||||||
| # cgroups version 1 on /sys/fs/cgroup. | # /sys/fs/cgroup. | ||||||
| # "legacy" mounts cgroups version 1 on /sys/fs/cgroup | # None of the other options in this section work if this is set to "NO". | ||||||
| # "unified" mounts cgroups version 2 on /sys/fs/cgroup |  | ||||||
| #rc_cgroup_mode="hybrid" |  | ||||||
|  |  | ||||||
| # This is a list of controllers which should be enabled for cgroups version 2. |  | ||||||
| # If hybrid mode is being used, controllers listed here will not be |  | ||||||
| # available for cgroups version 1. |  | ||||||
| # This is a global setting. |  | ||||||
| #rc_cgroup_controllers="" |  | ||||||
|  |  | ||||||
| # This variable contains the cgroups version 2 settings for your services. |  | ||||||
| # If this is set in this file, the settings will apply to all 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 setting and value followed by a newline. |  | ||||||
| # Multiple settings and values can be specified. |  | ||||||
| # For example, you would use this to set the maximum memory and maximum |  | ||||||
| # number of pids for a service. |  | ||||||
| #rc_cgroup_settings=" |  | ||||||
| #memory.max 10485760 |  | ||||||
| #pids.max max |  | ||||||
| #" |  | ||||||
| # |  | ||||||
| # For more information about the adjustments that can be made with |  | ||||||
| # cgroups version 2, see Documentation/cgroups-v2.txt in the linux kernel |  | ||||||
| # source tree. |  | ||||||
| #rc_cgroup_settings="" |  | ||||||
|  |  | ||||||
| # This switch controls whether or not cgroups version 1 controllers are |  | ||||||
| # individually mounted under |  | ||||||
| # /sys/fs/cgroup in hybrid or legacy mode. |  | ||||||
| #rc_controller_cgroups="YES" | #rc_controller_cgroups="YES" | ||||||
|  |  | ||||||
| # The following settings allow you to set up values for the cgroups version 1 | # The following settings allow you to set up values for the cgroup | ||||||
| # controllers for your services. | # controllers for your services. | ||||||
| # They can be set in this file;, however, if you do this, the settings | # They can be set in this file;, however, if you do this, the settings | ||||||
| # will apply to all of your services. | # will apply to all of your services. | ||||||
| @@ -241,9 +206,8 @@ rc_tty_number=12 | |||||||
| # cpu.shares 512 | # cpu.shares 512 | ||||||
| # " | # " | ||||||
| # | # | ||||||
| # For more information about the adjustments that can be made with | #For more information about the adjustments that can be made with | ||||||
| # cgroups version 1, see Documentation/cgroups-v1/* in the linux kernel | #cgroups, see Documentation/cgroups/* in the linux kernel source tree. | ||||||
| # source tree. |  | ||||||
|  |  | ||||||
| # Set the blkio controller settings for this service. | # Set the blkio controller settings for this service. | ||||||
| #rc_cgroup_blkio="" | #rc_cgroup_blkio="" | ||||||
| @@ -277,33 +241,10 @@ rc_tty_number=12 | |||||||
|  |  | ||||||
| # Set this to YES if you want all of the processes in a service's cgroup | # Set this to YES if you want all of the processes in a service's cgroup | ||||||
| # killed when the service is stopped or restarted. | # killed when the service is stopped or restarted. | ||||||
| # Be aware that setting this to yes means all of a service's | # This should not be set globally because it kills all of the service's | ||||||
| # child processes will be killed. Keep this in mind if you set this to | # child processes, and most of the time this is undesirable. Please set | ||||||
| # yes here instead of for the individual services in | # it in /etc/conf.d/<service>. | ||||||
| # /etc/conf.d/<service>. |  | ||||||
| # To perform this cleanup manually for a stopped service, you can | # To perform this cleanup manually for a stopped service, you can | ||||||
| # execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or | # execute cgroup_cleanup with /etc/init.d/<service> cgroup_cleanup or | ||||||
| # rc-service <service> cgroup_cleanup. | # rc-service <service> cgroup_cleanup. | ||||||
| # The process followed in this cleanup is the following: |  | ||||||
| # 1. send stopsig (sigterm if it isn't set) to all processes left in the |  | ||||||
| # cgroup immediately followed by sigcont. |  | ||||||
| # 2. Send sighup to all processes in the cgroup if rc_send_sighup is |  | ||||||
| # yes. |  | ||||||
| # 3. delay for rc_timeout_stopsec seconds. |  | ||||||
| # 4. send sigkill to all processes in the cgroup unless disabled by |  | ||||||
| # setting rc_send_sigkill to no. |  | ||||||
| # rc_cgroup_cleanup="NO" | # rc_cgroup_cleanup="NO" | ||||||
|  |  | ||||||
| # If this is yes, we will send sighup to the processes in the cgroup |  | ||||||
| # immediately after stopsig and sigcont. |  | ||||||
| #rc_send_sighup="NO" |  | ||||||
|  |  | ||||||
| # This is the amount of time in seconds that we delay after sending sigcont |  | ||||||
| # and optionally sighup, before we optionally send sigkill to all |  | ||||||
| # processes in the # cgroup. |  | ||||||
| # The default is 90 seconds. |  | ||||||
| #rc_timeout_stopsec="90" |  | ||||||
|  |  | ||||||
| # If this is set to no, we do not send sigkill to all processes in the |  | ||||||
| # cgroup. |  | ||||||
| #rc_send_sigkill="YES" |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ trap : SIGINT SIGQUIT | |||||||
|  |  | ||||||
| # Try and use stuff in /lib over anywhere else so we can shutdown | # Try and use stuff in /lib over anywhere else so we can shutdown | ||||||
| # local mounts correctly. | # local mounts correctly. | ||||||
| LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" ; export LD_LIBRARY_PATH | LD_LIBRARY_PATH="/lib${LD_LIBRARY_PATH:+:}${LDLIBRARY_PATH}" ; export LD_LIBRARY_PATH | ||||||
|  |  | ||||||
| # If $TERM is not set then assume default of @TERM@ | # If $TERM is not set then assume default of @TERM@ | ||||||
| # This gives us a nice colour boot :) | # This gives us a nice colour boot :) | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								guide.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								guide.md
									
									
									
									
									
								
							| @@ -53,6 +53,9 @@ Calling `openrc` without any arguments will try to reset all services so | |||||||
| that the current runlevel is satisfied; if you manually started apache it will be  | that the current runlevel is satisfied; if you manually started apache it will be  | ||||||
| stopped, and if squid died but is in the current runlevel it'll be restarted. | stopped, and if squid died but is in the current runlevel it'll be restarted. | ||||||
|  |  | ||||||
|  | There is a `service` helper that emulates the syntax seen on e.g. older Redhat | ||||||
|  | and Ubuntu (`service nginx start` etc.) | ||||||
|  |  | ||||||
| # Runlevels | # Runlevels | ||||||
|  |  | ||||||
| OpenRC has a concept of runlevels, similar to what sysvinit historically  | OpenRC has a concept of runlevels, similar to what sysvinit historically  | ||||||
| @@ -195,7 +198,7 @@ script: | |||||||
| command= | command= | ||||||
| command_args= | command_args= | ||||||
| pidfile= | pidfile= | ||||||
| ``` | `` | ||||||
|  |  | ||||||
| Thus the 'smallest' service scripts can be half a dozen lines long | Thus the 'smallest' service scripts can be half a dozen lines long | ||||||
|  |  | ||||||
| @@ -238,36 +241,17 @@ messages to a file), and a few others. | |||||||
|  |  | ||||||
| # ulimit and CGroups | # ulimit and CGroups | ||||||
|  |  | ||||||
| Setting `ulimit` and `nice` values per service can be done through the | Setting `ulimit` and `nice` values per service can be done through the `rc_ulimit` | ||||||
| `rc_ulimit` variable. | variable. | ||||||
|  |  | ||||||
| Under Linux, OpenRC can use cgroups for process management as well. Once | Under Linux, OpenRC can optionally use CGroups for process management. | ||||||
| the kernel is configured appropriately, the `rc_cgroup_mode` setting in | By default each service script's processes are migrated to their own CGroup. | ||||||
| /etc/rc.conf should be used to control whether cgroups version one,, |  | ||||||
| two, or both are used. The default is to use both if they are available. |  | ||||||
|  |  | ||||||
| By changing certain settings in the service's `conf.d` file limits can be |  | ||||||
| enforced per service. These settings are documented in detail in the |  | ||||||
| default /etc/rc.conf under `LINUX CGROUPS RESOURCE MANAGEMENT`. |  | ||||||
|  |  | ||||||
| # Dealing with Orphaned Processes |  | ||||||
|  |  | ||||||
| It is possible to get into a state where there are orphaned processes |  | ||||||
| running which were part of a service. For example, if you are monitoring |  | ||||||
| a service with supervise-daemon and supervise-daemon dies for an unknown |  | ||||||
| reason. The way to deal with this will be different for each system. |  | ||||||
|  |  | ||||||
| On Linux systems with cgroups enabled, the cgroup_cleanup command is |  | ||||||
| added to all services. You can run it manually, when the service is |  | ||||||
| stopped, by using: |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| # rc-service someservice cgroup_cleanup |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| The `rc_cgroup_cleanup` setting can be changed to yes to make this |  | ||||||
| happen automatically when the service is stopped. |  | ||||||
|  |  | ||||||
|  | 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 | # Caching | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,11 +1,9 @@ | |||||||
| DIR=	${DATADIR}/support/init.d.examples | DIR=	${INITDIR} | ||||||
| INC=	README.md |  | ||||||
| SRCS=	avahi-dnsconfd.in avahid.in dhcpcd.in dbus.in \
 | SRCS=	avahi-dnsconfd.in avahid.in dhcpcd.in dbus.in \
 | ||||||
| 	hald.in named.in ntpd.in \
 | 	hald.in named.in ntpd.in \
 | ||||||
| 	openvpn.in polkitd.in sshd.in wpa_supplicant.in | 	openvpn.in polkitd.in sshd.in wpa_supplicant.in | ||||||
| BIN=	${OBJS} |  | ||||||
| 
 | 
 | ||||||
| MK=	../../mk | MK=	../mk | ||||||
| 
 | 
 | ||||||
| SED_EXTRA+= -e 's:@VARBASE@:/var:g' | SED_EXTRA+= -e 's:@VARBASE@:/var:g' | ||||||
| 
 | 
 | ||||||
| @@ -39,11 +39,6 @@ find_wireless() | |||||||
| 			fi | 			fi | ||||||
| 		done | 		done | ||||||
| 		;; | 		;; | ||||||
| 	FreeBSD) |  | ||||||
| 		for iface in $(sysctl -b net.wlan.devices 2>/dev/null); do |  | ||||||
| 			echo "${iface##*/}" |  | ||||||
| 		done |  | ||||||
| 		;; |  | ||||||
| 	*) | 	*) | ||||||
| 		for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do | 		for iface in /dev/net/* $(ifconfig -l 2>/dev/null); do | ||||||
| 			if ifconfig "${iface##*/}" 2>/dev/null | \ | 			if ifconfig "${iface##*/}" 2>/dev/null | \ | ||||||
							
								
								
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,3 @@ | |||||||
| agetty |  | ||||||
| binfmt | binfmt | ||||||
| modules-load | modules-load | ||||||
| bootmisc | bootmisc | ||||||
| @@ -46,3 +45,5 @@ syslogd | |||||||
| termencoding | termencoding | ||||||
| ttys | ttys | ||||||
| wscons | wscons | ||||||
|  | tmpfiles.dev | ||||||
|  | tmpfiles.setup | ||||||
|   | |||||||
| @@ -2,8 +2,8 @@ include ../mk/net.mk | |||||||
|  |  | ||||||
| DIR=	${INITDIR} | DIR=	${INITDIR} | ||||||
| SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \ | SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \ | ||||||
| 	netmount.in osclock.in root.in savecache.in swap.in swclock.in \ | 	netmount.in osclock.in root.in savecache.in swap.in tmpfiles.setup.in  \ | ||||||
| 	sysctl.in runsvdir.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? | ||||||
| @@ -19,11 +19,11 @@ SRCS-FreeBSD=	hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \ | |||||||
| 		rc-enabled.in rpcbind.in savecore.in syslogd.in | 		rc-enabled.in rpcbind.in savecore.in syslogd.in | ||||||
| # These are FreeBSD specific | # These are FreeBSD specific | ||||||
| SRCS-FreeBSD+=	adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \ | SRCS-FreeBSD+=	adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \ | ||||||
| 		modules-load.in mixer.in nscd.in powerd.in syscons.in | 		modules.in modules-load.in mixer.in nscd.in powerd.in syscons.in | ||||||
|  |  | ||||||
| SRCS-Linux=	agetty.in binfmt.in devfs.in dmesg.in hwclock.in consolefont.in \ | SRCS-Linux=	binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \ | ||||||
| 	keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \ | 		killprocs.in modules.in modules-load.in mount-ro.in mtab.in numlock.in \ | ||||||
| 	numlock.in procfs.in net-online.in sysfs.in termencoding.in | 		procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in | ||||||
|  |  | ||||||
| # Generic BSD scripts | # Generic BSD scripts | ||||||
| SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \ | SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \ | ||||||
|   | |||||||
| @@ -23,7 +23,6 @@ fi | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after swclock |  | ||||||
| 	provide clock | 	provide clock | ||||||
| 	# BSD adjkerntz needs to be able to write to /etc | 	# BSD adjkerntz needs to be able to write to /etc | ||||||
| 	if [ "$clock" = "UTC" -a -e /etc/wall_cmos_clock ] || | 	if [ "$clock" = "UTC" -a -e /etc/wall_cmos_clock ] || | ||||||
|   | |||||||
| @@ -1,33 +0,0 @@ | |||||||
| #!@SBINDIR@/openrc-run |  | ||||||
| # Copyright (c) 2017 The OpenRC Authors. |  | ||||||
| # See the Authors file at the top-level directory of this distribution and |  | ||||||
| # https://github.com/OpenRC/openrc/blob/master/AUTHORS |  | ||||||
| # |  | ||||||
| # This file is part of OpenRC. It is subject to the license terms in |  | ||||||
| # the LICENSE file found in the top-level directory of this |  | ||||||
| # distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE |  | ||||||
| # This file may not be copied, modified, propagated, or distributed |  | ||||||
| # except according to the terms contained in the LICENSE file. |  | ||||||
|  |  | ||||||
| description="start agetty on a terminal line" |  | ||||||
| supervisor=supervise-daemon |  | ||||||
| port="${RC_SVCNAME#*.}" |  | ||||||
| term_type="${term_type:-linux}" |  | ||||||
| command=/sbin/agetty |  | ||||||
| command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}" |  | ||||||
| pidfile="/run/${RC_SVCNAME}.pid" |  | ||||||
| export EINFO_QUIET="${quiet:-yes}" |  | ||||||
|  |  | ||||||
| depend() { |  | ||||||
| 	after local |  | ||||||
| 	keyword -prefix |  | ||||||
| } |  | ||||||
|  |  | ||||||
| start_pre() { |  | ||||||
| 	if [ -z "$port" ]; then |  | ||||||
| 		eerror "${RC_SVCNAME} cannot be started directly. You must create" |  | ||||||
| 		eerror "symbolic links to it for the ports you want to start" |  | ||||||
| 		eerror "agetty on and add those to the appropriate runlevels." |  | ||||||
| 		return 1 |  | ||||||
| 	fi |  | ||||||
| } |  | ||||||
| @@ -13,7 +13,7 @@ description="Register misc binary format handlers" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock procfs | 	after procfs | ||||||
| 	use modules devfs | 	use modules devfs | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|   | |||||||
| @@ -71,8 +71,7 @@ cleanup_var_run_dir() | |||||||
| 	ebegin "Cleaning /var/run" | 	ebegin "Cleaning /var/run" | ||||||
| 	for x in $(find /var/run ! -type d ! -name utmp \ | 	for x in $(find /var/run ! -type d ! -name utmp \ | ||||||
| 		! -name random-seed ! -name dev.db \ | 		! -name random-seed ! -name dev.db \ | ||||||
| 		! -name ld-elf.so.hints ! -name ld-elf32.so.hints \ | 		! -name ld-elf.so.hints ! -name ld.so.hints); | ||||||
| 		! -name ld.so.hints); |  | ||||||
| 	do | 	do | ||||||
| 		# Clean stale sockets | 		# Clean stale sockets | ||||||
| 		if [ -S "$x" ]; then | 		if [ -S "$x" ]; then | ||||||
| @@ -241,7 +240,7 @@ stop() | |||||||
| { | { | ||||||
| 	# Write a halt record if we're shutting down | 	# Write a halt record if we're shutting down | ||||||
| 	if [ "$RC_RUNLEVEL" = shutdown ]; then | 	if [ "$RC_RUNLEVEL" = shutdown ]; then | ||||||
| 		[ "$RC_UNAME" = Linux ] && openrc-shutdown -w | 		[ "$RC_UNAME" = Linux ] && halt -w | ||||||
| 		if [ "$RC_SYS" = OPENVZ ]; then | 		if [ "$RC_SYS" = OPENVZ ]; then | ||||||
| 			yesno $RC_REBOOT && printf "" >/reboot | 			yesno $RC_REBOOT && printf "" >/reboot | ||||||
| 		fi | 		fi | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ description="Creates the dev database" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need localmount | 	need localmount | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ | |||||||
| description="Configures a specific kernel dump device." | description="Configures a specific kernel dump device." | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	after clock |  | ||||||
| 	need swap | 	need swap | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,6 @@ _IFS=" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	use dev clock modules | 	use dev clock modules | ||||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,6 @@ extra_commands="reset" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use root | 	use root | ||||||
| 	after clock |  | ||||||
| 	before devd net | 	before devd net | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,9 +11,7 @@ | |||||||
|  |  | ||||||
| description="Sets the hostname of the machine." | description="Sets the hostname of the machine." | ||||||
|  |  | ||||||
| depend() | depend() { | ||||||
| { |  | ||||||
| 	after clock |  | ||||||
| 	keyword -docker -lxc -prefix -systemd-nspawn | 	keyword -docker -lxc -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -21,12 +19,12 @@ start() | |||||||
| { | { | ||||||
| 	local h source x | 	local h source x | ||||||
| 	if [ -s @SYSCONFDIR@/hostname ] && [ -r @SYSCONFDIR@/hostname ]; then | 	if [ -s @SYSCONFDIR@/hostname ] && [ -r @SYSCONFDIR@/hostname ]; then | ||||||
| 		read h x <@SYSCONFDIR@/hostname | 	read h x <@SYSCONFDIR@/hostname | ||||||
| 		source="from @SYSCONFDIR@/hostname" | 	source=" from @SYSCONFDIR@/hostname" | ||||||
| 	else | 	else | ||||||
| 		# HOSTNAME variable used to be defined in caps in conf.d/hostname. | 		# HOSTNAME variable used to be defined in caps in conf.d/hostname. | ||||||
| 		# It is also a magic variable in bash. | 		# It is also a magic variable in bash. | ||||||
| 		h=${hostname:-${HOSTNAME}} # checkbashisms: false positive (HOSTNAME var) | 		h=${hostname-${HOSTNAME}} # checkbashisms: false positive | ||||||
| 	fi | 	fi | ||||||
| 	if [ -z "$h" ]; then | 	if [ -z "$h" ]; then | ||||||
| 		einfo "Using default system hostname" | 		einfo "Using default system hostname" | ||||||
|   | |||||||
| @@ -33,6 +33,8 @@ depend() | |||||||
| 	want modules | 	want modules | ||||||
| 	if yesno $clock_adjfile; then | 	if yesno $clock_adjfile; then | ||||||
| 		use root | 		use root | ||||||
|  | 	else | ||||||
|  | 		before * | ||||||
| 	fi | 	fi | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ description="Applies a keymap for the consoles." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount termencoding | 	need localmount termencoding | ||||||
| 	after bootmisc clock | 	after bootmisc | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -19,9 +19,9 @@ depend() | |||||||
| start() | start() | ||||||
| { | { | ||||||
| 	ebegin "Terminating remaining processes" | 	ebegin "Terminating remaining processes" | ||||||
| 	kill_all 15 ${killall5_opts} | 	killall5 -15 ${killall5_opts} | ||||||
| 	eend 0 | 	eend 0 | ||||||
| 	ebegin "Killing remaining processes" | 	ebegin "Killing remaining processes" | ||||||
| 	kill_all 9 ${killall5_opts} | 	killall5 -9 ${killall5_opts} | ||||||
| 	eend 0 | 	eend 0 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,18 +14,17 @@ description="Mounts disks and swap according to /etc/fstab." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need fsck | 	need fsck | ||||||
| 	use lvm modules mtab root | 	use lvm modules mtab | ||||||
| 	after clock lvm modules root | 	after lvm modules | ||||||
| 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
| { | { | ||||||
| 	# Mount local filesystems in /etc/fstab. | 	# Mount local filesystems in /etc/fstab. | ||||||
| 	# The types variable must start with no, and must be a type |  | ||||||
| 	local critical= types="noproc" x= no_netdev= rc= | 	local critical= types="noproc" x= no_netdev= rc= | ||||||
| 	for x in $net_fs_list $extra_net_fs_list; do | 	for x in $net_fs_list $extra_net_fs_list; do | ||||||
| 		types="${types},${x}" | 		types="${types},no${x}" | ||||||
| 	done | 	done | ||||||
|  |  | ||||||
| 	if [ "$RC_UNAME" = Linux ]; then | 	if [ "$RC_UNAME" = Linux ]; then | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ description="Configures the loopback interface." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	keyword -jail -prefix -systemd-nspawn -vserver | 	keyword -jail -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -30,6 +29,7 @@ start() | |||||||
| 	else | 	else | ||||||
| 		ebegin "Bringing up network interface lo0" | 		ebegin "Bringing up network interface lo0" | ||||||
| 		ifconfig lo0 127.0.0.1 netmask 255.0.0.0 | 		ifconfig lo0 127.0.0.1 netmask 255.0.0.0 | ||||||
|  | 		route -q add -inet 127.0.0.0 -netmask 255.0.0.0 127.0.0.1 | ||||||
| 	fi | 	fi | ||||||
| 	eend $? | 	eend $? | ||||||
| } | } | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ FreeBSD_modules() | |||||||
|  |  | ||||||
| Linux_modules() | Linux_modules() | ||||||
| { | { | ||||||
| 	# Should not fail if kernel does not have module | 	# Should not fail if kernel do not have module | ||||||
| 	# support compiled in ... | 	# support compiled in ... | ||||||
| 	[ ! -f /proc/modules ] && return 0 | 	[ ! -f /proc/modules ] && return 0 | ||||||
|  |  | ||||||
| @@ -48,21 +48,22 @@ Linux_modules() | |||||||
| 		x=${x%.*} | 		x=${x%.*} | ||||||
| 	done | 	done | ||||||
|  |  | ||||||
| 	local list= x= xx= y= args= mpargs= a= | 	local list= x= xx= y= args= mpargs= cnt=0 a= | ||||||
| 	for x in $kv_variant_list ; do | 	for x in $kv_variant_list ; do | ||||||
| 		eval list=\$modules_$(shell_var "$x") | 		eval list=\$modules_$(shell_var "$x") | ||||||
| 		[ -n "$list" ] && break | 		[ -n "$list" ] && break | ||||||
| 	done | 	done | ||||||
| 	[ -z "$list" ] && list=$modules | 	[ -z "$list" ] && list=$modules | ||||||
|  |  | ||||||
| 	[ -n "$list" ] && ebegin "Loading kernel modules" |  | ||||||
| 	for x in $list; do | 	for x in $list; do | ||||||
| 		a=${x#*:} | 		a=${x#*:} | ||||||
| 		if [ "$a" = "$x" ]; then | 		if [ "$a" = "$x" ]; then | ||||||
| 			unset mpargs | 			unset mpargs | ||||||
|  | 			ebegin "Loading module $x" | ||||||
| 		else | 		else | ||||||
| 			x=${x%%:*} | 			x=${x%%:*} | ||||||
| 			mpargs="-o $a" | 			mpargs="-o $a" | ||||||
|  | 			ebegin "Loading module $x as $a" | ||||||
| 		fi | 		fi | ||||||
| 		aa=$(shell_var "$a") | 		aa=$(shell_var "$a") | ||||||
| 		xx=$(shell_var "$x") | 		xx=$(shell_var "$x") | ||||||
| @@ -74,9 +75,10 @@ Linux_modules() | |||||||
| 		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 --use-blacklist --verbose "$mpargs" "$x" "$args" | 		eval modprobe --use-blacklist -q "$mpargs" "$x" "$args" | ||||||
|  | 		eend $? "Failed to load $x" && : $(( cnt += 1 )) | ||||||
| 	done | 	done | ||||||
| 	[ -n "$list" ] && eend | 	einfo "Autoloaded $cnt module(s)" | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ description="Re-mount filesytems read-only for a clean reboot." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after killprocs savecache | 	need killprocs savecache | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ description="Update /etc/mtab to match what the kernel knows about" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need root | 	need root | ||||||
| 	keyword -prefix -systemd-nspawn | 	keyword -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|   | |||||||
| @@ -15,7 +15,6 @@ depend() | |||||||
| { | { | ||||||
| 	after modules | 	after modules | ||||||
| 	need sysfs | 	need sysfs | ||||||
| 	provide network-online |  | ||||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -28,6 +27,19 @@ get_interfaces() | |||||||
| 	done | 	done | ||||||
| } | } | ||||||
|  |  | ||||||
|  | get_default_gateway() | ||||||
|  | { | ||||||
|  | 	local cmd gateway | ||||||
|  | 	if command -v ip > /dev/null 2>&1; then | ||||||
|  | 		cmd="ip route show" | ||||||
|  | 	else | ||||||
|  | 		cmd=route | ||||||
|  | 	fi | ||||||
|  | 	set -- $($cmd | grep default) | ||||||
|  | 	[ "$2" != via ] && gateway="$2" || gateway="$3" | ||||||
|  | 	printf "%s" $gateway | ||||||
|  | } | ||||||
|  |  | ||||||
| start () | start () | ||||||
| { | { | ||||||
| 	local carriers configured dev gateway ifcount infinite | 	local carriers configured dev gateway ifcount infinite | ||||||
| @@ -54,15 +66,10 @@ start () | |||||||
| 	: $((timeout -= 1)) | 	: $((timeout -= 1)) | ||||||
|  done |  done | ||||||
|  ! $infinite && [ $timeout -eq 0 ] && rc=1 |  ! $infinite && [ $timeout -eq 0 ] && rc=1 | ||||||
|  include_ping_test=${include_ping_test:-${ping_default_gateway}} |  if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then | ||||||
|  if [ -n "${ping_default_gateway}" ]; then |  	gateway="$(get_default_gateway)" | ||||||
|  ewarn "ping_default_gateway is deprecated, please use include_ping_test" |  	if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then | ||||||
|  fi | 		rc=1 | ||||||
|  if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then |  | ||||||
|  	ping_test_host="${ping_test_host:-google.com}" |  | ||||||
|  	if [ -n "$ping_test_host" ]; then |  | ||||||
| 		ping -c 1 $ping_test_host > /dev/null 2>&1 |  | ||||||
| 		rc=$? |  | ||||||
| 	fi | 	fi | ||||||
|  fi |  fi | ||||||
|  eend $rc "The network is offline" |  eend $rc "The network is offline" | ||||||
|   | |||||||
| @@ -20,12 +20,10 @@ depend() | |||||||
| 			*) mywant="$mywant nfsclient"; break ;; | 			*) mywant="$mywant nfsclient"; break ;; | ||||||
| 		esac | 		esac | ||||||
| 	done | 	done | ||||||
| 	after root |  | ||||||
|  	config /etc/fstab |  	config /etc/fstab | ||||||
| 	want $mywant | 	want $mywant | ||||||
| 	use afc-client amd openvpn | 	use afc-client amd openvpn | ||||||
| 	use dns | 	use dns | ||||||
| 	use root |  | ||||||
| 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ __nl=" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need localmount | ||||||
| 	after bootmisc clock | 	after bootmisc | ||||||
| 	if [ -n "$(interfaces)" ]; then | 	if [ -n "$(interfaces)" ]; then | ||||||
| 		provide net | 		provide net | ||||||
| 	fi | 	fi | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ required_files="/etc/newsyslog.conf" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ description="Mounts misc filesystems in /proc." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	use devfs | 	use devfs | ||||||
| 	want modules | 	want modules | ||||||
| 	need localmount | 	need localmount | ||||||
|   | |||||||
| @@ -13,7 +13,6 @@ description="Mount the root fs read/write" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need fsck | 	need fsck | ||||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ description="Saves a kernel dump." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need dumpon localmount | 	need dumpon localmount | ||||||
| 	after clock |  | ||||||
| 	before encswap | 	before encswap | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,9 +14,9 @@ | |||||||
| description="Configures static routes." | description="Configures static routes." | ||||||
| __nl=" | __nl=" | ||||||
| " | " | ||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	provide net | 	provide net | ||||||
| 	use network | 	use network | ||||||
| 	keyword -jail -prefix -vserver | 	keyword -jail -prefix -vserver | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	before fsck | 	before fsck | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	before localmount | 	before localmount | ||||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|   | |||||||
| @@ -13,6 +13,7 @@ description="Sets the local clock to the mtime of a given file." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
|  | 	before * | ||||||
| 	provide clock | 	provide clock | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,7 +10,6 @@ | |||||||
| # except according to the terms contained in the LICENSE file. | # except according to the terms contained in the LICENSE file. | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	after clock |  | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	before bootmisc logger | 	before bootmisc logger | ||||||
| 	keyword -prefix -systemd-nspawn -vserver | 	keyword -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										135
									
								
								init.d/sysfs.in
									
									
									
									
									
								
							
							
						
						
									
										135
									
								
								init.d/sysfs.in
									
									
									
									
									
								
							| @@ -15,6 +15,7 @@ sysfs_opts=nodev,noexec,nosuid | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
|  | 	want modules | ||||||
| 	keyword -docker -lxc -prefix -systemd-nspawn -vserver | 	keyword -docker -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -98,123 +99,59 @@ mount_misc() | |||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	# set up kernel support for efivarfs | 	# set up kernel support for efivarfs | ||||||
| 	if [ -d /sys/firmware/efi/efivars ] && | 	# The presence of /sys/firmware/efi indicates that the system was | ||||||
| 		! mountinfo -q /sys/firmware/efi/efivars; then | 	# booted in efi mode. | ||||||
| 		ebegin "Mounting efivarfs filesystem" | 	if [ -d /sys/firmware/efi ]; then | ||||||
| 		mount -n -t efivarfs -o ro \ | 		if [ ! -d /sys/firmware/efi/efivars ] && | ||||||
| 			efivarfs /sys/firmware/efi/efivars 2> /dev/null | 			modprobe -q efivarfs; then | ||||||
| 		eend 0 | 			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 | 	fi | ||||||
| } | } | ||||||
|  |  | ||||||
| cgroup1_base() | mount_cgroups() | ||||||
| { | { | ||||||
| 	grep -qw cgroup /proc/filesystems || return 0 | 	# set up kernel support for cgroups | ||||||
| 	if ! mountinfo -q /sys/fs/cgroup; then | 	if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then | ||||||
| 		ebegin "Mounting cgroup filesystem" | 		if grep -qs cgroup /proc/filesystems; then | ||||||
| 		local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}" | 			ebegin "Mounting cgroup filesystem" | ||||||
| 		mount -n -t tmpfs -o "${opts}" cgroup_root /sys/fs/cgroup | 			local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}" | ||||||
| 		eend $? | 			mount -n -t tmpfs -o ${opts} cgroup_root /sys/fs/cgroup | ||||||
|  | 			eend $? | ||||||
|  | 		fi | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
|  | 	mountinfo -q /sys/fs/cgroup || return 0 | ||||||
|  |  | ||||||
| 	if ! mountinfo -q /sys/fs/cgroup/openrc; then | 	if ! mountinfo -q /sys/fs/cgroup/openrc; then | ||||||
| 		local agent="${RC_LIBEXECDIR}/sh/cgroup-release-agent.sh" | 		local agent="@LIBEXECDIR@/sh/cgroup-release-agent.sh" | ||||||
| 		mkdir /sys/fs/cgroup/openrc | 		mkdir /sys/fs/cgroup/openrc | ||||||
| 		mount -n -t cgroup \ | 		mount -n -t cgroup \ | ||||||
| 			-o none,${sysfs_opts},name=openrc,release_agent="$agent" \ | 			-o none,${sysfs_opts},name=openrc,release_agent="$agent" \ | ||||||
| 			openrc /sys/fs/cgroup/openrc | 			openrc /sys/fs/cgroup/openrc | ||||||
| 		printf 1 > /sys/fs/cgroup/openrc/notify_on_release | 		printf 1 > /sys/fs/cgroup/openrc/notify_on_release | ||||||
| 	fi | 	fi | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup1_controllers() | 	yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0 | ||||||
| { | 	while read name hier groups enabled rest; do | ||||||
| 	yesno "${rc_controller_cgroups:-YES}" && [ -e /proc/cgroups ] || return 0 |  | ||||||
| 	while read -r name _ _ enabled rest; do |  | ||||||
| 		case "${enabled}" in | 		case "${enabled}" in | ||||||
| 			1)	mountinfo -q "/sys/fs/cgroup/${name}" && continue | 			1)	mountinfo -q /sys/fs/cgroup/${name} && continue | ||||||
| 				local x | 				mkdir /sys/fs/cgroup/${name} | ||||||
| 				for x in $rc_cgroup_controllers; do | 				mount -n -t cgroup -o ${sysfs_opts},${name} \ | ||||||
| 				[ "${name}" = "blkio" ] && [ "${x}" = "io" ] && | 					${name} /sys/fs/cgroup/${name} | ||||||
| 					continue 2 |  | ||||||
| 				[ "${name}" = "${x}" ] && |  | ||||||
| 				continue 2 |  | ||||||
| 				done |  | ||||||
| 				mkdir "/sys/fs/cgroup/${name}" |  | ||||||
| 				mount -n -t cgroup -o "${sysfs_opts},${name}" \ |  | ||||||
| 					"${name}" "/sys/fs/cgroup/${name}" |  | ||||||
| 				;; | 				;; | ||||||
| 		esac | 		esac | ||||||
| 	done < /proc/cgroups | 	done < /proc/cgroups | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup2_base() |  | ||||||
| { |  | ||||||
| 	local base |  | ||||||
| 	base="$(cgroup2_find_path)" |  | ||||||
| 	mkdir -p "${base}" |  | ||||||
| 	mount -t cgroup2 none -o "${sysfs_opts},nsdelegate" "${base}" 2> /dev/null || |  | ||||||
| 		mount -t cgroup2 none -o "${sysfs_opts}" "${base}" |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup2_controllers() |  | ||||||
| { |  | ||||||
| 	local active cgroup_path x y |  | ||||||
| 	cgroup_path="$(cgroup2_find_path)" |  | ||||||
| 	[ -z "${cgroup_path}" ] && return 0 |  | ||||||
| 	[ -e "${cgroup_path}/cgroup.controllers" ] && |  | ||||||
| 	read -r active < "${cgroup_path}/cgroup.controllers" |  | ||||||
| 	for x in ${rc_cgroup_controllers}; do |  | ||||||
| 		for y in ${active}; do |  | ||||||
| 		[ "$x" = "$y" ] && |  | ||||||
| 			[ -e "${cgroup_path}/cgroup.subtree_control" ]&& |  | ||||||
| 			echo "+${x}"  > "${cgroup_path}/cgroup.subtree_control" |  | ||||||
| 		done |  | ||||||
| 	done |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroups_hybrid() |  | ||||||
| { |  | ||||||
| 	grep -qw cgroup /proc/filesystems || return 0 |  | ||||||
| 	cgroup1_base |  | ||||||
| 	if grep -qw cgroup2 /proc/filesystems; then |  | ||||||
| 		cgroup2_base |  | ||||||
| 		cgroup2_controllers |  | ||||||
| 	fi |  | ||||||
| 	cgroup1_controllers |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroups_legacy() |  | ||||||
| { |  | ||||||
| 	grep -qw cgroup /proc/filesystems || return 0 |  | ||||||
| 	cgroup1_base |  | ||||||
| 	cgroup1_controllers |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroups_unified() |  | ||||||
| { |  | ||||||
| 	cgroup2_base |  | ||||||
| 	cgroup2_controllers |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| mount_cgroups() |  | ||||||
| { |  | ||||||
| 	# set up kernel support for cgroups |  | ||||||
| 	if [ -d /sys/fs/cgroup ]; then |  | ||||||
| 		case "${rc_cgroup_mode:-hybrid}" in |  | ||||||
| 		hybrid) cgroups_hybrid ;; |  | ||||||
| 		legacy) cgroups_legacy ;; |  | ||||||
| 		unified) cgroups_unified ;; |  | ||||||
| 		esac |  | ||||||
| 	fi |  | ||||||
| 	return 0 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| restorecon_sys() | restorecon_sys() | ||||||
|   | |||||||
| @@ -22,6 +22,6 @@ depend() | |||||||
| 	provide logger | 	provide logger | ||||||
| 	use net newsyslog | 	use net newsyslog | ||||||
| 	need localmount | 	need localmount | ||||||
| 	after bootmisc clock | 	after bootmisc | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -18,7 +18,7 @@ depend() | |||||||
| { | { | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| 	use root | 	use root | ||||||
| 	after bootmisc clock | 	after bootmisc | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
							
								
								
									
										20
									
								
								init.d/tmpfiles.dev.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								init.d/tmpfiles.dev.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | |||||||
|  | #!@SBINDIR@/openrc-run | ||||||
|  | # Copyright 1999-2012 Gentoo Foundation | ||||||
|  | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
|  | description="Set up tmpfiles.d entries" | ||||||
|  |  | ||||||
|  | depend() | ||||||
|  | { | ||||||
|  | 	use dev-mount | ||||||
|  | 	before dev | ||||||
|  | 	keyword -prefix -vserver | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start() | ||||||
|  | { | ||||||
|  | 	ebegin "Setting up tmpfiles.d entries for /dev" | ||||||
|  | 	@LIBEXECDIR@/sh/tmpfiles.sh --prefix=/dev --create --boot ${tmpfiles_opts} | ||||||
|  | 	eend $? | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
							
								
								
									
										19
									
								
								init.d/tmpfiles.setup.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								init.d/tmpfiles.setup.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | |||||||
|  | #!@SBINDIR@/openrc-run | ||||||
|  | # Copyright 1999-2012 Gentoo Foundation | ||||||
|  | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
|  | description="Set up tmpfiles.d entries" | ||||||
|  |  | ||||||
|  | depend() | ||||||
|  | { | ||||||
|  | 	need localmount | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start() | ||||||
|  | { | ||||||
|  | 	ebegin "Setting up tmpfiles.d entries" | ||||||
|  | 	@LIBEXECDIR@/sh/tmpfiles.sh --exclude-prefix=/dev --create --remove --boot \ | ||||||
|  | 		${tmpfiles_opts} | ||||||
|  | 	eend $? | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
| @@ -11,7 +11,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock fsck | 	after fsck | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,6 @@ description="Initializes the random number generator." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn | 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|   | |||||||
| @@ -11,7 +11,6 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	after clock |  | ||||||
| 	need localmount | 	need localmount | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,10 +6,10 @@ 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 \ | ||||||
| 		start-stop-daemon.8 supervise-daemon.8 | 		service.8 start-stop-daemon.8 supervise-daemon.8 | ||||||
|  |  | ||||||
| ifeq (${OS},Linux) | ifeq (${OS},Linux) | ||||||
| MAN8 += rc-sstat.8 openrc-init.8 openrc-shutdown.8 | MAN8 += rc-sstat.8 | ||||||
| endif | endif | ||||||
|  |  | ||||||
| # Handy macro to create symlinks | # Handy macro to create symlinks | ||||||
|   | |||||||
| @@ -1,46 +0,0 @@ | |||||||
| .\" Copyright (c) 2017 The OpenRC Authors. |  | ||||||
| .\" See the Authors file at the top-level directory of this distribution and |  | ||||||
| .\" https://github.com/OpenRC/openrc/blob/master/AUTHORS |  | ||||||
| .\" |  | ||||||
| .\" This file is part of OpenRC. It is subject to the license terms in |  | ||||||
| .\" the LICENSE file found in the top-level directory of this |  | ||||||
| .\" distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE |  | ||||||
| .\" This file may not be copied, modified, propagated, or distributed |  | ||||||
| .\"    except according to the terms contained in the LICENSE file. |  | ||||||
| .\" |  | ||||||
| .Dd April 6, 2017 |  | ||||||
| .Dt openrc-init 8 SMM |  | ||||||
| .Os OpenRC |  | ||||||
| .Sh NAME |  | ||||||
| .Nm openrc-init |  | ||||||
| .Nd the parent of all processes |  | ||||||
| .Sh SYNOPSIS |  | ||||||
| .Nm |  | ||||||
| .Sh DESCRIPTION |  | ||||||
| .Nm |  | ||||||
| is an init process which can be an alternative to sysvinit or any other |  | ||||||
| init process. |  | ||||||
| .Pp |  | ||||||
| To use |  | ||||||
| .Nm |  | ||||||
| configure your boot loader to invoke it or symlink it to /sbin/init. |  | ||||||
| Also, you will need to use |  | ||||||
| .Xr openrc-shutdown 8 , |  | ||||||
| to halt, reboot or poweroff the system. |  | ||||||
| .Pp |  | ||||||
| The default runlevel is read from the init command line, the |  | ||||||
| rc_default_runlevel setting in rc.conf, the kernel command line, or it is |  | ||||||
| assumed to be "default" if it is not set in any of these places. |  | ||||||
| .Pp |  | ||||||
| .Nm |  | ||||||
| doesn't manage getty's directly, so you will need to manage them another |  | ||||||
| way. For example, you can use the agetty service script as described in |  | ||||||
| agetty-guide.md in this distribution. |  | ||||||
| .Sh BUGS |  | ||||||
| This was first released as part of OpenRC 0.25. |  | ||||||
| I do not know of any specific issues. However, since this is the first |  | ||||||
| release of openrc-init, please test and report any issues you find. |  | ||||||
| .Sh SEE ALSO |  | ||||||
| .Xr openrc-shutdown 8 , |  | ||||||
| .Sh AUTHORS |  | ||||||
| .An William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| @@ -97,7 +97,7 @@ String describing the extra command. | |||||||
| .It Ar supervisor | .It Ar supervisor | ||||||
| Supervisor to use to monitor this daemon. If this is unset or invalid, | Supervisor to use to monitor this daemon. If this is unset or invalid, | ||||||
| start-stop-daemon will be used. | start-stop-daemon will be used. | ||||||
| Currently, we support s6 from skarnet software, and supervise-daemon | Currently, we support s6 from scarnet software, and supervise-daemon | ||||||
| which is a light-weight supervisor internal to OpenRC. | which is a light-weight supervisor internal to OpenRC. | ||||||
| To use s6, set | To use s6, set | ||||||
| supervisor=s6. | supervisor=s6. | ||||||
| @@ -167,24 +167,6 @@ Display name used for the above defined command. | |||||||
| Process name to match when signaling the daemon. | 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 respawn_delay |  | ||||||
| Respawn delay |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| will use for this daemon.  See |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| for more information about this setting. |  | ||||||
| .It Ar respawn_max |  | ||||||
| Respawn max |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| will use for this daemon.  See |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| for more information about this setting. |  | ||||||
| .It Ar respawn_period |  | ||||||
| Respawn period |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| will use for this daemon.  See |  | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| for more information about this setting. |  | ||||||
| .It Ar retry | .It Ar retry | ||||||
| Retry schedule to use when stopping the daemon. It can either be a | Retry schedule to use when stopping the daemon. It can either be a | ||||||
| timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5). | timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5). | ||||||
| @@ -217,10 +199,8 @@ that dependency type to the function, or prefix the names with ! to | |||||||
| remove them from the dependencies. | remove them from the dependencies. | ||||||
| .Bl -tag -width "RC_DEFAULTLEVEL" | .Bl -tag -width "RC_DEFAULTLEVEL" | ||||||
| .It Ic need | .It Ic need | ||||||
| The service will attempt to start any services it needs regardless of | The service will refuse to start until needed services have started and it | ||||||
| whether they have been added to the runlevel. It will refuse to start | will refuse to stop until any services that need it have stopped. | ||||||
| until all services it needs have started, and it will refuse to stop until all |  | ||||||
| services that need it have stopped. |  | ||||||
| .It Ic use | .It Ic use | ||||||
| The service will attempt to start any services it uses that have been added | The service will attempt to start any services it uses that have been added | ||||||
| to the runlevel. | to the runlevel. | ||||||
| @@ -286,18 +266,6 @@ system. | |||||||
| To see how to influence dependencies in configuration files, see the | To see how to influence dependencies in configuration files, see the | ||||||
| .Sx FILES | .Sx FILES | ||||||
| section below. | section below. | ||||||
| .Sh _pre AND _post FUNCTIONS |  | ||||||
| Any command defined in extra_commands, extra_started_commands or |  | ||||||
| extra_stopped_commands can have _pre and _post functions in the service |  | ||||||
| script. If the command function is called foo, the_pre and _post |  | ||||||
| functions for it should be called foo_pre and foo_post. |  | ||||||
| .Pp |  | ||||||
| These functions should be used to perform preparation before the |  | ||||||
| command is run and cleanup after the command completes. In order for |  | ||||||
| .Nm |  | ||||||
| to record the command as being run successfully, the _pre |  | ||||||
| function, command function itself and the _post function should all exit |  | ||||||
| with a zero return code. |  | ||||||
| .Sh BUILTINS | .Sh BUILTINS | ||||||
| .Nm | .Nm | ||||||
| defines some builtin functions that you can use inside your service scripts: | defines some builtin functions that you can use inside your service scripts: | ||||||
| @@ -426,63 +394,27 @@ If -d, -f or -p is specified, checkpath checks to see if the path | |||||||
| exists, is the right type and has the correct owner and access modes. If | exists, is the right type and has the correct owner and access modes. If | ||||||
| any of these tests fail, the path is created and set up as specified. If | any of these tests fail, the path is created and set up as specified. If | ||||||
| more than one of -d, -f or -p are specified, the last one will be used. | more than one of -d, -f or -p are specified, the last one will be used. | ||||||
| .Pp |  | ||||||
| The argument to -m is a three or four digit octal number. If this option | The argument to -m is a three or four digit octal number. If this option | ||||||
| is not provided, the value defaults to 0644 for files and 0775 for | is not provided, the value defaults to 0644 for files and 0775 for | ||||||
| directories. | directories. | ||||||
| .Pp |  | ||||||
| The argument to -o is a representation of the user and/or group which | The argument to -o is a representation of the user and/or group which | ||||||
| should own the path. The user and group can be represented numerically | should own the path. The user and group can be represented numerically | ||||||
| or with names, and are separated by a colon. | or with names, and are separated by a colon. | ||||||
| .Pp |  | ||||||
| The truncate options (-D and -F) cause the directory or file to be | The truncate options (-D and -F) cause the directory or file to be | ||||||
| cleared of all contents. | cleared of all contents. | ||||||
| .Pp |  | ||||||
| If -W is specified, checkpath checks to see if the first path given on | If -W is specified, checkpath checks to see if the first path given on | ||||||
| the command line is writable.  This is different from how the test | the command line is writable.  This is different from how the test | ||||||
| command in the shell works, because it also checks to make sure the file | command in the shell works, because it also checks to make sure the file | ||||||
| system is not read only. | system is not read only. | ||||||
| .Pp |  | ||||||
| Also, the -d, -f or -p options should not be specified along with this option. | Also, the -d, -f or -p options should not be specified along with this option. | ||||||
| .Pp |  | ||||||
| The -q option suppresses all informational output. If it is specified | The -q option suppresses all informational output. If it is specified | ||||||
| twice, all error messages are suppressed as well. | twice, all error messages are suppressed as well. | ||||||
| .Ic fstabinfo |  | ||||||
| .Op Fl M , -mount |  | ||||||
| .Op Fl R , -remount |  | ||||||
| .Op Fl b , -blockdevice |  | ||||||
| .Op Fl m , -mountargs |  | ||||||
| .Op Fl o , -options |  | ||||||
| .Op Fl p , -passno Ar passno |  | ||||||
| .Op Fl t , -type Ar fstype |  | ||||||
| .Ar path |  | ||||||
| .Xc |  | ||||||
| If -b, -m, -o, -p or -t is specified,the appropriate information is |  | ||||||
| extracted from fstab. If -M or -R are given, file systems are mounted or |  | ||||||
| remounted. |  | ||||||
| .Pp |  | ||||||
| The -q option suppresses all informational output. If it is specified |  | ||||||
| twice, all error messages are suppressed as well. |  | ||||||
| .Ic mountinfo |  | ||||||
| .Op Fl f, -fstype-regex Ar regex |  | ||||||
| .Op Fl F, -skip-fstype-regex Ar regex |  | ||||||
| .Op Fl n, -node-regex Ar regex |  | ||||||
| .Op Fl N, -skip-node-regex Ar regex |  | ||||||
| .Op Fl o, -options-regex Ar regex |  | ||||||
| .Op Fl O, -skip-options-regex Ar regex |  | ||||||
| .Op Fl p, -point-regex Ar regex |  | ||||||
| .Op Fl P, -skip-point-regex Ar regex |  | ||||||
| .Op Fl e, -netdev |  | ||||||
| .Op Fl E, -nonetdev |  | ||||||
| .Op Fl i, -options |  | ||||||
| .Op Fl s, -fstype |  | ||||||
| .Op Fl t, -node |  | ||||||
|   .Ar mount1 mount2 ... |  | ||||||
| .Xc |  | ||||||
| The f, F, n, N, o, O, p, P, e and E options specify what you want to |  | ||||||
| search for or skip in the mounted file systems. The i, s and t options |  | ||||||
| specify what you want to display. If no mount points are given, all |  | ||||||
| mount points will be considered. |  | ||||||
| .It Ic yesno Ar value | .It Ic yesno Ar value | ||||||
| If | If | ||||||
| .Ar value | .Ar value | ||||||
|   | |||||||
| @@ -1,62 +0,0 @@ | |||||||
| .\" Copyright (c) 2017 The OpenRC Authors. |  | ||||||
| .\" See the Authors file at the top-level directory of this distribution and |  | ||||||
| .\" https://github.com/OpenRC/openrc/blob/master/AUTHORS |  | ||||||
| .\" |  | ||||||
| .\" This file is part of OpenRC. It is subject to the license terms in |  | ||||||
| .\" the LICENSE file found in the top-level directory of this |  | ||||||
| .\" distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE |  | ||||||
| .\" This file may not be copied, modified, propagated, or distributed |  | ||||||
| .\"    except according to the terms contained in the LICENSE file. |  | ||||||
| .\" |  | ||||||
| .Dd May 22, 2017 |  | ||||||
| .Dt openrc-shutdown 8 SMM |  | ||||||
| .Os OpenRC |  | ||||||
| .Sh NAME |  | ||||||
| .Nm openrc-shutdown |  | ||||||
| .Nd bring the system down |  | ||||||
| .Sh SYNOPSIS |  | ||||||
| .Nm |  | ||||||
| .Op Fl d , -no-write |  | ||||||
| .Op Fl D , -dry-run |  | ||||||
| .Op Fl H , -halt |  | ||||||
| .Op Fl k , -kexec |  | ||||||
| .Op Fl p , -poweroff |  | ||||||
| .Op Fl R , -reexec |  | ||||||
| .Op Fl r , -reboot |  | ||||||
| .Op Fl s , -single |  | ||||||
| .Op Fl w , -write-only |  | ||||||
| .Sh DESCRIPTION |  | ||||||
| .Nm |  | ||||||
| is the utility that communicates with |  | ||||||
| .Xr openrc-init 8 |  | ||||||
| to bring down the system or instruct openrc-init to re-execute itself. |  | ||||||
| It supports the following options: |  | ||||||
| .Bl -tag -width "poweroff" |  | ||||||
| .It Fl d , -no-write |  | ||||||
| Do not write the wtmp boot record. |  | ||||||
| .It Fl D , -dry-run |  | ||||||
| Print the action that would be taken without executing it. This is to |  | ||||||
| allow testing. |  | ||||||
| .It Fl H , -halt |  | ||||||
| Stop all services, kill all remaining processes and halt the system. |  | ||||||
| .It Fl k , -kexec |  | ||||||
| Stop all services, kill all processes and boot directly into a new |  | ||||||
| kernel loaded via |  | ||||||
| .Xr kexec 8 . |  | ||||||
| .It Fl p , -poweroff |  | ||||||
| Stop all services, kill all processes and power off the system. |  | ||||||
| .It Fl R , -reexec |  | ||||||
| instruct openrc-init to re-exec itself. This should be used after an |  | ||||||
| upgrade of OpenRC if you are using openrc-init as your init process. |  | ||||||
| .It Fl r , -reboot |  | ||||||
| Stop all services, kill all processes and reboot the system. |  | ||||||
| .It Fl s , -single |  | ||||||
| Stop all services, kill all processes and move to single user mode. |  | ||||||
| .It Fl w , -write-only |  | ||||||
| Stop all services, kill all processes and move to single user mode. |  | ||||||
| .El |  | ||||||
| .Sh SEE ALSO |  | ||||||
| .Xr openrc-init 8 , |  | ||||||
| .Xr kexec 8 , |  | ||||||
| .Sh AUTHORS |  | ||||||
| .An William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| @@ -25,12 +25,6 @@ in different runlevels.  The default behavior is to show information | |||||||
| about the current runlevel and any unassigned services that are not stopped, | about the current runlevel and any unassigned services that are not stopped, | ||||||
| but any runlevel can be quickly examined. | but any runlevel can be quickly examined. | ||||||
| .Pp | .Pp | ||||||
| If an active service is being supervised by |  | ||||||
| .Xr supervise-daemon 8,  |  | ||||||
| the amount of time the daemon has been active along with the number of |  | ||||||
| times it has been respawned in the current respawn period will be |  | ||||||
| displayed. |  | ||||||
| .Pp |  | ||||||
| The options are as follows: | The options are as follows: | ||||||
| .Bl -tag -width ".Fl test , test string" | .Bl -tag -width ".Fl test , test string" | ||||||
| .It Fl a , -all | .It Fl a , -all | ||||||
| @@ -63,6 +57,5 @@ dependency order if the dependency tree is available. | |||||||
| .Sh SEE ALSO | .Sh SEE ALSO | ||||||
| .Xr openrc 8 , | .Xr openrc 8 , | ||||||
| .Xr rc-update 8 | .Xr rc-update 8 | ||||||
| .Xr supervise-daemon 8 |  | ||||||
| .Sh AUTHORS | .Sh AUTHORS | ||||||
| .An Roy Marples <roy@marples.name> | .An Roy Marples <roy@marples.name> | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								man/service.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								man/service.8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | .so rc-service.8 | ||||||
| @@ -55,7 +55,7 @@ is used. | |||||||
| .It Fl p , -pidfile Ar pidfile | .It Fl p , -pidfile Ar pidfile | ||||||
| When starting, we expect the daemon to create a valid | When starting, we expect the daemon to create a valid | ||||||
| .Ar pidfile | .Ar pidfile | ||||||
| within a reasonable amount of time. When stopping we only stop the first pid | within a reasonable amount of time. When stopping we only stop the pid(s) | ||||||
| listed in the | listed in the | ||||||
| .Ar pidfile . | .Ar pidfile . | ||||||
| .It Fl n , -name Ar name | .It Fl n , -name Ar name | ||||||
|   | |||||||
| @@ -16,8 +16,6 @@ | |||||||
| .Nd starts a daemon and restarts it if it crashes | .Nd starts a daemon and restarts it if it crashes | ||||||
| .Sh SYNOPSIS | .Sh SYNOPSIS | ||||||
| .Nm | .Nm | ||||||
| .Fl D , -respawn-delay |  | ||||||
| .Ar seconds |  | ||||||
| .Fl d , -chdir | .Fl d , -chdir | ||||||
| .Ar path | .Ar path | ||||||
| .Fl e , -env | .Fl e , -env | ||||||
| @@ -28,20 +26,14 @@ | |||||||
| .Ar arg | .Ar arg | ||||||
| .Fl k , -umask | .Fl k , -umask | ||||||
| .Ar value | .Ar value | ||||||
| .Fl m , -respawn-max |  | ||||||
| .Ar count |  | ||||||
| .Fl N , -nicelevel | .Fl N , -nicelevel | ||||||
| .Ar level | .Ar level | ||||||
| .Fl p , -pidfile | .Fl p , -pidfile | ||||||
| .Ar pidfile | .Ar pidfile | ||||||
| .Fl P , -respawn-period |  | ||||||
| .Ar seconds |  | ||||||
| .Fl R , -retry |  | ||||||
| .Ar arg |  | ||||||
| .Fl r , -chroot |  | ||||||
| .Ar chrootpath |  | ||||||
| .Fl u , -user | .Fl u , -user | ||||||
| .Ar user | .Ar user | ||||||
|  | .Fl r , -chroot | ||||||
|  | .Ar chrootpath | ||||||
| .Fl 1 , -stdout | .Fl 1 , -stdout | ||||||
| .Ar logfile | .Ar logfile | ||||||
| .Fl 2 , -stderr | .Fl 2 , -stderr | ||||||
| @@ -90,9 +82,6 @@ Print the action(s) that are taken just before doing them. | |||||||
| .Pp | .Pp | ||||||
| The options are as follows: | The options are as follows: | ||||||
| .Bl -tag -width indent | .Bl -tag -width indent | ||||||
| .It Fl D , -respawn-delay Ar seconds |  | ||||||
| wait this number of seconds before restarting a daemon after it crashes. |  | ||||||
| The default is 0. |  | ||||||
| .It Fl d , -chdir Ar path | .It Fl d , -chdir Ar path | ||||||
| chdir to this directory before starting the daemon. | chdir to this directory before starting the daemon. | ||||||
| .It Fl e , -env Ar VAR=VALUE | .It Fl e , -env Ar VAR=VALUE | ||||||
| @@ -105,21 +94,8 @@ 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. | Data can be from 0 to 7 inclusive. | ||||||
| .It Fl k , -umask Ar mode | .It Fl k , -umask Ar mode | ||||||
| Set the umask of the daemon. | Set the umask of the daemon. | ||||||
| .It Fl m , -respawn-max Ar count |  | ||||||
| Sets the maximum number of times a daemon will be respawned during a |  | ||||||
| respawn period. If a daemon dies more than this number of times during a |  | ||||||
| respawn period, |  | ||||||
| .Nm |  | ||||||
| will give up trying to respawn it and exit. The default is 10, and 0 |  | ||||||
| means unlimited. |  | ||||||
| .It Fl N , -nicelevel Ar level | .It Fl N , -nicelevel Ar level | ||||||
| Modifies the scheduling priority of the daemon. | Modifies the scheduling priority of the daemon. | ||||||
| .It Fl P , -respawn-period Ar seconds |  | ||||||
| Sets the length of a respawn period. The default is 10 seconds. See the |  | ||||||
| description of --respawn-max for more information. |  | ||||||
| .It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout |  | ||||||
| The retry specification can be either a timeout in seconds or multiple |  | ||||||
| signal/timeout pairs (like SIGTERM/5). |  | ||||||
| .It Fl r , -chroot Ar path | .It Fl r , -chroot Ar path | ||||||
| chroot to this directory before starting the daemon. All other paths, such | 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. | as the path to the daemon, chdir and pidfile, should be relative to the chroot. | ||||||
| @@ -135,7 +111,6 @@ The same thing as | |||||||
| .Fl 1 , -stdout | .Fl 1 , -stdout | ||||||
| but with the standard error output. | but with the standard error output. | ||||||
| .El | .El | ||||||
| .El |  | ||||||
| .Sh ENVIRONMENT | .Sh ENVIRONMENT | ||||||
| .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 | ||||||
| @@ -148,15 +123,6 @@ 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 | 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 | are passed as arguments to the daemon to start and used when finding a daemon | ||||||
| to stop or signal. | to stop or signal. | ||||||
| .Sh NOTE |  | ||||||
| If respawn-delay, respawn-max and respawn-period are not set correctly, |  | ||||||
| it is possible to trigger a situation in which the supervisor will |  | ||||||
| infinitely try to respawn a daemon. To avoid this, if you change the |  | ||||||
| values of --respawn-delay, --respawn-max or --respawn-period, always |  | ||||||
| make sure the settings mmake sense. For example, a respawn period of 5 |  | ||||||
| seconds with a respawn max of 10 and a respawn delay of 1 second leads |  | ||||||
| to infinite respawning since there can never be 10 respawns within 5 |  | ||||||
| seconds. |  | ||||||
| .Sh SEE ALSO | .Sh SEE ALSO | ||||||
| .Xr chdir 2 , | .Xr chdir 2 , | ||||||
| .Xr chroot 2 , | .Xr chroot 2 , | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								mk/cc.mk
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								mk/cc.mk
									
									
									
									
									
								
							| @@ -26,8 +26,7 @@ _CCFLAGS=	-Wall -Wextra -Wimplicit -Wshadow -Wformat=2 \ | |||||||
| 		-Wnested-externs \ | 		-Wnested-externs \ | ||||||
| 		-Winline -Wwrite-strings -Wcast-align -Wcast-qual \ | 		-Winline -Wwrite-strings -Wcast-align -Wcast-qual \ | ||||||
| 		-Wpointer-arith \ | 		-Wpointer-arith \ | ||||||
| 		-Wdeclaration-after-statement -Wsequence-point \ | 		-Wdeclaration-after-statement -Wsequence-point | ||||||
| 		-Werror=implicit-function-declaration |  | ||||||
|  |  | ||||||
| # We should be using -Wredundant-decls, but our library hidden proto stuff | # We should be using -Wredundant-decls, but our library hidden proto stuff | ||||||
| # gives loads of warnings. I don't fully understand it (the hidden proto, | # gives loads of warnings. I don't fully understand it (the hidden proto, | ||||||
|   | |||||||
| @@ -11,5 +11,5 @@ | |||||||
| SFX=		.GNU.in | SFX=		.GNU.in | ||||||
| PKG_PREFIX?=	/usr | PKG_PREFIX?=	/usr | ||||||
|  |  | ||||||
| CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096 | CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096 | ||||||
| LIBDL=		-Wl,-Bdynamic -ldl | LIBDL=		-Wl,-Bdynamic -ldl | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ | |||||||
| SFX=		.Linux.in | SFX=		.Linux.in | ||||||
| PKG_PREFIX?=	/usr | PKG_PREFIX?=	/usr | ||||||
|  |  | ||||||
| CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 | CPPFLAGS+=	-D_BSD_SOURCE -D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 | ||||||
| LIBDL=		-Wl,-Bdynamic -ldl | LIBDL=		-Wl,-Bdynamic -ldl | ||||||
|  |  | ||||||
| ifeq (${MKSELINUX},yes) | ifeq (${MKSELINUX},yes) | ||||||
|   | |||||||
| @@ -59,9 +59,6 @@ MANPREFIX?=		${UPREFIX}/share | |||||||
| MANDIR?=		${MANPREFIX}/man | MANDIR?=		${MANPREFIX}/man | ||||||
| MANMODE?=		0444 | MANMODE?=		0444 | ||||||
|  |  | ||||||
| DATADIR?=		${UPREFIX}/share/openrc |  | ||||||
| DATAMODE?=		0644 |  | ||||||
|  |  | ||||||
| DOCDIR?=		${UPREFIX}/share/doc | DOCDIR?=		${UPREFIX}/share/doc | ||||||
| DOCMODE?=		0644 | DOCMODE?=		0644 | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,9 +36,10 @@ BOOT-FreeBSD+=	hostid modules newsyslog savecore syslogd | |||||||
| # FreeBSD specific stuff | # FreeBSD specific stuff | ||||||
| BOOT-FreeBSD+=	adjkerntz dumpon syscons | BOOT-FreeBSD+=	adjkerntz dumpon syscons | ||||||
|  |  | ||||||
| BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs termencoding | BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs termencoding \ | ||||||
|  | 	tmpfiles.setup | ||||||
| SHUTDOWN-Linux=	killprocs mount-ro | SHUTDOWN-Linux=	killprocs mount-ro | ||||||
| SYSINIT-Linux=	devfs dmesg sysfs | SYSINIT-Linux=	devfs dmesg sysfs tmpfiles.dev | ||||||
|  |  | ||||||
| # Generic BSD stuff | # Generic BSD stuff | ||||||
| BOOT-NetBSD+=	hostid newsyslog savecore syslogd | BOOT-NetBSD+=	hostid newsyslog savecore syslogd | ||||||
|   | |||||||
							
								
								
									
										4
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1 @@ | |||||||
| halt |  | ||||||
| poweroff |  | ||||||
| rc-sstat | rc-sstat | ||||||
| reboot |  | ||||||
| shutdown |  | ||||||
|   | |||||||
| @@ -8,23 +8,12 @@ INSTALLAFTER = _installafter | |||||||
| ifeq (${OS},Linux) | ifeq (${OS},Linux) | ||||||
| SRCS+= rc-sstat.in | SRCS+= rc-sstat.in | ||||||
| BIN+=	rc-sstat | BIN+=	rc-sstat | ||||||
| ifeq (${MKSYSVINIT},yes) |  | ||||||
| SRCS+= halt.in poweroff.in reboot.in shutdown.in |  | ||||||
| BIN+=	halt poweroff reboot shutdown |  | ||||||
| 	endif |  | ||||||
| endif | endif | ||||||
|  |  | ||||||
| _installafter: | _installafter: | ||||||
| ifeq (${OS},Linux) | ifeq (${OS},Linux) | ||||||
| 	${INSTALL} -d ${DESTDIR}${SBINDIR} | 	${INSTALL} -d ${DESTDIR}${SBINDIR} | ||||||
| 	ln -sf ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat | 	ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat | ||||||
| ifeq (${MKSYSVINIT},yes) |  | ||||||
| 	ln -sf	${DIR}/halt ${DESTDIR}/${SBINDIR}/halt |  | ||||||
| 	ln -sf	${DIR}/poweroff ${DESTDIR}/${SBINDIR}/poweroff |  | ||||||
| 	ln -sf	${DIR}/reboot ${DESTDIR}/${SBINDIR}/reboot |  | ||||||
| 	ln -sf	${DIR}/shutdown ${DESTDIR}/${SBINDIR}/shutdown |  | ||||||
| 	ln -sf	openrc-init ${DESTDIR}/${SBINDIR}/init |  | ||||||
| endif |  | ||||||
| endif | endif | ||||||
|  |  | ||||||
| include ${MK}/scripts.mk | include ${MK}/scripts.mk | ||||||
|   | |||||||
| @@ -1,24 +0,0 @@ | |||||||
| #!@SHELL@ |  | ||||||
|  |  | ||||||
| option_arg= |  | ||||||
| poweroff_arg= |  | ||||||
| while getopts :nwdfiph opt; do |  | ||||||
| 	case "$opt" in |  | ||||||
| 		n) ;; |  | ||||||
| 		w) poweroff_arg=--write-only ;; |  | ||||||
| 		d) option_arg=--no-write ;; |  | ||||||
| 		f) ;; |  | ||||||
| 		i) ;; |  | ||||||
| 		p) poweroff_arg=--poweroff ;; |  | ||||||
| 		[?]) printf "%s\n" "${0##*/}: invalid command line option" >&2 |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| done |  | ||||||
| shift $((OPTIND-1)) |  | ||||||
|  |  | ||||||
| if [ -z "${poweroff_arg}" ]; then |  | ||||||
| 	poweroff_arg=--poweroff |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@" |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| #!@SHELL@ |  | ||||||
|  |  | ||||||
| option_arg= |  | ||||||
| poweroff_arg= |  | ||||||
| while getopts :nwdfiph opt; do |  | ||||||
| 	case "$opt" in |  | ||||||
| 		n) ;; |  | ||||||
| 		w) poweroff_arg=--write-only ;; |  | ||||||
| 		d) option_arg=--no-write ;; |  | ||||||
| 		f) ;; |  | ||||||
| 		i) ;; |  | ||||||
| 		[?]) printf "%s\n" "${0##*/}: invalid command line option" >&2 |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| done |  | ||||||
| shift $((OPTIND-1)) |  | ||||||
|  |  | ||||||
| if [ -z "${poweroff_arg}" ]; then |  | ||||||
| 	poweroff_arg=--poweroff |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@" |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| #!@SHELL@ |  | ||||||
|  |  | ||||||
| option_arg= |  | ||||||
| poweroff_arg= |  | ||||||
| while getopts :nwdfhik opt; do |  | ||||||
| 	case "$opt" in |  | ||||||
| 		n) ;; |  | ||||||
| 		w) poweroff_arg=--write-only ;; |  | ||||||
| 		d) option_arg=--no-write ;; |  | ||||||
| 		f) ;; |  | ||||||
| 		h) ;; |  | ||||||
| 		i) ;; |  | ||||||
| 		k) poweroff_arg=--kexec ;; |  | ||||||
| 		[?]) printf "%s\n" "${0##*/}: invalid command line option" >&2 |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| done |  | ||||||
| shift $((OPTIND-1)) |  | ||||||
|  |  | ||||||
| if [ -z "${poweroff_arg}" ]; then |  | ||||||
| 	poweroff_arg=--reboot |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@" |  | ||||||
| @@ -1,29 +0,0 @@ | |||||||
| #!@SHELL@ |  | ||||||
|  |  | ||||||
| shutdown_arg= |  | ||||||
| while getopts :akrhPHfFnct: opt; do |  | ||||||
| 	case "$opt" in |  | ||||||
| 		a) ;; |  | ||||||
| 		k) ;; |  | ||||||
| 		r) shutdown_arg=--reboot ;; |  | ||||||
| 		h) shutdown_arg=--halt ;; |  | ||||||
| 		P) shutdown_arg=--poweroff ;; |  | ||||||
| 		H) shutdown_arg=--halt ;; |  | ||||||
| 		f) ;; |  | ||||||
| 		F) ;; |  | ||||||
| 		n) ;; |  | ||||||
| 		c) ;; |  | ||||||
| 		t) ;; |  | ||||||
| 		[?]) printf "%s\n" "${0##*/}: invalid command line option" >&2 |  | ||||||
| 		exit 1 |  | ||||||
| 		;; |  | ||||||
| 	esac |  | ||||||
| done |  | ||||||
| shift $((OPTIND-1)) |  | ||||||
|  |  | ||||||
| if [ -z "${shutdown_arg}" ]; then |  | ||||||
| 	shutdown_arg=--single |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| echo @SBINDIR@/openrc-shutdown ${shutdown_arg} "$@" |  | ||||||
| exec @SBINDIR@/openrc-shutdown ${shutdown_arg} "$@" |  | ||||||
							
								
								
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -6,5 +6,6 @@ cgroup-release-agent.sh | |||||||
| init.sh | init.sh | ||||||
| init-early.sh | init-early.sh | ||||||
| rc-cgroup.sh | rc-cgroup.sh | ||||||
|  | tmpfiles.sh | ||||||
| migrate-to-run.sh | migrate-to-run.sh | ||||||
| binfmt.sh | binfmt.sh | ||||||
|   | |||||||
| @@ -1,9 +1,9 @@ | |||||||
| DIR=	${LIBEXECDIR}/sh | DIR=	${LIBEXECDIR}/sh | ||||||
| SRCS=	init.sh.in functions.sh.in gendepends.sh.in \ | SRCS=	init.sh.in functions.sh.in gendepends.sh.in \ | ||||||
| 	openrc-run.sh.in rc-functions.sh.in ${SRCS-${OS}} | 	openrc-run.sh.in rc-functions.sh.in tmpfiles.sh.in ${SRCS-${OS}} | ||||||
| INC=	rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \ | INC=	rc-mount.sh functions.sh rc-functions.sh runit.sh s6.sh \ | ||||||
| 		start-stop-daemon.sh supervise-daemon.sh | 		start-stop-daemon.sh supervise-daemon.sh | ||||||
| BIN=	gendepends.sh init.sh openrc-run.sh ${BIN-${OS}} | BIN=	gendepends.sh init.sh openrc-run.sh tmpfiles.sh ${BIN-${OS}} | ||||||
|  |  | ||||||
| INSTALLAFTER=	_installafter | INSTALLAFTER=	_installafter | ||||||
|  |  | ||||||
|   | |||||||
| @@ -74,22 +74,11 @@ do | |||||||
|  |  | ||||||
| 		# Only generate dependencies for OpenRC scripts | 		# Only generate dependencies for OpenRC scripts | ||||||
| 		read one two three <"$RC_SERVICE" | 		read one two three <"$RC_SERVICE" | ||||||
| 		case "$one" in | 		[ "$one" = "#!@SBINDIR@/runscript" ] || \ | ||||||
| 			\#*/openrc-run) ;; | 		[ "$one" = "#!@SBINDIR@/openrc-run" ] || \ | ||||||
| 			\#*/runscript) ;; | 		[ "$one" = "#!" -a "$two" = "@SBINDIR@/runscript" ] || \ | ||||||
| 			\#!) | 		[ "$one" = "#!" -a "$two" = "@SBINDIR@/openrc-run" ] || \ | ||||||
| 				case "$two" in | 			continue | ||||||
| 					*/openrc-run) ;; |  | ||||||
| 					*/runscript) ;; |  | ||||||
| 					*) |  | ||||||
| 						continue |  | ||||||
| 						;; |  | ||||||
| 				esac |  | ||||||
| 				;; |  | ||||||
| 			*) |  | ||||||
| 				continue |  | ||||||
| 				;; |  | ||||||
| 		esac |  | ||||||
| 		unset one two three | 		unset one two three | ||||||
|  |  | ||||||
| 		RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME | 		RC_SVCNAME=${RC_SERVICE##*/} ; export RC_SVCNAME | ||||||
|   | |||||||
| @@ -11,16 +11,6 @@ if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then | |||||||
| 	done | 	done | ||||||
| fi | fi | ||||||
|  |  | ||||||
| # check for md5sum, and probably /usr too |  | ||||||
| if command -v md5sum >/dev/null; then |  | ||||||
| 	got_md5sum=true |  | ||||||
| else |  | ||||||
| 	eerror "md5sum is missing, which suggests /usr is not mounted" |  | ||||||
| 	eerror "If you have separate /usr, it must be mounted by initramfs" |  | ||||||
| 	eerror "If not, you should check coreutils is installed correctly" |  | ||||||
| 	got_md5sum=false |  | ||||||
| fi |  | ||||||
|  |  | ||||||
| # By default VServer already has /proc mounted, but OpenVZ does not! | # By default VServer already has /proc mounted, but OpenVZ does not! | ||||||
| # However, some of our users have an old proc image in /proc | # However, some of our users have an old proc image in /proc | ||||||
| # NFC how they managed that, but the end result means we have to test if | # NFC how they managed that, but the end result means we have to test if | ||||||
| @@ -31,12 +21,9 @@ fi | |||||||
| mountproc=true | mountproc=true | ||||||
| f=/proc/self/environ | f=/proc/self/environ | ||||||
| if [ -e $f ]; then | if [ -e $f ]; then | ||||||
| 	if $got_md5sum && [ "$(VAR=a md5sum $f)" = "$(VAR=b md5sum $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 | ||||||
| 		# If they don't have md5sum, this will fail in pretty ways if |  | ||||||
| 		# /proc isn't really mounted.  Oh well, their system is busted |  | ||||||
| 		# anyway, and they get to keep the pieces. |  | ||||||
| 		einfo "/proc is already mounted" | 		einfo "/proc is already mounted" | ||||||
| 		mountproc=false | 		mountproc=false | ||||||
| 	fi | 	fi | ||||||
| @@ -44,9 +31,11 @@ fi | |||||||
| unset f | unset f | ||||||
|  |  | ||||||
| if $mountproc; then | if $mountproc; then | ||||||
|  | 	procfs="proc" | ||||||
|  | 	[ "$RC_UNAME" = "GNU/kFreeBSD" ] && proc="linprocfs" | ||||||
| 	ebegin "Mounting /proc" | 	ebegin "Mounting /proc" | ||||||
| 	if ! fstabinfo --mount /proc; then | 	if ! fstabinfo --mount /proc; then | ||||||
| 		mount -n -t proc -o noexec,nosuid,nodev proc /proc | 		mount -n -t "$procfs" -o noexec,nosuid,nodev proc /proc | ||||||
| 	fi | 	fi | ||||||
| 	eend $? | 	eend $? | ||||||
| fi | fi | ||||||
|   | |||||||
| @@ -146,9 +146,10 @@ _status() | |||||||
| 	fi | 	fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | # Template start / stop / status functions | ||||||
| # These functions select the appropriate function to call from the | # These functions select the appropriate function to call from the | ||||||
| # supervisor modules | # supervisor modules | ||||||
| default_start() | start() | ||||||
| { | { | ||||||
| 	local func=ssd_start | 	local func=ssd_start | ||||||
| 	case "$supervisor" in | 	case "$supervisor" in | ||||||
| @@ -162,7 +163,7 @@ default_start() | |||||||
| 	$func | 	$func | ||||||
| } | } | ||||||
|  |  | ||||||
| default_stop() | stop() | ||||||
| { | { | ||||||
| 	local func=ssd_stop | 	local func=ssd_stop | ||||||
| 	case "$supervisor" in | 	case "$supervisor" in | ||||||
| @@ -176,7 +177,7 @@ default_stop() | |||||||
| 	$func | 	$func | ||||||
| } | } | ||||||
|  |  | ||||||
| default_status() | status() | ||||||
| { | { | ||||||
| 	local func=ssd_status | 	local func=ssd_status | ||||||
| 	case "$supervisor" in | 	case "$supervisor" in | ||||||
| @@ -190,26 +191,6 @@ default_status() | |||||||
| 	$func | 	$func | ||||||
| } | } | ||||||
|  |  | ||||||
| # Template start / stop / status functions |  | ||||||
| # package init scripts may override these, but the bodies are as minimal as |  | ||||||
| # possible, so that the init scripts can creatively wrap default_* |  | ||||||
| # functions. |  | ||||||
| start() |  | ||||||
| { |  | ||||||
| 	default_start |  | ||||||
| } |  | ||||||
|  |  | ||||||
| stop() |  | ||||||
| { |  | ||||||
| 	default_stop |  | ||||||
| } |  | ||||||
|  |  | ||||||
| status() |  | ||||||
| { |  | ||||||
| 	default_status |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Start debug output |  | ||||||
| yesno $RC_DEBUG && set -x | yesno $RC_DEBUG && set -x | ||||||
|  |  | ||||||
| # Load configuration settings. First the global ones, then any | # Load configuration settings. First the global ones, then any | ||||||
| @@ -243,9 +224,6 @@ sourcex "@LIBEXECDIR@/sh/s6.sh" | |||||||
| sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh" | sourcex "@LIBEXECDIR@/sh/start-stop-daemon.sh" | ||||||
| sourcex "@LIBEXECDIR@/sh/supervise-daemon.sh" | sourcex "@LIBEXECDIR@/sh/supervise-daemon.sh" | ||||||
|  |  | ||||||
| # Load our script |  | ||||||
| sourcex "$RC_SERVICE" |  | ||||||
|  |  | ||||||
| # Set verbose mode | # Set verbose mode | ||||||
| if yesno "${rc_verbose:-$RC_VERBOSE}"; then | if yesno "${rc_verbose:-$RC_VERBOSE}"; then | ||||||
| 	EINFO_VERBOSE=yes | 	EINFO_VERBOSE=yes | ||||||
| @@ -258,7 +236,8 @@ for _cmd; do | |||||||
| 		[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && \ | 		[ -n "${rc_ulimit:-$RC_ULIMIT}" ] && \ | ||||||
| 			ulimit ${rc_ulimit:-$RC_ULIMIT} | 			ulimit ${rc_ulimit:-$RC_ULIMIT} | ||||||
| 		# Apply cgroups settings if defined | 		# Apply cgroups settings if defined | ||||||
| 		if [ "$(command -v cgroup_add_service)" = "cgroup_add_service" ] | 		if [ "$(command -v cgroup_add_service)" = \ | ||||||
|  | 		    "cgroup_add_service" ] | ||||||
| 		then | 		then | ||||||
| 			if [ -d /sys/fs/cgroup -a ! -w /sys/fs/cgroup ]; then | 			if [ -d /sys/fs/cgroup -a ! -w /sys/fs/cgroup ]; then | ||||||
| 				eerror "No permission to apply cgroup settings" | 				eerror "No permission to apply cgroup settings" | ||||||
| @@ -267,15 +246,16 @@ for _cmd; do | |||||||
| 			cgroup_add_service /sys/fs/cgroup/openrc | 			cgroup_add_service /sys/fs/cgroup/openrc | ||||||
| 			cgroup_add_service /sys/fs/cgroup/systemd/system | 			cgroup_add_service /sys/fs/cgroup/systemd/system | ||||||
| 		fi | 		fi | ||||||
| 		[ "$(command -v cgroup_set_limits)" = "cgroup_set_limits" ] && | 		[ "$(command -v cgroup_set_limits)" = \ | ||||||
| 			cgroup_set_limits | 		    "cgroup_set_limits" ] && \ | ||||||
| 		[ "$(command -v cgroup2_set_limits)" = "cgroup2_set_limits" ] && | 		    cgroup_set_limits | ||||||
| 			[ "$_cmd" = start ] && |  | ||||||
| 			cgroup2_set_limits |  | ||||||
| 		break | 		break | ||||||
| 	fi | 	fi | ||||||
| done | done | ||||||
|  |  | ||||||
|  | # Load our script | ||||||
|  | sourcex "$RC_SERVICE" | ||||||
|  |  | ||||||
| eval "printf '%s\n' $required_dirs" | while read _d; do | eval "printf '%s\n' $required_dirs" | while read _d; do | ||||||
| 	if [ -n "$_d" ] && [ ! -d "$_d" ]; then | 	if [ -n "$_d" ] && [ ! -d "$_d" ]; then | ||||||
| 		eerror "$RC_SVCNAME: \`$_d' is not a directory" | 		eerror "$RC_SVCNAME: \`$_d' is not a directory" | ||||||
| @@ -365,14 +345,10 @@ while [ -n "$1" ]; do | |||||||
| 				then | 				then | ||||||
| 					"$1"_post || exit $? | 					"$1"_post || exit $? | ||||||
| 				fi | 				fi | ||||||
| 				[ "$(command -v cgroup_cleanup)" = "cgroup_cleanup" ] && | 				[ "$(command -v cgroup_cleanup)" = "cgroup_cleanup" -a \ | ||||||
| 					[ "$1" = "stop" ] && | 				"$1" = "stop" ] && \ | ||||||
| 					yesno "${rc_cgroup_cleanup}" && \ | 				yesno "${rc_cgroup_cleanup}" && \ | ||||||
| 					cgroup_cleanup | 					cgroup_cleanup | ||||||
| 				if [ "$(command -v cgroup2_remove)" = "cgroup2_remove" ]; then |  | ||||||
| 					[ "$1" = stop ] || [ -z "${command}" ] && |  | ||||||
| 					cgroup2_remove |  | ||||||
| 				fi |  | ||||||
| 				shift | 				shift | ||||||
| 				continue 2 | 				continue 2 | ||||||
| 			else | 			else | ||||||
|   | |||||||
| @@ -14,56 +14,46 @@ description_cgroup_cleanup="Kill all processes in the cgroup" | |||||||
|  |  | ||||||
| cgroup_find_path() | cgroup_find_path() | ||||||
| { | { | ||||||
| 	local OIFS name dir result | 	local OIFS n name dir result | ||||||
| 	[ -n "$1" ] || return 0 | 	[ -n "$1" ] || return 0 | ||||||
| 	OIFS="$IFS" | 	OIFS="$IFS" | ||||||
| 	IFS=":" | 	IFS=":" | ||||||
| 	while read -r _ name dir; do | 	while read n name dir; do | ||||||
| 		[ "$name" = "$1" ] && result="$dir" | 		[ "$name" = "$1" ] && result="$dir" | ||||||
| 	done < /proc/1/cgroup | 	done < /proc/1/cgroup | ||||||
| 	IFS="$OIFS" | 	IFS="$OIFS" | ||||||
| 	printf "%s" "${result}" | 	echo $result | ||||||
| } | } | ||||||
|  |  | ||||||
| cgroup_get_pids() | cgroup_get_pids() | ||||||
| { | { | ||||||
| 	local cgroup_procs p pids | 	local p | ||||||
| 	cgroup_procs="$(cgroup2_find_path)" | 	pids= | ||||||
| 	[ -n "${cgroup_procs}" ] && | 	while read p; do | ||||||
| 		cgroup_procs="${cgroup_procs}/${RC_SVCNAME}/cgroup.procs" || | 		[ $p -eq $$ ] || pids="${pids} ${p}" | ||||||
| 		cgroup_procs="/sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks" | 	done < /sys/fs/cgroup/openrc/${RC_SVCNAME}/tasks | ||||||
| 	[ -f "${cgroup_procs}" ] || return 0 | 	[ -n "$pids" ] | ||||||
| 	while read -r p; do |  | ||||||
| 		[ "$p" -eq $$ ] || pids="${pids} ${p}" |  | ||||||
| 	done < "${cgroup_procs}" |  | ||||||
| 	printf "%s" "${pids}" |  | ||||||
| 	return 0 |  | ||||||
| } | } | ||||||
|  |  | ||||||
| cgroup_running() | cgroup_running() | ||||||
| { | { | ||||||
| 	[ -d "/sys/fs/cgroup/unified/${RC_SVCNAME}" ] || | 	[ -d "/sys/fs/cgroup/openrc/${RC_SVCNAME}" ] | ||||||
| 			[ -d "/sys/fs/cgroup/${RC_SVCNAME}" ] || |  | ||||||
| 			[ -d "/sys/fs/cgroup/openrc/${RC_SVCNAME}" ] |  | ||||||
| } | } | ||||||
|  |  | ||||||
| cgroup_set_values() | cgroup_set_values() | ||||||
| { | { | ||||||
| 	[ -n "$1" ] && [ -n "$2" ] && [ -d "/sys/fs/cgroup/$1" ] || return 0 | 	[ -n "$1" -a -n "$2" -a -d "/sys/fs/cgroup/$1" ] || return 0 | ||||||
|  |  | ||||||
| 	local controller h | 	local controller="$1" h=$(cgroup_find_path "$1") | ||||||
| 	controller="$1" |  | ||||||
| 	h=$(cgroup_find_path "$1") |  | ||||||
| 	cgroup="/sys/fs/cgroup/${1}${h}openrc_${RC_SVCNAME}" | 	cgroup="/sys/fs/cgroup/${1}${h}openrc_${RC_SVCNAME}" | ||||||
| 	[ -d "$cgroup" ] || mkdir -p "$cgroup" | 	[ -d "$cgroup" ] || mkdir -p "$cgroup" | ||||||
|  |  | ||||||
| 	set -- $2 | 	set -- $2 | ||||||
| 	local name val | 	local name val | ||||||
| 	while [ -n "$1" ] && [ "$controller" != "cpuacct" ]; do | 	while [ -n "$1" -a "$controller" != "cpuacct" ]; do | ||||||
| 		case "$1" in | 		case "$1" in | ||||||
| 			$controller.*) | 			$controller.*) | ||||||
| 				if [ -n "${name}" ] && [ -w "${cgroup}/${name}" ] &&  | 				if [ -n "$name" -a -w "$cgroup/$name" -a -n "$val" ]; then | ||||||
| 					[ -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 | ||||||
| @@ -78,7 +68,7 @@ cgroup_set_values() | |||||||
| 		esac | 		esac | ||||||
| 		shift | 		shift | ||||||
| 	done | 	done | ||||||
| 	if [ -n "${name}" ] && [ -w "${cgroup}/${name}" ] && [ -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 | ||||||
| @@ -144,78 +134,21 @@ cgroup_set_limits() | |||||||
| 	return 0 | 	return 0 | ||||||
| } | } | ||||||
|  |  | ||||||
| cgroup2_find_path() |  | ||||||
| { |  | ||||||
| 	if grep -qw cgroup2 /proc/filesystems; then |  | ||||||
| 		case "${rc_cgroup_mode:-hybrid}" in |  | ||||||
| 			hybrid) printf "/sys/fs/cgroup/unified" ;; |  | ||||||
| 			unified) printf "/sys/fs/cgroup" ;; |  | ||||||
| 		esac |  | ||||||
| 	fi |  | ||||||
| 		return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup2_remove() |  | ||||||
| { |  | ||||||
| 	local cgroup_path rc_cgroup_path |  | ||||||
| 	cgroup_path="$(cgroup2_find_path)" |  | ||||||
| 	[ -z "${cgroup_path}" ] && return 0 |  | ||||||
| 	rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}" |  | ||||||
| 	[ ! -d "${rc_cgroup_path}" ] || |  | ||||||
| 		[ ! -e "${rc_cgroup_path}"/cgroup.events ] && |  | ||||||
| 		return 0 |  | ||||||
| 	grep -qx "$$" "${rc_cgroup_path}/cgroup.procs" && |  | ||||||
| 		printf "%d" 0 > "${cgroup_path}/cgroup.procs" |  | ||||||
| 	local key populated vvalue |  | ||||||
| 	while read -r key value; do |  | ||||||
| 		case "${key}" in |  | ||||||
| 			populated) populated=${value} ;; |  | ||||||
| 			*) ;; |  | ||||||
| 		esac |  | ||||||
| 	done < "${rc_cgroup_path}/cgroup.events" |  | ||||||
| 	[ "${populated}" = 1 ] && return 0 |  | ||||||
| 	rmdir "${rc_cgroup_path}" |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup2_set_limits() |  | ||||||
| { |  | ||||||
| 	local cgroup_path |  | ||||||
| 	cgroup_path="$(cgroup2_find_path)" |  | ||||||
| 	[ -d "${cgroup_path}" ] || return 0 |  | ||||||
| 	rc_cgroup_path="${cgroup_path}/${RC_SVCNAME}" |  | ||||||
| 	local OIFS="$IFS" |  | ||||||
| 	IFS=" |  | ||||||
| " |  | ||||||
| 	[ ! -d "${rc_cgroup_path}" ] && mkdir "${rc_cgroup_path}" |  | ||||||
| 	printf "%d" 0 > "${rc_cgroup_path}/cgroup.procs" |  | ||||||
| 	echo "${rc_cgroup_settings}" | while IFS="$OIFS" read -r key value; do |  | ||||||
| 		[ -z "${key}" ] || [ -z "${value}" ] && continue |  | ||||||
| 		[ ! -e "${rc_cgroup_path}/${key}" ] && continue |  | ||||||
| 		veinfo "${RC_SVCNAME}: cgroups: ${key} ${value}" |  | ||||||
| 		printf "%s" "${value}" > "${rc_cgroup_path}/${key}" |  | ||||||
| 	done |  | ||||||
| 	IFS="$OIFS" |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| cgroup_cleanup() | cgroup_cleanup() | ||||||
| { | { | ||||||
| 	cgroup_running || return 0 | 	cgroup_running || return 0 | ||||||
| 	ebegin "starting cgroups cleanup" | 	ebegin "starting cgroups cleanup" | ||||||
| 	local pids | 	for sig in TERM QUIT INT; do | ||||||
| 	pids="$(cgroup_get_pids)" | 		cgroup_get_pids || { eend 0 "finished" ; return 0 ; } | ||||||
| 	if [ -n "${pids}" ]; then | 		for i in 0 1; do | ||||||
| 		kill -s "${stopsig:-TERM}" ${pids} 2> /dev/null | 			kill -s $sig $pids | ||||||
| 		kill -s CONT ${pids} 2> /dev/null | 			for j in 0 1 2; do | ||||||
| 		yesno "${rc_send_sighup:-no}" && | 				cgroup_get_pids || { eend 0 "finished" ; return 0 ; } | ||||||
| 			kill -s HUP ${pids} 2> /dev/null | 				sleep 1 | ||||||
| 		sleep "${rc_timeout_stopsec:-90}" | 			done | ||||||
| 		yesno "${rc_send_sigkill:-yes}" && | 		done 2>/dev/null | ||||||
| 			kill -s KILL ${pids} 2> /dev/null | 	done | ||||||
| 	fi | 	cgroup_get_pids || { eend 0 "finished" ; return 0; } | ||||||
| 	cgroup2_remove | 	kill -9 $pids | ||||||
| 	[ -z "$(cgroup_get_pids)" ] | 	eend $(cgroup_running && echo 1 || echo 0) "fail to stop all processes" | ||||||
| 	eend $? "Unable to stop all processes" |  | ||||||
| 	return 0 |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -85,47 +85,6 @@ get_bootparam() | |||||||
| 	return 1 | 	return 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| get_bootparam_value() |  | ||||||
| { |  | ||||||
| 	local match="$1" which_value="$2" sep="$3" result value |  | ||||||
| 	if [ -n "$match" -a -r /proc/cmdline ]; then |  | ||||||
| 		set -- $(cat /proc/cmdline) |  | ||||||
| 		while [ -n "$1" ]; do |  | ||||||
| 			case "$1" in |  | ||||||
| 				$match=*) |  | ||||||
| 					value="${1##*=}" |  | ||||||
| 					case "$which_value" in |  | ||||||
| 						all) |  | ||||||
| 							[ -z "$sep" ] && sep=' ' |  | ||||||
| 							if [ -z "$result" ]; then |  | ||||||
| 								result="$value" |  | ||||||
| 							else |  | ||||||
| 								result="${result}${sep}${value}" |  | ||||||
| 							fi |  | ||||||
| 							;; |  | ||||||
| 						last) |  | ||||||
| 							result="$value" |  | ||||||
| 							;; |  | ||||||
| 						*) |  | ||||||
| 							result="$value" |  | ||||||
| 							break |  | ||||||
| 							;; |  | ||||||
| 					esac |  | ||||||
| 					;; |  | ||||||
| 			esac |  | ||||||
| 			shift |  | ||||||
| 		done |  | ||||||
| 	fi |  | ||||||
| 	echo $result |  | ||||||
| } |  | ||||||
|  |  | ||||||
| need_if_exists() |  | ||||||
| { |  | ||||||
| 	for x; do |  | ||||||
| 		rc-service --exists "${x}" && need "${x}" |  | ||||||
| 	done |  | ||||||
| } |  | ||||||
|  |  | ||||||
| # Called from openrc-run.sh or gendepends.sh | # Called from openrc-run.sh or gendepends.sh | ||||||
| _get_containers() { | _get_containers() { | ||||||
| 	local c | 	local c | ||||||
|   | |||||||
| @@ -23,12 +23,8 @@ supervise_start() | |||||||
| 	# command_args="this \"is a\" test" | 	# command_args="this \"is a\" test" | ||||||
| 	# to work properly. | 	# to work properly. | ||||||
| 	eval supervise-daemon --start \ | 	eval supervise-daemon --start \ | ||||||
| 		${retry:+--retry} $retry \ |  | ||||||
| 		${chroot:+--chroot} $chroot \ | 		${chroot:+--chroot} $chroot \ | ||||||
| 		${pidfile:+--pidfile} $pidfile \ | 		${pidfile:+--pidfile} $pidfile \ | ||||||
| 		${respawn_delay:+--respawn-delay} $respawn_delay \ |  | ||||||
| 		${respawn_max:+--respawn-max} $respawn_max \ |  | ||||||
| 		${respawn_period:+--respawn-period} $respawn_period \ |  | ||||||
| 		${command_user+--user} $command_user \ | 		${command_user+--user} $command_user \ | ||||||
| 		$supervise_daemon_args \ | 		$supervise_daemon_args \ | ||||||
| 		$command \ | 		$command \ | ||||||
| @@ -56,50 +52,7 @@ supervise_stop() | |||||||
| 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | 	eend $? "Failed to stop ${name:-$RC_SVCNAME}" | ||||||
| } | } | ||||||
|  |  | ||||||
| _check_supervised() |  | ||||||
| { |  | ||||||
| 	[ "$RC_UNAME" != Linux ] && return 0 |  | ||||||
| 	local child_pid="$(service_get_value "child_pid")" |  | ||||||
| 	local pid="$(cat ${pidfile})" |  | ||||||
| 	if [ -n "${child_pid}" ]; then |  | ||||||
| 		if ! [ -e "/proc/${pid}" ] && [ -e "/proc/${child_pid}" ]; then |  | ||||||
| 			if [ -e "/proc/self/ns/pid" ] && [ -e "/proc/${child_pid}/ns/pid" ]; then |  | ||||||
| 				local n1 n2 |  | ||||||
| 				n1=$(readlink "/proc/self/ns/pid") |  | ||||||
| 				n2=$(readlink "/proc/${child_pid}/ns/pid") |  | ||||||
| 				if [ "${n1}" = "${n2}" ]; then |  | ||||||
| 					return 1 |  | ||||||
| 				fi |  | ||||||
| 			fi |  | ||||||
| 		fi |  | ||||||
| 	fi |  | ||||||
| 	return 0 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| supervise_status() | supervise_status() | ||||||
| { | { | ||||||
| 	if service_stopping; then | 	_status | ||||||
| 		ewarn "status: stopping" |  | ||||||
| 		return 4 |  | ||||||
| 	elif service_starting; then |  | ||||||
| 		ewarn "status: starting" |  | ||||||
| 		return 8 |  | ||||||
| 	elif service_inactive; then |  | ||||||
| 		ewarn "status: inactive" |  | ||||||
| 		return 16 |  | ||||||
| 	elif service_started; then |  | ||||||
| 		if service_crashed; then |  | ||||||
| 			if ! _check_supervised; then |  | ||||||
| 				eerror "status: unsupervised" |  | ||||||
| 				return 64 |  | ||||||
| 			fi |  | ||||||
| 			eerror "status: crashed" |  | ||||||
| 			return 32 |  | ||||||
| 		fi |  | ||||||
| 		einfo "status: started" |  | ||||||
| 		return 0 |  | ||||||
| 	else |  | ||||||
| 		einfo "status: stopped" |  | ||||||
| 		return 3 |  | ||||||
| 	fi |  | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										457
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										457
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,457 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # This is a reimplementation of the systemd tmpfiles.d code | ||||||
|  | # Control creation, deletion, and cleaning of volatile and temporary files | ||||||
|  | # | ||||||
|  | # Copyright (c) 2012 Gentoo Foundation | ||||||
|  | # Released under the 2-clause BSD license. | ||||||
|  | # | ||||||
|  | # This instance is a pure-POSIX sh version, written by Robin H Johnson | ||||||
|  | # <robbat2@gentoo.org>, based on the Arch Linux version as of 2012/01/01: | ||||||
|  | # http://projects.archlinux.org/initscripts.git/tree/arch-tmpfiles | ||||||
|  | # | ||||||
|  | # See the tmpfiles.d manpage as well: | ||||||
|  | # 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 | ||||||
|  | # as of 2012/03/12 and also implements some more recent features | ||||||
|  | # | ||||||
|  |  | ||||||
|  | DRYRUN=0 | ||||||
|  | CHECKPATH="@LIBEXECDIR@/bin/checkpath" | ||||||
|  |  | ||||||
|  | checkprefix() { | ||||||
|  | 	n=$1 | ||||||
|  | 	shift | ||||||
|  | 	for x in $@; do | ||||||
|  | 		case $n in | ||||||
|  | 			${x}*) return 0 ;; | ||||||
|  | 	esac | ||||||
|  | 	done | ||||||
|  | 	return 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | warninvalid() { | ||||||
|  | 	printf "tmpfiles: ignoring invalid entry on line %d of \`%s'\n" "$LINENUM" "$FILE" | ||||||
|  | 	error=$(( error+1 )) | ||||||
|  | } >&2 | ||||||
|  |  | ||||||
|  | invalid_option() { | ||||||
|  | 	printf "tmpfiles: invalid option '%s'\n" "$1" >&2 | ||||||
|  | 	exit 1 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | dryrun_or_real() { | ||||||
|  | 	local dryrun= | ||||||
|  | 	[ $DRYRUN -eq 1 ] && dryrun=echo | ||||||
|  | 	$dryrun "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _chattr() { | ||||||
|  | 	local attr="$2" | ||||||
|  | 	case $attr in | ||||||
|  | 		[+-=]*) : ;; | ||||||
|  | 		'') return ;; | ||||||
|  | 		*) attr="+$attr" ;; | ||||||
|  | 	esac | ||||||
|  | 	local IFS= | ||||||
|  | 	dryrun_or_real chattr $1 "$attr" -- $3 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | relabel() { | ||||||
|  | 	local path | ||||||
|  | 	local paths=$1 mode=$2 uid=$3 gid=$4 | ||||||
|  |  | ||||||
|  | 	for path in ${paths}; do | ||||||
|  | 		if [ -e "$path" ]; then | ||||||
|  | 			[ -x /sbin/restorecon ] && dryrun_or_real restorecon $CHOPTS "$path" | ||||||
|  | 			[ $uid != '-' ] && dryrun_or_real chown $CHOPTS "$uid" "$path" | ||||||
|  | 			[ $gid != '-' ] && dryrun_or_real chgrp $CHOPTS "$gid" "$path" | ||||||
|  | 			[ $mode != '-' ] && dryrun_or_real chmod $CHOPTS "$mode" "$path" | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | splitpath() { | ||||||
|  |     local path=$1 | ||||||
|  |     while [ -n "$path" ]; do | ||||||
|  |         echo $path | ||||||
|  |         path=${path%/*} | ||||||
|  |     done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _restorecon() { | ||||||
|  |     local path=$1 | ||||||
|  |     if [ -x /sbin/restorecon ]; then | ||||||
|  |         dryrun_or_real restorecon -F $(splitpath "$path") | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _b() { | ||||||
|  | 	# Create a block device node if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  | 	if [ ! -e "$path" ]; then | ||||||
|  | 		dryrun_or_real mknod -m $mode $path b ${arg%:*} ${arg#*:} | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 		dryrun_or_real chown $uid:$gid $path | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _c() { | ||||||
|  | 	# Create a character device node if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  | 	if [ ! -e "$path" ]; then | ||||||
|  | 		dryrun_or_real mknod -m $mode $path c ${arg%:*} ${arg#*:} | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 		dryrun_or_real chown $uid:$gid $path | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _C() { | ||||||
|  | 	# recursively copy a file or directory | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  | 	if [ ! -e "$path" ]; then | ||||||
|  | 		dryrun_or_real cp -r "$arg" "$path" | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 		[ $uid != '-' ] && dryrun_or_real chown "$uid" "$path" | ||||||
|  | 		[ $gid != '-' ] && dryrun_or_real chgrp "$gid" "$path" | ||||||
|  | 		[ $mode != '-' ] && dryrun_or_real chmod "$mode" "$path" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _f() { | ||||||
|  | 	# Create a file if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  |  | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	if [ ! -e "$path" ]; then | ||||||
|  | 		dryrun_or_real $CHECKPATH -fq -m "$mode" -o "$uid:$gid" "$path" | ||||||
|  | 		[ -z "$arg" ] || _w "$@" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _F() { | ||||||
|  | 	# Create or truncate a file | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  |  | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	dryrun_or_real $CHECKPATH -Fq -m "$mode" -o "$uid:$gid" "$path" | ||||||
|  | 	[ -z "$arg" ] || _w "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _d() { | ||||||
|  | 	# Create a directory if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 | ||||||
|  |  | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	if [ ! -d "$path" ]; then | ||||||
|  | 		dryrun_or_real mkdir -p "$path" 2>/dev/null | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 		dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _D() { | ||||||
|  | 	# Create or empty a directory | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 | ||||||
|  |  | ||||||
|  | 	if [ -d "$path" ] && [ $REMOVE -gt 0 ]; then | ||||||
|  | 		dryrun_or_real find "$path" -mindepth 1 -maxdepth 1 -xdev -exec rm -rf {} + | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	if [ $CREATE -gt 0 ]; then | ||||||
|  | 		dryrun_or_real mkdir -p "$path" 2>/dev/null | ||||||
|  | 		_restorecon "$path" | ||||||
|  | 		dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _v() { | ||||||
|  | 	# Create a subvolume if the path does not exist yet and the file system | ||||||
|  | 	# supports this (btrfs). Otherwise create a normal directory. | ||||||
|  | 	# TODO: Implement btrfs subvol creation. | ||||||
|  | 	_d "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _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() { | ||||||
|  | 	# Create a symlink if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  | 	[ ! -e "$path" ] && dryrun_or_real ln -s "$arg" "$path" | ||||||
|  | 	_restorecon "$path" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _p() { | ||||||
|  | 	# Create a named pipe (FIFO) if it doesn't exist yet | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 | ||||||
|  |  | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	if [ ! -p "$path" ]; then | ||||||
|  | 		dryrun_or_real $CHECKPATH -pq -m $mode -o "$uid:$gid" "$path" | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _x() { | ||||||
|  | 	# Ignore a path during cleaning. Use this type to exclude paths from clean-up as | ||||||
|  | 	# controlled with the Age parameter. Note that lines of this type do not | ||||||
|  | 	# influence the effect of r or R lines. Lines of this type accept shell-style | ||||||
|  | 	# globs in place of of normal path names. | ||||||
|  | 	: | ||||||
|  | 	# XXX: we don't implement this | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _X() { | ||||||
|  | 	# Ignore a path during cleanup. Use this type to prevent path | ||||||
|  | 	# removal as controled with the age parameter. Note that if path is | ||||||
|  | 	# a directory, the content of the directory is not excluded from | ||||||
|  | 	# clean-up, only the directory itself. | ||||||
|  | 	# Lines of this type accept shell-style globs in place of normal path names. | ||||||
|  | 	: | ||||||
|  | 	# XXX: we don't implement this | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _r() { | ||||||
|  | 	# Remove a file or directory if it exists. This may not be used to remove | ||||||
|  | 	# non-empty directories, use R for that. Lines of this type accept shell-style | ||||||
|  | 	# globs in place of normal path names. | ||||||
|  | 	local path | ||||||
|  | 	local paths=$1 | ||||||
|  |  | ||||||
|  | 	[ $REMOVE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	for path in ${paths}; do | ||||||
|  | 		if [ -f "$path" ]; then | ||||||
|  | 			dryrun_or_real rm -f "$path" | ||||||
|  | 		elif [ -d "$path" ]; then | ||||||
|  | 			dryrun_or_real rmdir "$path" | ||||||
|  | 		fi | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _R() { | ||||||
|  | 	# Recursively remove a path and all its subdirectories (if it is a directory). | ||||||
|  | 	# Lines of this type accept shell-style globs in place of normal path names. | ||||||
|  | 	local path | ||||||
|  | 	local paths=$1 | ||||||
|  |  | ||||||
|  | 	[ $REMOVE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	for path in ${paths}; do | ||||||
|  | 		[ -d "$path" ] && dryrun_or_real rm -rf --one-file-system "$path" | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _w() { | ||||||
|  | 	# Write the argument parameter to a file, if it exists. | ||||||
|  | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
|  | 	if [ -f "$path" ]; then | ||||||
|  | 		if [ $DRYRUN -eq 1 ]; then | ||||||
|  | 			echo "echo \"$arg\" >>\"$path\"" | ||||||
|  | 		else | ||||||
|  | 			echo "$arg" >>"$path" | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _z() { | ||||||
|  | 	# Set ownership, access mode and relabel security context of a file or | ||||||
|  | 	# directory if it exists. Lines of this type accept shell-style globs in | ||||||
|  | 	# place of normal path names. | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	relabel "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _Z() { | ||||||
|  | 	# Recursively set ownership, access mode and relabel security context of a | ||||||
|  | 	# path and all its subdirectories (if it is a directory). Lines of this type | ||||||
|  | 	# accept shell-style globs in place of normal path names. | ||||||
|  | 	[ $CREATE -gt 0 ] || return 0 | ||||||
|  |  | ||||||
|  | 	CHOPTS=-R relabel "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | BOOT=0 CREATE=0 REMOVE=0 CLEAN=0 VERBOSE=0 DRYRUN=0 error=0 LINENO=0 | ||||||
|  | EXCLUDE= | ||||||
|  | PREFIX= | ||||||
|  | FILES= | ||||||
|  |  | ||||||
|  | while [ $# -gt 0 ]; do | ||||||
|  | 	case $1 in | ||||||
|  | 		--boot) BOOT=1 ;; | ||||||
|  | 		--create) CREATE=1 ;; | ||||||
|  | 		--remove) REMOVE=1 ;; | ||||||
|  | 		--clean) CLEAN=1 ;; # TODO: Not implemented | ||||||
|  | 		--verbose) VERBOSE=1 ;; | ||||||
|  | 		--dryrun|--dry-run) DRYRUN=1 ;; | ||||||
|  | 		--exclude-prefix=*) EXCLUDE="${EXCLUDE}${1##--exclude-prefix=} " ;; | ||||||
|  | 		--prefix=*) PREFIX="${PREFIX}${1##--prefix=} " ;; | ||||||
|  | 		-*) invalid_option "$1" ;; | ||||||
|  | 		*) FILES="${FILES} $1" | ||||||
|  | 	esac | ||||||
|  | 	shift | ||||||
|  | done | ||||||
|  |  | ||||||
|  | if [ $(( CLEAN )) -eq 1 ] ; then | ||||||
|  | 	printf '%s clean mode is not implemented\n' "${0##*/}" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | if [ "$CREATE$REMOVE" = '00' ]; then | ||||||
|  | 	printf 'usage: %s [--exclude-prefix=path] [--prefix=path] [--boot] [--create] [--remove] [--clean] [--verbose] [--dry-run]\n' "${0##*/}" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # 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 | ||||||
|  |  | ||||||
|  | # loop through the gathered fragments, sorted globally by filename. | ||||||
|  | # `/run/tmpfiles/foo.conf' will always be read after `/etc/tmpfiles.d/bar.conf' | ||||||
|  | FILE= | ||||||
|  | for FILE in $tmpfiles_d ; do | ||||||
|  | 	LINENUM=0 | ||||||
|  |  | ||||||
|  | 	### FILE FORMAT ### | ||||||
|  | 	# XXX: We ignore the 'Age' parameter | ||||||
|  | 	# 1    2              3    4    5    6   7 | ||||||
|  | 	# Cmd  Path           Mode UID  GID  Age Argument | ||||||
|  | 	# d    /run/user      0755 root root 10d - | ||||||
|  | 	# Mode, UID, GID, Age, Argument may be omitted! | ||||||
|  | 	# If Cmd ends with !, the line is only processed if --boot is passed | ||||||
|  |  | ||||||
|  | 	# XXX: Upstream says whitespace is NOT permitted in the Path argument. | ||||||
|  | 	# But IS allowed when globs are expanded for the x/r/R/z/Z types. | ||||||
|  | 	while read cmd path mode uid gid age arg; do | ||||||
|  | 		LINENUM=$(( LINENUM+1 )) | ||||||
|  | 		FORCE=0 | ||||||
|  |  | ||||||
|  | 		# Unless we have both command and path, skip this line. | ||||||
|  | 		if [ -z "$cmd" -o -z "$path" ]; then | ||||||
|  | 			continue | ||||||
|  | 		fi | ||||||
|  |  | ||||||
|  | 		case $cmd in | ||||||
|  | 			\#*) continue ;; | ||||||
|  | 		esac | ||||||
|  |  | ||||||
|  | 		while [ ${#cmd} -gt 1 ]; do | ||||||
|  | 			case $cmd in | ||||||
|  | 				*!) cmd=${cmd%!}; [ "$BOOT" -eq "1" ] || continue 2 ;; | ||||||
|  | 				*+) cmd=${cmd%+}; FORCE=1; ;; | ||||||
|  | 				*) warninvalid ; continue 2 ;; | ||||||
|  | 			esac | ||||||
|  | 		done | ||||||
|  |  | ||||||
|  | 		# whine about invalid entries | ||||||
|  | 		case $cmd in | ||||||
|  | 			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z|q|Q|h|H) ;; | ||||||
|  | 			*) warninvalid ; continue ;; | ||||||
|  | 		esac | ||||||
|  |  | ||||||
|  | 		# fall back on defaults when parameters are passed as '-' | ||||||
|  | 		if [ "$mode" = '-' -o "$mode" = '' ]; then | ||||||
|  | 			case "$cmd" in | ||||||
|  | 				p|f|F) mode=0644 ;; | ||||||
|  | 				d|D|v) mode=0755 ;; | ||||||
|  | 				C|z|Z|x|r|R|L) ;; | ||||||
|  | 			esac | ||||||
|  | 		fi | ||||||
|  |  | ||||||
|  | 		[ "$uid" = '-' -o "$uid" = '' ] && uid=0 | ||||||
|  | 		[ "$gid" = '-' -o "$gid" = '' ] && gid=0 | ||||||
|  | 		[ "$age" = '-' -o "$age" = '' ] && age=0 | ||||||
|  | 		[ "$arg" = '-' -o "$arg" = '' ] && arg='' | ||||||
|  | 		set -- "$path" "$mode" "$uid" "$gid" "$age" "$arg" | ||||||
|  |  | ||||||
|  | 		[ -n "$EXCLUDE" ] && checkprefix $path $EXCLUDE && continue | ||||||
|  | 		[ -n "$PREFIX" ] && ! checkprefix $path $PREFIX && continue | ||||||
|  |  | ||||||
|  | 		if [ $FORCE -gt 0 ]; then | ||||||
|  | 			case $cmd in | ||||||
|  | 				p|L|c|b) [ -f "$path" ] && dryrun_or_real rm -f "$path" | ||||||
|  | 			esac | ||||||
|  | 		fi | ||||||
|  |  | ||||||
|  | 		[ "$VERBOSE" -eq "1" ] && echo _$cmd "$@" | ||||||
|  | 		_$cmd "$@" | ||||||
|  | 		rc=$? | ||||||
|  | 		if [ "${DRYRUN}" -eq "0" ]; then | ||||||
|  | 			[ $rc -ne 0 ] && error=$((error + 1)) | ||||||
|  | 		fi | ||||||
|  | 	done <$FILE | ||||||
|  | done | ||||||
|  |  | ||||||
|  | exit $error | ||||||
|  |  | ||||||
|  | # vim: set ts=2 sw=2 sts=2 noet ft=sh: | ||||||
| @@ -3,5 +3,9 @@ | |||||||
|  |  | ||||||
| SUBDIR=		test libeinfo librc rc | SUBDIR=		test libeinfo librc rc | ||||||
|  |  | ||||||
|  | ifeq (${MKTOOLS},yes) | ||||||
|  | SUBDIR+= tools | ||||||
|  | endif | ||||||
|  |  | ||||||
| MK=		../mk | MK=		../mk | ||||||
| include		${MK}/subdir.mk | include		${MK}/subdir.mk | ||||||
|   | |||||||
| @@ -23,7 +23,6 @@ | |||||||
| #include <stdbool.h> | #include <stdbool.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <string.h> | #include <string.h> | ||||||
| #include <time.h> |  | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  |  | ||||||
| #include "helpers.h" | #include "helpers.h" | ||||||
| @@ -47,7 +46,6 @@ bool rc_conf_yesno(const char *var); | |||||||
| void env_filter(void); | void env_filter(void); | ||||||
| void env_config(void); | void env_config(void); | ||||||
| int signal_setup(int sig, void (*handler)(int)); | int signal_setup(int sig, void (*handler)(int)); | ||||||
| int signal_setup_restart(int sig, void (*handler)(int)); |  | ||||||
| int svc_lock(const char *); | int svc_lock(const char *); | ||||||
| int svc_unlock(const char *, int); | int svc_unlock(const char *, int); | ||||||
| pid_t exec_service(const char *, const char *); | pid_t exec_service(const char *, const char *); | ||||||
| @@ -70,8 +68,5 @@ RC_DEPTREE *_rc_deptree_load (int, int *); | |||||||
| bool _rc_can_find_pids(void); | bool _rc_can_find_pids(void); | ||||||
|  |  | ||||||
| RC_SERVICE lookup_service_state(const char *service); | RC_SERVICE lookup_service_state(const char *service); | ||||||
| void from_time_t(char *time_string, time_t tv); |  | ||||||
| time_t to_time_t(char *timestring); |  | ||||||
| pid_t get_pid(const char *applet, const char *pidfile); |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -1,26 +0,0 @@ | |||||||
| /* |  | ||||||
|  * rc-wtmp.h |  | ||||||
|  * This is private to us and not for user consumption |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| /* |  | ||||||
|  * Copyright (c) 2017 The OpenRC Authors. |  | ||||||
|  * See the Authors file at the top-level directory of this distribution and |  | ||||||
|  * https://github.com/OpenRC/openrc/blob/master/AUTHORS |  | ||||||
|  * |  | ||||||
|  * This file is part of OpenRC. It is subject to the license terms in |  | ||||||
|  * the LICENSE file found in the top-level directory of this |  | ||||||
|  * distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE |  | ||||||
|  * This file may not be copied, modified, propagated, or distributed |  | ||||||
|  *    except according to the terms contained in the LICENSE file. |  | ||||||
|  */ |  | ||||||
|  |  | ||||||
| #ifndef __RC_WTMP_H__ |  | ||||||
| #define __RC_WTMP_H__ |  | ||||||
|  |  | ||||||
| #include <utmp.h> |  | ||||||
|  |  | ||||||
| void log_wtmp(const char *user, const char *id, pid_t pid, int type, |  | ||||||
| 		const char *line); |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user