Compare commits
	
		
			5 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | b087a751de | ||
|   | bc05fb7551 | ||
|   | e5c2a378f3 | ||
|   | 3c1a71bd9d | ||
|   | fcb826a451 | 
							
								
								
									
										454
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										454
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,297 +1,10 @@ | |||||||
| commit 809c205c356992145b8781ae07a5d3c98b79a8c9 | commit bc05fb75515b3f65f3c63ae5972c749fac00924f | ||||||
| Author: Sergei Trofimovich <slyfox@inbox.ru> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     rc-logger.c: fix crash on fclose(NULL) (#137) |  | ||||||
|      |  | ||||||
|     Only close the log if we successfully opened it. |  | ||||||
|      |  | ||||||
|     Reported-by: Brian Evans <grknight@gentoo.org> |  | ||||||
|     Tested-by: Brian Evans <grknight@gentoo.org> |  | ||||||
|     Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org> |  | ||||||
|  |  | ||||||
| commit 238bffca9bbec8ed723b9e46fbc04407e5daddeb |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     version 0.26.3 |  | ||||||
|  |  | ||||||
| commit da0ddd521ad15d030308fbf2017577acc422f1d6 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update ChangeLog |  | ||||||
|  |  | ||||||
| commit 1967cd402caf6e229263f15aef40c6c4d8f60ce3 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     rc_status: calculate time differences in time_t and display seconds in uptime |  | ||||||
|  |  | ||||||
| commit a7f3eb466c750eee160c49ab728ad1f8cd3380ee |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     version 0.26.2 |  | ||||||
|  |  | ||||||
| commit ae7490929d35322e1ce19daaa9f1edadbfe8dfd6 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update ChangeLog |  | ||||||
|  |  | ||||||
| commit ddbd1caa35986b9f1be0070dad1cedfc427a1bf1 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     supervise-daemon: save start time and respawn count before dropping privs |  | ||||||
|  |  | ||||||
| commit a24965121834b64cc5e62c52c67b88886e5c5f5c |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     version 0.26.1 |  | ||||||
|  |  | ||||||
| commit e4bfb4530a86a4ccdff312c857df37fa0da36fd6 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update ChangeLog |  | ||||||
|  |  | ||||||
| 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 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     sh/gendepends.sh.in: fix detection of service scripts |  | ||||||
|      |  | ||||||
|     We do not need to care about the path on the shebang line of a service |  | ||||||
|     script as long as the shebang line ends with "openrc-run". |  | ||||||
|     This fixes #119 and #120. |  | ||||||
|  |  | ||||||
| commit 9bd63b5d4a16601712a65eb8962214cdd4d26ce5 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update dependencies for clock service |  | ||||||
|      |  | ||||||
|     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 48db17a93f5e60c0d241f8fb06bfbdd01206fb9c |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|     update news file |     update news file | ||||||
|  |  | ||||||
| commit c333707cba356f4cacfd58a6fcc78f7c073dddcd | commit e5c2a378f3000cd20826ec6b59ecca15d31190ae | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
| @@ -303,7 +16,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|      |      | ||||||
|     This is the first stage of moving this direction. |     This is the first stage of moving this direction. | ||||||
|  |  | ||||||
| commit 5f5b1f7cbefd0bc14352e86a9c33260266f98d9b | commit 3c1a71bd9db50fd410eb64e715a99911c8fad978 | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
| @@ -315,11 +28,11 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|     Since Failing to mount efivarfs is not critical, we silence the error |     Since Failing to mount efivarfs is not critical, we silence the error | ||||||
|     message from mount. |     message from mount. | ||||||
|  |  | ||||||
| commit cfdf56475e600f79a433cd721cadf39114c6c58d | commit fcb826a45137fec589bf945fe23deeba55879a34 | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|     version 0.25 |     version 0.24.1 | ||||||
|  |  | ||||||
| commit fde3902d069dfdce9c59555186a5541d6d99c8aa | commit fde3902d069dfdce9c59555186a5541d6d99c8aa | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| @@ -1453,3 +1166,160 @@ Author: William Hubbs <w.d.hubbs@gmail.com> | |||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|     increment version to 0.22 |     increment version to 0.22 | ||||||
|  |  | ||||||
|  | commit 5bfb7d6c77ff533e34e2bbfe5b6e57410d961d70 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update ChangeLog | ||||||
|  |  | ||||||
|  | commit 12c8248b5f53879935d4e62ef42023f703c7b636 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     update news for 0.21 | ||||||
|  |  | ||||||
|  | commit 820ef6dab674c2878d72edc8ea21e7250b1b5aec | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: clarify documentation about configuring daemon not to fork | ||||||
|  |  | ||||||
|  | commit 87884db66767eba6317b506a4d7270dd22721831 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Make deprecation warnings for rc and runscript more visible | ||||||
|  |      | ||||||
|  |     These warnings were inserted in verbose only mode in OpenRC-0.13.A | ||||||
|  |     Now, we are making them more visible in preparation for removing these | ||||||
|  |     compatibility binaries in the future. | ||||||
|  |  | ||||||
|  | commit 94077d264e14783e6ca5603d64e9d579fb206c20 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: log the exit code or signal when a child process dies | ||||||
|  |  | ||||||
|  | commit 3351c8b4c3027f09003f8ba33e43f46762f5c453 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon.sh: add support for chroot variable | ||||||
|  |  | ||||||
|  | commit a8214af2fe3aa91930e3270af99cf1d9b7ef5b0a | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     start-stop-daemon.sh: fix regression in chroot support | ||||||
|  |      | ||||||
|  |     The support for the chroot variable was broken in 0.16, this fixes that | ||||||
|  |     breakage. | ||||||
|  |  | ||||||
|  | commit 9a372812c78ea8efc55b3dea6a39c2d0559bca45 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     guide.md: typo fix | ||||||
|  |      | ||||||
|  |     This fixes #86. | ||||||
|  |  | ||||||
|  | commit 3fa9015b8e5610d38366f781a08789e34159b0dc | ||||||
|  | Author: Jason Zaman <jason@perfinion.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     rc-selinux: access check was backwards | ||||||
|  |  | ||||||
|  | commit 3b5a8b331e81ecd9a9362553c16f4527291d5528 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     supervise-daemon: add pam service file | ||||||
|  |  | ||||||
|  | commit b3a04e797e5e459842c2c239886ab6ea08a8dc29 | ||||||
|  | Author: Anthony G. Basile <blueness@gentoo.org> | ||||||
|  | Commit: Anthony G. Basile <blueness@gentoo.org> | ||||||
|  |  | ||||||
|  |     runlevels/Makefile: add support for runlevel ‘nonetwork’ | ||||||
|  |      | ||||||
|  |     Traditional System V reserves runlevel 2 for multiuser with no | ||||||
|  |     networking.  We add support for this which is already defined in | ||||||
|  |     the inittab as | ||||||
|  |      | ||||||
|  |         l2:2:wait:/sbin/rc nonetwork | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 533828 | ||||||
|  |     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 | NAME=		openrc | ||||||
| VERSION=	0.26.3 | VERSION=	0.24.1 | ||||||
| PKG=		${NAME}-${VERSION} | 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 | 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.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 | ## OpenRC-0.24.1 | ||||||
|  |  | ||||||
| This version starts cleaning up the dependencies so that rc_parallel | 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 | spawning a getty manager for this port some other way (such as through | ||||||
| sysvinit/inittab), then run the following commands as root. | sysvinit/inittab), then run the following commands as root. | ||||||
|  |  | ||||||
| Note that [port] refers to the port you are spawning the getty on, for | Note that [port] refers to the port you are spawning the getty on, and | ||||||
| example, tty1 or ttyS0. The full path to it, for example, /dev/tty1 | not the full path to it. For example, tty0 or ttyS0instead of /dev/tty0 | ||||||
| should not be used. | or /dev/ttyS0. | ||||||
|  | tty0 or ttyS0, not the full path to it (for example, tty0 or ttyS0 and | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| # cd /etc/init.d | # cd /etc/init.d | ||||||
|   | |||||||
| @@ -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. | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,4 +1,3 @@ | |||||||
| agetty |  | ||||||
| binfmt | binfmt | ||||||
| modules-load | modules-load | ||||||
| bootmisc | 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 | 		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=	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 \ | 	keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.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 ] || | ||||||
|   | |||||||
| @@ -19,7 +19,6 @@ pidfile="/run/${RC_SVCNAME}.pid" | |||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	after local | 	after local | ||||||
| 	keyword -prefix |  | ||||||
| } | } | ||||||
|  |  | ||||||
| start_pre() { | start_pre() { | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ | |||||||
| 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 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -33,6 +33,9 @@ depend() | |||||||
| 	want modules | 	want modules | ||||||
| 	if yesno $clock_adjfile; then | 	if yesno $clock_adjfile; then | ||||||
| 		use root | 		use root | ||||||
|  | 	else | ||||||
|  | 		before binfmt bootmisc fsck hostname keymaps localmount loopback mtab | ||||||
|  | 		before procfs root swap sysctl termencoding urandom | ||||||
| 	fi | 	fi | ||||||
| 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | 	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -15,7 +15,7 @@ depend() | |||||||
| { | { | ||||||
| 	need fsck | 	need fsck | ||||||
| 	use lvm modules mtab root | 	use lvm modules mtab root | ||||||
| 	after clock lvm modules root | 	after lvm modules root | ||||||
| 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | 	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| S#!@BINDIR@/openrc-run | #!@SBINDIR@/openrc-run | ||||||
| # Copyright (c) 2009-2015 The OpenRC Authors. | # Copyright (c) 2009-2015 The OpenRC Authors. | ||||||
| # See the Authors file at the top-level directory of this distribution and | # See the Authors file at the top-level directory of this distribution and | ||||||
| # https://github.com/OpenRC/openrc/blob/master/AUTHORS | # https://github.com/OpenRC/openrc/blob/master/AUTHORS | ||||||
| @@ -14,9 +14,9 @@ S#!@BINDIR@/openrc-run | |||||||
| 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,10 @@ description="Sets the local clock to the mtime of a given file." | |||||||
|  |  | ||||||
| depend() | 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 | 	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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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() | ||||||
|   | |||||||
| @@ -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 | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 | 		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> |  | ||||||
| @@ -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). | ||||||
|   | |||||||
| @@ -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, | 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> | ||||||
|   | |||||||
| @@ -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,18 +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 , -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 | ||||||
| @@ -88,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 | ||||||
| @@ -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. | 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 , -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. | ||||||
| @@ -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 | 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 , | ||||||
|   | |||||||
| @@ -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 | ||||||
|   | |||||||
| @@ -25,9 +25,6 @@ supervise_start() | |||||||
| 	eval supervise-daemon --start \ | 	eval supervise-daemon --start \ | ||||||
| 		${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 \ | ||||||
|   | |||||||
| @@ -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" | ||||||
| @@ -69,7 +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); |  | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -39,7 +39,6 @@ extern "C" { | |||||||
| #define RC_CONFDIR              RC_SYSCONFDIR "/conf.d" | #define RC_CONFDIR              RC_SYSCONFDIR "/conf.d" | ||||||
| #define RC_PLUGINDIR            RC_LIBDIR "/plugins" | #define RC_PLUGINDIR            RC_LIBDIR "/plugins" | ||||||
|  |  | ||||||
| #define RC_INIT_FIFO RC_SVCDIR"/init.ctl" |  | ||||||
| #define RC_PROFILE_ENV     RC_SYSCONFDIR "/profile.env" | #define RC_PROFILE_ENV     RC_SYSCONFDIR "/profile.env" | ||||||
| #define RC_SYS_WHITELIST   RC_LIBEXECDIR "/conf.d/env_whitelist" | #define RC_SYS_WHITELIST   RC_LIBEXECDIR "/conf.d/env_whitelist" | ||||||
| #define RC_USR_WHITELIST   RC_SYSCONFDIR "/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-abort | ||||||
| rc | rc | ||||||
| openrc | openrc | ||||||
| openrc-init |  | ||||||
| openrc-run | 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 \ | 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 \ | 		do_value.c fstabinfo.c is_newer_than.c is_older_than.c \ | ||||||
| 		mountinfo.c openrc-run.c rc-abort.c rc.c \ | 		mountinfo.c openrc-run.c rc-abort.c rc.c \ | ||||||
| @@ -13,10 +9,6 @@ ifeq (${MKSELINUX},yes) | |||||||
| SRCS+=		rc-selinux.c | SRCS+=		rc-selinux.c | ||||||
| endif | endif | ||||||
|  |  | ||||||
| ifeq (${OS},Linux) |  | ||||||
| SRCS+=		openrc-init.c openrc-shutdown.c |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| CLEANFILES=	version.h rc-selinux.o | CLEANFILES=	version.h rc-selinux.o | ||||||
|  |  | ||||||
| BINDIR=		${PREFIX}/bin | BINDIR=		${PREFIX}/bin | ||||||
| @@ -42,11 +34,6 @@ RC_SBINPROGS=	mark_service_starting mark_service_started \ | |||||||
| 		mark_service_inactive mark_service_wasinactive \ | 		mark_service_inactive mark_service_wasinactive \ | ||||||
| 		mark_service_hotplugged mark_service_failed \ | 		mark_service_hotplugged mark_service_failed \ | ||||||
| 		rc-abort swclock | 		rc-abort swclock | ||||||
|  |  | ||||||
| ifeq (${OS},Linux) |  | ||||||
| SBINPROGS+= openrc-init openrc-shutdown |  | ||||||
| endif |  | ||||||
|  |  | ||||||
| ALL_PROGS=	${BINPROGS} ${SBINPROGS} ${RC_BINPROGS} ${RC_SBINPROGS} | ALL_PROGS=	${BINPROGS} ${SBINPROGS} ${RC_BINPROGS} ${RC_SBINPROGS} | ||||||
| CLEANFILES+=	${ALL_PROGS} | CLEANFILES+=	${ALL_PROGS} | ||||||
|  |  | ||||||
| @@ -54,6 +41,8 @@ LOCAL_CPPFLAGS=-I../includes -I../librc -I../libeinfo | |||||||
| LOCAL_LDFLAGS=-L../librc -L../libeinfo | LOCAL_LDFLAGS=-L../librc -L../libeinfo | ||||||
| LDADD+=		-lutil -lrc -leinfo | LDADD+=		-lutil -lrc -leinfo | ||||||
|  |  | ||||||
|  | include ../../Makefile.inc | ||||||
|  | MK=		../../mk | ||||||
| include ${MK}/prog.mk | include ${MK}/prog.mk | ||||||
| include ${MK}/gitver.mk | include ${MK}/gitver.mk | ||||||
| include ${MK}/cc.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 | fstabinfo: fstabinfo.o _usage.o rc-misc.o | ||||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | 	${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 | is_newer_than: is_newer_than.o rc-misc.o | ||||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | 	${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 | openrc rc: rc.o rc-logger.o rc-misc.o rc-plugin.o _usage.o | ||||||
| 	${CC} ${LOCAL_CFLAGS} ${LOCAL_LDFLAGS} ${CFLAGS} ${LDFLAGS} -o $@ $^ ${LDADD} | 	${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 | openrc-run runscript: openrc-run.o _usage.o rc-misc.o rc-plugin.o | ||||||
| ifeq (${MKSELINUX},yes) | ifeq (${MKSELINUX},yes) | ||||||
| openrc-run runscript: rc-selinux.o | 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; |  | ||||||
| } |  | ||||||
| @@ -261,12 +261,12 @@ rc_logger_open(const char *level) | |||||||
| 						break; | 						break; | ||||||
| 					} | 					} | ||||||
| 				} | 				} | ||||||
| 				fclose(log); |  | ||||||
| 			} else { | 			} else { | ||||||
| 				log_error = 1; | 				log_error = 1; | ||||||
| 				eerror("Error: fopen(%s) failed: %s", TMPLOG, strerror(errno)); | 				eerror("Error: fopen(%s) failed: %s", TMPLOG, strerror(errno)); | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			fclose(log); | ||||||
| 			fclose(plog); | 			fclose(plog); | ||||||
| 		} else { | 		} else { | ||||||
| 			/* | 			/* | ||||||
|   | |||||||
| @@ -442,35 +442,3 @@ RC_SERVICE lookup_service_state(const char *service) | |||||||
| 			return service_bits[i].bit; | 			return service_bits[i].bit; | ||||||
| 	return 0; | 	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,58 +76,10 @@ print_level(const char *prefix, const char *level) | |||||||
| 		printf("%s\n", 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; |  | ||||||
| 	time_t time_diff; |  | ||||||
| 	time_t diff_days = (time_t) 0; |  | ||||||
| 	time_t diff_hours = (time_t) 0; |  | ||||||
| 	time_t diff_mins = (time_t) 0; |  | ||||||
| 	time_t diff_secs = (time_t) 0; |  | ||||||
|  |  | ||||||
| 	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 = (time_t) difftime(now, start_time); |  | ||||||
| 			diff_secs = time_diff; |  | ||||||
| 			if (diff_secs > (time_t) 86400) { |  | ||||||
| 				diff_days = diff_secs / (time_t) 86400; |  | ||||||
| 				diff_secs %= diff_days * (time_t) 86400; |  | ||||||
| 			} |  | ||||||
| 			if (diff_secs > (time_t) 3600) { |  | ||||||
| 				diff_hours = diff_secs / (time_t) 3600; |  | ||||||
| 				diff_secs %= diff_hours * (time_t) 3600; |  | ||||||
| 			} |  | ||||||
| 			if (diff_secs > (time_t) 60) { |  | ||||||
| 				diff_mins = diff_secs / (time_t) 60; |  | ||||||
| 				diff_secs %= diff_mins * (time_t) 60; |  | ||||||
| 			} |  | ||||||
| 			if (diff_days > 0) |  | ||||||
| 				snprintf(uptime, uptime_size, |  | ||||||
| 						"%ld day(s) %02ld:%02ld:%02ld (%s)", |  | ||||||
| 						diff_days, diff_hours, diff_mins, diff_secs, |  | ||||||
| 						start_count); |  | ||||||
| 			else |  | ||||||
| 				snprintf(uptime, uptime_size, |  | ||||||
| 						"%02ld:%02ld:%02ld (%s)", |  | ||||||
| 						diff_hours, diff_mins, diff_secs, start_count); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| static void | static void | ||||||
| print_service(const char *service) | print_service(const char *service) | ||||||
| { | { | ||||||
| 	char status[60]; | 	char status[10]; | ||||||
| 	char uptime [40]; |  | ||||||
| 	int cols =  printf(" %s", service); | 	int cols =  printf(" %s", service); | ||||||
| 	const char *c = ecolor(ECOLOR_GOOD); | 	const char *c = ecolor(ECOLOR_GOOD); | ||||||
| 	RC_SERVICE state = rc_service_state(service); | 	RC_SERVICE state = rc_service_state(service); | ||||||
| @@ -149,8 +101,7 @@ print_service(const char *service) | |||||||
| 		{ | 		{ | ||||||
| 			snprintf(status, sizeof(status), " crashed "); | 			snprintf(status, sizeof(status), " crashed "); | ||||||
| 		} else { | 		} else { | ||||||
| 			get_uptime(service, uptime, 40); | 			snprintf(status, sizeof(status), " started "); | ||||||
| 			snprintf(status, sizeof(status), " started %s", uptime); |  | ||||||
| 			color = ECOLOR_GOOD; | 			color = ECOLOR_GOOD; | ||||||
| 		} | 		} | ||||||
| 	} else if (state & RC_SERVICE_SCHEDULED) { | 	} else if (state & RC_SERVICE_SCHEDULED) { | ||||||
|   | |||||||
| @@ -960,9 +960,6 @@ int main(int argc, char **argv) | |||||||
| 		if (redirect_stdout || redirect_stderr) | 		if (redirect_stdout || redirect_stderr) | ||||||
| 			eerrorx("%s: --stdout and --stderr are only relevant" | 			eerrorx("%s: --stdout and --stderr are only relevant" | ||||||
| 			    " with --start", applet); | 			    " with --start", applet); | ||||||
| 		if (start_wait) |  | ||||||
| 			ewarn("using --wait with --stop has no effect," |  | ||||||
| 			    " use --retry instead"); |  | ||||||
| 	} else { | 	} else { | ||||||
| 		if (!exec) | 		if (!exec) | ||||||
| 			eerrorx("%s: nothing to start", applet); | 			eerrorx("%s: nothing to start", applet); | ||||||
| @@ -1015,11 +1012,7 @@ int main(int argc, char **argv) | |||||||
| 		eerror("%s: %s does not exist", applet, | 		eerror("%s: %s does not exist", applet, | ||||||
| 		    *exec_file ? exec_file : exec); | 		    *exec_file ? exec_file : exec); | ||||||
| 		exit(EXIT_FAILURE); | 		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 | 	/* 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 | 	 * 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 *applet = NULL; | ||||||
| const char *extraopts = 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; | 	getoptstring_COMMON; | ||||||
| const struct option longopts[] = { | const struct option longopts[] = { | ||||||
| 	{ "respawn-delay",        1, NULL, 'D'}, |  | ||||||
| 	{ "chdir",        1, NULL, 'd'}, | 	{ "chdir",        1, NULL, 'd'}, | ||||||
| 	{ "env",          1, NULL, 'e'}, | 	{ "env",          1, NULL, 'e'}, | ||||||
| 	{ "group",        1, NULL, 'g'}, | 	{ "group",        1, NULL, 'g'}, | ||||||
| 	{ "ionice",       1, NULL, 'I'}, | 	{ "ionice",       1, NULL, 'I'}, | ||||||
| 	{ "stop",         0, NULL, 'K'}, | 	{ "stop",         0, NULL, 'K'}, | ||||||
| 	{ "umask",        1, NULL, 'k'}, | 	{ "umask",        1, NULL, 'k'}, | ||||||
| 	{ "respawn-max",    1, NULL, 'm'}, |  | ||||||
| 	{ "nicelevel",    1, NULL, 'N'}, | 	{ "nicelevel",    1, NULL, 'N'}, | ||||||
| 	{ "pidfile",      1, NULL, 'p'}, | 	{ "pidfile",      1, NULL, 'p'}, | ||||||
| 	{ "respawn-period",        1, NULL, 'P'}, | 	{ "user",         1, NULL, 'u'}, | ||||||
| 	{ "chroot",       1, NULL, 'r'}, | 	{ "chroot",       1, NULL, 'r'}, | ||||||
| 	{ "start",        0, NULL, 'S'}, | 	{ "start",        0, NULL, 'S'}, | ||||||
| 	{ "user",         1, NULL, 'u'}, |  | ||||||
| 	{ "stdout",       1, NULL, '1'}, | 	{ "stdout",       1, NULL, '1'}, | ||||||
| 	{ "stderr",       1, NULL, '2'}, | 	{ "stderr",       1, NULL, '2'}, | ||||||
| 	longopts_COMMON | 	longopts_COMMON | ||||||
| }; | }; | ||||||
| const char * const longopts_help[] = { | const char * const longopts_help[] = { | ||||||
| 	"Set a respawn delay", |  | ||||||
| 	"Change the PWD", | 	"Change the PWD", | ||||||
| 	"Set an environment string", | 	"Set an environment string", | ||||||
| 	"Change the process group", | 	"Change the process group", | ||||||
| 	"Set an ionice class:data when starting", | 	"Set an ionice class:data when starting", | ||||||
| 	"Stop daemon", | 	"Stop daemon", | ||||||
| 	"Set the umask for the daemon", | 	"Set the umask for the daemon", | ||||||
| 	"set maximum number of respawn attempts", |  | ||||||
| 	"Set a nicelevel when starting", | 	"Set a nicelevel when starting", | ||||||
| 	"Match pid found in this file", | 	"Match pid found in this file", | ||||||
| 	"Set respawn time period", | 	"Change the process user", | ||||||
| 	"Chroot to this directory", | 	"Chroot to this directory", | ||||||
| 	"Start daemon", | 	"Start daemon", | ||||||
| 	"Change the process user", |  | ||||||
| 	"Redirect stdout to file", | 	"Redirect stdout to file", | ||||||
| 	"Redirect stderr to file", | 	"Redirect stderr to file", | ||||||
| 	longopts_help_COMMON | 	longopts_help_COMMON | ||||||
| @@ -171,8 +165,7 @@ static pid_t get_pid(const char *pidfile) | |||||||
| 	return pid; | 	return pid; | ||||||
| } | } | ||||||
|  |  | ||||||
| static void child_process(char *exec, char **argv, char *svcname, | static void child_process(char *exec, char **argv) | ||||||
| 		int start_count) |  | ||||||
| { | { | ||||||
| 	RC_STRINGLIST *env_list; | 	RC_STRINGLIST *env_list; | ||||||
| 	RC_STRING *env; | 	RC_STRING *env; | ||||||
| @@ -184,9 +177,6 @@ static void child_process(char *exec, char **argv, char *svcname, | |||||||
| 	char *np; | 	char *np; | ||||||
| 	char **c; | 	char **c; | ||||||
| 	char cmdline[PATH_MAX]; | 	char cmdline[PATH_MAX]; | ||||||
| 	time_t start_time; |  | ||||||
| 	char start_count_string[20]; |  | ||||||
| 	char start_time_string[20]; |  | ||||||
|  |  | ||||||
| #ifdef HAVE_PAM | #ifdef HAVE_PAM | ||||||
| 	pam_handle_t *pamh = NULL; | 	pam_handle_t *pamh = NULL; | ||||||
| @@ -196,14 +186,6 @@ static void child_process(char *exec, char **argv, char *svcname, | |||||||
|  |  | ||||||
| 	setsid(); | 	setsid(); | ||||||
|  |  | ||||||
| 	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); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	if (nicelevel) { | 	if (nicelevel) { | ||||||
| 		if (setpriority(PRIO_PROCESS, getpid(), nicelevel) == -1) | 		if (setpriority(PRIO_PROCESS, getpid(), nicelevel) == -1) | ||||||
| 			eerrorx("%s: setpriority %d: %s", applet, nicelevel, | 			eerrorx("%s: setpriority %d: %s", applet, nicelevel, | ||||||
| @@ -244,7 +226,6 @@ sprintf(start_count_string, "%i", start_count); | |||||||
| 	/* Close any fd's to the passwd database */ | 	/* Close any fd's to the passwd database */ | ||||||
| 	endpwent(); | 	endpwent(); | ||||||
|  |  | ||||||
| 	/* remove the controlling tty */ |  | ||||||
| #ifdef TIOCNOTTY | #ifdef TIOCNOTTY | ||||||
| 	ioctl(tty_fd, TIOCNOTTY, 0); | 	ioctl(tty_fd, TIOCNOTTY, 0); | ||||||
| 	close(tty_fd); | 	close(tty_fd); | ||||||
| @@ -340,7 +321,7 @@ sprintf(start_count_string, "%i", start_count); | |||||||
| 		dup2(stderr_fd, STDERR_FILENO); | 		dup2(stderr_fd, STDERR_FILENO); | ||||||
|  |  | ||||||
| 	for (i = getdtablesize() - 1; i >= 3; --i) | 	for (i = getdtablesize() - 1; i >= 3; --i) | ||||||
| 		fcntl(i, F_SETFD, FD_CLOEXEC); | 		close(i); | ||||||
|  |  | ||||||
| 	*cmdline = '\0'; | 	*cmdline = '\0'; | ||||||
| 	c = argv; | 	c = argv; | ||||||
| @@ -442,14 +423,7 @@ int main(int argc, char **argv) | |||||||
| 	char *p; | 	char *p; | ||||||
| 	char *token; | 	char *token; | ||||||
| 	int i; | 	int i; | ||||||
| 	int n; |  | ||||||
| 	char exec_file[PATH_MAX]; | 	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 passwd *pw; | ||||||
| 	struct group *gr; | 	struct group *gr; | ||||||
| 	FILE *fp; | 	FILE *fp; | ||||||
| @@ -486,12 +460,6 @@ int main(int argc, char **argv) | |||||||
| 	while ((opt = getopt_long(argc, argv, getoptstring, longopts, | 	while ((opt = getopt_long(argc, argv, getoptstring, longopts, | ||||||
| 		    (int *) 0)) != -1) | 		    (int *) 0)) != -1) | ||||||
| 		switch (opt) { | 		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 */ | 		case 'I': /* --ionice */ | ||||||
| 			if (sscanf(optarg, "%d:%d", &ionicec, &ioniced) == 0) | 			if (sscanf(optarg, "%d:%d", &ionicec, &ioniced) == 0) | ||||||
| 				eerrorx("%s: invalid ionice `%s'", | 				eerrorx("%s: invalid ionice `%s'", | ||||||
| @@ -513,12 +481,6 @@ int main(int argc, char **argv) | |||||||
| 				    applet, optarg); | 				    applet, optarg); | ||||||
| 			break; | 			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 */ | 		case 'S':  /* --start */ | ||||||
| 			start = true; | 			start = true; | ||||||
| 			break; | 			break; | ||||||
| @@ -548,12 +510,6 @@ int main(int argc, char **argv) | |||||||
| 				    applet, optarg); | 				    applet, optarg); | ||||||
| 			break; | 			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> */ | 		case 'p':  /* --pidfile <pid-file> */ | ||||||
| 			pidfile = optarg; | 			pidfile = optarg; | ||||||
| 			break; | 			break; | ||||||
| @@ -624,11 +580,6 @@ int main(int argc, char **argv) | |||||||
| 	if (start) { | 	if (start) { | ||||||
| 		if (!exec) | 		if (!exec) | ||||||
| 			eerrorx("%s: nothing to start", applet); | 			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 ~ */ | 	/* Expand ~ */ | ||||||
| @@ -688,12 +639,10 @@ int main(int argc, char **argv) | |||||||
| 		 * result would be the same. */ | 		 * result would be the same. */ | ||||||
| 		if (pidfile && exists(pidfile)) | 		if (pidfile && exists(pidfile)) | ||||||
| 			unlink(pidfile); | 			unlink(pidfile); | ||||||
| 		if (svcname) { | 		if (svcname) | ||||||
| 			rc_service_daemon_set(svcname, exec, | 			rc_service_daemon_set(svcname, exec, | ||||||
| 			    (const char *const *)argv, | 			    (const char *const *)argv, | ||||||
| 			    pidfile, false); | 			    pidfile, false); | ||||||
| 			rc_service_mark(svcname, RC_SERVICE_STOPPED); |  | ||||||
| 		} |  | ||||||
| 		exit(EXIT_SUCCESS); | 		exit(EXIT_SUCCESS); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @@ -725,10 +674,6 @@ int main(int argc, char **argv) | |||||||
| 	if (child_pid != 0) | 	if (child_pid != 0) | ||||||
| 		exit(EXIT_SUCCESS); | 		exit(EXIT_SUCCESS); | ||||||
|  |  | ||||||
| #ifdef TIOCNOTTY |  | ||||||
| 	tty_fd = open("/dev/tty", O_RDWR); |  | ||||||
| #endif |  | ||||||
| 	devnull_fd = open("/dev/null", O_RDWR); |  | ||||||
| 	child_pid = fork(); | 	child_pid = fork(); | ||||||
| 	if (child_pid == -1) | 	if (child_pid == -1) | ||||||
| 		eerrorx("%s: fork: %s", applet, strerror(errno)); | 		eerrorx("%s: fork: %s", applet, strerror(errno)); | ||||||
| @@ -737,22 +682,18 @@ int main(int argc, char **argv) | |||||||
| 		/* this is the supervisor */ | 		/* this is the supervisor */ | ||||||
| 		umask(numask); | 		umask(numask); | ||||||
|  |  | ||||||
|  | #ifdef TIOCNOTTY | ||||||
|  | 		tty_fd = open("/dev/tty", O_RDWR); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  | 		devnull_fd = open("/dev/null", O_RDWR); | ||||||
|  |  | ||||||
| 		fp = fopen(pidfile, "w"); | 		fp = fopen(pidfile, "w"); | ||||||
| 		if (! fp) | 		if (! fp) | ||||||
| 			eerrorx("%s: fopen `%s': %s", applet, pidfile, strerror(errno)); | 			eerrorx("%s: fopen `%s': %s", applet, pidfile, strerror(errno)); | ||||||
| 		fprintf(fp, "%d\n", getpid()); | 		fprintf(fp, "%d\n", getpid()); | ||||||
| 		fclose(fp); | 		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 | 		 * Supervisor main loop | ||||||
| 		 */ | 		 */ | ||||||
| @@ -763,23 +704,6 @@ int main(int argc, char **argv) | |||||||
| 				syslog(LOG_INFO, "stopping %s, pid %d", exec, child_pid); | 				syslog(LOG_INFO, "stopping %s, pid %d", exec, child_pid); | ||||||
| 				kill(child_pid, SIGTERM); | 				kill(child_pid, SIGTERM); | ||||||
| 			} else { | 			} 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)) | 				if (WIFEXITED(i)) | ||||||
| 					syslog(LOG_INFO, "%s, pid %d, exited with return code %d", | 					syslog(LOG_INFO, "%s, pid %d, exited with return code %d", | ||||||
| 							exec, child_pid, WEXITSTATUS(i)); | 							exec, child_pid, WEXITSTATUS(i)); | ||||||
| @@ -790,19 +714,15 @@ int main(int argc, char **argv) | |||||||
| 				if (child_pid == -1) | 				if (child_pid == -1) | ||||||
| 					eerrorx("%s: fork: %s", applet, strerror(errno)); | 					eerrorx("%s: fork: %s", applet, strerror(errno)); | ||||||
| 				if (child_pid == 0) | 				if (child_pid == 0) | ||||||
| 					child_process(exec, argv, svcname, respawn_count); | 					child_process(exec, argv); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| 		if (pidfile && exists(pidfile)) | 		if (svcname) | ||||||
| 			unlink(pidfile); |  | ||||||
| 		if (svcname) { |  | ||||||
| 			rc_service_daemon_set(svcname, exec, | 			rc_service_daemon_set(svcname, exec, | ||||||
| 			    (const char *const *)argv, | 									(const char * const *) argv, pidfile, true); | ||||||
| 			    pidfile, false); |  | ||||||
| 			rc_service_mark(svcname, RC_SERVICE_STOPPED); |  | ||||||
| 		} |  | ||||||
| 		exit(EXIT_SUCCESS); | 		exit(EXIT_SUCCESS); | ||||||
| 	} else if (child_pid == 0) | 	} else if (child_pid == 0) | ||||||
| 		child_process(exec, argv, svcname, respawn_count); | 		child_process(exec, argv); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user