Compare commits
	
		
			30 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | c2506da801 | ||
|   | f45f7243c1 | ||
|   | afe64e5e49 | ||
|   | a1acdeb92e | ||
|   | b810473e4f | ||
|   | 627e925463 | ||
|   | f5cf1136e7 | ||
|   | a4038e1171 | ||
|   | a0cf8f9124 | ||
|   | 9fedb3b40b | ||
|   | 635e33cdc8 | ||
|   | bd9456ff31 | ||
|   | 33d3f33b3c | ||
|   | ddb895b355 | ||
|   | 085d77f17e | ||
|   | c831f1f994 | ||
|   | 591aea2821 | ||
|   | c09eeca491 | ||
|   | 4cf6b0ecf7 | ||
|   | ee944553a9 | ||
|   | 6cae41a4e6 | ||
|   | 960881fcfe | ||
|   | d26013494d | ||
|   | b29b2fb3cb | ||
|   | 7da72ce487 | ||
|   | fc777aeaf3 | ||
|   | 9d53d436ae | ||
|   | b81317bdf8 | ||
|   | 29f7e33592 | ||
|   | 850ca03077 | 
							
								
								
									
										238
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										238
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,4 +1,144 @@ | |||||||
| commit a94de51c4e55c1cb281a97e7d05f59dba831e6d2 | commit f45f7243c19554090458183fbb22e1659d3f8ae5 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Complete support for rc.conf.d | ||||||
|  |      | ||||||
|  |     - gendepends.sh needs to read this directory to allow dependencies to be | ||||||
|  |       overridden | ||||||
|  |       - init.sh for Linux and Bsd need to read it to allow config settings | ||||||
|  |         they use to be overridden. | ||||||
|  |  | ||||||
|  | commit afe64e5e4942a1508ed301d900ec3fe8178e1bb6 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     increment version number | ||||||
|  |  | ||||||
|  | commit a1acdeb92ead07f2dc60cb9796aaf5b4ea377713 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     update ChangeLog | ||||||
|  |  | ||||||
|  | commit b810473e4f7218afbb7047890860c15a8c45472b | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     man/openrc-run.8: Clarify documentation on dependencies and keywords | ||||||
|  |      | ||||||
|  |     Provide an example of using the -containers keyword and clarify | ||||||
|  |     documentation on some of the dependency functions. | ||||||
|  |  | ||||||
|  | commit 627e925463068e754ffd869f99a43634d6d9631e | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     add support for -containers keyword | ||||||
|  |  | ||||||
|  | commit f5cf1136e70502ee530f20f0434f312611b12b51 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Use systype variable for rc_sys call | ||||||
|  |  | ||||||
|  | commit a4038e11712d4c3f87f541f90be0b88f2903b82d | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     rc.conf.Linux: document the rkt keyword | ||||||
|  |  | ||||||
|  | commit a0cf8f91246ff4487b36d6432dab787e5b10957d | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Add detection for rkt containers | ||||||
|  |  | ||||||
|  | commit 9fedb3b40b5983372b2c2de29dfe321c6dfaadf4 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Add detection for docker containers | ||||||
|  |  | ||||||
|  | commit 635e33cdc8f18bb290756633ce0714c496383cfb | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     librc: comsolidate rc_sys_v1 and rc_sys_v2 into rc_sys | ||||||
|  |      | ||||||
|  |     These functions were never meant to be used outside of OpenRC, and they | ||||||
|  |     were added when we thought we were going to do away with the automatic | ||||||
|  |     detection of subsystems. Since the autodetection is not going away, we | ||||||
|  |     can combine these functions into rc_sys. | ||||||
|  |  | ||||||
|  | commit bd9456ff3172cc88f32d67bd4e789e2beee43595 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     rc-functions.sh: add support for user-defined want dependencies | ||||||
|  |  | ||||||
|  | commit 33d3f33b3ca7dd2ce616b8182d588d0743c2f124 | ||||||
|  | Author: Ian Stakenvicius <axs@gentoo.org> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Implement "want" dependency | ||||||
|  |      | ||||||
|  |     The want dependency is similar to the use dependency. If a service | ||||||
|  |     script, for example called service1, adds "want service2" to its depend | ||||||
|  |     function, OpenRC will attempt to start service2, if it exists on the | ||||||
|  |     system,  when service1 is started. | ||||||
|  |      | ||||||
|  |     However, service1 will start regardless of the status of | ||||||
|  |     service2. | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 406021 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=406021 | ||||||
|  |  | ||||||
|  | commit ddb895b355e02c9c07b00bfaf00d1bf8a7abbc03 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     conf.d/netmount: typo fix | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 564846 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=564846 | ||||||
|  |  | ||||||
|  | commit 085d77f17e3bedd23ffa96fe7e4eb8515ae8bfc6 | ||||||
|  | Author: Benda Xu <heroxbd@gentoo.org> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Standardize macro tests for gnu hurd | ||||||
|  |      | ||||||
|  |     This also fixes breakage of GNU/hurd builds introduced by commit 3f82edbeb92. | ||||||
|  |  | ||||||
|  | commit c831f1f994e187afd8edfff15e4063b99440bbcb | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     librc: rework overriding rc.conf options from the kcl | ||||||
|  |      | ||||||
|  |     Rename the rc_conf_override function to describe its purpose better, | ||||||
|  |     drop one conditional compile by making it available everywhere, and move | ||||||
|  |     the call to it after the optional rc.conf.d directory is processed. | ||||||
|  |  | ||||||
|  | commit 591aea28215a8b5ad8660184dc6f6f15ff0c18b4 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     librc: Remove redundant code from rc_config_load | ||||||
|  |  | ||||||
|  | commit c09eeca49145b034df6527c500099ba22f28e824 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Add rc.conf.d support | ||||||
|  |      | ||||||
|  |     This makes it possible to override settings in rc.conf by adding a | ||||||
|  |     directory @SYSCONFDIR@/rc.conf.d and putting files in this directory. | ||||||
|  |     The files will be processed in lexical order, and the last setting in | ||||||
|  |     these files will be used. | ||||||
|  |  | ||||||
|  | commit 4cf6b0ecf7f5b35a6d80d76c60e77c3e1c7fee5c | ||||||
| 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> | ||||||
|  |  | ||||||
| @@ -7,61 +147,49 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|     X-Gentoo-Bug: 559540 |     X-Gentoo-Bug: 559540 | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=559540 |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=559540 | ||||||
|  |  | ||||||
| commit ffbcabbbb4f04c164948d55daa409423d4f26b33 | commit ee944553a9ea35622046bd1ab5657fd416a7019a | ||||||
| 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> | ||||||
|  |  | ||||||
|     Bump version to 0.18.4 |     bootmisc: optionally save the previous dmesg log | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 561204 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=561204 | ||||||
|  |  | ||||||
| commit bc6ab0f8f3bbce0727e164e2f6c54d3be50eb175 | commit 6cae41a4e63510cdcf3af1153d6e8300435e1838 | ||||||
| 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 changelog |     etc/rc.conf: Clean up documentation for rc_hotplug | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 554540 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=554540 | ||||||
|  |  | ||||||
| commit 248a7dcda351ef4172c28cc686bfe7b93fa522ff | commit 960881fcfe974178c0846a816663a258cdd488cc | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Add net-online service | ||||||
|  |  | ||||||
|  | commit d26013494db8ea8699db9815ef4c4b0eb2f55e7f | ||||||
| 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> | ||||||
|  |  | ||||||
|     mtab: typo fix |     mtab: typo fix | ||||||
|  |  | ||||||
| commit bb451fd7b4a200b63ba355ef2ea5ba35444f49e7 | commit b29b2fb3cb3e73b4453483ced908f0ef10e47e9c | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update ChangeLog |  | ||||||
|  |  | ||||||
| commit fb23cbe204b9adeb817e2f5be7a1bb827bb9a477 |  | ||||||
| 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> | ||||||
|  |  | ||||||
|     mtab: make /etc/mtab as a file configurable |     mtab: make /etc/mtab as a file configurable | ||||||
|  |  | ||||||
| commit a4346bb7f5fc09e81a61032ebc05f70692a4a04c | commit 7da72ce487a8d92d992e7fd3db881c198ae02609 | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     start work on 0.18.3 |  | ||||||
|  |  | ||||||
| commit 776346e2cd4a43ffeaf268b8a89927d9f3f9eca5 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update changelog |  | ||||||
|  |  | ||||||
| commit ce71ffbfbe5e44bb61a3f00faf8466071dab5ea7 |  | ||||||
| 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> | ||||||
|  |  | ||||||
|     openrc-run.sh: fix new required_* tests to exit properly |     openrc-run.sh: fix new required_* tests to exit properly | ||||||
|  |  | ||||||
| commit d9ee8ca5842983b59cc2c6e595d21e9a26a4f000 | commit fc777aeaf3e6e2d47f4599acfe6c8d1bf5bc760a | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     update changelog |  | ||||||
|  |  | ||||||
| commit 4e44e2cd73fb7fe08fb229bc3192d14f97dc2aa2 |  | ||||||
| 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> | ||||||
|  |  | ||||||
| @@ -70,13 +198,13 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|     X-Gentoo-Bug: 563010 |     X-Gentoo-Bug: 563010 | ||||||
|     X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=563010 |     X-Gentoo-Bug: https://bugs.gentoo.org/show_bug.cgi?id=563010 | ||||||
|  |  | ||||||
| commit 88b807f9bcea5ec5bf5c5edb3c7161bf5c12d2d0 | commit 9d53d436ae22d6f0f6fc1537e836dd1b4d31cf35 | ||||||
| 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> | ||||||
|  |  | ||||||
|     increment version number |     sysfs: consolidate cgroup processing code in a single function | ||||||
|  |  | ||||||
| commit feba5d86b73b0df5587b178e80e85129a60861cd | commit b81317bdf8e3eed8b8ff2bef757ba29f362ed297 | ||||||
| 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> | ||||||
|  |  | ||||||
| @@ -87,7 +215,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|     X-Gentoo-Bug: 562668 |     X-Gentoo-Bug: 562668 | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562668 |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562668 | ||||||
|  |  | ||||||
| commit 3b1e96a6a3af3de68a18558f3a6ebac31430a1cd | commit 29f7e335927d4c1fb151124de8cdf01fb87723fa | ||||||
| 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> | ||||||
|  |  | ||||||
| @@ -96,7 +224,7 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|     X-Gentoo-Bug: 562320 |     X-Gentoo-Bug: 562320 | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562320 |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=562320 | ||||||
|  |  | ||||||
| commit 79998bdf9cb5089f423e00bfa4bc3816b64c58d4 | commit 850ca030777cb0c3e2fb03d9ab1f0ccee7b89e93 | ||||||
| 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> | ||||||
|  |  | ||||||
| @@ -1073,37 +1201,3 @@ Commit: William Hubbs <w.d.hubbs@gmail.com> | |||||||
|      |      | ||||||
|     X-Gentoo-Bug: 531600 |     X-Gentoo-Bug: 531600 | ||||||
|     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=531600 |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=531600 | ||||||
|  |  | ||||||
| commit 6a9679377f4de257f02de1d16a513df14b4c25ba |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     Do not call the shell to evaluate CHANGELOG_LIMIT |  | ||||||
|      |  | ||||||
|     The git log command understands dates such as "1 year ago", so there is |  | ||||||
|     no need to use the date command. |  | ||||||
|  |  | ||||||
| commit 72186ea3bbbf0b09b88a6f3e1fb23bf04ce1ddad |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     etc/rc and etc/rc.shutdown: change references from rc to openrc |  | ||||||
|  |  | ||||||
| commit 3647db7a27f7a5ca14b33b14effeb945fd986210 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     Add target to create ChangeLog |  | ||||||
|      |  | ||||||
|     This was added by request because some users are requesting a ChangeLog. |  | ||||||
|      |  | ||||||
|     This fixes #29. |  | ||||||
|  |  | ||||||
| commit 7a92eb888794819a339babd0ee220b6aa3993db1 |  | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> |  | ||||||
|  |  | ||||||
|     rename git.mk to gitver.mk |  | ||||||
|      |  | ||||||
|     This is a more descriptive name since this file only sets the gitver |  | ||||||
|     variable. |  | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| NAME=		openrc | NAME=		openrc | ||||||
| VERSION=	0.18.4 | VERSION=	0.19.1 | ||||||
| PKG=		${NAME}-${VERSION} | PKG=		${NAME}-${VERSION} | ||||||
|   | |||||||
							
								
								
									
										12
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								NEWS.md
									
									
									
									
									
								
							| @@ -3,6 +3,18 @@ | |||||||
| 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.19 | ||||||
|  |  | ||||||
|  | This version adds a net-online service. By default, this | ||||||
|  | service will check all known network interfaces for a configured | ||||||
|  | interface or a carrier. It will register as started only when all | ||||||
|  | interfaces are configured and there is at least a carrier on one | ||||||
|  | interface. The behaviour of this service can be modified in | ||||||
|  | /etc/conf.d/net-online. | ||||||
|  |  | ||||||
|  | Currently, this only works on Linux, but if anyone wants to port to | ||||||
|  | *bsd, that would be welcomed. | ||||||
|  |  | ||||||
| ## OpenRC-0.18.3 | ## OpenRC-0.18.3 | ||||||
|  |  | ||||||
| Modern Linux systems expect /etc/mtab to be a symbolic link to | Modern Linux systems expect /etc/mtab to be a symbolic link to | ||||||
|   | |||||||
| @@ -15,7 +15,8 @@ include ${MK}/os.mk | |||||||
|  |  | ||||||
| CONF-FreeBSD=	ipfw moused powerd rarpd savecore syscons | CONF-FreeBSD=	ipfw moused powerd rarpd savecore syscons | ||||||
|  |  | ||||||
| CONF-Linux=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab | CONF-Linux=	consolefont devfs dmesg hwclock keymaps killprocs modules mtab \ | ||||||
|  | 	net-online | ||||||
|  |  | ||||||
| CONF-NetBSD=	moused rarpd savecore | CONF-NetBSD=	moused rarpd savecore | ||||||
|  |  | ||||||
|   | |||||||
| @@ -8,3 +8,8 @@ wipe_tmp="YES" | |||||||
| # Write the initial dmesg log into /var/log/dmesg after boot | # Write the initial dmesg log into /var/log/dmesg after boot | ||||||
| # This may be useful if you need the kernel boot log afterwards | # This may be useful if you need the kernel boot log afterwards | ||||||
| log_dmesg="YES" | log_dmesg="YES" | ||||||
|  |  | ||||||
|  | # Save the previous dmesg log to dmesc.old | ||||||
|  | # This may be useful if you need to compare the current boot to the | ||||||
|  | # previous one. | ||||||
|  | #previous_dmesg=no | ||||||
|   | |||||||
							
								
								
									
										15
									
								
								conf.d/net-online
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								conf.d/net-online
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | # The interfaces setting controls which interfaces the net-online | ||||||
|  | # service considers in deciding whether the network is active. By | ||||||
|  | # default, it is all ethernet or wireless LAN interfaces. | ||||||
|  | #interfaces="" | ||||||
|  |  | ||||||
|  | # This setting controls whether a ping to the default gateway is | ||||||
|  | # included in the test for network connectivity after all interfaces | ||||||
|  | # are active. | ||||||
|  | #ping_default_gateway=no | ||||||
|  |  | ||||||
|  | # The timeout setting controls how long the net-online service waits | ||||||
|  | # for the network to be configured. | ||||||
|  | # The default is 120 seconds. | ||||||
|  | # if this is set to 0, the wait is infinite. | ||||||
|  | #timeout=120 | ||||||
| @@ -25,11 +25,11 @@ | |||||||
| #rc_need="net.eth1 net.eth2" | #rc_need="net.eth1 net.eth2" | ||||||
| # | # | ||||||
| # If you are using a dynamic network management tool like | # If you are using a dynamic network management tool like | ||||||
| # networkmanager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to | # NetworkManager, dhcpcd in standalone mode, wicd, badvpn-ncd, etc, to | ||||||
| # manage the network interfaces with the routes to your netmounts, you | # manage the network interfaces with the routes to your netmounts, you | ||||||
| # should list that tool. | # should list that tool. | ||||||
| # | # | ||||||
| #rc_need="networkmanager" | #rc_need="NetworkManager" | ||||||
| #rc_need="dhcpcd" | #rc_need="dhcpcd" | ||||||
| #rc_need="wicd" | #rc_need="wicd" | ||||||
| # | # | ||||||
|   | |||||||
| @@ -3,9 +3,11 @@ | |||||||
|  |  | ||||||
| # This is the subsystem type. Valid options on Linux: | # This is the subsystem type. Valid options on Linux: | ||||||
| # ""               - nothing special | # ""               - nothing special | ||||||
|  | # "docker"         - Docker container manager | ||||||
| # "lxc"            - Linux Containers | # "lxc"            - Linux Containers | ||||||
| # "openvz"         - Linux OpenVZ | # "openvz"         - Linux OpenVZ | ||||||
| # "prefix"         - Prefix | # "prefix"         - Prefix | ||||||
|  | # "rkt"            - CoreOS container management system | ||||||
| # "uml"            - Usermode Linux | # "uml"            - Usermode Linux | ||||||
| # "vserver"        - Linux vserver | # "vserver"        - Linux vserver | ||||||
| # "systemd-nspawn" - Container created by the systemd-nspawn utility | # "systemd-nspawn" - Container created by the systemd-nspawn utility | ||||||
|   | |||||||
| @@ -29,17 +29,20 @@ | |||||||
| # come up. | # come up. | ||||||
| #rc_depend_strict="YES" | #rc_depend_strict="YES" | ||||||
|  |  | ||||||
| # rc_hotplug is a list of services that we allow to be hotplugged. | # rc_hotplug controls which services we allow to be hotplugged. | ||||||
| # By default we do not allow hotplugging. |  | ||||||
| # A hotplugged service is one started by a dynamic dev manager when a matching | # A hotplugged service is one started by a dynamic dev manager when a matching | ||||||
| # hardware device is found. | # hardware device is found. | ||||||
| # This service is intrinsically included in the boot runlevel. | # Hotplugged services appear in the "hotplugged" runlevel. | ||||||
| # To disable services, prefix with a ! | # If rc_hotplug is set to any value, we compare the name of this service | ||||||
|  | # to every pattern in the value, from left to right, and we allow the | ||||||
|  | # service to be hotplugged if it matches a pattern, or if it matches no | ||||||
|  | # patterns. Patterns can include shell wildcards. | ||||||
|  | # To disable services from being hotplugged, prefix patterns with "!". | ||||||
|  | #If rc_hotplug is not set or is empty, all hotplugging is disabled. | ||||||
| # Example - rc_hotplug="net.wlan !net.*" | # Example - rc_hotplug="net.wlan !net.*" | ||||||
| # This allows net.wlan and any service not matching net.* to be plugged. | # This allows net.wlan and any service not matching net.* to be hotplugged. | ||||||
| # Example - rc_hotplug="*" | # Example - rc_hotplug="!net.*" | ||||||
| # This allows all services to be hotplugged | # This allows services that do not match "net.*" to be hotplugged. | ||||||
| #rc_hotplug="*" |  | ||||||
|  |  | ||||||
| # rc_logger launches a logging daemon to log the entire rc process to | # rc_logger launches a logging daemon to log the entire rc process to | ||||||
| # /var/log/rc.log | # /var/log/rc.log | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ SRCS-FreeBSD+=	adjkerntz.in devd.in dumpon.in encswap.in ipfw.in \ | |||||||
|  |  | ||||||
| SRCS-Linux=	binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \ | SRCS-Linux=	binfmt.in devfs.in dmesg.in hwclock.in consolefont.in keymaps.in \ | ||||||
| 		killprocs.in modules.in mount-ro.in mtab.in numlock.in \ | 		killprocs.in modules.in mount-ro.in mtab.in numlock.in \ | ||||||
| 		procfs.in sysfs.in termencoding.in tmpfiles.dev.in | 		procfs.in net-online.in sysfs.in termencoding.in tmpfiles.dev.in | ||||||
|  |  | ||||||
| # Generic BSD scripts | # Generic BSD scripts | ||||||
| SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \ | SRCS-NetBSD=	hostid.in moused.in newsyslog.in pf.in rarpd.in rc-enabled.in \ | ||||||
|   | |||||||
| @@ -216,6 +216,9 @@ start() | |||||||
| 			case "$RC_SYS" in | 			case "$RC_SYS" in | ||||||
| 				VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;; | 				VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;; | ||||||
| 				*) | 				*) | ||||||
|  | 					if yesno ${previous_dmesg:-no}; then | ||||||
|  | 						mv /var/log/dmesg /var/log/dmesg.old | ||||||
|  | 					fi | ||||||
| 					dmesg > /var/log/dmesg | 					dmesg > /var/log/dmesg | ||||||
| 					chmod 640 /var/log/dmesg | 					chmod 640 /var/log/dmesg | ||||||
| 					;; | 					;; | ||||||
|   | |||||||
							
								
								
									
										69
									
								
								init.d/net-online.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								init.d/net-online.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | |||||||
|  | #!@SBINDIR@/openrc-run | ||||||
|  | # Copyright (C) 2015 William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
|  | description="Delays until the network is online or a specific timeout" | ||||||
|  |  | ||||||
|  | depend() | ||||||
|  | { | ||||||
|  | 	after modules | ||||||
|  | 	need sysfs | ||||||
|  | 	keyword -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver | ||||||
|  | } | ||||||
|  |  | ||||||
|  | get_interfaces() | ||||||
|  | { | ||||||
|  | 	local ifname iftype | ||||||
|  | 	for ifname in /sys/class/net/*; do | ||||||
|  | 		read iftype < ${ifname}/type | ||||||
|  | 		[ "$iftype" = "1" ] && printf "%s " ${ifname##*/} | ||||||
|  | 	done | ||||||
|  | } | ||||||
|  |  | ||||||
|  | get_default_gateway() | ||||||
|  | { | ||||||
|  | 	local cmd gateway | ||||||
|  | 	if command -v ip > /dev/null 2>&1; then | ||||||
|  | 		cmd="ip route show" | ||||||
|  | 	else | ||||||
|  | 		cmd=route | ||||||
|  | 	fi | ||||||
|  | 	set -- $($cmd | grep default) | ||||||
|  | 	[ "$2" != via ] && gateway="$2" || gateway="$3" | ||||||
|  | 	printf "%s" $gateway | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start () | ||||||
|  | { | ||||||
|  | 	local carriers configured dev gateway ifcount infinite interfaces | ||||||
|  | 	local rc state timeout x | ||||||
|  |  | ||||||
|  | 	ebegin "Checking to see if the network is online" | ||||||
|  | 	rc=0 | ||||||
|  | 	interfaces=${interfaces:-$(get_interfaces)} | ||||||
|  | 	timeout=${timeout:-120} | ||||||
|  |  [ $timeout -eq 0 ] && infinite=true || infinite=false | ||||||
|  |  while $infinite || [ $timeout -gt 0 ]; do | ||||||
|  | 	carriers=0 | ||||||
|  | 	configured=0 | ||||||
|  | 	ifcount=0 | ||||||
|  |  	for dev in ${interfaces}; do | ||||||
|  | 		: $((ifcount += 1)) | ||||||
|  | 		read x < /sys/class/net/$dev/carrier | ||||||
|  | 		[ $x -eq 1 ] && : $((carriers += 1)) | ||||||
|  | 		read x < /sys/class/net/$dev/operstate | ||||||
|  | 		[ "$x" = up ] && : $((configured += 1)) | ||||||
|  | 	done | ||||||
|  | 	[ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break | ||||||
|  | 	sleep 1 | ||||||
|  | 	: $((timeout -= 1)) | ||||||
|  |  done | ||||||
|  |  ! $infinite && [ $timeout -eq 0 ] && rc=1 | ||||||
|  |  if [ $rc -eq 0 ] && yesno ${ping_default_gateway:-no}; then | ||||||
|  |  	gateway="$(get_default_gateway)" | ||||||
|  |  	if [ -n "$gateway" ] && ! ping -c 1 $gateway > /dev/null 2>&1; then | ||||||
|  | 		rc=1 | ||||||
|  | 	fi | ||||||
|  |  fi | ||||||
|  |  eend $rc "The network is offline" | ||||||
|  | } | ||||||
| @@ -61,16 +61,6 @@ mount_misc() | |||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
| 	# set up kernel support for cgroups |  | ||||||
| 	if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then |  | ||||||
| 		if grep -qs cgroup /proc/filesystems; then |  | ||||||
| 			ebegin "Mounting cgroup filesystem" |  | ||||||
| 			local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}" |  | ||||||
| 			mount -n -t tmpfs -o ${opts} cgroup_root /sys/fs/cgroup |  | ||||||
| 			eend $? |  | ||||||
| 		fi |  | ||||||
| 	fi |  | ||||||
|  |  | ||||||
| 	# set up kernel support for fusectl | 	# set up kernel support for fusectl | ||||||
| 	if [ -d /sys/fs/fuse/connections ] \ | 	if [ -d /sys/fs/fuse/connections ] \ | ||||||
| 		&& ! mountinfo -q /sys/fs/fuse/connections; then | 		&& ! mountinfo -q /sys/fs/fuse/connections; then | ||||||
| @@ -108,6 +98,16 @@ mount_misc() | |||||||
|  |  | ||||||
| mount_cgroups() | mount_cgroups() | ||||||
| { | { | ||||||
|  | 	# set up kernel support for cgroups | ||||||
|  | 	if [ -d /sys/fs/cgroup ] && ! mountinfo -q /sys/fs/cgroup; then | ||||||
|  | 		if grep -qs cgroup /proc/filesystems; then | ||||||
|  | 			ebegin "Mounting cgroup filesystem" | ||||||
|  | 			local opts="${sysfs_opts},mode=755,size=${rc_cgroupsize:-10m}" | ||||||
|  | 			mount -n -t tmpfs -o ${opts} cgroup_root /sys/fs/cgroup | ||||||
|  | 			eend $? | ||||||
|  | 		fi | ||||||
|  | 	fi | ||||||
|  |  | ||||||
| 	mountinfo -q /sys/fs/cgroup || return 0 | 	mountinfo -q /sys/fs/cgroup || return 0 | ||||||
|  |  | ||||||
| 	if ! mountinfo -q /sys/fs/cgroup/openrc; then | 	if ! mountinfo -q /sys/fs/cgroup/openrc; then | ||||||
|   | |||||||
| @@ -166,21 +166,25 @@ will start and stop it in the right order in relation to other services. | |||||||
| As it's a function it can be very flexible, see the example below. | As it's a function it can be very flexible, see the example below. | ||||||
| Here is a list of the functions you can use in a | Here is a list of the functions you can use in a | ||||||
| .Ic depend | .Ic depend | ||||||
| function. You simply pass the names of the services to it to add to that | function. You simply pass the names of the services you want to add to | ||||||
| dependency type, or prefix it with ! to remove it. | that dependency type to the function, or prefix the names with ! to | ||||||
|  | remove them from the dependencies. | ||||||
| .Bl -tag -width "RC_DEFAULTLEVEL" | .Bl -tag -width "RC_DEFAULTLEVEL" | ||||||
| .It Ic need | .It Ic need | ||||||
| The service will refuse to start until needed services have started and it | The service will refuse to start until needed services have started and it | ||||||
| will refuse to stop until any services that need it have stopped. | will refuse to stop until any services that need it have stopped. | ||||||
| .It Ic use | .It Ic use | ||||||
| The service will attempt to start any services we use that have been added | The service will attempt to start any services it uses that have been added | ||||||
| to the runlevel. | to the runlevel. | ||||||
|  | .It Ic want | ||||||
|  | The service will attempt to start any services it wants, regardless of | ||||||
|  | whether they have been added to the runlevel. | ||||||
| .It Ic after | .It Ic after | ||||||
| The service will start after these services and stop before these services. | The service will start after these services and stop before these services. | ||||||
| .It Ic before | .It Ic before | ||||||
| The service will start before these services and stop after these services. | The service will start before these services and stop after these services. | ||||||
| .It Ic provide | .It Ic provide | ||||||
| We provide this virtual service. For example, named provides dns. | The service provides this virtual service. For example, named provides dns. | ||||||
| Virtual services take precedence over real services, so it is highly | Virtual services take precedence over real services, so it is highly | ||||||
| recommended that you do not have a real service that has the same name | recommended that you do not have a real service that has the same name | ||||||
| as a virtual service. | as a virtual service. | ||||||
| @@ -213,6 +217,8 @@ Same as -jail, but for Linux Resource Containers (LXC). | |||||||
| Same as -jail, but for OpenVZ systems. | Same as -jail, but for OpenVZ systems. | ||||||
| .It Dv -prefix | .It Dv -prefix | ||||||
| Same as -jail, but for Prefix systems. | Same as -jail, but for Prefix systems. | ||||||
|  | .It Dv -rkt | ||||||
|  | Same as -jail, but for RKT systems. | ||||||
| .It Dv -uml | .It Dv -uml | ||||||
| Same as -jail, but for UML systems. | Same as -jail, but for UML systems. | ||||||
| .It Dv -vserver | .It Dv -vserver | ||||||
| @@ -221,6 +227,11 @@ Same as -jail, but for VServer systems. | |||||||
| Same as -jail, but for Xen DOM0 systems. | Same as -jail, but for Xen DOM0 systems. | ||||||
| .It Dv -xenu | .It Dv -xenu | ||||||
| Same as -jail, but for Xen DOMU systems. | Same as -jail, but for Xen DOMU systems. | ||||||
|  | .It Dv -docker | ||||||
|  | Same as -jail, but for docker systems. | ||||||
|  | .It Dv -containers | ||||||
|  | Same as -jail, but for all relevant container types on the operating | ||||||
|  | system. | ||||||
| .El | .El | ||||||
| .El | .El | ||||||
| .Pp | .Pp | ||||||
| @@ -462,6 +473,9 @@ rc_net_tap1_provide="!net" | |||||||
| # It's also possible to negate keywords. This is mainly useful for prefix | # It's also possible to negate keywords. This is mainly useful for prefix | ||||||
| # users testing OpenRC. | # users testing OpenRC. | ||||||
| rc_keyword="!-prefix" | rc_keyword="!-prefix" | ||||||
|  | # This can also be used to block a script from runining in all | ||||||
|  | # containers except one or two | ||||||
|  | rc_keyword="!-containers !-docker" | ||||||
| .Ed | .Ed | ||||||
| .Sh EXAMPLES | .Sh EXAMPLES | ||||||
| .Pp | .Pp | ||||||
|   | |||||||
| @@ -16,6 +16,9 @@ need() { | |||||||
| use() { | use() { | ||||||
| 	[ -n "$*" ] && echo "$RC_SVCNAME iuse $*" >&3 | 	[ -n "$*" ] && echo "$RC_SVCNAME iuse $*" >&3 | ||||||
| } | } | ||||||
|  | want() { | ||||||
|  | 	[ -n "$*" ] && echo "$RC_SVCNAME iwant $*" >&3 | ||||||
|  | } | ||||||
| before() { | before() { | ||||||
| 	[ -n "$*" ] && echo "$RC_SVCNAME ibefore $*" >&3 | 	[ -n "$*" ] && echo "$RC_SVCNAME ibefore $*" >&3 | ||||||
| } | } | ||||||
| @@ -26,7 +29,18 @@ provide() { | |||||||
| 	[ -n "$*" ] && echo "$RC_SVCNAME iprovide $*" >&3 | 	[ -n "$*" ] && echo "$RC_SVCNAME iprovide $*" >&3 | ||||||
| } | } | ||||||
| keyword() { | keyword() { | ||||||
| 	[ -n "$*" ] && echo "$RC_SVCNAME keyword $*" >&3 | 	local c x | ||||||
|  | 	set -- $* | ||||||
|  | 	while [ -n "$*" ]; do | ||||||
|  | 		case "$1" in | ||||||
|  | 			-containers) x="$(_get_containers)" ;; | ||||||
|  | 			!-containers) x="$(_get_containers_remove)" ;; | ||||||
|  | 			*) x=$1 ;; | ||||||
|  | 		esac | ||||||
|  | 		c="${c}${x} " | ||||||
|  | 		shift | ||||||
|  | 	done | ||||||
|  | 	[ -n "$c" ] && echo "$RC_SVCNAME keyword $c" >&3 | ||||||
| } | } | ||||||
| depend() { | depend() { | ||||||
| 	: | 	: | ||||||
| @@ -82,6 +96,11 @@ do | |||||||
| 		fi | 		fi | ||||||
|  |  | ||||||
| 		[ -e @SYSCONFDIR@/rc.conf ] && . @SYSCONFDIR@/rc.conf | 		[ -e @SYSCONFDIR@/rc.conf ] && . @SYSCONFDIR@/rc.conf | ||||||
|  | 		if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then | ||||||
|  | 			for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do | ||||||
|  | 				[ -e "$_f" ] && . "$_f" | ||||||
|  | 			done | ||||||
|  | 		fi | ||||||
|  |  | ||||||
| 		if . "$_dir/$RC_SVCNAME"; then | 		if . "$_dir/$RC_SVCNAME"; then | ||||||
| 			echo "$RC_SVCNAME" >&3 | 			echo "$RC_SVCNAME" >&3 | ||||||
|   | |||||||
| @@ -23,6 +23,11 @@ mount_svcdir() | |||||||
|  |  | ||||||
| . "$RC_LIBEXECDIR"/sh/functions.sh | . "$RC_LIBEXECDIR"/sh/functions.sh | ||||||
| [ -r "@SYSCONFDIR@/rc.conf" ] && . "@SYSCONFDIR@/rc.conf" | [ -r "@SYSCONFDIR@/rc.conf" ] && . "@SYSCONFDIR@/rc.conf" | ||||||
|  | if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then | ||||||
|  | 	for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do | ||||||
|  | 		[ -r "$_f" ] && . "$_f" | ||||||
|  | 	done | ||||||
|  | fi | ||||||
|  |  | ||||||
| # Disable devd until we need it | # Disable devd until we need it | ||||||
| if [ -z "$RC_SYS" -a "$RC_UNAME" = "FreeBSD" ]; then | if [ -z "$RC_SYS" -a "$RC_UNAME" = "FreeBSD" ]; then | ||||||
|   | |||||||
| @@ -5,6 +5,11 @@ | |||||||
|  |  | ||||||
| . "$RC_LIBEXECDIR"/sh/functions.sh | . "$RC_LIBEXECDIR"/sh/functions.sh | ||||||
| [ -r "@SYSCONFDIR@/rc.conf" ] && . "@SYSCONFDIR@/rc.conf" | [ -r "@SYSCONFDIR@/rc.conf" ] && . "@SYSCONFDIR@/rc.conf" | ||||||
|  | if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then | ||||||
|  | 	for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do | ||||||
|  | 		[ -e "$_f" ] && . "$_f" | ||||||
|  | 	done | ||||||
|  | fi | ||||||
|  |  | ||||||
| # By default VServer already has /proc mounted, but OpenVZ does not! | # By default VServer already has /proc mounted, but OpenVZ does not! | ||||||
| # However, some of our users have an old proc image in /proc | # However, some of our users have an old proc image in /proc | ||||||
|   | |||||||
| @@ -66,6 +66,9 @@ need() { | |||||||
| use() { | use() { | ||||||
| 	[ -n "$*" ] && echo "use $*" | 	[ -n "$*" ] && echo "use $*" | ||||||
| } | } | ||||||
|  | want() { | ||||||
|  | 	[ -n "$*" ] && echo "want $*" | ||||||
|  | } | ||||||
| before() { | before() { | ||||||
| 	[ -n "$*" ] && echo "before $*" | 	[ -n "$*" ] && echo "before $*" | ||||||
| } | } | ||||||
| @@ -76,7 +79,18 @@ provide() { | |||||||
| 	[ -n "$*" ] && echo "provide $*" | 	[ -n "$*" ] && echo "provide $*" | ||||||
| } | } | ||||||
| keyword() { | keyword() { | ||||||
| 	[ -n "$*" ] && echo "keyword $*" | 	local c x | ||||||
|  | 	set -- $* | ||||||
|  | 	while [ -n "$*" ]; do | ||||||
|  | 		case "$1" in | ||||||
|  | 			-containers) x="$(_get_containers)" ;; | ||||||
|  | 			!-containers) x="$(_get_containers_remove)" ;; | ||||||
|  | 			*) x=$1 ;; | ||||||
|  | 		esac | ||||||
|  | 		c="${c}${x} " | ||||||
|  | 		shift | ||||||
|  | 	done | ||||||
|  | 	[ -n "$c" ] && echo "keyword $c" | ||||||
| } | } | ||||||
|  |  | ||||||
| # Describe the init script to the user | # Describe the init script to the user | ||||||
| @@ -184,6 +198,12 @@ unset _conf_d | |||||||
|  |  | ||||||
| # Load any system overrides | # Load any system overrides | ||||||
| sourcex -e "@SYSCONFDIR@/rc.conf" | sourcex -e "@SYSCONFDIR@/rc.conf" | ||||||
|  | if [ -d "@SYSCONFDIR@/rc.conf.d" ]; then | ||||||
|  | 	for _f in "@SYSCONFDIR@"/rc.conf.d/*.conf; do | ||||||
|  | 		sourcex -e "$_f" | ||||||
|  | 	done | ||||||
|  | fi | ||||||
|  |  | ||||||
|  |  | ||||||
| # load service supervisor functions | # load service supervisor functions | ||||||
| sourcex "@LIBEXECDIR@/sh/s6.sh" | sourcex "@LIBEXECDIR@/sh/s6.sh" | ||||||
|   | |||||||
| @@ -86,12 +86,33 @@ get_bootparam() | |||||||
| } | } | ||||||
|  |  | ||||||
| # Called from openrc-run.sh or gendepends.sh | # Called from openrc-run.sh or gendepends.sh | ||||||
|  | _get_containers() { | ||||||
|  | 	local c | ||||||
|  | 	case "${RC_UNAME}" in | ||||||
|  | 	FreeBSD) | ||||||
|  | 		c="-jail" | ||||||
|  | 		;; | ||||||
|  | 	Linux) | ||||||
|  | 		c="-docker -lxc -openvz -rkt -systemd-nspawn -uml -vserver" | ||||||
|  | 		;; | ||||||
|  | 	esac | ||||||
|  | 	echo $c | ||||||
|  | } | ||||||
|  |  | ||||||
|  | _get_containers_remove() { | ||||||
|  | 	local c | ||||||
|  | 	for x in $(_get_containers); do | ||||||
|  | 		c="${c}!${x} " | ||||||
|  | 	done | ||||||
|  | 	echo $c | ||||||
|  | } | ||||||
|  |  | ||||||
| _depend() { | _depend() { | ||||||
| 	depend | 	depend | ||||||
| 	local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends= | 	local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends= | ||||||
|  |  | ||||||
| 	# Add any user defined depends | 	# Add any user defined depends | ||||||
| 	for _deptype in config:CONFIG need:NEED use:USE \ | 	for _deptype in config:CONFIG need:NEED use:USE want:WANT \ | ||||||
| 	after:AFTER before:BEFORE \ | 	after:AFTER before:BEFORE \ | ||||||
| 	provide:PROVIDE keyword:KEYWORD; do | 	provide:PROVIDE keyword:KEYWORD; do | ||||||
| 		IFS=: | 		IFS=: | ||||||
|   | |||||||
| @@ -31,7 +31,8 @@ | |||||||
| #include "queue.h" | #include "queue.h" | ||||||
| #include "librc.h" | #include "librc.h" | ||||||
|  |  | ||||||
| #if defined(__linux__) || (defined (__FreeBSD_kernel__) && defined(__GLIBC__)) | #if defined(__linux__) || (defined (__FreeBSD_kernel__) && defined(__GLIBC__)) \ | ||||||
|  | 	|| defined(__GNU__) | ||||||
| static bool | static bool | ||||||
| pid_is_exec(pid_t pid, const char *exec) | pid_is_exec(pid_t pid, const char *exec) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -192,7 +192,9 @@ valid_service(const char *runlevel, const char *service, const char *type) | |||||||
|  |  | ||||||
| 	if (!runlevel || | 	if (!runlevel || | ||||||
| 	    strcmp(type, "ineed") == 0 || | 	    strcmp(type, "ineed") == 0 || | ||||||
| 	    strcmp(type, "needsme") == 0) | 	    strcmp(type, "needsme") == 0  || | ||||||
|  | 	    strcmp(type, "iwant") == 0 || | ||||||
|  | 	    strcmp(type, "wantsme") == 0) | ||||||
| 		return true; | 		return true; | ||||||
|  |  | ||||||
| 	if (rc_service_in_runlevel(service, runlevel)) | 	if (rc_service_in_runlevel(service, runlevel)) | ||||||
| @@ -543,6 +545,7 @@ rc_deptree_order(const RC_DEPTREE *deptree, const char *runlevel, int options) | |||||||
| 	types = rc_stringlist_new(); | 	types = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(types, "ineed"); | 	rc_stringlist_add(types, "ineed"); | ||||||
| 	rc_stringlist_add(types, "iuse"); | 	rc_stringlist_add(types, "iuse"); | ||||||
|  | 	rc_stringlist_add(types, "iwant"); | ||||||
| 	rc_stringlist_add(types, "iafter"); | 	rc_stringlist_add(types, "iafter"); | ||||||
| 	services = rc_deptree_depends(deptree, types, list, runlevel, | 	services = rc_deptree_depends(deptree, types, list, runlevel, | ||||||
| 				      RC_DEP_STRICT | RC_DEP_TRACE | options); | 				      RC_DEP_STRICT | RC_DEP_TRACE | options); | ||||||
| @@ -648,6 +651,7 @@ typedef struct deppair | |||||||
| static const DEPPAIR deppairs[] = { | static const DEPPAIR deppairs[] = { | ||||||
| 	{ "ineed",	"needsme" }, | 	{ "ineed",	"needsme" }, | ||||||
| 	{ "iuse",	"usesme" }, | 	{ "iuse",	"usesme" }, | ||||||
|  | 	{ "iwant",	"wantsme" }, | ||||||
| 	{ "iafter",	"ibefore" }, | 	{ "iafter",	"ibefore" }, | ||||||
| 	{ "ibefore",	"iafter" }, | 	{ "ibefore",	"iafter" }, | ||||||
| 	{ "iprovide",	"providedby" }, | 	{ "iprovide",	"providedby" }, | ||||||
| @@ -844,6 +848,7 @@ rc_deptree_update(void) | |||||||
| 			/* If we're after something, remove us from the before list */ | 			/* If we're after something, remove us from the before list */ | ||||||
| 			if (strcmp(type, "iafter") == 0 || | 			if (strcmp(type, "iafter") == 0 || | ||||||
| 			    strcmp(type, "ineed") == 0 || | 			    strcmp(type, "ineed") == 0 || | ||||||
|  | 			    strcmp(type, "iwant") == 0 || | ||||||
| 			    strcmp(type, "iuse") == 0) { | 			    strcmp(type, "iuse") == 0) { | ||||||
| 				if ((dt = get_deptype(depinfo, "ibefore"))) | 				if ((dt = get_deptype(depinfo, "ibefore"))) | ||||||
| 					rc_stringlist_delete(dt->services, depend); | 					rc_stringlist_delete(dt->services, depend); | ||||||
| @@ -957,6 +962,7 @@ rc_deptree_update(void) | |||||||
| 	/* Phase 5 - Remove broken before directives */ | 	/* Phase 5 - Remove broken before directives */ | ||||||
| 	types = rc_stringlist_new(); | 	types = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(types, "ineed"); | 	rc_stringlist_add(types, "ineed"); | ||||||
|  | 	rc_stringlist_add(types, "iwant"); | ||||||
| 	rc_stringlist_add(types, "iuse"); | 	rc_stringlist_add(types, "iuse"); | ||||||
| 	rc_stringlist_add(types, "iafter"); | 	rc_stringlist_add(types, "iafter"); | ||||||
| 	TAILQ_FOREACH(depinfo, deptree, entries) { | 	TAILQ_FOREACH(depinfo, deptree, entries) { | ||||||
|   | |||||||
| @@ -28,6 +28,8 @@ | |||||||
|  * SUCH DAMAGE. |  * SUCH DAMAGE. | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | #include <fnmatch.h> | ||||||
|  |  | ||||||
| #include "queue.h" | #include "queue.h" | ||||||
| #include "librc.h" | #include "librc.h" | ||||||
|  |  | ||||||
| @@ -214,12 +216,78 @@ rc_config_list(const char *file) | |||||||
| } | } | ||||||
| librc_hidden_def(rc_config_list) | librc_hidden_def(rc_config_list) | ||||||
|  |  | ||||||
| /* | static void rc_config_set_value(RC_STRINGLIST *config, char *value) | ||||||
|  * Override some specific rc.conf options on the kernel command line |  | ||||||
|  */ |  | ||||||
| #ifdef __linux__ |  | ||||||
| static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config) |  | ||||||
| { | { | ||||||
|  | 	RC_STRING *cline; | ||||||
|  | 	char *entry; | ||||||
|  | 	size_t i = 0; | ||||||
|  | 	char *newline; | ||||||
|  | 	char *p = value; | ||||||
|  | 	bool replaced; | ||||||
|  | 	char *token; | ||||||
|  |  | ||||||
|  | 	if (! p) | ||||||
|  | 		return; | ||||||
|  | 	if (strncmp(p, "export ", 7) == 0) | ||||||
|  | 		p += 7; | ||||||
|  | 	if (! (token = strsep(&p, "="))) | ||||||
|  | 		return; | ||||||
|  |  | ||||||
|  | 	entry = xstrdup(token); | ||||||
|  | 	/* Preserve shell coloring */ | ||||||
|  | 	if (*p == '$') | ||||||
|  | 		token = value; | ||||||
|  | 	else | ||||||
|  | 		do { | ||||||
|  | 			/* Bash variables are usually quoted */ | ||||||
|  | 			token = strsep(&p, "\"\'"); | ||||||
|  | 		} while (token && *token == '\0'); | ||||||
|  |  | ||||||
|  | 	/* Drop a newline if that's all we have */ | ||||||
|  | 	if (token) { | ||||||
|  | 		i = strlen(token) - 1; | ||||||
|  | 		if (token[i] == '\n') | ||||||
|  | 			token[i] = 0; | ||||||
|  |  | ||||||
|  | 		i = strlen(entry) + strlen(token) + 2; | ||||||
|  | 		newline = xmalloc(sizeof(char) * i); | ||||||
|  | 		snprintf(newline, i, "%s=%s", entry, token); | ||||||
|  | 	} else { | ||||||
|  | 		i = strlen(entry) + 2; | ||||||
|  | 		newline = xmalloc(sizeof(char) * i); | ||||||
|  | 		snprintf(newline, i, "%s=", entry); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	replaced = false; | ||||||
|  | 	/* In shells the last item takes precedence, so we need to remove | ||||||
|  | 	   any prior values we may already have */ | ||||||
|  | 	TAILQ_FOREACH(cline, config, entries) { | ||||||
|  | 		i = strlen(entry); | ||||||
|  | 		if (strncmp(entry, cline->value, i) == 0 && cline->value[i] == '=') { | ||||||
|  | 			/* We have a match now - to save time we directly replace it */ | ||||||
|  | 			free(cline->value); | ||||||
|  | 			cline->value = newline; | ||||||
|  | 			replaced = true; | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (!replaced) { | ||||||
|  | 		rc_stringlist_add(config, newline); | ||||||
|  | 		free(newline); | ||||||
|  | 	} | ||||||
|  | 	free(entry); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * Override some specific rc.conf options on the kernel command line. | ||||||
|  |  * I only know how to do this in Linux, so if someone wants to supply | ||||||
|  |  * a patch for this on *BSD or tell me how to write the code to do this, | ||||||
|  |  * any suggestions are welcome. | ||||||
|  |  */ | ||||||
|  | static RC_STRINGLIST *rc_config_kcl(RC_STRINGLIST *config) | ||||||
|  | { | ||||||
|  | #ifdef __linux__ | ||||||
| 	RC_STRINGLIST *overrides; | 	RC_STRINGLIST *overrides; | ||||||
| 	RC_STRING *cline, *override, *config_np; | 	RC_STRING *cline, *override, *config_np; | ||||||
| 	char *tmp = NULL; | 	char *tmp = NULL; | ||||||
| @@ -268,90 +336,60 @@ static RC_STRINGLIST *rc_config_override(RC_STRINGLIST *config) | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	rc_stringlist_free(overrides); | 	rc_stringlist_free(overrides); | ||||||
|  | #endif | ||||||
|  | 	return config; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static RC_STRINGLIST * rc_config_directory(RC_STRINGLIST *config) | ||||||
|  | { | ||||||
|  | 	DIR *dp; | ||||||
|  | 	struct dirent *d; | ||||||
|  | 	RC_STRINGLIST *rc_conf_d_files = rc_stringlist_new(); | ||||||
|  | 	RC_STRING *fname; | ||||||
|  | 	RC_STRINGLIST *rc_conf_d_list; | ||||||
|  | 	char path[PATH_MAX]; | ||||||
|  | 	RC_STRING *line; | ||||||
|  |  | ||||||
|  | 	if ((dp = opendir(RC_CONF_D)) != NULL) { | ||||||
|  | 		while ((d = readdir(dp)) != NULL) { | ||||||
|  | 			if (fnmatch("*.conf", d->d_name, FNM_PATHNAME) == 0) { | ||||||
|  | 				rc_stringlist_addu(rc_conf_d_files, d->d_name); | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		closedir(dp); | ||||||
|  |  | ||||||
|  | 		if (rc_conf_d_files) { | ||||||
|  | 			rc_stringlist_sort(&rc_conf_d_files); | ||||||
|  | 			TAILQ_FOREACH(fname, rc_conf_d_files, entries) { | ||||||
|  | 				if (! fname->value) | ||||||
|  | 					continue; | ||||||
|  | 				sprintf(path, "%s/%s", RC_CONF_D, fname->value); | ||||||
|  | 				rc_conf_d_list = rc_config_list(path); | ||||||
|  | 				TAILQ_FOREACH(line, rc_conf_d_list, entries) | ||||||
|  | 					if (line->value) | ||||||
|  | 						rc_config_set_value(config, line->value); | ||||||
|  | 				rc_stringlist_free(rc_conf_d_list); | ||||||
|  | 			} | ||||||
|  | 			rc_stringlist_free(rc_conf_d_files); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| 	return config; | 	return config; | ||||||
| } | } | ||||||
| #endif |  | ||||||
|  |  | ||||||
| RC_STRINGLIST * | RC_STRINGLIST * | ||||||
| rc_config_load(const char *file) | rc_config_load(const char *file) | ||||||
| { | { | ||||||
| 	RC_STRINGLIST *list; | 	RC_STRINGLIST *list; | ||||||
| 	RC_STRINGLIST *config; | 	RC_STRINGLIST *config; | ||||||
| 	char *token; |  | ||||||
| 	RC_STRING *line; | 	RC_STRING *line; | ||||||
| 	RC_STRING *cline; |  | ||||||
| 	size_t i = 0; |  | ||||||
| 	bool replaced; |  | ||||||
| 	char *entry; |  | ||||||
| 	char *newline; |  | ||||||
| 	char *p; |  | ||||||
|  |  | ||||||
| 	list = rc_config_list(file); | 	list = rc_config_list(file); | ||||||
| 	config = rc_stringlist_new(); | 	config = rc_stringlist_new(); | ||||||
| 	TAILQ_FOREACH(line, list, entries) { | 	TAILQ_FOREACH(line, list, entries) { | ||||||
| 		/* Get entry */ | 		rc_config_set_value(config, line->value); | ||||||
| 		p = line->value; |  | ||||||
| 		if (! p) |  | ||||||
| 			continue; |  | ||||||
| 		if (strncmp(p, "export ", 7) == 0) |  | ||||||
| 			p += 7; |  | ||||||
| 		if (! (token = strsep(&p, "="))) |  | ||||||
| 			continue; |  | ||||||
|  |  | ||||||
| 		entry = xstrdup(token); |  | ||||||
| 		/* Preserve shell coloring */ |  | ||||||
| 		if (*p == '$') |  | ||||||
| 			token = line->value; |  | ||||||
| 		else |  | ||||||
| 			do { |  | ||||||
| 				/* Bash variables are usually quoted */ |  | ||||||
| 				token = strsep(&p, "\"\'"); |  | ||||||
| 			} while (token && *token == '\0'); |  | ||||||
|  |  | ||||||
| 		/* Drop a newline if that's all we have */ |  | ||||||
| 		if (token) { |  | ||||||
| 			i = strlen(token) - 1; |  | ||||||
| 			if (token[i] == '\n') |  | ||||||
| 				token[i] = 0; |  | ||||||
|  |  | ||||||
| 			i = strlen(entry) + strlen(token) + 2; |  | ||||||
| 			newline = xmalloc(sizeof(char) * i); |  | ||||||
| 			snprintf(newline, i, "%s=%s", entry, token); |  | ||||||
| 		} else { |  | ||||||
| 			i = strlen(entry) + 2; |  | ||||||
| 			newline = xmalloc(sizeof(char) * i); |  | ||||||
| 			snprintf(newline, i, "%s=", entry); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		replaced = false; |  | ||||||
| 		/* In shells the last item takes precedence, so we need to remove |  | ||||||
| 		   any prior values we may already have */ |  | ||||||
| 		TAILQ_FOREACH(cline, config, entries) { |  | ||||||
| 			i = strlen(entry); |  | ||||||
| 			if (strncmp(entry, cline->value, i) == 0 && cline->value[i] == '=') { |  | ||||||
| 				/* We have a match now - to save time we directly replace it */ |  | ||||||
| 				free(cline->value); |  | ||||||
| 				cline->value = newline; |  | ||||||
| 				replaced = true; |  | ||||||
| 				break; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		if (!replaced) { |  | ||||||
| 			rc_stringlist_add(config, newline); |  | ||||||
| 			free(newline); |  | ||||||
| 		} |  | ||||||
| 		free(entry); |  | ||||||
| 	} | 	} | ||||||
| 	rc_stringlist_free(list); | 	rc_stringlist_free(list); | ||||||
|  |  | ||||||
| #ifdef __linux__ |  | ||||||
| 	/* Only override rc.conf settings */ |  | ||||||
| 	if (strcmp(file, RC_CONF) == 0) { |  | ||||||
| 		config = rc_config_override(config); |  | ||||||
| 	} |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| 	return config; | 	return config; | ||||||
| } | } | ||||||
| librc_hidden_def(rc_config_load) | librc_hidden_def(rc_config_load) | ||||||
| @@ -401,6 +439,9 @@ rc_conf_value(const char *setting) | |||||||
| #endif | #endif | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		rc_conf = rc_config_directory(rc_conf); | ||||||
|  | 	rc_conf = rc_config_kcl(rc_conf); | ||||||
|  |  | ||||||
| 		/* Convert old uppercase to lowercase */ | 		/* Convert old uppercase to lowercase */ | ||||||
| 		TAILQ_FOREACH(s, rc_conf, entries) { | 		TAILQ_FOREACH(s, rc_conf, entries) { | ||||||
| 			p = s->value; | 			p = s->value; | ||||||
|   | |||||||
| @@ -210,14 +210,14 @@ found: | |||||||
| } | } | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| /* New sys identification code |  | ||||||
|  * Not to be used for any binaries outside of openrc. */ |  | ||||||
| const char * | const char * | ||||||
| rc_sys_v2(void) | rc_sys(void) | ||||||
| { | { | ||||||
| #define __STRING_SWITCH(x) { char *__string_switch = x; if (false) {} | #ifdef PREFIX | ||||||
| #define __STRING_CASE(y) else if (strcmp(__string_switch,y) == 0) | 	return RC_SYS_PREFIX; | ||||||
| #define __STRING_SWITCH_END() } | #endif | ||||||
|  |  | ||||||
| 	char *systype = rc_conf_value("rc_sys"); | 	char *systype = rc_conf_value("rc_sys"); | ||||||
| 	if (systype) { | 	if (systype) { | ||||||
| 		char *s = systype; | 		char *s = systype; | ||||||
| @@ -227,43 +227,11 @@ rc_sys_v2(void) | |||||||
| 				*s = toupper((unsigned char) *s); | 				*s = toupper((unsigned char) *s); | ||||||
| 			s++; | 			s++; | ||||||
| 		} | 		} | ||||||
| 		/* Now do detection */ |  | ||||||
| 		__STRING_SWITCH(systype) |  | ||||||
| 		__STRING_CASE(RC_SYS_PREFIX)	{ return RC_SYS_PREFIX; } |  | ||||||
| #ifdef __FreeBSD__ |  | ||||||
| 		__STRING_CASE(RC_SYS_JAIL) { return RC_SYS_JAIL; } |  | ||||||
| #endif /* __FreeBSD__ */ |  | ||||||
| #ifdef __NetBSD__ |  | ||||||
| 		__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; } |  | ||||||
| 		__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; } |  | ||||||
| #endif /* __NetBSD__ */ |  | ||||||
| #ifdef __linux__ |  | ||||||
| 		__STRING_CASE(RC_SYS_XEN0) { return RC_SYS_XEN0; } |  | ||||||
| 		__STRING_CASE(RC_SYS_XENU) { return RC_SYS_XENU; } |  | ||||||
| 		__STRING_CASE(RC_SYS_UML) { return RC_SYS_UML; } |  | ||||||
| 		__STRING_CASE(RC_SYS_VSERVER) { return RC_SYS_VSERVER; } |  | ||||||
| 		__STRING_CASE(RC_SYS_OPENVZ) { return RC_SYS_OPENVZ; } |  | ||||||
| 		__STRING_CASE(RC_SYS_LXC) { return RC_SYS_LXC; } |  | ||||||
| #endif /* __linux__ */ |  | ||||||
| 		__STRING_SWITCH_END() |  | ||||||
| 	} | 	} | ||||||
| #undef __STRING_SWITCH |  | ||||||
| #undef __STRING_CASE |  | ||||||
| #undef __STRING_SWITCH_END |  | ||||||
| 	return NULL; |  | ||||||
| } |  | ||||||
| librc_hidden_def(rc_sys_v2) |  | ||||||
|  |  | ||||||
| /* Old sys identification code. |  | ||||||
|  * Not to be used for any binaries outside of openrc. */ |  | ||||||
| const char * |  | ||||||
| rc_sys_v1(void) |  | ||||||
| { |  | ||||||
| #ifdef PREFIX |  | ||||||
| 	return RC_SYS_PREFIX; |  | ||||||
| #else |  | ||||||
|  |  | ||||||
| #ifdef __FreeBSD__ | #ifdef __FreeBSD__ | ||||||
|  | 	if (systype && strcmp(systype, RC_SYS_JAIL) == 0) | ||||||
|  | 		return RC_SYS_JAIL; | ||||||
| 	int jailed = 0; | 	int jailed = 0; | ||||||
| 	size_t len = sizeof(jailed); | 	size_t len = sizeof(jailed); | ||||||
|  |  | ||||||
| @@ -273,6 +241,12 @@ rc_sys_v1(void) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __NetBSD__ | #ifdef __NetBSD__ | ||||||
|  | 	if (systype) { | ||||||
|  | 		if(strcmp(systype, RC_SYS_XEN0) == 0) | ||||||
|  | 				return RC_SYS_XEN0; | ||||||
|  | 		if (strcmp(systype, RC_SYS_XENU) == 0) | ||||||
|  | 			return RC_SYS_XENU; | ||||||
|  | 	} | ||||||
| 	if (exists("/kern/xen/privcmd")) | 	if (exists("/kern/xen/privcmd")) | ||||||
| 		return RC_SYS_XEN0; | 		return RC_SYS_XEN0; | ||||||
| 	if (exists("/kern/xen")) | 	if (exists("/kern/xen")) | ||||||
| @@ -280,6 +254,26 @@ rc_sys_v1(void) | |||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #ifdef __linux__ | #ifdef __linux__ | ||||||
|  | 	if (systype) { | ||||||
|  | 		if (strcmp(systype, RC_SYS_XEN0) == 0) | ||||||
|  | 			return RC_SYS_XEN0; | ||||||
|  | 		if (strcmp(systype, RC_SYS_XENU) == 0) | ||||||
|  | 			return RC_SYS_XENU; | ||||||
|  | 		if (strcmp(systype, RC_SYS_UML) == 0) | ||||||
|  | 			return RC_SYS_UML; | ||||||
|  | 		if (strcmp(systype, RC_SYS_VSERVER) == 0) | ||||||
|  | 			return RC_SYS_VSERVER; | ||||||
|  | 		if (strcmp(systype, RC_SYS_OPENVZ) == 0) | ||||||
|  | 			return RC_SYS_OPENVZ; | ||||||
|  | 		if (strcmp(systype, RC_SYS_LXC) == 0) | ||||||
|  | 			return RC_SYS_LXC; | ||||||
|  | 		if (strcmp(systype, RC_SYS_RKT) == 0) | ||||||
|  | 				return RC_SYS_RKT; | ||||||
|  | 		if (strcmp(systype, RC_SYS_SYSTEMD_NSPAWN) == 0) | ||||||
|  | 				return RC_SYS_SYSTEMD_NSPAWN; | ||||||
|  | 		if (strcmp(systype, RC_SYS_DOCKER) == 0) | ||||||
|  | 				return RC_SYS_DOCKER; | ||||||
|  | 	} | ||||||
| 	if (exists("/proc/xen")) { | 	if (exists("/proc/xen")) { | ||||||
| 		if (file_regex("/proc/xen/capabilities", "control_d")) | 		if (file_regex("/proc/xen/capabilities", "control_d")) | ||||||
| 			return RC_SYS_XEN0; | 			return RC_SYS_XEN0; | ||||||
| @@ -296,23 +290,15 @@ rc_sys_v1(void) | |||||||
| 		return RC_SYS_OPENVZ; /* old test */ | 		return RC_SYS_OPENVZ; /* old test */ | ||||||
| 	else if (file_regex("/proc/1/environ", "container=lxc")) | 	else if (file_regex("/proc/1/environ", "container=lxc")) | ||||||
| 		return RC_SYS_LXC; | 		return RC_SYS_LXC; | ||||||
|  | 	else if (file_regex("/proc/1/environ", "container=rkt")) | ||||||
|  | 		return RC_SYS_RKT; | ||||||
| 	else if (file_regex("/proc/1/environ", "container=systemd-nspawn")) | 	else if (file_regex("/proc/1/environ", "container=systemd-nspawn")) | ||||||
| 		return RC_SYS_SYSTEMD_NSPAWN; | 		return RC_SYS_SYSTEMD_NSPAWN; | ||||||
|  | 	else if (file_regex("/proc/1/environ", "container=docker")) | ||||||
|  | 		return RC_SYS_DOCKER; | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| 	return NULL; | 	return NULL; | ||||||
| #endif /* PREFIX */ |  | ||||||
| } |  | ||||||
| librc_hidden_def(rc_sys_v1) |  | ||||||
|  |  | ||||||
| const char * |  | ||||||
| rc_sys(void) |  | ||||||
| { |  | ||||||
| 	if (rc_conf_value("rc_sys")) { |  | ||||||
| 		return rc_sys_v2(); |  | ||||||
| 	} else { |  | ||||||
| 		return rc_sys_v1(); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| librc_hidden_def(rc_sys) | librc_hidden_def(rc_sys) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -130,8 +130,6 @@ librc_hidden_proto(rc_stringlist_new) | |||||||
| librc_hidden_proto(rc_stringlist_split) | librc_hidden_proto(rc_stringlist_split) | ||||||
| librc_hidden_proto(rc_stringlist_sort) | librc_hidden_proto(rc_stringlist_sort) | ||||||
| librc_hidden_proto(rc_sys) | librc_hidden_proto(rc_sys) | ||||||
| librc_hidden_proto(rc_sys_v1) |  | ||||||
| librc_hidden_proto(rc_sys_v2) |  | ||||||
| librc_hidden_proto(rc_yesno) | librc_hidden_proto(rc_yesno) | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ extern "C" { | |||||||
| #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" | ||||||
| #define RC_CONF         RC_SYSCONFDIR "/rc.conf" | #define RC_CONF         RC_SYSCONFDIR "/rc.conf" | ||||||
|  | #define RC_CONF_D         RC_SYSCONFDIR "/rc.conf.d" | ||||||
| #define RC_CONF_OLD     RC_SYSCONFDIR "/conf.d/rc" | #define RC_CONF_OLD     RC_SYSCONFDIR "/conf.d/rc" | ||||||
|  |  | ||||||
| #define RC_PATH_PREFIX     RC_LIBEXECDIR "/bin:/bin:/sbin:/usr/bin:/usr/sbin" | #define RC_PATH_PREFIX     RC_LIBEXECDIR "/bin:/bin:/sbin:/usr/bin:/usr/sbin" | ||||||
| @@ -328,10 +329,12 @@ bool rc_service_daemons_crashed(const char *); | |||||||
| /*! @name System types | /*! @name System types | ||||||
|  * OpenRC can support some special sub system types, normally virtualization. |  * OpenRC can support some special sub system types, normally virtualization. | ||||||
|  * Some services cannot work in these systems, or we do something else. */ |  * Some services cannot work in these systems, or we do something else. */ | ||||||
|  | #define RC_SYS_DOCKER  "DOCKER" | ||||||
| #define RC_SYS_JAIL    "JAIL" | #define RC_SYS_JAIL    "JAIL" | ||||||
| #define RC_SYS_OPENVZ  "OPENVZ" | #define RC_SYS_OPENVZ  "OPENVZ" | ||||||
| #define RC_SYS_LXC     "LXC" | #define RC_SYS_LXC     "LXC" | ||||||
| #define RC_SYS_PREFIX  "PREFIX" | #define RC_SYS_PREFIX  "PREFIX" | ||||||
|  | #define RC_SYS_RKT  "RKT" | ||||||
| #define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN" | #define RC_SYS_SYSTEMD_NSPAWN "SYSTEMD-NSPAWN" | ||||||
| #define RC_SYS_UML     "UML" | #define RC_SYS_UML     "UML" | ||||||
| #define RC_SYS_VSERVER "VSERVER" | #define RC_SYS_VSERVER "VSERVER" | ||||||
| @@ -342,14 +345,6 @@ bool rc_service_daemons_crashed(const char *); | |||||||
|  * @return string from RC_SYS_* types or NULL if none detected */ |  * @return string from RC_SYS_* types or NULL if none detected */ | ||||||
| const char *rc_sys(void); | const char *rc_sys(void); | ||||||
|  |  | ||||||
| /*! Returns the type of subsystem using old automatic code |  | ||||||
|  * @return string from RC_SYS_* types or NULL if none detected */ |  | ||||||
| const char *rc_sys_v1(void); |  | ||||||
|  |  | ||||||
| /*! Returns the type of subsystem using new rc.conf rc_sys value |  | ||||||
|  * @return string from RC_SYS_* types or NULL if none detected */ |  | ||||||
| const char *rc_sys_v2(void); |  | ||||||
|  |  | ||||||
| /*! @name Dependency options | /*! @name Dependency options | ||||||
|  * These options can change the services found by the rc_get_depinfo and |  * These options can change the services found by the rc_get_depinfo and | ||||||
|  * rc_get_depends functions. */ |  * rc_get_depends functions. */ | ||||||
|   | |||||||
| @@ -39,8 +39,8 @@ | |||||||
| #  include <sys/statvfs.h> | #  include <sys/statvfs.h> | ||||||
| #  define statfs statvfs | #  define statfs statvfs | ||||||
| #  define F_FLAGS f_flag | #  define F_FLAGS f_flag | ||||||
| #elif defined (__linux__) || (defined(__FreeBSD_kernel__) && \ | #elif defined(__linux__) || (defined(__FreeBSD_kernel__) && \ | ||||||
| 		defined(__GLIBC__)) || defined(__GNU__) | 	defined(__GLIBC__)) || defined(__GNU__) | ||||||
| #  include <mntent.h> | #  include <mntent.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| @@ -267,8 +267,8 @@ find_mounts(struct args *args) | |||||||
| 	return list; | 	return list; | ||||||
| } | } | ||||||
|  |  | ||||||
| #elif defined (__linux__) || (defined (__FreeBSD_kernel__) && \ | #elif defined(__linux__) || (defined(__FreeBSD_kernel__) && \ | ||||||
| 		defined(__GLIBC__)) | 	defined(__GLIBC__)) || defined(__GNU__) | ||||||
| static struct mntent * | static struct mntent * | ||||||
| getmntfile(const char *file) | getmntfile(const char *file) | ||||||
| { | { | ||||||
|   | |||||||
| @@ -51,8 +51,8 @@ | |||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  |  | ||||||
| #if defined(__linux__) || (defined(__FreeBSD_kernel__) && \ | #if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) \ | ||||||
| 		defined(__GLIBC__)) | 	|| defined(__GNU__) | ||||||
| #  include <pty.h> | #  include <pty.h> | ||||||
| #elif defined(__NetBSD__) || defined(__OpenBSD__) | #elif defined(__NetBSD__) || defined(__OpenBSD__) | ||||||
| #  include <util.h> | #  include <util.h> | ||||||
| @@ -78,19 +78,23 @@ static const char *applet; | |||||||
| static char *service, *runlevel, *ibsave, *prefix; | static char *service, *runlevel, *ibsave, *prefix; | ||||||
| static RC_DEPTREE *deptree; | static RC_DEPTREE *deptree; | ||||||
| static RC_STRINGLIST *applet_list, *services, *tmplist; | static RC_STRINGLIST *applet_list, *services, *tmplist; | ||||||
| static RC_STRINGLIST *restart_services, *need_services, *use_services; | static RC_STRINGLIST *restart_services; | ||||||
|  | static RC_STRINGLIST *need_services; | ||||||
|  | static RC_STRINGLIST *use_services; | ||||||
|  | static RC_STRINGLIST *want_services; | ||||||
| static RC_HOOK hook_out; | static RC_HOOK hook_out; | ||||||
| static int exclusive_fd = -1, master_tty = -1; | static int exclusive_fd = -1, master_tty = -1; | ||||||
| static bool sighup, in_background, deps, dry_run; | static bool sighup, in_background, deps, dry_run; | ||||||
| static pid_t service_pid; | static pid_t service_pid; | ||||||
| static int signal_pipe[2] = { -1, -1 }; | static int signal_pipe[2] = { -1, -1 }; | ||||||
|  |  | ||||||
| static RC_STRINGLIST *deptypes_b; | static RC_STRINGLIST *deptypes_b;	/* broken deps */ | ||||||
| static RC_STRINGLIST *deptypes_n; | static RC_STRINGLIST *deptypes_n;	/* needed deps */ | ||||||
| static RC_STRINGLIST *deptypes_nu; | static RC_STRINGLIST *deptypes_nw;	/* need+want deps */ | ||||||
| static RC_STRINGLIST *deptypes_nua; | static RC_STRINGLIST *deptypes_nwu;	/* need+want+use deps */ | ||||||
| static RC_STRINGLIST *deptypes_m; | static RC_STRINGLIST *deptypes_nwua;	/* need+want+use+after deps */ | ||||||
| static RC_STRINGLIST *deptypes_mua; | static RC_STRINGLIST *deptypes_m;	/* needed deps for stopping */ | ||||||
|  | static RC_STRINGLIST *deptypes_mwua;	/* need+want+use+after deps for stopping */ | ||||||
|  |  | ||||||
| static void | static void | ||||||
| handle_signal(int sig) | handle_signal(int sig) | ||||||
| @@ -237,14 +241,16 @@ cleanup(void) | |||||||
| #ifdef DEBUG_MEMORY | #ifdef DEBUG_MEMORY | ||||||
| 	rc_stringlist_free(deptypes_b); | 	rc_stringlist_free(deptypes_b); | ||||||
| 	rc_stringlist_free(deptypes_n); | 	rc_stringlist_free(deptypes_n); | ||||||
| 	rc_stringlist_free(deptypes_nu); | 	rc_stringlist_free(deptypes_nw); | ||||||
| 	rc_stringlist_free(deptypes_nua); | 	rc_stringlist_free(deptypes_nwu); | ||||||
|  | 	rc_stringlist_free(deptypes_nwua); | ||||||
| 	rc_stringlist_free(deptypes_m); | 	rc_stringlist_free(deptypes_m); | ||||||
| 	rc_stringlist_free(deptypes_mua); | 	rc_stringlist_free(deptypes_mwua); | ||||||
| 	rc_deptree_free(deptree); | 	rc_deptree_free(deptree); | ||||||
| 	rc_stringlist_free(restart_services); | 	rc_stringlist_free(restart_services); | ||||||
| 	rc_stringlist_free(need_services); | 	rc_stringlist_free(need_services); | ||||||
| 	rc_stringlist_free(use_services); | 	rc_stringlist_free(use_services); | ||||||
|  | 	rc_stringlist_free(want_services); | ||||||
| 	rc_stringlist_free(services); | 	rc_stringlist_free(services); | ||||||
| 	rc_stringlist_free(applet_list); | 	rc_stringlist_free(applet_list); | ||||||
| 	rc_stringlist_free(tmplist); | 	rc_stringlist_free(tmplist); | ||||||
| @@ -530,22 +536,29 @@ setup_deptypes(void) | |||||||
| 	deptypes_n = rc_stringlist_new(); | 	deptypes_n = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(deptypes_n, "ineed"); | 	rc_stringlist_add(deptypes_n, "ineed"); | ||||||
|  |  | ||||||
| 	deptypes_nu = rc_stringlist_new(); | 	deptypes_nw = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(deptypes_nu, "ineed"); | 	rc_stringlist_add(deptypes_nw, "ineed"); | ||||||
| 	rc_stringlist_add(deptypes_nu, "iuse"); | 	rc_stringlist_add(deptypes_nw, "iwant"); | ||||||
|  |  | ||||||
| 	deptypes_nua = rc_stringlist_new(); | 	deptypes_nwu = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(deptypes_nua, "ineed"); | 	rc_stringlist_add(deptypes_nwu, "ineed"); | ||||||
| 	rc_stringlist_add(deptypes_nua, "iuse"); | 	rc_stringlist_add(deptypes_nwu, "iwant"); | ||||||
| 	rc_stringlist_add(deptypes_nua, "iafter"); | 	rc_stringlist_add(deptypes_nwu, "iuse"); | ||||||
|  |  | ||||||
|  | 	deptypes_nwua = rc_stringlist_new(); | ||||||
|  | 	rc_stringlist_add(deptypes_nwua, "ineed"); | ||||||
|  | 	rc_stringlist_add(deptypes_nwua, "iwant"); | ||||||
|  | 	rc_stringlist_add(deptypes_nwua, "iuse"); | ||||||
|  | 	rc_stringlist_add(deptypes_nwua, "iafter"); | ||||||
|  |  | ||||||
| 	deptypes_m = rc_stringlist_new(); | 	deptypes_m = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(deptypes_m, "needsme"); | 	rc_stringlist_add(deptypes_m, "needsme"); | ||||||
|  |  | ||||||
| 	deptypes_mua = rc_stringlist_new(); | 	deptypes_mwua = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(deptypes_mua, "needsme"); | 	rc_stringlist_add(deptypes_mwua, "needsme"); | ||||||
| 	rc_stringlist_add(deptypes_mua, "usesme"); | 	rc_stringlist_add(deptypes_mwua, "wantsme"); | ||||||
| 	rc_stringlist_add(deptypes_mua, "beforeme"); | 	rc_stringlist_add(deptypes_mwua, "usesme"); | ||||||
|  | 	rc_stringlist_add(deptypes_mwua, "beforeme"); | ||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| @@ -631,7 +644,9 @@ svc_start_deps(void) | |||||||
|  |  | ||||||
| 	need_services = rc_deptree_depends(deptree, deptypes_n, | 	need_services = rc_deptree_depends(deptree, deptypes_n, | ||||||
| 	    applet_list, runlevel, depoptions); | 	    applet_list, runlevel, depoptions); | ||||||
| 	use_services = rc_deptree_depends(deptree, deptypes_nu, | 	want_services = rc_deptree_depends(deptree, deptypes_nw, | ||||||
|  | 	    applet_list, runlevel, depoptions); | ||||||
|  | 	use_services = rc_deptree_depends(deptree, deptypes_nwu, | ||||||
| 	    applet_list, runlevel, depoptions); | 	    applet_list, runlevel, depoptions); | ||||||
|  |  | ||||||
| 	if (!rc_runlevel_starting()) { | 	if (!rc_runlevel_starting()) { | ||||||
| @@ -659,7 +674,7 @@ svc_start_deps(void) | |||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	/* Now wait for them to start */ | 	/* Now wait for them to start */ | ||||||
| 	services = rc_deptree_depends(deptree, deptypes_nua, applet_list, | 	services = rc_deptree_depends(deptree, deptypes_nwua, applet_list, | ||||||
| 	    runlevel, depoptions); | 	    runlevel, depoptions); | ||||||
| 	/* We use tmplist to hold our scheduled by list */ | 	/* We use tmplist to hold our scheduled by list */ | ||||||
| 	tmplist = rc_stringlist_new(); | 	tmplist = rc_stringlist_new(); | ||||||
| @@ -674,6 +689,7 @@ svc_start_deps(void) | |||||||
| 		    state & RC_SERVICE_WASINACTIVE) | 		    state & RC_SERVICE_WASINACTIVE) | ||||||
| 		{ | 		{ | ||||||
| 			if (!rc_stringlist_find(need_services, svc->value) && | 			if (!rc_stringlist_find(need_services, svc->value) && | ||||||
|  | 			    !rc_stringlist_find(want_services, svc->value) && | ||||||
| 			    !rc_stringlist_find(use_services, svc->value)) | 			    !rc_stringlist_find(use_services, svc->value)) | ||||||
| 				continue; | 				continue; | ||||||
| 		} | 		} | ||||||
| @@ -927,7 +943,7 @@ svc_stop_deps(RC_SERVICE state) | |||||||
|  |  | ||||||
| 	/* We now wait for other services that may use us and are | 	/* We now wait for other services that may use us and are | ||||||
| 	 * stopping. This is important when a runlevel stops */ | 	 * stopping. This is important when a runlevel stops */ | ||||||
| 	services = rc_deptree_depends(deptree, deptypes_mua, applet_list, | 	services = rc_deptree_depends(deptree, deptypes_mwua, applet_list, | ||||||
| 	    runlevel, depoptions); | 	    runlevel, depoptions); | ||||||
| 	TAILQ_FOREACH(svc, services, entries) { | 	TAILQ_FOREACH(svc, services, entries) { | ||||||
| 		if (rc_service_state(svc->value) & RC_SERVICE_STOPPED) | 		if (rc_service_state(svc->value) & RC_SERVICE_STOPPED) | ||||||
| @@ -1298,8 +1314,10 @@ openrc_run(int argc, char **argv) | |||||||
| 			prefix = save; | 			prefix = save; | ||||||
| 		} else if (strcmp(optarg, "ineed") == 0 || | 		} else if (strcmp(optarg, "ineed") == 0 || | ||||||
| 		    strcmp(optarg, "iuse") == 0 || | 		    strcmp(optarg, "iuse") == 0 || | ||||||
|  | 		    strcmp(optarg, "iwant") == 0 || | ||||||
| 		    strcmp(optarg, "needsme") == 0 || | 		    strcmp(optarg, "needsme") == 0 || | ||||||
| 		    strcmp(optarg, "usesme") == 0 || | 		    strcmp(optarg, "usesme") == 0 || | ||||||
|  | 		    strcmp(optarg, "wantsme") == 0 || | ||||||
| 		    strcmp(optarg, "iafter") == 0 || | 		    strcmp(optarg, "iafter") == 0 || | ||||||
| 		    strcmp(optarg, "ibefore") == 0 || | 		    strcmp(optarg, "ibefore") == 0 || | ||||||
| 		    strcmp(optarg, "iprovide") == 0) | 		    strcmp(optarg, "iprovide") == 0) | ||||||
|   | |||||||
| @@ -44,7 +44,8 @@ | |||||||
| #include <time.h> | #include <time.h> | ||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
|  |  | ||||||
| #if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) | #if defined(__linux__) || (defined(__FreeBSD_kernel__) && defined(__GLIBC__)) \ | ||||||
|  | 	|| defined(__GNU__) | ||||||
| #  include <pty.h> | #  include <pty.h> | ||||||
| #elif defined(__NetBSD__) || defined(__OpenBSD__) | #elif defined(__NetBSD__) || defined(__OpenBSD__) | ||||||
| #  include <util.h> | #  include <util.h> | ||||||
|   | |||||||
| @@ -343,6 +343,7 @@ rc_status(int argc, char **argv) | |||||||
| 		} | 		} | ||||||
| 		needsme = rc_stringlist_new(); | 		needsme = rc_stringlist_new(); | ||||||
| 		rc_stringlist_add(needsme, "needsme"); | 		rc_stringlist_add(needsme, "needsme"); | ||||||
|  | 		rc_stringlist_add(needsme, "wantsme"); | ||||||
| 		nservices = rc_stringlist_new(); | 		nservices = rc_stringlist_new(); | ||||||
| 		alist = rc_stringlist_new(); | 		alist = rc_stringlist_new(); | ||||||
| 		l = rc_stringlist_add(alist, ""); | 		l = rc_stringlist_add(alist, ""); | ||||||
| @@ -365,7 +366,7 @@ rc_status(int argc, char **argv) | |||||||
| 		 * be added to the list | 		 * be added to the list | ||||||
| 		 */ | 		 */ | ||||||
| 		unsetenv("RC_SVCNAME"); | 		unsetenv("RC_SVCNAME"); | ||||||
| 		print_level("Dynamic", "needed"); | 		print_level("Dynamic", "needed/wanted"); | ||||||
| 		print_services(NULL, nservices); | 		print_services(NULL, nservices); | ||||||
| 		print_level("Dynamic", "manual"); | 		print_level("Dynamic", "manual"); | ||||||
| 		print_services(NULL, services); | 		print_services(NULL, services); | ||||||
|   | |||||||
							
								
								
									
										41
									
								
								src/rc/rc.c
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								src/rc/rc.c
									
									
									
									
									
								
							| @@ -155,8 +155,8 @@ cleanup(void) | |||||||
| 	rc_stringlist_free(hotplugged_services); | 	rc_stringlist_free(hotplugged_services); | ||||||
| 	rc_stringlist_free(stop_services); | 	rc_stringlist_free(stop_services); | ||||||
| 	rc_stringlist_free(start_services); | 	rc_stringlist_free(start_services); | ||||||
| 	rc_stringlist_free(types_n); | 	rc_stringlist_free(types_nw); | ||||||
| 	rc_stringlist_free(types_nua); | 	rc_stringlist_free(types_nwua); | ||||||
| 	rc_deptree_free(deptree); | 	rc_deptree_free(deptree); | ||||||
| 	free(runlevel); | 	free(runlevel); | ||||||
| #endif | #endif | ||||||
| @@ -519,7 +519,7 @@ runlevel_config(const char *service, const char *level) | |||||||
| } | } | ||||||
|  |  | ||||||
| static void | static void | ||||||
| do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services, | do_stop_services(RC_STRINGLIST *types_nw, RC_STRINGLIST *start_services, | ||||||
| 				 const RC_STRINGLIST *stop_services, const RC_DEPTREE *deptree, | 				 const RC_STRINGLIST *stop_services, const RC_DEPTREE *deptree, | ||||||
| 				 const char *newlevel, bool parallel, bool going_down) | 				 const char *newlevel, bool parallel, bool going_down) | ||||||
| { | { | ||||||
| @@ -530,9 +530,10 @@ do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services, | |||||||
| 	RC_STRINGLIST *nostop; | 	RC_STRINGLIST *nostop; | ||||||
| 	bool crashed, nstop; | 	bool crashed, nstop; | ||||||
|  |  | ||||||
| 	if (!types_n) { | 	if (!types_nw) { | ||||||
| 		types_n = rc_stringlist_new(); | 		types_nw = rc_stringlist_new(); | ||||||
| 		rc_stringlist_add(types_n, "needsme"); | 		rc_stringlist_add(types_nw, "needsme"); | ||||||
|  | 		rc_stringlist_add(types_nw, "wantsme"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	crashed = rc_conf_yesno("rc_crashed_stop"); | 	crashed = rc_conf_yesno("rc_crashed_stop"); | ||||||
| @@ -591,7 +592,7 @@ do_stop_services(RC_STRINGLIST *types_n, RC_STRINGLIST *start_services, | |||||||
| 		if (!svc1) { | 		if (!svc1) { | ||||||
| 			tmplist = rc_stringlist_new(); | 			tmplist = rc_stringlist_new(); | ||||||
| 			rc_stringlist_add(tmplist, service->value); | 			rc_stringlist_add(tmplist, service->value); | ||||||
| 			deporder = rc_deptree_depends(deptree, types_n, | 			deporder = rc_deptree_depends(deptree, types_nw, | ||||||
| 			    tmplist, newlevel ? newlevel : runlevel, | 			    tmplist, newlevel ? newlevel : runlevel, | ||||||
| 			    RC_DEP_STRICT | RC_DEP_TRACE); | 			    RC_DEP_STRICT | RC_DEP_TRACE); | ||||||
| 			rc_stringlist_free(tmplist); | 			rc_stringlist_free(tmplist); | ||||||
| @@ -751,11 +752,12 @@ main(int argc, char **argv) | |||||||
| { | { | ||||||
| 	const char *bootlevel = NULL; | 	const char *bootlevel = NULL; | ||||||
| 	char *newlevel = NULL; | 	char *newlevel = NULL; | ||||||
|  | 	const char *systype = NULL; | ||||||
| 	static RC_STRINGLIST *hotplugged_services; | 	static RC_STRINGLIST *hotplugged_services; | ||||||
| 	static RC_STRINGLIST *stop_services; | 	static RC_STRINGLIST *stop_services; | ||||||
| 	static RC_STRINGLIST *start_services; | 	static RC_STRINGLIST *start_services; | ||||||
| 	static RC_STRINGLIST *types_n; | 	static RC_STRINGLIST *types_nw; | ||||||
| 	static RC_STRINGLIST *types_nua; | 	static RC_STRINGLIST *types_nwua; | ||||||
| 	static RC_DEPTREE *deptree; | 	static RC_DEPTREE *deptree; | ||||||
| 	RC_STRINGLIST *deporder = NULL; | 	RC_STRINGLIST *deporder = NULL; | ||||||
| 	RC_STRINGLIST *tmplist; | 	RC_STRINGLIST *tmplist; | ||||||
| @@ -844,9 +846,9 @@ main(int argc, char **argv) | |||||||
| 			eerrorx("%s: %s", applet, strerror(errno)); | 			eerrorx("%s: %s", applet, strerror(errno)); | ||||||
| 			/* NOTREACHED */ | 			/* NOTREACHED */ | ||||||
| 		case 'S': | 		case 'S': | ||||||
| 			bootlevel = rc_sys(); | 			systype = rc_sys(); | ||||||
| 			if (bootlevel) | 			if (systype) | ||||||
| 				printf("%s\n", bootlevel); | 				printf("%s\n", systype); | ||||||
| 			exit(EXIT_SUCCESS); | 			exit(EXIT_SUCCESS); | ||||||
| 			/* NOTREACHED */ | 			/* NOTREACHED */ | ||||||
| 		case_RC_COMMON_GETOPT | 		case_RC_COMMON_GETOPT | ||||||
| @@ -996,13 +998,14 @@ main(int argc, char **argv) | |||||||
| 	if (stop_services) | 	if (stop_services) | ||||||
| 		rc_stringlist_sort(&stop_services); | 		rc_stringlist_sort(&stop_services); | ||||||
|  |  | ||||||
| 	types_nua = rc_stringlist_new(); | 	types_nwua = rc_stringlist_new(); | ||||||
| 	rc_stringlist_add(types_nua, "ineed"); | 	rc_stringlist_add(types_nwua, "ineed"); | ||||||
| 	rc_stringlist_add(types_nua, "iuse"); | 	rc_stringlist_add(types_nwua, "iwant"); | ||||||
| 	rc_stringlist_add(types_nua, "iafter"); | 	rc_stringlist_add(types_nwua, "iuse"); | ||||||
|  | 	rc_stringlist_add(types_nwua, "iafter"); | ||||||
|  |  | ||||||
| 	if (stop_services) { | 	if (stop_services) { | ||||||
| 		tmplist = rc_deptree_depends(deptree, types_nua, stop_services, | 		tmplist = rc_deptree_depends(deptree, types_nwua, stop_services, | ||||||
| 		    runlevel, depoptions | RC_DEP_STOP); | 		    runlevel, depoptions | RC_DEP_STOP); | ||||||
| 		rc_stringlist_free(stop_services); | 		rc_stringlist_free(stop_services); | ||||||
| 		stop_services = tmplist; | 		stop_services = tmplist; | ||||||
| @@ -1047,7 +1050,7 @@ main(int argc, char **argv) | |||||||
|  |  | ||||||
| 	/* Now stop the services that shouldn't be running */ | 	/* Now stop the services that shouldn't be running */ | ||||||
| 	if (stop_services && !nostop) | 	if (stop_services && !nostop) | ||||||
| 		do_stop_services(types_n, start_services, stop_services, deptree, newlevel, parallel, going_down); | 		do_stop_services(types_nw, start_services, stop_services, deptree, newlevel, parallel, going_down); | ||||||
|  |  | ||||||
| 	/* Wait for our services to finish */ | 	/* Wait for our services to finish */ | ||||||
| 	wait_for_services(); | 	wait_for_services(); | ||||||
| @@ -1109,7 +1112,7 @@ main(int argc, char **argv) | |||||||
|  |  | ||||||
| 			/* Start those services. */ | 			/* Start those services. */ | ||||||
| 			rc_stringlist_sort(&run_services); | 			rc_stringlist_sort(&run_services); | ||||||
| 			deporder = rc_deptree_depends(deptree, types_nua, run_services, rlevel->value, depoptions | RC_DEP_START); | 			deporder = rc_deptree_depends(deptree, types_nwua, run_services, rlevel->value, depoptions | RC_DEP_START); | ||||||
| 			rc_stringlist_free(run_services); | 			rc_stringlist_free(run_services); | ||||||
| 			run_services = deporder; | 			run_services = deporder; | ||||||
| 			do_start_services(run_services, parallel); | 			do_start_services(run_services, parallel); | ||||||
|   | |||||||
| @@ -112,9 +112,5 @@ rc_stringlist_split | |||||||
| rc_stringlist_split@@RC_1.0 | rc_stringlist_split@@RC_1.0 | ||||||
| rc_sys | rc_sys | ||||||
| rc_sys@@RC_1.0 | rc_sys@@RC_1.0 | ||||||
| rc_sys_v1 |  | ||||||
| rc_sys_v1@@RC_1.0 |  | ||||||
| rc_sys_v2 |  | ||||||
| rc_sys_v2@@RC_1.0 |  | ||||||
| rc_yesno | rc_yesno | ||||||
| rc_yesno@@RC_1.0 | rc_yesno@@RC_1.0 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user