Compare commits
	
		
			8 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 5534b22c63 | ||
|   | 477e3dd8c1 | ||
|   | 678e7adeb2 | ||
|   | b087a751de | ||
|   | bc05fb7551 | ||
|   | e5c2a378f3 | ||
|   | 3c1a71bd9d | ||
|   | fcb826a451 | 
							
								
								
									
										302
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										302
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,211 +1,4 @@ | ||||
| commit 78e0042eccaf5a5554b195ad391b3ab0b8974cf6 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     man/rc-status: document changes for supervised daemons | ||||
|      | ||||
|     rc-status now shows the amount of time a supervised daemon has been | ||||
|     active as well as the number of times it has been respawned during the | ||||
|     current respawn period. | ||||
|  | ||||
| commit 82e12e309247bc84abf29aca04b3a2dd845fa11b | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     rc-status: show uptimes and respawn counts for supervised daemons | ||||
|  | ||||
| commit 1ebef0d7a38ec0a9635418b75c3aabb564c1577e | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     fix to_time_t to honor dst | ||||
|  | ||||
| commit 6b4050ab9cf9d678a1d6b7af7af7494f8533dbca | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     fix from_time_t function | ||||
|  | ||||
| commit cf5e9aa2bbcdf1783fadeab26586c1134929d928 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Move time_t conversions to rc-misc.c so they can be shared | ||||
|  | ||||
| commit a3250e77d412f2290e381b9e7569930d95e4fc5b | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon: save start time and respawn count | ||||
|      | ||||
|     This will allow rc-status to display an uptime and restart count for | ||||
|     supervised processes. | ||||
|  | ||||
| commit df027ca4722c8755b23a65db75728b835ccca807 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon: fix our status when we give up on the child process | ||||
|  | ||||
| commit 4c89e3f5fa1c65ccd0c843f98e4013c2085f243f | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon:create multiple options from --respawn-limit | ||||
|      | ||||
|     This creates --respawn-delay, --respawn-max and --respawn-period. It was | ||||
|     suggested that it would be easier to follow if the options were | ||||
|     separated. | ||||
|      | ||||
|     This is for #126. | ||||
|  | ||||
| commit 3673040722b75c0a4d06fbeb272f917c7d1ea7c4 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon: add a --respawn-limit option | ||||
|      | ||||
|     Allow limiting the number of times supervise-daemon will attempt to respawn a | ||||
|     daemon once it has died to prevent infinite respawning. Also, set a | ||||
|     reasonable default limit (10 times in a 5 second period). | ||||
|      | ||||
|     This is for issue #126. | ||||
|  | ||||
| commit 96c8ba2fb5f91a711ef5bfcfd8affe0b74ad18fe | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon: mark all open file descriptors FD_CLOEXEC | ||||
|  | ||||
| commit 47cf1d0c707dc88d216bebc15be3f39d5eb47fa9 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon:remove the controlling tty in the supervisor | ||||
|  | ||||
| commit 06a6a27e441372164872c7712b80728527a6ec05 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon:  fix access to tty_fd and devnull_fd | ||||
|      | ||||
|     Both the child and supervisor need access to these file descriptors. | ||||
|  | ||||
| commit 5de3798afc55ce147e65926f863ec9c9cef60e79 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     supervise-daemon: mark the service started when the supervisor is active | ||||
|  | ||||
| commit 6ac094a59cf7b51d8527af15b07feca707a635c8 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.26 | ||||
|  | ||||
| commit 84c81ca02d7077a619dc704ff654385846fcd2b4 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     update ChangeLog | ||||
|  | ||||
| commit 0e3f8720984d7d5752a78a4135cd268e4f83b3d7 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init: send term/kill signals as final step of shutdown | ||||
|  | ||||
| commit 5fd3747b190887d094225547f23007d25e2d9592 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     reword the bugs section of the openrc-init man page | ||||
|  | ||||
| commit 4694900190a9078397bb9083328b68b489af92f4 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init: fix signal handling | ||||
|      | ||||
|     The only signals we handle are SIGINT and SIGCHLD, so block all others | ||||
|     and unblock them in the child process before we start a rurnlevel. | ||||
|  | ||||
| commit 05738bfce120114037d4f02c67ec740813f94b89 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init: add re-exec capability | ||||
|      | ||||
|     This will allow the re-execution of the init process after upgrading | ||||
|     OpenRC. | ||||
|  | ||||
| commit 6f88ee4ec6f59e545346a7422facc3e5b6adac04 | ||||
| Author: i.Dark_Templar <darktemplar@dark-templar-archives.net> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     bootmisc: do not remove ld-elf32.so.hints | ||||
|      | ||||
|     File /var/run/ld-elf32.so.hints is used on FreeBSD 64bit multilib | ||||
|     This fixes #125. | ||||
|  | ||||
| commit cc51bdca3bac963878141da047e92f125772e14f | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     Add attribution to openrc-init.c and openrc-shutdown.c | ||||
|  | ||||
| commit 13ca79856e5836117e469c3edbcfd4bf47b6bab0 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     add init process | ||||
|      | ||||
|     openrc-init.c and openrc-shutdown.c are based on code which was written by | ||||
|     James Hammons <jlhamm@acm.org>, so I would like to publically | ||||
|     thank him for his work. | ||||
|  | ||||
| commit 79a9edc73068244ad843f2edbe4206ce696c91c8 | ||||
| Author: i.Dark_Templar <darktemplar@dark-templar-archives.net> | ||||
| Commit: i.Dark_Templar <darktemplar@dark-templar-archives.net> | ||||
|  | ||||
|     Fix make install on FreeBSD: don't try to install /etc/init.d/modules twice | ||||
|  | ||||
| commit 9eb669591e16c5ee0ca07babe058d0b7b2396077 | ||||
| Author: Austin English <austinenglish@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     start-stop-daemon: warn if calling --start with --retry or --stop with --wait | ||||
|      | ||||
|     This fixes #122 | ||||
|  | ||||
| commit 55a87a30ec845eb725e8a923c8f8eb7aa75baa72 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d/agetty.in: add -prefix keyword | ||||
|  | ||||
| commit a912029462ae988ab4e2a96a0958e54a3c2e822f | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d/mount-ro: change dependency on killprocs and savecache to after | ||||
|      | ||||
|     killprocs always succeeds and savecache is not required by mount-ro, so | ||||
|     we can just start after both of these have run. | ||||
|  | ||||
| commit 1e9078279709df2a3617bf1460890ceb1ddfcf59 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     agetty-guide: typo fix | ||||
|  | ||||
| commit 51a292e09b9362f13d5747d4eedaa521ddf9ce72 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     init.d: add agetty to ignore patterns | ||||
|  | ||||
| commit 50fccf47d4bd2ed6e7ea6ff7f72577c8e7b95d0d | ||||
| commit 477e3dd8c13705affe87cc2c0e9286b2653a5688 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
| @@ -215,23 +8,25 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|     script as long as the shebang line ends with "openrc-run". | ||||
|     This fixes #119 and #120. | ||||
|  | ||||
| commit 9bd63b5d4a16601712a65eb8962214cdd4d26ce5 | ||||
| commit 678e7adeb237edd080a13e463e5d8c40d2acdea7 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     update dependencies for clock service | ||||
|     version 0.24.2 | ||||
|  | ||||
|     The clock services had a very long list of "before" dependencies that | ||||
|     referred to other services within OpenRC. For ease of maintenance, | ||||
|     convert these to "after clock" dependencies in the individual services. | ||||
| commit b087a751deb06986e0d77873046e08ca4864175c | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
| commit 48db17a93f5e60c0d241f8fb06bfbdd01206fb9c | ||||
|     update ChangeLog | ||||
|  | ||||
| commit bc05fb75515b3f65f3c63ae5972c749fac00924f | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     update news file | ||||
|  | ||||
| commit c333707cba356f4cacfd58a6fcc78f7c073dddcd | ||||
| commit e5c2a378f3000cd20826ec6b59ecca15d31190ae | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
| @@ -243,7 +38,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|      | ||||
|     This is the first stage of moving this direction. | ||||
|  | ||||
| commit 5f5b1f7cbefd0bc14352e86a9c33260266f98d9b | ||||
| commit 3c1a71bd9db50fd410eb64e715a99911c8fad978 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
| @@ -255,11 +50,11 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|     Since Failing to mount efivarfs is not critical, we silence the error | ||||
|     message from mount. | ||||
|  | ||||
| commit cfdf56475e600f79a433cd721cadf39114c6c58d | ||||
| commit fcb826a45137fec589bf945fe23deeba55879a34 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     version 0.25 | ||||
|     version 0.24.1 | ||||
|  | ||||
| commit fde3902d069dfdce9c59555186a5541d6d99c8aa | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| @@ -1479,3 +1274,74 @@ Commit: Anthony G. Basile <blueness@gentoo.org> | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=533828 | ||||
|      | ||||
|     Signed-off-by: Anthony G. Basile <blueness@gentoo.org> | ||||
|  | ||||
| commit 92e2f2c7cc958effcec0ef773dda954a153d8e42 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     killprocs: remove calls to sleep | ||||
|      | ||||
|     X-Gentoo-Bug: 487084 | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=487084 | ||||
|  | ||||
| commit ad23d5b8dbee70815c02271c78f415bcd7088076 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     openrc-run: clean up runscript deprecation message | ||||
|  | ||||
| commit 62410eaf4ba92516a58a550717d7f3faf63bb79f | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     add daemon supervisor | ||||
|      | ||||
|     The supervise-daemon process is meant to be a lightweight supervisor | ||||
|     which can monitor and restart a daemon if it crashes. | ||||
|  | ||||
| commit fd80b6fc67ec6a0fe4853167fb67ee40bb51b742 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     localmount/netmount: clean up critical mount processing | ||||
|      | ||||
|     Fix a typo and do not fail if a path in critical_mounts is not listed as | ||||
|     a critical mount does not get mounted. | ||||
|  | ||||
| commit 5d130cc45cd334fd38b0c6874bcc81ac74636217 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     localmount/netmount: allow mount points to be marked critical | ||||
|      | ||||
|     In previous releases, we either treated no mount points as critical or | ||||
|     all of them. | ||||
|      | ||||
|     Now both localmount and netmount support a critical_mounts setting. If | ||||
|     mount points listed in this setting fail to mount, localmount and | ||||
|     netmount will fail. | ||||
|  | ||||
| commit 1c3c2cf6d8cb060d03919297f5fe706f6027a4c6 | ||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     netmount: fix mounting on Linux | ||||
|      | ||||
|     Before this commit, on Linux, we were always trying to mount file | ||||
|     systems marked with _netdev, even when the previous mount command | ||||
|     failed. Now, we do not run the second mount if the first fails. | ||||
|      | ||||
|     X-Gentoo-Bug: 579876 | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=579876 | ||||
|  | ||||
| commit 171e856ec8a0a64504b4b4a47ab6181d37fc3dbe | ||||
| Author: Mike Gilbert <floppym@gentoo.org> | ||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||
|  | ||||
|     start-stop-daemon: Allow group read/write when creating output files | ||||
|      | ||||
|     This allows for better interaction with inherited ACL entries. | ||||
|     This fixes #84. | ||||
|      | ||||
|     X-Gentoo-Bug: 577362 | ||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/577362 | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| NAME=		openrc | ||||
| VERSION=	0.26 | ||||
| VERSION=	0.24.2 | ||||
| PKG=		${NAME}-${VERSION} | ||||
|   | ||||
							
								
								
									
										7
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								NEWS.md
									
									
									
									
									
								
							| @@ -3,13 +3,6 @@ | ||||
| This file will contain a list of notable changes for each release. Note | ||||
| the information in this file is in reverse order. | ||||
|  | ||||
| ## 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 | ||||
|   | ||||
| @@ -5,9 +5,10 @@ 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. | ||||
| Note that [port] refers to the port you are spawning the getty on, and | ||||
| not the full path to it. For example, tty0 or ttyS0instead of /dev/tty0 | ||||
| or /dev/ttyS0. | ||||
| tty0 or ttyS0, not the full path to it (for example, tty0 or ttyS0 and | ||||
|  | ||||
| ``` | ||||
| # cd /etc/init.d | ||||
|   | ||||
| @@ -178,11 +178,6 @@ | ||||
| # "xenU"           - XenU Domain (Linux and NetBSD) | ||||
| #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 | ||||
| # It is used in the consolefont, keymaps, numlock and termencoding | ||||
| # service scripts. | ||||
|   | ||||
							
								
								
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,3 @@ | ||||
| agetty | ||||
| binfmt | ||||
| modules-load | ||||
| bootmisc | ||||
|   | ||||
| @@ -19,7 +19,7 @@ SRCS-FreeBSD=	hostid.in modules.in moused.in newsyslog.in pf.in rarpd.in \ | ||||
| 		rc-enabled.in rpcbind.in savecore.in syslogd.in | ||||
| # These are FreeBSD specific | ||||
| 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 \ | ||||
| 	keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \ | ||||
|   | ||||
| @@ -23,7 +23,6 @@ fi | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after swclock | ||||
| 	provide clock | ||||
| 	# BSD adjkerntz needs to be able to write to /etc | ||||
| 	if [ "$clock" = "UTC" -a -e /etc/wall_cmos_clock ] || | ||||
|   | ||||
| @@ -19,7 +19,6 @@ pidfile="/run/${RC_SVCNAME}.pid" | ||||
|  | ||||
| depend() { | ||||
| 	after local | ||||
| 	keyword -prefix | ||||
| } | ||||
|  | ||||
| start_pre() { | ||||
|   | ||||
| @@ -13,7 +13,7 @@ description="Register misc binary format handlers" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock procfs | ||||
| 	after procfs | ||||
| 	use modules devfs | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|   | ||||
| @@ -71,8 +71,7 @@ cleanup_var_run_dir() | ||||
| 	ebegin "Cleaning /var/run" | ||||
| 	for x in $(find /var/run ! -type d ! -name utmp \ | ||||
| 		! -name random-seed ! -name dev.db \ | ||||
| 		! -name ld-elf.so.hints ! -name ld-elf32.so.hints \ | ||||
| 		! -name ld.so.hints); | ||||
| 		! -name ld-elf.so.hints ! -name ld.so.hints); | ||||
| 	do | ||||
| 		# Clean stale sockets | ||||
| 		if [ -S "$x" ]; then | ||||
|   | ||||
| @@ -13,7 +13,6 @@ description="Creates the dev database" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need localmount | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -12,7 +12,6 @@ | ||||
| description="Configures a specific kernel dump device." | ||||
|  | ||||
| depend() { | ||||
| 	after clock | ||||
| 	need swap | ||||
| 	keyword -jail -prefix | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,6 @@ _IFS=" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	use dev clock modules | ||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -timeout -vserver -uml | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,6 @@ extra_commands="reset" | ||||
| depend() | ||||
| { | ||||
| 	use root | ||||
| 	after clock | ||||
| 	before devd net | ||||
| 	keyword -jail -prefix | ||||
| } | ||||
|   | ||||
| @@ -12,7 +12,6 @@ | ||||
| description="Sets the hostname of the machine." | ||||
|  | ||||
| depend() { | ||||
| 	after clock | ||||
| 	keyword -docker -lxc -prefix -systemd-nspawn | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -33,6 +33,9 @@ depend() | ||||
| 	want modules | ||||
| 	if yesno $clock_adjfile; then | ||||
| 		use root | ||||
| 	else | ||||
| 		before binfmt bootmisc fsck hostname keymaps localmount loopback mtab | ||||
| 		before procfs root swap sysctl termencoding urandom | ||||
| 	fi | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||
| } | ||||
|   | ||||
| @@ -14,7 +14,7 @@ description="Applies a keymap for the consoles." | ||||
| depend() | ||||
| { | ||||
| 	need localmount termencoding | ||||
| 	after bootmisc clock | ||||
| 	after bootmisc | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -15,7 +15,7 @@ depend() | ||||
| { | ||||
| 	need fsck | ||||
| 	use lvm modules mtab root | ||||
| 	after clock lvm modules root | ||||
| 	after lvm modules root | ||||
| 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,6 @@ description="Configures the loopback interface." | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	keyword -jail -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,7 @@ description="Re-mount filesytems read-only for a clean reboot." | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after killprocs savecache | ||||
| 	need killprocs savecache | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -13,7 +13,6 @@ description="Update /etc/mtab to match what the kernel knows about" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need root | ||||
| 	keyword -prefix -systemd-nspawn | ||||
| } | ||||
|   | ||||
| @@ -18,7 +18,7 @@ __nl=" | ||||
| depend() | ||||
| { | ||||
| 	need localmount | ||||
| 	after bootmisc clock | ||||
| 	after bootmisc | ||||
| 	if [ -n "$(interfaces)" ]; then | ||||
| 		provide net | ||||
| 	fi | ||||
|   | ||||
| @@ -13,7 +13,6 @@ required_files="/etc/newsyslog.conf" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need localmount | ||||
| 	keyword -prefix | ||||
| } | ||||
|   | ||||
| @@ -13,7 +13,6 @@ description="Mounts misc filesystems in /proc." | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	use devfs | ||||
| 	want modules | ||||
| 	need localmount | ||||
|   | ||||
| @@ -13,7 +13,6 @@ description="Mount the root fs read/write" | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need fsck | ||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|   | ||||
| @@ -14,7 +14,6 @@ description="Saves a kernel dump." | ||||
| depend() | ||||
| { | ||||
| 	need dumpon localmount | ||||
| 	after clock | ||||
| 	before encswap | ||||
| 	keyword -jail -prefix | ||||
| } | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| S#!@BINDIR@/openrc-run | ||||
| #!@SBINDIR@/openrc-run | ||||
| # Copyright (c) 2009-2015 The OpenRC Authors. | ||||
| # See the Authors file at the top-level directory of this distribution and | ||||
| # https://github.com/OpenRC/openrc/blob/master/AUTHORS | ||||
| @@ -14,9 +14,9 @@ S#!@BINDIR@/openrc-run | ||||
| description="Configures static routes." | ||||
| __nl=" | ||||
| " | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	provide net | ||||
| 	use network | ||||
| 	keyword -jail -prefix -vserver | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	before fsck | ||||
| 	keyword -jail -prefix | ||||
| } | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	before localmount | ||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|   | ||||
| @@ -13,6 +13,10 @@ description="Sets the local clock to the mtime of a given file." | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	before adjkerntz binfmt bootmisc devdb dumpon fsck hostid hostname keymaps | ||||
| 	before localmount loopback modules mtab network newsyslog procfs root | ||||
| 	before savecore staticroute swap swap-blk syscons sysctl syslogd | ||||
| 	before termencoding ttys urandom wscons | ||||
| 	provide clock | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||
| } | ||||
|   | ||||
| @@ -10,7 +10,6 @@ | ||||
| # except according to the terms contained in the LICENSE file. | ||||
|  | ||||
| depend() { | ||||
| 	after clock | ||||
| 	need localmount | ||||
| 	keyword -jail -prefix | ||||
| } | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	before bootmisc logger | ||||
| 	keyword -prefix -systemd-nspawn -vserver | ||||
| } | ||||
|   | ||||
| @@ -22,6 +22,6 @@ depend() | ||||
| 	provide logger | ||||
| 	use net newsyslog | ||||
| 	need localmount | ||||
| 	after bootmisc clock | ||||
| 	after bootmisc | ||||
| 	keyword -prefix | ||||
| } | ||||
|   | ||||
| @@ -18,7 +18,7 @@ depend() | ||||
| { | ||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||
| 	use root | ||||
| 	after bootmisc clock | ||||
| 	after bootmisc | ||||
| } | ||||
|  | ||||
| start() | ||||
|   | ||||
| @@ -11,7 +11,7 @@ | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock fsck | ||||
| 	after fsck | ||||
| 	keyword -prefix | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -14,7 +14,6 @@ description="Initializes the random number generator." | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need localmount | ||||
| 	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn | ||||
| } | ||||
|   | ||||
| @@ -11,7 +11,6 @@ | ||||
|  | ||||
| depend() | ||||
| { | ||||
| 	after clock | ||||
| 	need localmount | ||||
| 	keyword -prefix | ||||
| } | ||||
|   | ||||
| @@ -9,7 +9,7 @@ MAN8=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | ||||
| 		service.8 start-stop-daemon.8 supervise-daemon.8 | ||||
|  | ||||
| ifeq (${OS},Linux) | ||||
| MAN8 += rc-sstat.8 openrc-init.8 openrc-shutdown.8 | ||||
| MAN8 += rc-sstat.8 | ||||
| endif | ||||
|  | ||||
| # 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> | ||||
| @@ -167,24 +167,6 @@ Display name used for the above defined command. | ||||
| Process name to match when signaling the daemon. | ||||
| .It Ar stopsig | ||||
| 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 | ||||
| Retry schedule to use when stopping the daemon. It can either be a | ||||
| timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5). | ||||
|   | ||||
| @@ -1,47 +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-shutdown 8 SMM | ||||
| .Os OpenRC | ||||
| .Sh NAME | ||||
| .Nm openrc-shutdown | ||||
| .Nd bring the system down | ||||
| .Sh SYNOPSIS | ||||
| .Nm | ||||
| .Op Fl H , -halt | ||||
| .Op Fl k , -kexec | ||||
| .Op Fl p , -poweroff | ||||
| .Op Fl R , -reexec | ||||
| .Op Fl r , -reboot | ||||
| .Sh DESCRIPTION | ||||
| .Nm | ||||
| is the utility that communicates with 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 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 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. | ||||
| .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, | ||||
| but any runlevel can be quickly examined. | ||||
| .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: | ||||
| .Bl -tag -width ".Fl test , test string" | ||||
| .It Fl a , -all | ||||
| @@ -63,6 +57,5 @@ dependency order if the dependency tree is available. | ||||
| .Sh SEE ALSO | ||||
| .Xr openrc 8 , | ||||
| .Xr rc-update 8 | ||||
| .Xr supervise-daemon 8 | ||||
| .Sh AUTHORS | ||||
| .An Roy Marples <roy@marples.name> | ||||
|   | ||||
| @@ -16,8 +16,6 @@ | ||||
| .Nd starts a daemon and restarts it if it crashes | ||||
| .Sh SYNOPSIS | ||||
| .Nm | ||||
| .Fl D , -respawn-delay | ||||
| .Ar seconds | ||||
| .Fl d , -chdir | ||||
| .Ar path | ||||
| .Fl e , -env | ||||
| @@ -28,18 +26,14 @@ | ||||
| .Ar arg | ||||
| .Fl k , -umask | ||||
| .Ar value | ||||
| .Fl m , -respawn-max | ||||
| .Ar count | ||||
| .Fl N , -nicelevel | ||||
| .Ar level | ||||
| .Fl p , -pidfile | ||||
| .Ar pidfile | ||||
| .Fl P , -respawn-period | ||||
| .Ar seconds | ||||
| .Fl r , -chroot | ||||
| .Ar chrootpath | ||||
| .Fl u , -user | ||||
| .Ar user | ||||
| .Fl r , -chroot | ||||
| .Ar chrootpath | ||||
| .Fl 1 , -stdout | ||||
| .Ar logfile | ||||
| .Fl 2 , -stderr | ||||
| @@ -88,9 +82,6 @@ Print the action(s) that are taken just before doing them. | ||||
| .Pp | ||||
| The options are as follows: | ||||
| .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 | ||||
| chdir to this directory before starting the daemon. | ||||
| .It Fl e , -env Ar VAR=VALUE | ||||
| @@ -103,18 +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. | ||||
| .It Fl k , -umask Ar mode | ||||
| 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 | ||||
| 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 , -chroot Ar path | ||||
| chroot to this directory before starting the daemon. All other paths, such | ||||
| as the path to the daemon, chdir and pidfile, should be relative to the chroot. | ||||
| @@ -142,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 | ||||
| are passed as arguments to the daemon to start and used when finding a daemon | ||||
| 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 | ||||
| .Xr chdir 2 , | ||||
| .Xr chroot 2 , | ||||
|   | ||||
| @@ -25,9 +25,6 @@ supervise_start() | ||||
| 	eval supervise-daemon --start \ | ||||
| 		${chroot:+--chroot} $chroot \ | ||||
| 		${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 \ | ||||
| 		$supervise_daemon_args \ | ||||
| 		$command \ | ||||
|   | ||||
| @@ -23,7 +23,6 @@ | ||||
| #include <stdbool.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <time.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #include "helpers.h" | ||||
| @@ -69,7 +68,5 @@ RC_DEPTREE *_rc_deptree_load (int, int *); | ||||
| bool _rc_can_find_pids(void); | ||||
|  | ||||
| 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); | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -39,7 +39,6 @@ extern "C" { | ||||
| #define RC_CONFDIR              RC_SYSCONFDIR "/conf.d" | ||||
| #define RC_PLUGINDIR            RC_LIBDIR "/plugins" | ||||
|  | ||||
| #define RC_INIT_FIFO RC_SVCDIR"/init.ctl" | ||||
| #define RC_PROFILE_ENV     RC_SYSCONFDIR "/profile.env" | ||||
| #define RC_SYS_WHITELIST   RC_LIBEXECDIR "/conf.d/env_whitelist" | ||||
| #define RC_USR_WHITELIST   RC_SYSCONFDIR "/conf.d/env_whitelist" | ||||
|   | ||||
							
								
								
									
										2
									
								
								src/rc/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								src/rc/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -59,6 +59,4 @@ mark_service_failed | ||||
| rc-abort | ||||
| rc | ||||
| openrc | ||||
| openrc-init | ||||
| openrc-run | ||||
| openrc-shutdown | ||||
|   | ||||
| @@ -1,7 +1,3 @@ | ||||
| include ../../Makefile.inc | ||||
| MK=		../../mk | ||||
| include ${MK}/os.mk | ||||
|  | ||||
| SRCS=	checkpath.c do_e.c do_mark_service.c do_service.c \ | ||||
| 		do_value.c fstabinfo.c is_newer_than.c is_older_than.c \ | ||||
| 		mountinfo.c openrc-run.c rc-abort.c rc.c \ | ||||
| @@ -13,10 +9,6 @@ ifeq (${MKSELINUX},yes) | ||||
| SRCS+=		rc-selinux.c | ||||
| endif | ||||
|  | ||||
| ifeq (${OS},Linux) | ||||
| SRCS+=		openrc-init.c openrc-shutdown.c | ||||
| endif | ||||
|  | ||||
| CLEANFILES=	version.h rc-selinux.o | ||||
|  | ||||
| BINDIR=		${PREFIX}/bin | ||||
| @@ -42,11 +34,6 @@ RC_SBINPROGS=	mark_service_starting mark_service_started \ | ||||
| 		mark_service_inactive mark_service_wasinactive \ | ||||
| 		mark_service_hotplugged mark_service_failed \ | ||||
| 		rc-abort swclock | ||||
|  | ||||
| ifeq (${OS},Linux) | ||||
| SBINPROGS+= openrc-init openrc-shutdown | ||||
| endif | ||||
|  | ||||
| ALL_PROGS=	${BINPROGS} ${SBINPROGS} ${RC_BINPROGS} ${RC_SBINPROGS} | ||||
| CLEANFILES+=	${ALL_PROGS} | ||||
|  | ||||
| @@ -54,6 +41,8 @@ LOCAL_CPPFLAGS=-I../includes -I../librc -I../libeinfo | ||||
| LOCAL_LDFLAGS=-L../librc -L../libeinfo | ||||
| LDADD+=		-lutil -lrc -leinfo | ||||
|  | ||||
| include ../../Makefile.inc | ||||
| MK=		../../mk | ||||
| include ${MK}/prog.mk | ||||
| include ${MK}/gitver.mk | ||||
| include ${MK}/cc.mk | ||||
| @@ -107,9 +96,6 @@ veinfo vewarn vebegin veend vewend veindent veoutdent: do_e.o rc-misc.o | ||||
| fstabinfo: fstabinfo.o _usage.o rc-misc.o | ||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | ||||
|  | ||||
| openrc-init: openrc-init.o | ||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | ||||
|  | ||||
| is_newer_than: is_newer_than.o rc-misc.o | ||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | ||||
|  | ||||
| @@ -128,9 +114,6 @@ mountinfo: mountinfo.o _usage.o rc-misc.o | ||||
| openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o | ||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | ||||
|  | ||||
| openrc-shutdown: openrc-shutdown.o _usage.o | ||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | ||||
|  | ||||
| openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o | ||||
| ifeq (${MKSELINUX},yes) | ||||
| openrc-run runscript: rc-selinux.o | ||||
|   | ||||
| @@ -1,206 +0,0 @@ | ||||
| /* | ||||
|  * openrc-init.c | ||||
|  * This is the init process (pid 1) for OpenRC. | ||||
|  * | ||||
|  * This is based on code written by James Hammons <jlhamm@acm.org>, so | ||||
|  * I would like to publically thank him for his work. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * 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. | ||||
|  */ | ||||
|  | ||||
| #include <errno.h> | ||||
| #include <signal.h> | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <unistd.h> | ||||
| #include <sys/types.h> | ||||
| #include <sys/stat.h> | ||||
| #include <sys/reboot.h> | ||||
| #include <sys/wait.h> | ||||
|  | ||||
| #include "helpers.h" | ||||
| #include "rc.h" | ||||
| #include "version.h" | ||||
|  | ||||
| static const char *rc_default_runlevel = "default"; | ||||
|  | ||||
| static pid_t do_openrc(const char *runlevel) | ||||
| { | ||||
| 	pid_t pid; | ||||
| 	sigset_t signals; | ||||
|  | ||||
| 	pid = fork(); | ||||
| 	switch(pid) { | ||||
| 		case -1: | ||||
| 			perror("fork"); | ||||
| 			break; | ||||
| 		case 0: | ||||
| 			setsid(); | ||||
| 			/* unblock all signals */ | ||||
| 			sigemptyset(&signals); | ||||
| 			sigprocmask(SIG_SETMASK, &signals, NULL); | ||||
| 			printf("Starting %s runlevel\n", runlevel); | ||||
| 			execl("/sbin/openrc", "/sbin/openrc", runlevel, NULL); | ||||
| 			perror("exec"); | ||||
| 			break; | ||||
| 		default: | ||||
| 			break; | ||||
| 	} | ||||
| 	return pid; | ||||
| } | ||||
|  | ||||
| static void init(const char *default_runlevel) | ||||
| { | ||||
| 	const char *runlevel = NULL; | ||||
| 	pid_t pid; | ||||
|  | ||||
| 	pid = do_openrc("sysinit"); | ||||
| 	waitpid(pid, NULL, 0); | ||||
| 	pid = do_openrc("boot"); | ||||
| 	waitpid(pid, NULL, 0); | ||||
| 	if (default_runlevel) | ||||
| 		runlevel = default_runlevel; | ||||
| 	else | ||||
| 		runlevel = rc_conf_value("rc_default_runlevel"); | ||||
| 	if (!runlevel) | ||||
| 		runlevel = rc_default_runlevel; | ||||
| 	if (!rc_runlevel_exists(runlevel)) { | ||||
| 		printf("%s is an invalid runlevel\n", runlevel); | ||||
| 		runlevel = rc_default_runlevel; | ||||
| 	} | ||||
| 	pid = do_openrc(runlevel); | ||||
| 	waitpid(pid, NULL, 0); | ||||
| } | ||||
|  | ||||
| static void handle_reexec(char *my_name) | ||||
| { | ||||
| 	execl(my_name, my_name, "reexec", NULL); | ||||
| 	return; | ||||
| } | ||||
|  | ||||
| static void handle_shutdown(const char *runlevel, int cmd) | ||||
| { | ||||
| 	pid_t pid; | ||||
|  | ||||
| 	pid = do_openrc(runlevel); | ||||
| 	while (waitpid(pid, NULL, 0) != pid); | ||||
| 	printf("Sending the final term signal\n"); | ||||
| 	kill(-1, SIGTERM); | ||||
| 	sleep(3); | ||||
| 	printf("Sending the final kill signal\n"); | ||||
| 	kill(-1, SIGKILL); | ||||
| 	sync(); | ||||
| 	reboot(cmd); | ||||
| } | ||||
|  | ||||
| static void reap_zombies(void) | ||||
| { | ||||
| 	pid_t pid; | ||||
|  | ||||
| 	for (;;) { | ||||
| 		pid = waitpid(-1, NULL, WNOHANG); | ||||
| 		if (pid == 0) | ||||
| 			break; | ||||
| 		else if (pid == -1) { | ||||
| 			if (errno == ECHILD) | ||||
| 				break; | ||||
| 			perror("waitpid"); | ||||
| 			continue; | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void signal_handler(int sig) | ||||
| { | ||||
| 	switch(sig) { | ||||
| 		case SIGINT: | ||||
| 			handle_shutdown("reboot", RB_AUTOBOOT); | ||||
| 			break; | ||||
| 		case SIGCHLD: | ||||
| 			reap_zombies(); | ||||
| 			break; | ||||
| 		default: | ||||
| 			printf("Unknown signal received, %d\n", sig); | ||||
| 			break; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
| 	char *default_runlevel; | ||||
| 	char buf[2048]; | ||||
| 	int count; | ||||
| 	FILE *fifo; | ||||
| 	bool reexec = false; | ||||
| 	sigset_t signals; | ||||
| 	struct sigaction sa; | ||||
|  | ||||
| 	if (getpid() != 1) | ||||
| 		return 1; | ||||
|  | ||||
| 	printf("OpenRC init version %s starting\n", VERSION); | ||||
|  | ||||
| 	if (argc > 1) | ||||
| 		default_runlevel = argv[1]; | ||||
| 	else | ||||
| 		default_runlevel = NULL; | ||||
|  | ||||
| 	if (default_runlevel && strcmp(default_runlevel, "reexec") == 0) | ||||
| 		reexec = true; | ||||
|  | ||||
| 	/* block all signals we do not handle */ | ||||
| 	sigfillset(&signals); | ||||
| 	sigdelset(&signals, SIGCHLD); | ||||
| 	sigdelset(&signals, SIGINT); | ||||
| 	sigprocmask(SIG_SETMASK, &signals, NULL); | ||||
|  | ||||
| 	/* install signal  handler */ | ||||
| 	memset(&sa, 0, sizeof(sa)); | ||||
| 	sa.sa_handler = signal_handler; | ||||
| 	sigaction(SIGCHLD, &sa, NULL); | ||||
| 	sigaction(SIGINT, &sa, NULL); | ||||
| 	reboot(RB_DISABLE_CAD); | ||||
|  | ||||
| 	if (! reexec) | ||||
| 		init(default_runlevel); | ||||
|  | ||||
| 	if (mkfifo(RC_INIT_FIFO, 0600) == -1 && errno != EEXIST) | ||||
| 		perror("mkfifo"); | ||||
|  | ||||
| 	for (;;) { | ||||
| 		/* This will block until a command is sent down the pipe... */ | ||||
| 		fifo = fopen(RC_INIT_FIFO, "r"); | ||||
| 		if (!fifo) { | ||||
| 			if (errno != EINTR) | ||||
| 				perror("fopen"); | ||||
| 			continue; | ||||
| 		} | ||||
| 		count = fread(buf, 1, 2048, fifo); | ||||
| 		buf[count] = 0; | ||||
| 		fclose(fifo); | ||||
| 		printf("PID1: Received \"%s\" from FIFO...\n", buf); | ||||
| 		if (strcmp(buf, "halt") == 0) | ||||
| 			handle_shutdown("shutdown", RB_HALT_SYSTEM); | ||||
| 		else if (strcmp(buf, "kexec") == 0) | ||||
| 			handle_shutdown("reboot", RB_KEXEC); | ||||
| 		else if (strcmp(buf, "poweroff") == 0) | ||||
| 			handle_shutdown("shutdown", RB_POWER_OFF); | ||||
| 		else if (strcmp(buf, "reboot") == 0) | ||||
| 			handle_shutdown("reboot", RB_AUTOBOOT); | ||||
| 		else if (strcmp(buf, "reexec") == 0) | ||||
| 			handle_reexec(argv[0]); | ||||
| 	} | ||||
| 	return 0; | ||||
| } | ||||
| @@ -1,132 +0,0 @@ | ||||
| /* | ||||
|  * openrc-shutdown.c | ||||
|  * If you are using OpenRC's provided init, this will shut down or | ||||
|  * reboot your system. | ||||
|  * | ||||
|  * This is based on code written by James Hammons <jlhamm@acm.org>, so | ||||
|  * I would like to publically thank him for his work. | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * Copyright 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. | ||||
|  */ | ||||
|  | ||||
| #include <getopt.h> | ||||
| #include <signal.h> | ||||
| #include <stdbool.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <unistd.h> | ||||
| #include <sys/types.h> | ||||
|  | ||||
| #include "einfo.h" | ||||
| #include "rc.h" | ||||
| #include "helpers.h" | ||||
| #include "_usage.h" | ||||
|  | ||||
| const char *applet = NULL; | ||||
| const char *extraopts = NULL; | ||||
| const char *getoptstring = "HkpRr" getoptstring_COMMON; | ||||
| const struct option longopts[] = { | ||||
| 	{ "halt",        no_argument, NULL, 'H'}, | ||||
| 	{ "kexec",        no_argument, NULL, 'k'}, | ||||
| 	{ "poweroff",        no_argument, NULL, 'p'}, | ||||
| 	{ "reexec",        no_argument, NULL, 'R'}, | ||||
| 	{ "reboot",        no_argument, NULL, 'r'}, | ||||
| 	longopts_COMMON | ||||
| }; | ||||
| const char * const longopts_help[] = { | ||||
| 	"halt the system", | ||||
| 	"reboot the system using kexec", | ||||
| 	"power off the system", | ||||
| 	"re-execute init (use after upgrading)", | ||||
| 	"reboot the system", | ||||
| 	longopts_help_COMMON | ||||
| }; | ||||
| const char *usagestring = NULL; | ||||
| const char *exclusive = "Select one of " | ||||
| "--halt, --kexec, --poweroff, --reexec or --reboot"; | ||||
|  | ||||
| static void send_cmd(const char *cmd) | ||||
| { | ||||
| 	FILE *fifo; | ||||
|  	size_t ignored; | ||||
|  | ||||
| 	fifo = fopen(RC_INIT_FIFO, "w"); | ||||
|  | ||||
| 	if (!fifo) { | ||||
| 		perror("fopen"); | ||||
| 		return; | ||||
| 	} | ||||
|  | ||||
| 	ignored = fwrite(cmd, 1, strlen(cmd), fifo); | ||||
| 	if (ignored != strlen(cmd)) | ||||
| 		printf("Error writing to init fifo\n"); | ||||
| 	fclose(fifo); | ||||
| } | ||||
|  | ||||
| int main(int argc, char **argv) | ||||
| { | ||||
| 	int opt; | ||||
| 	int cmd_count = 0; | ||||
| 	bool do_halt = false; | ||||
| 	bool do_kexec = false; | ||||
| 	bool do_poweroff = false; | ||||
| 	bool do_reboot = false; | ||||
| 	bool do_reexec = false; | ||||
|  | ||||
| 	applet = basename_c(argv[0]); | ||||
| if (geteuid() != 0) | ||||
| 	eerrorx("%s: you must be root\n", applet); | ||||
| 	while ((opt = getopt_long(argc, argv, getoptstring, | ||||
| 		    longopts, (int *) 0)) != -1) | ||||
| 	{ | ||||
| 		switch (opt) { | ||||
| 		case 'H': | ||||
| 			do_halt = true; | ||||
| 			cmd_count++; | ||||
| 			break; | ||||
| 		case 'k': | ||||
| 			do_kexec = true; | ||||
| 			cmd_count++; | ||||
| 			break; | ||||
| 		case 'p': | ||||
| 			do_poweroff = true; | ||||
| 			cmd_count++; | ||||
| 			break; | ||||
| 		case 'R': | ||||
| 			do_reexec = true; | ||||
| 			cmd_count++; | ||||
| 			break; | ||||
| 		case 'r': | ||||
| 			do_reboot = true; | ||||
| 			cmd_count++; | ||||
| 			break; | ||||
| 		case_RC_COMMON_GETOPT | ||||
| 		} | ||||
| 	} | ||||
| 	if (cmd_count != 1) { | ||||
| 		eerror("%s: %s\n", applet, exclusive); | ||||
| 		usage(EXIT_FAILURE); | ||||
| 	} | ||||
| 	if (do_halt) | ||||
| 		send_cmd("halt"); | ||||
| 	else if (do_kexec) | ||||
| 		send_cmd("kexec"); | ||||
| 	else if (do_poweroff) | ||||
| 		send_cmd("poweroff"); | ||||
| 	else if (do_reboot) | ||||
| 		send_cmd("reboot"); | ||||
| 	else if (do_reexec) | ||||
| 		send_cmd("reexec"); | ||||
| 	return 0; | ||||
| } | ||||
| @@ -442,35 +442,3 @@ RC_SERVICE lookup_service_state(const char *service) | ||||
| 			return service_bits[i].bit; | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| void from_time_t(char *time_string, time_t tv) | ||||
| { | ||||
| 	strftime(time_string, 20, "%Y-%m-%d %H:%M:%S", localtime(&tv)); | ||||
| } | ||||
|  | ||||
| time_t to_time_t(char *timestring) | ||||
| { | ||||
| 	int check = 0; | ||||
| 	int year = 0; | ||||
| 	int month = 0; | ||||
| 	int day = 0; | ||||
| 	int hour = 0; | ||||
| 	int min = 0; | ||||
| 	int sec = 0; | ||||
| 	struct tm breakdown = {0}; | ||||
| 	time_t result = -1; | ||||
|  | ||||
| 	check = sscanf(timestring, "%4d-%2d-%2d %2d:%2d:%2d", | ||||
| 			&year, &month, &day, &hour, &min, &sec); | ||||
| 	if (check == 6) { | ||||
| 		breakdown.tm_year = year - 1900; /* years since 1900 */ | ||||
| 		breakdown.tm_mon = month - 1; | ||||
| 		breakdown.tm_mday = day; | ||||
| 		breakdown.tm_hour = hour; | ||||
| 		breakdown.tm_min = min; | ||||
| 		breakdown.tm_sec = sec; | ||||
| 		breakdown.tm_isdst = -1; | ||||
| 		result = mktime(&breakdown); | ||||
| 	} | ||||
| 	return result; | ||||
| } | ||||
|   | ||||
| @@ -76,55 +76,10 @@ print_level(const char *prefix, const char *level) | ||||
| 		printf("%s\n", level); | ||||
| } | ||||
|  | ||||
| static void get_uptime(const char *service, char *uptime, int uptime_size) | ||||
| { | ||||
| 	RC_SERVICE state = rc_service_state(service); | ||||
| 	char *start_count; | ||||
| 	time_t now; | ||||
| 	char *start_time_string; | ||||
| 	time_t start_time; | ||||
| 	double time_diff; | ||||
| 	double diff_tmp; | ||||
| 	double diff_days; | ||||
| 	double diff_hours; | ||||
| 	double diff_mins; | ||||
|  | ||||
| 	uptime[0] = '\0'; | ||||
| 	if (state & RC_SERVICE_STARTED) { | ||||
| 		start_count = rc_service_value_get(service, "start_count"); | ||||
| 		start_time_string = rc_service_value_get(service, "start_time"); | ||||
| 		if (start_count && start_time_string) { | ||||
| 			start_time = to_time_t(start_time_string); | ||||
| 			now = time(NULL); | ||||
| 			time_diff = difftime(now, start_time); | ||||
| 			diff_tmp = time_diff; | ||||
| 			if (diff_tmp > 86400.0) { | ||||
| 				diff_days = diff_tmp / 86400.0; | ||||
| 				diff_tmp -= diff_days * 86400.0; | ||||
| 			} | ||||
| 			if (diff_tmp > 3600.0) { | ||||
| 				diff_hours = diff_tmp / 3600.0; | ||||
| 				diff_tmp -= diff_hours * 3600.0; | ||||
| 			} | ||||
| 			if (diff_tmp > 60.0) { | ||||
| 				diff_mins = diff_tmp / 60.0; | ||||
| 				diff_tmp -= diff_mins * 60.0; | ||||
| 			} | ||||
| 			if ((int) diff_days > 0) | ||||
| 				snprintf(uptime, uptime_size, "%.0f days %02.0f:%02.0f (%s)", | ||||
| 						diff_days, diff_hours, diff_mins, start_count); | ||||
| 			else | ||||
| 				snprintf(uptime, uptime_size, "%02.0f:%02.0f (%s)", | ||||
| 						diff_hours, diff_mins, start_count); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
| static void | ||||
| print_service(const char *service) | ||||
| { | ||||
| 	char status[60]; | ||||
| 	char uptime [40]; | ||||
| 	char status[10]; | ||||
| 	int cols =  printf(" %s", service); | ||||
| 	const char *c = ecolor(ECOLOR_GOOD); | ||||
| 	RC_SERVICE state = rc_service_state(service); | ||||
| @@ -146,8 +101,7 @@ print_service(const char *service) | ||||
| 		{ | ||||
| 			snprintf(status, sizeof(status), " crashed "); | ||||
| 		} else { | ||||
| 			get_uptime(service, uptime, 40); | ||||
| 			snprintf(status, sizeof(status), " started %s", uptime); | ||||
| 			snprintf(status, sizeof(status), " started "); | ||||
| 			color = ECOLOR_GOOD; | ||||
| 		} | ||||
| 	} else if (state & RC_SERVICE_SCHEDULED) { | ||||
|   | ||||
| @@ -960,9 +960,6 @@ int main(int argc, char **argv) | ||||
| 		if (redirect_stdout || redirect_stderr) | ||||
| 			eerrorx("%s: --stdout and --stderr are only relevant" | ||||
| 			    " with --start", applet); | ||||
| 		if (start_wait) | ||||
| 			ewarn("using --wait with --stop has no effect," | ||||
| 			    " use --retry instead"); | ||||
| 	} else { | ||||
| 		if (!exec) | ||||
| 			eerrorx("%s: nothing to start", applet); | ||||
| @@ -1015,11 +1012,7 @@ int main(int argc, char **argv) | ||||
| 		eerror("%s: %s does not exist", applet, | ||||
| 		    *exec_file ? exec_file : exec); | ||||
| 		exit(EXIT_FAILURE); | ||||
|  | ||||
| 	} | ||||
| 	if (start && retry) | ||||
| 		ewarn("using --retry with --start has no effect," | ||||
| 		    " use --wait instead"); | ||||
|  | ||||
| 	/* If we don't have a pidfile we should check if it's interpreted | ||||
| 	 * or not. If it we, we need to pass the interpreter through | ||||
|   | ||||
| @@ -66,42 +66,36 @@ static struct pam_conv conv = { NULL, NULL}; | ||||
|  | ||||
| const char *applet = NULL; | ||||
| const char *extraopts = NULL; | ||||
| const char *getoptstring = "D:d:e:g:I:Kk:m:N:p:r:Su:1:2:" \ | ||||
| const char *getoptstring = "d:e:g:I:Kk:N:p:r:Su:1:2:" \ | ||||
| 	getoptstring_COMMON; | ||||
| const struct option longopts[] = { | ||||
| 	{ "respawn-delay",        1, NULL, 'D'}, | ||||
| 	{ "chdir",        1, NULL, 'd'}, | ||||
| 	{ "env",          1, NULL, 'e'}, | ||||
| 	{ "group",        1, NULL, 'g'}, | ||||
| 	{ "ionice",       1, NULL, 'I'}, | ||||
| 	{ "stop",         0, NULL, 'K'}, | ||||
| 	{ "umask",        1, NULL, 'k'}, | ||||
| 	{ "respawn-max",    1, NULL, 'm'}, | ||||
| 	{ "nicelevel",    1, NULL, 'N'}, | ||||
| 	{ "pidfile",      1, NULL, 'p'}, | ||||
| 	{ "respawn-period",        1, NULL, 'P'}, | ||||
| 	{ "user",         1, NULL, 'u'}, | ||||
| 	{ "chroot",       1, NULL, 'r'}, | ||||
| 	{ "start",        0, NULL, 'S'}, | ||||
| 	{ "user",         1, NULL, 'u'}, | ||||
| 	{ "stdout",       1, NULL, '1'}, | ||||
| 	{ "stderr",       1, NULL, '2'}, | ||||
| 	longopts_COMMON | ||||
| }; | ||||
| const char * const longopts_help[] = { | ||||
| 	"Set a respawn delay", | ||||
| 	"Change the PWD", | ||||
| 	"Set an environment string", | ||||
| 	"Change the process group", | ||||
| 	"Set an ionice class:data when starting", | ||||
| 	"Stop daemon", | ||||
| 	"Set the umask for the daemon", | ||||
| 	"set maximum number of respawn attempts", | ||||
| 	"Set a nicelevel when starting", | ||||
| 	"Match pid found in this file", | ||||
| 	"Set respawn time period", | ||||
| 	"Change the process user", | ||||
| 	"Chroot to this directory", | ||||
| 	"Start daemon", | ||||
| 	"Change the process user", | ||||
| 	"Redirect stdout to file", | ||||
| 	"Redirect stderr to file", | ||||
| 	longopts_help_COMMON | ||||
| @@ -171,8 +165,7 @@ static pid_t get_pid(const char *pidfile) | ||||
| 	return pid; | ||||
| } | ||||
|  | ||||
| static void child_process(char *exec, char **argv, char *svcname, | ||||
| 		int start_count) | ||||
| static void child_process(char *exec, char **argv) | ||||
| { | ||||
| 	RC_STRINGLIST *env_list; | ||||
| 	RC_STRING *env; | ||||
| @@ -184,9 +177,6 @@ static void child_process(char *exec, char **argv, char *svcname, | ||||
| 	char *np; | ||||
| 	char **c; | ||||
| 	char cmdline[PATH_MAX]; | ||||
| 	time_t start_time; | ||||
| 	char start_count_string[20]; | ||||
| 	char start_time_string[20]; | ||||
|  | ||||
| #ifdef HAVE_PAM | ||||
| 	pam_handle_t *pamh = NULL; | ||||
| @@ -236,7 +226,6 @@ static void child_process(char *exec, char **argv, char *svcname, | ||||
| 	/* Close any fd's to the passwd database */ | ||||
| 	endpwent(); | ||||
|  | ||||
| 	/* remove the controlling tty */ | ||||
| #ifdef TIOCNOTTY | ||||
| 	ioctl(tty_fd, TIOCNOTTY, 0); | ||||
| 	close(tty_fd); | ||||
| @@ -332,7 +321,7 @@ static void child_process(char *exec, char **argv, char *svcname, | ||||
| 		dup2(stderr_fd, STDERR_FILENO); | ||||
|  | ||||
| 	for (i = getdtablesize() - 1; i >= 3; --i) | ||||
| 		fcntl(i, F_SETFD, FD_CLOEXEC); | ||||
| 		close(i); | ||||
|  | ||||
| 	*cmdline = '\0'; | ||||
| 	c = argv; | ||||
| @@ -342,13 +331,6 @@ static void child_process(char *exec, char **argv, char *svcname, | ||||
| 		c++; | ||||
| 	} | ||||
| 	syslog(LOG_INFO, "Running command line: %s", cmdline); | ||||
| 	if (svcname) { | ||||
| start_time = time(NULL); | ||||
| from_time_t(start_time_string, start_time); | ||||
| 		rc_service_value_set(svcname, "start_time", start_time_string); | ||||
| sprintf(start_count_string, "%i", start_count); | ||||
| 		rc_service_value_set(svcname, "start_count", start_count_string); | ||||
| 	} | ||||
| 	execvp(exec, argv); | ||||
|  | ||||
| #ifdef HAVE_PAM | ||||
| @@ -441,14 +423,7 @@ int main(int argc, char **argv) | ||||
| 	char *p; | ||||
| 	char *token; | ||||
| 	int i; | ||||
| 	int n; | ||||
| 	char exec_file[PATH_MAX]; | ||||
| 	int respawn_count = 0; | ||||
| 	int respawn_delay = 0; | ||||
| 	int respawn_max = 10; | ||||
| 	int respawn_period = 5; | ||||
| 	time_t respawn_now= 0; | ||||
| 	time_t first_spawn= 0; | ||||
| 	struct passwd *pw; | ||||
| 	struct group *gr; | ||||
| 	FILE *fp; | ||||
| @@ -485,12 +460,6 @@ int main(int argc, char **argv) | ||||
| 	while ((opt = getopt_long(argc, argv, getoptstring, longopts, | ||||
| 		    (int *) 0)) != -1) | ||||
| 		switch (opt) { | ||||
| 		case 'D':  /* --respawn-delay time */ | ||||
| 			n = sscanf(optarg, "%d", &respawn_delay); | ||||
| 			if (n	!= 1 || respawn_delay < 1) | ||||
| 				eerrorx("Invalid respawn-delay value '%s'", optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'I': /* --ionice */ | ||||
| 			if (sscanf(optarg, "%d:%d", &ionicec, &ioniced) == 0) | ||||
| 				eerrorx("%s: invalid ionice `%s'", | ||||
| @@ -512,12 +481,6 @@ int main(int argc, char **argv) | ||||
| 				    applet, optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'P':  /* --respawn-period time */ | ||||
| 			n = sscanf(optarg, "%d", &respawn_period); | ||||
| 			if (n	!= 1 || respawn_delay < 1) | ||||
| 				eerrorx("Invalid respawn-delay value '%s'", optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'S':  /* --start */ | ||||
| 			start = true; | ||||
| 			break; | ||||
| @@ -547,12 +510,6 @@ int main(int argc, char **argv) | ||||
| 				    applet, optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'm':  /* --respawn-max count */ | ||||
| 			n = sscanf(optarg, "%d", &respawn_max); | ||||
| 			if (n	!= 1 || respawn_max < 1) | ||||
| 				eerrorx("Invalid respawn-max value '%s'", optarg); | ||||
| 			break; | ||||
|  | ||||
| 		case 'p':  /* --pidfile <pid-file> */ | ||||
| 			pidfile = optarg; | ||||
| 			break; | ||||
| @@ -623,11 +580,6 @@ int main(int argc, char **argv) | ||||
| 	if (start) { | ||||
| 		if (!exec) | ||||
| 			eerrorx("%s: nothing to start", applet); | ||||
| 		if (respawn_delay * respawn_max > respawn_period) { | ||||
| 			ewarn("%s: Please increase the value of --respawn-period to more " | ||||
| 				"than %d to avoid infinite respawning", applet,  | ||||
| 				respawn_delay * respawn_max); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	/* Expand ~ */ | ||||
| @@ -687,12 +639,10 @@ int main(int argc, char **argv) | ||||
| 		 * result would be the same. */ | ||||
| 		if (pidfile && exists(pidfile)) | ||||
| 			unlink(pidfile); | ||||
| 		if (svcname) { | ||||
| 		if (svcname) | ||||
| 			rc_service_daemon_set(svcname, exec, | ||||
| 			    (const char *const *)argv, | ||||
| 			    pidfile, false); | ||||
| 			rc_service_mark(svcname, RC_SERVICE_STOPPED); | ||||
| 		} | ||||
| 		exit(EXIT_SUCCESS); | ||||
| 	} | ||||
|  | ||||
| @@ -724,10 +674,6 @@ int main(int argc, char **argv) | ||||
| 	if (child_pid != 0) | ||||
| 		exit(EXIT_SUCCESS); | ||||
|  | ||||
| #ifdef TIOCNOTTY | ||||
| 	tty_fd = open("/dev/tty", O_RDWR); | ||||
| #endif | ||||
| 	devnull_fd = open("/dev/null", O_RDWR); | ||||
| 	child_pid = fork(); | ||||
| 	if (child_pid == -1) | ||||
| 		eerrorx("%s: fork: %s", applet, strerror(errno)); | ||||
| @@ -736,22 +682,18 @@ int main(int argc, char **argv) | ||||
| 		/* this is the supervisor */ | ||||
| 		umask(numask); | ||||
|  | ||||
| #ifdef TIOCNOTTY | ||||
| 		tty_fd = open("/dev/tty", O_RDWR); | ||||
| #endif | ||||
|  | ||||
| 		devnull_fd = open("/dev/null", O_RDWR); | ||||
|  | ||||
| 		fp = fopen(pidfile, "w"); | ||||
| 		if (! fp) | ||||
| 			eerrorx("%s: fopen `%s': %s", applet, pidfile, strerror(errno)); | ||||
| 		fprintf(fp, "%d\n", getpid()); | ||||
| 		fclose(fp); | ||||
|  | ||||
| 		if (svcname) | ||||
| 			rc_service_daemon_set(svcname, exec, | ||||
| 									(const char * const *) argv, pidfile, true); | ||||
|  | ||||
| 	/* remove the controlling tty */ | ||||
| #ifdef TIOCNOTTY | ||||
| 		ioctl(tty_fd, TIOCNOTTY, 0); | ||||
| 		close(tty_fd); | ||||
| #endif | ||||
|  | ||||
| 		/* | ||||
| 		 * Supervisor main loop | ||||
| 		 */ | ||||
| @@ -762,23 +704,6 @@ int main(int argc, char **argv) | ||||
| 				syslog(LOG_INFO, "stopping %s, pid %d", exec, child_pid); | ||||
| 				kill(child_pid, SIGTERM); | ||||
| 			} else { | ||||
| 				sleep(respawn_delay); | ||||
| 				if (respawn_max > 0 && respawn_period > 0) { | ||||
| 					respawn_now = time(NULL); | ||||
| 					if (first_spawn == 0) | ||||
| 						first_spawn = respawn_now; | ||||
| 					if (respawn_now - first_spawn > respawn_period) { | ||||
| 						respawn_count = 0; | ||||
| 						first_spawn = 0; | ||||
| 					} else | ||||
| 						respawn_count++; | ||||
| 					if (respawn_count >= respawn_max) { | ||||
| 						syslog(LOG_INFO, "respawned \"%s\" too many times, " | ||||
| 								"exiting", exec); | ||||
| 						exiting = true; | ||||
| 						continue; | ||||
| 					} | ||||
| 				} | ||||
| 				if (WIFEXITED(i)) | ||||
| 					syslog(LOG_INFO, "%s, pid %d, exited with return code %d", | ||||
| 							exec, child_pid, WEXITSTATUS(i)); | ||||
| @@ -789,19 +714,15 @@ int main(int argc, char **argv) | ||||
| 				if (child_pid == -1) | ||||
| 					eerrorx("%s: fork: %s", applet, strerror(errno)); | ||||
| 				if (child_pid == 0) | ||||
| 					child_process(exec, argv, svcname, respawn_count); | ||||
| 					child_process(exec, argv); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		if (pidfile && exists(pidfile)) | ||||
| 			unlink(pidfile); | ||||
| 		if (svcname) { | ||||
| 		if (svcname) | ||||
| 			rc_service_daemon_set(svcname, exec, | ||||
| 			    (const char *const *)argv, | ||||
| 			    pidfile, false); | ||||
| 			rc_service_mark(svcname, RC_SERVICE_STOPPED); | ||||
| 		} | ||||
| 									(const char * const *) argv, pidfile, true); | ||||
|  | ||||
| 		exit(EXIT_SUCCESS); | ||||
| 	} else if (child_pid == 0) | ||||
| 		child_process(exec, argv, svcname, respawn_count); | ||||
| 		child_process(exec, argv); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user