Compare commits
	
		
			414 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					d0160dd96e | ||
| 
						 | 
					eca4c2d31e | ||
| 
						 | 
					6a91444bd9 | ||
| 
						 | 
					075fb7c646 | ||
| 
						 | 
					7f597d024a | ||
| 
						 | 
					27219666ab | ||
| 
						 | 
					76022cba36 | ||
| 
						 | 
					792dc7f6e8 | ||
| 
						 | 
					b5d576255b | ||
| 
						 | 
					45d1494b5d | ||
| 
						 | 
					20856a14e9 | ||
| 
						 | 
					a850651f5c | ||
| 
						 | 
					b0a80a042d | ||
| 
						 | 
					49620e95ec | ||
| 
						 | 
					b4789b9910 | ||
| 
						 | 
					d5ae8a2ad1 | ||
| 
						 | 
					3a276728e0 | ||
| 
						 | 
					29d3e0bde2 | ||
| 
						 | 
					969a036225 | ||
| 
						 | 
					9767d24510 | ||
| 
						 | 
					c73284ef96 | ||
| 
						 | 
					0657bf0d25 | ||
| 
						 | 
					80aad11b02 | ||
| 
						 | 
					2d9dc654b5 | ||
| 
						 | 
					f46cc83ef7 | ||
| 
						 | 
					cc45b55f89 | ||
| 
						 | 
					930e69017f | ||
| 
						 | 
					44912434cf | ||
| 
						 | 
					c7fde9a3da | ||
| 
						 | 
					ffededbf95 | ||
| 
						 | 
					b0efb663f9 | ||
| 
						 | 
					aa69e48125 | ||
| 
						 | 
					4ba10f1d50 | ||
| 
						 | 
					38a9e2ff63 | ||
| 
						 | 
					783af5abac | ||
| 
						 | 
					75c3b53e31 | ||
| 
						 | 
					c300c180a2 | ||
| 
						 | 
					be8d2ee6e3 | ||
| 
						 | 
					d9ef1bb635 | ||
| 
						 | 
					cfc6991219 | ||
| 
						 | 
					97ae5af201 | ||
| 
						 | 
					4c820a0e48 | ||
| 
						 | 
					9c39b381a5 | ||
| 
						 | 
					321bb2cd90 | ||
| 
						 | 
					8c99d817d4 | ||
| 2e1fb4d02b | |||
| 
						 | 
					a2f0afb8bc | ||
| 
						 | 
					430fa132f2 | ||
| 
						 | 
					12cd7ce9de | ||
| 
						 | 
					167acac140 | ||
| 
						 | 
					f839ba27c5 | ||
| 
						 | 
					80dd6aac5f | ||
| 
						 | 
					0d00b8d8ab | ||
| 
						 | 
					551bdff2fb | ||
| 
						 | 
					803aa1c637 | ||
| 
						 | 
					fb186a3867 | ||
| 
						 | 
					c9b64b64fa | ||
| 
						 | 
					9cce9f8ce8 | ||
| 
						 | 
					5a41f1ef20 | ||
| 
						 | 
					6e3afc29f3 | ||
| 
						 | 
					7c29fbd36f | ||
| 
						 | 
					593be166d1 | ||
| 
						 | 
					ca0270967c | ||
| 
						 | 
					3a187f88f4 | ||
| 
						 | 
					f2362cc277 | ||
| 
						 | 
					444e44eb9d | ||
| 
						 | 
					c0f8313164 | ||
| 
						 | 
					d6622a1156 | ||
| 
						 | 
					92004a2ed6 | ||
| 
						 | 
					5f6d7ac028 | ||
| 
						 | 
					7cedc4942b | ||
| 
						 | 
					091cd8015f | ||
| 
						 | 
					63955056ec | ||
| 
						 | 
					1e975be896 | ||
| 
						 | 
					18e53f7fed | ||
| 
						 | 
					b5e4c2c2db | ||
| 
						 | 
					0a97bad6c9 | ||
| 
						 | 
					dec9ef200b | ||
| 
						 | 
					7f47539fb1 | ||
| 
						 | 
					9c7bedca9e | ||
| 
						 | 
					1d282ddc80 | ||
| 
						 | 
					0d86c4903b | ||
| 
						 | 
					791322d7fa | ||
| 
						 | 
					63db2d99e7 | ||
| 
						 | 
					8400e7d302 | ||
| 
						 | 
					533a8c70b3 | ||
| 
						 | 
					852a3c86f6 | ||
| 
						 | 
					b3e8072403 | ||
| 
						 | 
					b7c03dea27 | ||
| 
						 | 
					ee05403c50 | ||
| 
						 | 
					c1558abb0f | ||
| 
						 | 
					901b752463 | ||
| 
						 | 
					c88368b792 | ||
| 
						 | 
					bfffe2c585 | ||
| 
						 | 
					5f890ee8ab | ||
| 
						 | 
					ef76a663bc | ||
| 
						 | 
					fccd37c34c | ||
| 
						 | 
					5058b6668c | ||
| 
						 | 
					1878a74a12 | ||
| 
						 | 
					897c2c00ef | ||
| 
						 | 
					08d518b7fe | ||
| 
						 | 
					de77674663 | ||
| 
						 | 
					4fb4674374 | ||
| 
						 | 
					0ddab761be | ||
| 
						 | 
					f5dd2f5baf | ||
| 
						 | 
					b12c52d40f | ||
| 
						 | 
					bac71fce5b | ||
| 
						 | 
					12ee72a9b3 | ||
| 
						 | 
					170ce2624a | ||
| 
						 | 
					9a6698876a | ||
| 
						 | 
					bf9af1fb23 | ||
| 
						 | 
					5c9c2a1939 | ||
| 
						 | 
					4b2a61f1b8 | ||
| 
						 | 
					62bc463c63 | ||
| 
						 | 
					7019bfad3b | ||
| 
						 | 
					8346c985d5 | ||
| 
						 | 
					da30767353 | ||
| 
						 | 
					57d9528a0b | ||
| 
						 | 
					6ce48f124a | ||
| 
						 | 
					00ea216608 | ||
| 
						 | 
					ac7ca6d901 | ||
| 
						 | 
					47819f004c | ||
| 
						 | 
					0fab3e837b | ||
| 
						 | 
					38aaba28ee | ||
| 
						 | 
					3ed4126a31 | ||
| 
						 | 
					aa0fdf6d08 | ||
| 
						 | 
					b6fef599bf | ||
| 
						 | 
					aac1734a70 | ||
| 
						 | 
					2355f1a3f2 | ||
| 
						 | 
					fbec1eed51 | ||
| 
						 | 
					229692cc34 | ||
| 
						 | 
					375ef42393 | ||
| 
						 | 
					6deda13754 | ||
| eb61085951 | |||
| 
						 | 
					039845b742 | ||
| 
						 | 
					a7e7fd2b37 | ||
| 
						 | 
					12e147a107 | ||
| 
						 | 
					fd852865e0 | ||
| 
						 | 
					35ec935741 | ||
| 
						 | 
					19cfd82dad | ||
| 
						 | 
					87cfad3d6c | ||
| 
						 | 
					8e31614c4b | ||
| 
						 | 
					a177d15641 | ||
| 
						 | 
					2b4c486043 | ||
| 
						 | 
					ed24d28163 | ||
| 
						 | 
					1bc96141e6 | ||
| 
						 | 
					c7000aeaab | ||
| 
						 | 
					5c5129b534 | ||
| 
						 | 
					0dabda6f6f | ||
| 
						 | 
					92de9a693b | ||
| 
						 | 
					a71aebcae1 | ||
| 
						 | 
					61596b16d2 | ||
| 
						 | 
					104eb3420b | ||
| 
						 | 
					70b8df3e9c | ||
| 
						 | 
					cac41092e4 | ||
| 
						 | 
					7ddc281ab6 | ||
| 
						 | 
					c092ff6da1 | ||
| 
						 | 
					54780a4582 | ||
| 
						 | 
					44f5a72d1a | ||
| 
						 | 
					0d378974bf | ||
| 
						 | 
					028da5c2e3 | ||
| 
						 | 
					d8dbb890aa | ||
| 
						 | 
					56c006ebd6 | ||
| 
						 | 
					067088bbff | ||
| 
						 | 
					52d4e56674 | ||
| 
						 | 
					6e6902c28b | ||
| 
						 | 
					084823182a | ||
| 
						 | 
					7478c104fc | ||
| 
						 | 
					065b7ecc0d | ||
| 
						 | 
					b054aca50b | ||
| 
						 | 
					f9e7a00ba9 | ||
| 
						 | 
					f1f48011ac | ||
| 
						 | 
					427a1ce299 | ||
| 
						 | 
					f43cec34ca | ||
| 
						 | 
					d64c9d2050 | ||
| 
						 | 
					b2b2c57a38 | ||
| 
						 | 
					155b845194 | ||
| 
						 | 
					9b578808fb | ||
| 
						 | 
					03164dd38d | ||
| 
						 | 
					2b82766452 | ||
| 
						 | 
					3eef6e9127 | ||
| 
						 | 
					77f09900a2 | ||
| 
						 | 
					50d77a4e5d | ||
| 
						 | 
					2d31b0a3f8 | ||
| 
						 | 
					b84d0bac4d | ||
| 
						 | 
					1ff3a37c60 | ||
| 
						 | 
					7e95d924c9 | ||
| a15b532a02 | |||
| 
						 | 
					3e00fbc9b0 | ||
| 
						 | 
					846e460075 | ||
| 
						 | 
					a32b14bbb4 | ||
| 
						 | 
					084877eb52 | ||
| 
						 | 
					97e74f9734 | ||
| 
						 | 
					d328de198d | ||
| 
						 | 
					a9fc26ac13 | ||
| 
						 | 
					40f7046696 | ||
| 
						 | 
					894995176e | ||
| 
						 | 
					5246ea7b6f | ||
| 
						 | 
					ed8b768c4a | ||
| 
						 | 
					825caa14de | ||
| 
						 | 
					d5c396cbfc | ||
| 
						 | 
					5427783fdf | ||
| 
						 | 
					d95425b08a | ||
| 
						 | 
					76420d9849 | ||
| 
						 | 
					bebc604438 | ||
| 
						 | 
					9dae4f2e38 | ||
| 
						 | 
					d126542dc6 | ||
| 
						 | 
					ab6c8d56f1 | ||
| 
						 | 
					fb4dd351c7 | ||
| 
						 | 
					10dc65cc46 | ||
| 
						 | 
					9a2115f762 | ||
| 
						 | 
					eeba6df476 | ||
| 
						 | 
					ac42e81a64 | ||
| 
						 | 
					af70862a7a | ||
| 
						 | 
					fa6611b5af | ||
| 
						 | 
					db01442580 | ||
| 
						 | 
					ebf79db79e | ||
| 
						 | 
					1b5a3b4ef4 | ||
| 
						 | 
					77262c359c | ||
| 
						 | 
					7f23e0461d | ||
| 
						 | 
					ff4af908a5 | ||
| 
						 | 
					2af0cedd59 | ||
| 
						 | 
					ee41e444ad | ||
| 
						 | 
					b7828651ba | ||
| 
						 | 
					e96f7d5658 | ||
| 
						 | 
					28b73fc524 | ||
| 
						 | 
					7a00c63420 | ||
| 
						 | 
					f4597c546a | ||
| 
						 | 
					e10afc8e75 | ||
| 
						 | 
					0f704402a2 | ||
| 
						 | 
					2504a2c25b | ||
| 
						 | 
					7eb3975543 | ||
| 
						 | 
					60e60dc9bb | ||
| 
						 | 
					008c9d0036 | ||
| 
						 | 
					025c9693cc | ||
| 
						 | 
					ee3c4afdb7 | ||
| 
						 | 
					e2416d0893 | ||
| 
						 | 
					a2bcfeb428 | ||
| 
						 | 
					53f7afd3b3 | ||
| 
						 | 
					75e9b66f6f | ||
| 
						 | 
					d70b1c55b6 | ||
| 
						 | 
					c1e582586d | ||
| 
						 | 
					7a75bfb00c | ||
| 
						 | 
					aacf841de4 | ||
| 
						 | 
					3f918161aa | ||
| 
						 | 
					710c874e6e | ||
| 
						 | 
					07908be090 | ||
| 
						 | 
					02af093043 | ||
| 
						 | 
					67e2d6033d | ||
| 
						 | 
					eca4357892 | ||
| 
						 | 
					7ee3e5b2d6 | ||
| 
						 | 
					7cb8d94323 | ||
| 
						 | 
					84ed570eae | ||
| 
						 | 
					2eea73bfd5 | ||
| 
						 | 
					a571a42421 | ||
| 
						 | 
					79648ac1c6 | ||
| 
						 | 
					02af762e83 | ||
| 
						 | 
					01c34c28e6 | ||
| 
						 | 
					56ddda54b5 | ||
| 
						 | 
					3a803b3135 | ||
| 
						 | 
					72df51e17b | ||
| 
						 | 
					b2f5531194 | ||
| 
						 | 
					19bf49a710 | ||
| 
						 | 
					64354831da | ||
| 
						 | 
					e14edd765f | ||
| 
						 | 
					f9d41243d8 | ||
| 
						 | 
					be7ad06d4a | ||
| 
						 | 
					a616516895 | ||
| 
						 | 
					04721ece03 | ||
| 
						 | 
					c7e8f1133a | ||
| 
						 | 
					47e4bfae57 | ||
| 
						 | 
					8a945194af | ||
| 
						 | 
					aa4a004c29 | ||
| 
						 | 
					9ec5d36bdd | ||
| 
						 | 
					a097933eda | ||
| 
						 | 
					a6f5b1bb63 | ||
| 
						 | 
					e6d01471fe | ||
| 
						 | 
					d4501a9f06 | ||
| 
						 | 
					ec8abea460 | ||
| 
						 | 
					e4ddfa38e0 | ||
| 
						 | 
					21d30bc6d9 | ||
| 
						 | 
					2a1ff6e49c | ||
| 
						 | 
					6762cb875c | ||
| 
						 | 
					6edf516a1f | ||
| 
						 | 
					7e56a49e23 | ||
| 
						 | 
					fa5aea80c5 | ||
| 
						 | 
					0f4fa41574 | ||
| 
						 | 
					5d6dd97bba | ||
| 
						 | 
					37e2944272 | ||
| 
						 | 
					4e0eace837 | ||
| 
						 | 
					faa8318b3b | ||
| 
						 | 
					08da36149c | ||
| 
						 | 
					56870d0db1 | ||
| 
						 | 
					4d47ce440c | ||
| 
						 | 
					958f57d895 | ||
| 
						 | 
					04886efd85 | ||
| 
						 | 
					d980798d64 | ||
| 
						 | 
					414a9aae6c | ||
| 
						 | 
					a7f475ca04 | ||
| 
						 | 
					3c53680018 | ||
| 
						 | 
					f0ad647303 | ||
| 
						 | 
					b35e03b6b1 | ||
| 
						 | 
					2b1392af2f | ||
| 
						 | 
					a3d0e293ee | ||
| 
						 | 
					0200002b8c | ||
| 
						 | 
					f4e2142089 | ||
| 
						 | 
					49a90f27a8 | ||
| 
						 | 
					2ae60ca041 | ||
| 
						 | 
					6b475ab269 | ||
| 
						 | 
					b302b0c094 | ||
| 
						 | 
					40aa69cf3a | ||
| 
						 | 
					5346fbf2c9 | ||
| 
						 | 
					92e6bdee12 | ||
| 
						 | 
					71f275b2aa | ||
| 
						 | 
					6dc0d0af33 | ||
| 
						 | 
					59a9e53378 | ||
| 
						 | 
					122768d339 | ||
| 
						 | 
					fa3c60c0d8 | ||
| 
						 | 
					61905bfcf5 | ||
| 
						 | 
					3e68013631 | ||
| 
						 | 
					b46123f2e1 | ||
| 
						 | 
					109869641f | ||
| 
						 | 
					e8a2305de0 | ||
| 
						 | 
					f62975a1f8 | ||
| 
						 | 
					5bb6f9aa31 | ||
| 
						 | 
					1ab8541a6c | ||
| 
						 | 
					038c03bef3 | ||
| 
						 | 
					e51dc29e2f | ||
| 
						 | 
					c6047f887a | ||
| 
						 | 
					0506d68427 | ||
| 
						 | 
					c3d666acaf | ||
| 
						 | 
					e93b1d76d1 | ||
| 
						 | 
					acf1e43f81 | ||
| 
						 | 
					f383fd87b1 | ||
| 
						 | 
					cfded513cd | ||
| 
						 | 
					16ff3cd8df | ||
| 
						 | 
					38032626a6 | ||
| 
						 | 
					aa7d3a7911 | ||
| 
						 | 
					98262647a9 | ||
| 
						 | 
					5868abe97b | ||
| 
						 | 
					71aad16256 | ||
| 
						 | 
					e275da84de | ||
| 
						 | 
					a6cc7f06cf | ||
| 
						 | 
					c1178c8eeb | ||
| 
						 | 
					3c031ca978 | ||
| 
						 | 
					8e02406d8f | ||
| 
						 | 
					8dbdabcc5e | ||
| 
						 | 
					488d8989c5 | ||
| 
						 | 
					9e14b35da8 | ||
| 
						 | 
					7b4879cb72 | ||
| 
						 | 
					74cfb455c5 | ||
| 
						 | 
					0110487722 | ||
| 
						 | 
					68b9b0bc2a | ||
| 
						 | 
					4616f8f809 | ||
| 
						 | 
					287d71bd25 | ||
| 
						 | 
					c1ffe4d9f2 | ||
| 
						 | 
					4c517bdb2b | ||
| 
						 | 
					110582491f | ||
| 
						 | 
					5dd1d39d20 | ||
| 
						 | 
					1771bc2a83 | ||
| 
						 | 
					87c98ebb01 | ||
| 
						 | 
					4af5a80b0c | ||
| 
						 | 
					fee2ffe559 | ||
| 
						 | 
					8878f8916b | ||
| 
						 | 
					14e3359a9e | ||
| 
						 | 
					918d955fd2 | ||
| 
						 | 
					92cfa0e543 | ||
| 
						 | 
					c2bd33e483 | ||
| 
						 | 
					f42ec82f21 | ||
| 
						 | 
					7affff568a | ||
| 
						 | 
					4f750933fd | ||
| 
						 | 
					50b69d564a | ||
| 
						 | 
					eb18f4f348 | ||
| 
						 | 
					d5f3fe52c8 | ||
| 
						 | 
					bb1bc6eeb7 | ||
| 
						 | 
					53844fd0dc | ||
| 
						 | 
					14938c29ce | ||
| 
						 | 
					8bf501aaf2 | ||
| 
						 | 
					9d05f68b51 | ||
| 
						 | 
					ee2524cd1d | ||
| 
						 | 
					5c81661d47 | ||
| 
						 | 
					fb96c9c127 | ||
| 
						 | 
					6c456f9383 | ||
| 
						 | 
					d220fc2723 | ||
| 
						 | 
					a2447dfb42 | ||
| 
						 | 
					cee3919908 | ||
| 
						 | 
					0feadd2922 | ||
| 
						 | 
					a7c99506d9 | ||
| 
						 | 
					f012930775 | ||
| 
						 | 
					ddbdb69658 | ||
| 
						 | 
					c84ebb94d1 | ||
| 
						 | 
					3de6395ae3 | ||
| 
						 | 
					6bb7ebec48 | ||
| 
						 | 
					a192caf88f | ||
| 
						 | 
					e805c74d31 | ||
| 
						 | 
					318e873481 | ||
| 
						 | 
					0d15898f58 | ||
| 
						 | 
					971e82784c | ||
| 
						 | 
					90d9ea656f | ||
| 
						 | 
					a3d1c8a0e7 | ||
| 
						 | 
					913b2ca537 | ||
| 
						 | 
					3fe99c8b82 | ||
| 
						 | 
					27b8183de2 | ||
| 
						 | 
					f32d8e1bfe | ||
| 
						 | 
					d019f34a83 | ||
| 
						 | 
					bb9c481f02 | ||
| 
						 | 
					82da844b42 | ||
| 
						 | 
					667a09983c | ||
| 
						 | 
					cf429ee359 | ||
| 
						 | 
					6f3e2e2d7d | ||
| 
						 | 
					35b88fb42b | ||
| 
						 | 
					a428c325a9 | ||
| 
						 | 
					3219ecd608 | ||
| 
						 | 
					0d8dc4f798 | 
							
								
								
									
										16
									
								
								.cirrus.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								.cirrus.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					# Cirrus CI integration
 | 
				
			||||||
 | 
					# https://cirrus-ci.org
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					test_task:
 | 
				
			||||||
 | 
					  freebsd_instance:
 | 
				
			||||||
 | 
					    matrix:
 | 
				
			||||||
 | 
					      image: freebsd-13-0-release-amd64
 | 
				
			||||||
 | 
					      image: freebsd-12-2-release-amd64
 | 
				
			||||||
 | 
					      image: freebsd-11-4-release-amd64
 | 
				
			||||||
 | 
					  env:
 | 
				
			||||||
 | 
					    OS: FreeBSD
 | 
				
			||||||
 | 
					  procfs_script: >
 | 
				
			||||||
 | 
					    [ -f /proc/curproc ] || mount -t procfs proc /proc
 | 
				
			||||||
 | 
					  pkg_install_script: pkg install -y bash gawk gmake gsed
 | 
				
			||||||
 | 
					  gsed_hack_script: rm /usr/bin/sed && ln -s /usr/local/bin/gsed /usr/bin/sed
 | 
				
			||||||
 | 
					  test_script: bash ci/cirrus.sh
 | 
				
			||||||
							
								
								
									
										26
									
								
								.github/workflows/ci-alpine-linux.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								.github/workflows/ci-alpine-linux.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					name: ci_alpine_linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on: [push, pull_request]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gcc-musl:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    container: alpine:latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					      - name: install deps
 | 
				
			||||||
 | 
					        run: >-
 | 
				
			||||||
 | 
					          apk --no-cache add \
 | 
				
			||||||
 | 
					            build-base \
 | 
				
			||||||
 | 
					            meson \
 | 
				
			||||||
 | 
					            pkgconf \
 | 
				
			||||||
 | 
					            linux-pam \
 | 
				
			||||||
 | 
					            linux-pam-dev
 | 
				
			||||||
 | 
					      - name: checkout
 | 
				
			||||||
 | 
					        uses: actions/checkout@v2
 | 
				
			||||||
 | 
					      - run: meson setup builddir/
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          CC: gcc
 | 
				
			||||||
 | 
					      - run: ninja -C builddir
 | 
				
			||||||
 | 
					        env:
 | 
				
			||||||
 | 
					          CC: gcc
 | 
				
			||||||
							
								
								
									
										32
									
								
								.github/workflows/ci-ubuntu.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.github/workflows/ci-ubuntu.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					name: ci_ubuntu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					on: [push, pull_request]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					jobs:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  gcc-glibc:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					    - run: sudo apt-get update -q
 | 
				
			||||||
 | 
					    - run: sudo apt-get install -q -y build-essential libpam-dev meson
 | 
				
			||||||
 | 
					    - run: meson setup builddir/
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CC: gcc
 | 
				
			||||||
 | 
					    - run: ninja -C builddir
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CC: gcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  clang-glibc:
 | 
				
			||||||
 | 
					    runs-on: ubuntu-latest
 | 
				
			||||||
 | 
					    steps:
 | 
				
			||||||
 | 
					    - uses: actions/checkout@v2
 | 
				
			||||||
 | 
					    - run: sudo apt-get update -q
 | 
				
			||||||
 | 
					    - run: sudo apt-get install -q -y build-essential clang libpam-dev meson
 | 
				
			||||||
 | 
					    - run: meson setup builddir/
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CC: clang
 | 
				
			||||||
 | 
					    - run: ninja -C builddir
 | 
				
			||||||
 | 
					      env:
 | 
				
			||||||
 | 
					        CC: clang
 | 
				
			||||||
							
								
								
									
										32
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					# Travis build integration.
 | 
				
			||||||
 | 
					# https://docs.travis-ci.com/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					language: c
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					os:
 | 
				
			||||||
 | 
					  - linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					compiler:
 | 
				
			||||||
 | 
					  - gcc
 | 
				
			||||||
 | 
					  - clang
 | 
				
			||||||
 | 
					  - musl-gcc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					addons:
 | 
				
			||||||
 | 
					  apt:
 | 
				
			||||||
 | 
					    packages:
 | 
				
			||||||
 | 
					    - musl-tools
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					notifications:
 | 
				
			||||||
 | 
					  irc:
 | 
				
			||||||
 | 
					    channels:
 | 
				
			||||||
 | 
					      - "irc.libera.chat#openrc"
 | 
				
			||||||
 | 
					    on_success: always  # options: [always|never|change] default: always
 | 
				
			||||||
 | 
					    on_failure: always  # options: [always|never|change] default: always
 | 
				
			||||||
 | 
					    on_start: false     # default: false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					before_install:
 | 
				
			||||||
 | 
					  - sudo apt-get update
 | 
				
			||||||
 | 
					  - sudo apt-get install -y shellcheck
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script:
 | 
				
			||||||
 | 
					  - ./ci/travis.sh
 | 
				
			||||||
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							@@ -82,6 +82,7 @@ Semen Maryasin <marsoft@ya.ru>
 | 
				
			|||||||
Sergei Trofimovich <slyfox@gentoo.org>
 | 
					Sergei Trofimovich <slyfox@gentoo.org>
 | 
				
			||||||
Seth Robertson <in-gentoo@baka.org>
 | 
					Seth Robertson <in-gentoo@baka.org>
 | 
				
			||||||
S. Gilles <sgilles@umd.edu>
 | 
					S. Gilles <sgilles@umd.edu>
 | 
				
			||||||
 | 
					Sony Interactive Entertainment, llc.
 | 
				
			||||||
Stefan Knoblich <s.knoblich@axsentis.de>
 | 
					Stefan Knoblich <s.knoblich@axsentis.de>
 | 
				
			||||||
Stef Simoens <stef.simoens@scarlet.be>
 | 
					Stef Simoens <stef.simoens@scarlet.be>
 | 
				
			||||||
Steve L <slong@rathaus.eclipse.co.uk>
 | 
					Steve L <slong@rathaus.eclipse.co.uk>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# Using Busybox as your Default Shell with OpenRC
 | 
					Using Busybox as your Default Shell with OpenRC
 | 
				
			||||||
 | 
					===============================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you have/bin/sh linked to busybox, you need to be aware of several
 | 
					If you have/bin/sh linked to busybox, you need to be aware of several
 | 
				
			||||||
incompatibilities between busybox's applets and the standalone
 | 
					incompatibilities between busybox's applets and the standalone
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,12 @@
 | 
				
			|||||||
# Features Scheduled for Removal
 | 
					Features Scheduled for Removal
 | 
				
			||||||
 | 
					==============================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The following is a list of files and features that are going to be removed in
 | 
					The following is a list of files and features that are going to be removed in
 | 
				
			||||||
the source tree.  Every entry should contain what exactly is going away, why it
 | 
					the source tree.  Every entry should contain what exactly is going away, why it
 | 
				
			||||||
is happening, and who is going to be doing the work.  When the feature is
 | 
					is happening, and who is going to be doing the work.  When the feature is
 | 
				
			||||||
removed, it should also be removed from this file.
 | 
					removed, it should also be removed from this file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Service pause action
 | 
					# Service pause action
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -13,7 +14,7 @@ Why: The same affect can be obtained with the --nodeps option to stop.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## start-stop-daemon options --startas, --chuid , --oknodo
 | 
					# start-stop-daemon options --startas, --chuid , --oknodo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,7 +26,7 @@ Why: Obsolete or replaced by other options.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## runscript and rc symbolic links
 | 
					# runscript and rc symbolic links
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -34,7 +35,7 @@ Why: Deprecated in favor of openrc-run and openrc due to naming
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## support for the opts variable in service scripts
 | 
					# support for the opts variable in service scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,7 +44,7 @@ Why: Deprecated in favor of extra_commands, extra_started_commands
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## support for local_start and local_stop
 | 
					# support for local_start and local_stop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -51,7 +52,7 @@ Why: Deprecated in favor of executable scripts in @SYSCONFDIR@/local.d
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## the mtab service script
 | 
					# the mtab service script
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: force /etc/mtab to link to /proc/self/mounts in 1.0, remove
 | 
					When: force /etc/mtab to link to /proc/self/mounts in 1.0, remove
 | 
				
			||||||
	  service in 2.0
 | 
						  service in 2.0
 | 
				
			||||||
@@ -61,13 +62,13 @@ Why: /etc/mtab should be a symbolic link to /proc/self/mounts on modern
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Who:
 | 
					Who:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## C API Functions in rc.h
 | 
					# C API Functions in rc.h
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you have a c program that links to librc and uses functions from
 | 
					If you have a c program that links to librc and uses functions from
 | 
				
			||||||
there, this section will list API functions which are deprecated and
 | 
					there, this section will list API functions which are deprecated and
 | 
				
			||||||
will be removed along with the reason they are being removed.
 | 
					will be removed along with the reason they are being removed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### rc_getline()
 | 
					## rc_getline()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When: 1.0
 | 
					When: 1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# OpenRC History
 | 
					OpenRC History
 | 
				
			||||||
 | 
					==============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This history of OpenRC was written by Daniel Robbins, Roy Marples, William
 | 
					This history of OpenRC was written by Daniel Robbins, Roy Marples, William
 | 
				
			||||||
Hubbs and others.
 | 
					Hubbs and others.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								Makefile
									
									
									
									
									
								
							@@ -15,14 +15,27 @@ include ${TOP}/Makefile.inc
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
SUBDIR=		conf.d etc init.d local.d man scripts sh src support sysctl.d
 | 
					SUBDIR=		conf.d etc init.d local.d man scripts sh src support sysctl.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Build bash completion or not
 | 
				
			||||||
 | 
					MKBASHCOMP?=	no
 | 
				
			||||||
 | 
					ifeq (${MKBASHCOMP},yes)
 | 
				
			||||||
 | 
					SUBDIR+=	bash-completion
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Build pkgconfig or not
 | 
					# Build pkgconfig or not
 | 
				
			||||||
MKPKGCONFIG?=	yes
 | 
					MKPKGCONFIG?=	yes
 | 
				
			||||||
ifeq (${MKPKGCONFIG},yes)
 | 
					ifeq (${MKPKGCONFIG},yes)
 | 
				
			||||||
SUBDIR+=	pkgconfig
 | 
					SUBDIR+=	pkgconfig
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# We need to ensure that runlevels is done last
 | 
					# Build zsh completion or not
 | 
				
			||||||
 | 
					MKZSHCOMP?=	no
 | 
				
			||||||
 | 
					ifeq (${MKZSHCOMP},yes)
 | 
				
			||||||
 | 
					SUBDIR+=	zsh-completion
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# We need to ensure that runlevels is done last other than test
 | 
				
			||||||
SUBDIR+=	runlevels
 | 
					SUBDIR+=	runlevels
 | 
				
			||||||
 | 
					SUBDIR+=	test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INSTALLAFTER=	_installafter
 | 
					INSTALLAFTER=	_installafter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
NAME=		openrc
 | 
					NAME=		openrc
 | 
				
			||||||
VERSION=	0.34
 | 
					VERSION=	0.44.8
 | 
				
			||||||
PKG=		${NAME}-${VERSION}
 | 
					PKG=		${NAME}-${VERSION}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,5 @@
 | 
				
			|||||||
OpenRC Network Ideals
 | 
					OpenRC Network Ideals
 | 
				
			||||||
---------------------
 | 
					=====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The new style networking for OpenRC is very simplistic - provide a basic means
 | 
					The new style networking for OpenRC is very simplistic - provide a basic means
 | 
				
			||||||
of configuring static interface address and routes whilst allowing the
 | 
					of configuring static interface address and routes whilst allowing the
 | 
				
			||||||
							
								
								
									
										142
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								NEWS.md
									
									
									
									
									
								
							@@ -1,8 +1,148 @@
 | 
				
			|||||||
# OpenRC NEWS
 | 
					OpenRC NEWS
 | 
				
			||||||
 | 
					===========
 | 
				
			||||||
 | 
					
 | 
				
			||||||
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.44
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version is the first to use a meson-based build system.
 | 
				
			||||||
 | 
					The gnu make build system should now be considered deprecated; it will
 | 
				
			||||||
 | 
					be removed sometime after 0.44.x.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					I have opened a [discussion](https://github.com/OpenRC/openrc/discussions/441)
 | 
				
			||||||
 | 
					where you can voice concerns about removing it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.43
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version changes the behavior of the checkpath helper to address
 | 
				
			||||||
 | 
					CVE-2018-21269. on Linux systems, We require  non-terminal symbolic links
 | 
				
			||||||
 | 
					to be owned by root. Since we can't do this on non-linux systems, we do
 | 
				
			||||||
 | 
					not dereference non-terminal symbolic links by default. If you need them
 | 
				
			||||||
 | 
					dereferenced, you should add the "-s" switch to the appropriate
 | 
				
			||||||
 | 
					checkpath calls.
 | 
				
			||||||
 | 
					For more information, see http://github.com/openrc/openrc/issues/201.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The SHLIBDIR variable has been removed from the makefiles to make them
 | 
				
			||||||
 | 
					more consistent with most common makefiles. All libraries are now in
 | 
				
			||||||
 | 
					LIBDIR, so if you need to put them in /, override the LIBDIR variable
 | 
				
			||||||
 | 
					when you run make.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					openrc-shutdown now has the ability to shut down sysvinit-based systems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A guide has been added for migrating systems using another init system
 | 
				
			||||||
 | 
					to openrc-init.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.41.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version adds the ability to format the output of rc-status when
 | 
				
			||||||
 | 
					showing the status of services in a runlevel so that it may be parsed.
 | 
				
			||||||
 | 
					Currently, the -f switch only accepts ini as an argument which
 | 
				
			||||||
 | 
					causes the output to be in the .ini format.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version adds an experimental build time switch to allow setting the
 | 
				
			||||||
 | 
					default shell to use for service scripts.
 | 
				
			||||||
 | 
					By default, this is set to /bin/sh if it is changed, the new shell must
 | 
				
			||||||
 | 
					be able to understand posix-compatible syntax.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.40
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this version, the keymaps and termencoding services on Linux needed
 | 
				
			||||||
 | 
					to be modified so they do not write to the root file system. This was
 | 
				
			||||||
 | 
					done so they can run earlier in the boot sequence. AS a result, you will
 | 
				
			||||||
 | 
					need to add save-termencoding and save-keymaps to your boot runlevel.
 | 
				
			||||||
 | 
					This can be done as follows:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					# rc-update add save-keymaps boot
 | 
				
			||||||
 | 
					# rc-update add save-termencoding boot
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.39
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version removes the support for addons.
 | 
				
			||||||
 | 
					The only place I know that this was used was Gentoo Baselayout 1.x, so
 | 
				
			||||||
 | 
					it shouldn't affect anyone since baselayout-1 has been dead for a few
 | 
				
			||||||
 | 
					years.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since all supported Linux kernel versions now make efivarfs immutable
 | 
				
			||||||
 | 
					and all of the tools that access efivarfs are aware of this, we no
 | 
				
			||||||
 | 
					longer mount efivarfs read-only. See the following github issue for more
 | 
				
			||||||
 | 
					information:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://github.com/openrc/openrc/issues/238
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This version adds timed shutdown and cancelation of shutdown to
 | 
				
			||||||
 | 
					openrc-shutdown. Shutdowns can now be delayed for a certain amount of
 | 
				
			||||||
 | 
					time or scheduled for an exact time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					supervise-daemon supports health checks, which are a periodic way to make sure a
 | 
				
			||||||
 | 
					service is healthy. For more information on setting this up, please see
 | 
				
			||||||
 | 
					supervise-daemon-guide.md.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The --first-time switch has been added to all modprobe commands in the
 | 
				
			||||||
 | 
					modules service. This means that, on Linux, you will see failures if a
 | 
				
			||||||
 | 
					module was loaded by an initramfs or device manager before this service
 | 
				
			||||||
 | 
					runs. These messages are harmless, but to clean them up, you should adjust your
 | 
				
			||||||
 | 
					modules autoload configuration.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.37
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start-stop-daemon now supports logging stdout and stderr of daemons to
 | 
				
			||||||
 | 
					processes instead of files. These processes are defined by the
 | 
				
			||||||
 | 
					output_logger and error_logger variables in standard service scripts, or
 | 
				
			||||||
 | 
					by the  -3/--output-logger or -4/--error-logger switches if you use
 | 
				
			||||||
 | 
					start-stop-daemon directly. For more information on this, see the
 | 
				
			||||||
 | 
					start-stop-daemon man page.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.36
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this release, the modules-load service has been combined into the
 | 
				
			||||||
 | 
					modules service since there is no reason I know of to keep them
 | 
				
			||||||
 | 
					separate. However, modules also provides modules-load in case you were
 | 
				
			||||||
 | 
					using modules-load in  your dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The consolefont, keymaps, numlock and procfs service scripts no longer
 | 
				
			||||||
 | 
					have a dependency on localmount.
 | 
				
			||||||
 | 
					If you are a linux user and are still separaating / from /usr,
 | 
				
			||||||
 | 
					you will need to add the following line to the appropriate conf.d files:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rc_need="localmount"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OpenRC 0.35
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this version, the cgroups mounting logic has been moved from the
 | 
				
			||||||
 | 
					sysfs service to the cgroups service. This was done so cgroups can be
 | 
				
			||||||
 | 
					mounted inside an lxc/lxd container without using the other parts of the
 | 
				
			||||||
 | 
					sysfs service.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					?As a result of this change, if you are upgrading, you need to add
 | 
				
			||||||
 | 
					cgroups to your sysinit runlevel by running the following command as
 | 
				
			||||||
 | 
					root:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					# rc-update add cgroups sysinit
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					For more information, see the following issue:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					https://github.com/openrc/openrc/issues/187
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Consider this your second notification with regard to /etc/mtab being a
 | 
				
			||||||
 | 
					file instead of a symbolic link.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In this version, the mtab service will complain loudly if you have
 | 
				
			||||||
 | 
					mtab_is_file set to yes and recommend that you change this to no and
 | 
				
			||||||
 | 
					restart the mtab service to migrate /etc/mtab to a symbolic link.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If there is a valid technical reason to keep /etc/mtab as a flat file
 | 
				
			||||||
 | 
					instead of a symbolic link to /proc/self/mounts, we are interested and
 | 
				
			||||||
 | 
					we will keep the support in that case. Please open an issue and let us
 | 
				
			||||||
 | 
					know however. Otherwise, consider this your final notice that the mtab
 | 
				
			||||||
 | 
					service will be removed in the future.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## OpenRC 0.33
 | 
					## OpenRC 0.33
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This version removes the "service" binary which was just a copy of
 | 
					This version removes the "service" binary which was just a copy of
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										53
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										53
									
								
								README.md
									
									
									
									
									
								
							@@ -1,19 +1,28 @@
 | 
				
			|||||||
# OpenRC README
 | 
					OpenRC README
 | 
				
			||||||
 | 
					=============
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OpenRC is a dependency-based init system that works with the
 | 
					OpenRC is a dependency-based init system that works with the
 | 
				
			||||||
system-provided init program, normally `/sbin/init`. Currently, it does
 | 
					system-provided init program, normally `/sbin/init`.
 | 
				
			||||||
not have an init program of its own.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Installation
 | 
					## building and installing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OpenRC uses the  [meson](http://mesonbuild.com) build system, so use the
 | 
				
			||||||
 | 
					usual methods for this build system to build and install.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The old build system is still available for the 0.44.x branch, but it is
 | 
				
			||||||
 | 
					considered deprecated and will be removed. The previous documentation is
 | 
				
			||||||
 | 
					below.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Installation (historical)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OpenRC requires GNU make.
 | 
					OpenRC requires GNU make.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Once you have GNU Make installed, the default OpenRC installation can be
 | 
					Once you have GNU Make installed, the default OpenRC installation can be
 | 
				
			||||||
executed using this command:
 | 
					executed using this command:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
make install
 | 
					`make install`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Configuration
 | 
					## Configuration (historical)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You may wish to configure the installation by passing one or more of the
 | 
					You may wish to configure the installation by passing one or more of the
 | 
				
			||||||
below arguments to the make command
 | 
					below arguments to the make command
 | 
				
			||||||
@@ -22,6 +31,7 @@ below arguments to the make command
 | 
				
			|||||||
PROGLDFLAGS=-static
 | 
					PROGLDFLAGS=-static
 | 
				
			||||||
LIBNAME=lib64
 | 
					LIBNAME=lib64
 | 
				
			||||||
DESTDIR=/tmp/openrc-image
 | 
					DESTDIR=/tmp/openrc-image
 | 
				
			||||||
 | 
					MKBASHCOMP=no
 | 
				
			||||||
MKNET=no
 | 
					MKNET=no
 | 
				
			||||||
MKPAM=pam
 | 
					MKPAM=pam
 | 
				
			||||||
MKPREFIX=yes
 | 
					MKPREFIX=yes
 | 
				
			||||||
@@ -31,23 +41,27 @@ MKSTATICLIBS=no
 | 
				
			|||||||
MKSYSVINIT=yes
 | 
					MKSYSVINIT=yes
 | 
				
			||||||
MKTERMCAP=ncurses
 | 
					MKTERMCAP=ncurses
 | 
				
			||||||
MKTERMCAP=termcap
 | 
					MKTERMCAP=termcap
 | 
				
			||||||
 | 
					MKZSHCOMP=no
 | 
				
			||||||
PKG_PREFIX=/usr/pkg
 | 
					PKG_PREFIX=/usr/pkg
 | 
				
			||||||
LOCAL_PREFIX=/usr/local
 | 
					LOCAL_PREFIX=/usr/local
 | 
				
			||||||
PREFIX=/usr/local
 | 
					PREFIX=/usr/local
 | 
				
			||||||
BRANDING=\"Gentoo/$(uname -s)\"
 | 
					BRANDING=\"Gentoo/$(uname -s)\"
 | 
				
			||||||
 | 
					SH=/bin/sh
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Notes
 | 
					## Notes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We don't support building a static OpenRC with PAM.
 | 
					We don't support building a static OpenRC with PAM.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
You may need to use `PROGLDFLAGS=-Wl,-Bstatic` on glibc instead of just `-static`.
 | 
					You may need to use `PROGLDFLAGS=-Wl,-Bstatic` on glibc instead of just `-static`
 | 
				
			||||||
 | 
					(This is now handled by the meson build system).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you are building OpenRC for a Gentoo Prefix installation, add `MKPREFIX=yes`.
 | 
					If you are building OpenRC for a Gentoo Prefix installation, add `MKPREFIX=yes`
 | 
				
			||||||
 | 
					(this is not supported in the meson build currently, but patches are welcome).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`PKG_PREFIX` should be set to where packages install to by default.
 | 
					`PKG_PREFIX` should be set to where packages install to by default.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`LOCAL_PREFIX` should be set when to where user maintained packages are.
 | 
					`LOCAL_PREFIX` should be set to where user maintained packages are.
 | 
				
			||||||
Only set `LOCAL_PREFIX` if different from `PKG_PREFIX`.
 | 
					Only set `LOCAL_PREFIX` if different from `PKG_PREFIX`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
`PREFIX` should be set when OpenRC is not installed to /.
 | 
					`PREFIX` should be set when OpenRC is not installed to /.
 | 
				
			||||||
@@ -73,20 +87,21 @@ Obviously, if you're installing this onto a system that does not use
 | 
				
			|||||||
OpenRC by default then you may wish to backup the above listed files,
 | 
					OpenRC by default then you may wish to backup the above listed files,
 | 
				
			||||||
remove them and then install so that the OS hooks into OpenRC.
 | 
					remove them and then install so that the OS hooks into OpenRC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Discussions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We are testing [discussions](https://github.com/OpenRC/openrc/discussions), so
 | 
				
			||||||
 | 
					feel free to open topics there.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Reporting Bugs
 | 
					## Reporting Bugs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you are using Gentoo Linux, bugs can be filed on their bugzilla under
 | 
					Please report bugs on our [bug tracker](http://github.com/OpenRC/openrc/issues).
 | 
				
			||||||
the `gentoo hosted projects` product and the `openrc` component [1].
 | 
					 | 
				
			||||||
Otherwise, you can report issues on our github [2].
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Better yet, if you can contribute code, please feel free to submit pull
 | 
					If you can contribute code , please feel free to do so by opening
 | 
				
			||||||
requests [3].
 | 
					[pull requests](https://github.com/OpenRC/openrc/pulls).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## IRC Channel
 | 
					## IRC Channel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We have an official irc channel, #openrc on freenode, feel free to join
 | 
					We have an official irc channel, #openrc on the libera network.
 | 
				
			||||||
us there.
 | 
					Please connect your irc client to irc.libera.chat and join #openrc on
 | 
				
			||||||
 | 
					that network.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[1]	https://bugs.gentoo.org/
 | 
					 | 
				
			||||||
[2]	https://github.com/openrc/openrc/issues
 | 
					 | 
				
			||||||
[3]	https://github.com/openrc/openrc/pulls
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# OpenRC Style Guide
 | 
					OpenRC Coding Style Guide
 | 
				
			||||||
 | 
					=========================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is the openrc style manual.  It governs the coding style of all code
 | 
					This is the openrc style manual.  It governs the coding style of all code
 | 
				
			||||||
in this repository.  Follow it.  Contact openrc@gentoo.org for any questions
 | 
					in this repository.  Follow it.  Contact openrc@gentoo.org for any questions
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# Setting up the agetty service in OpenRC
 | 
					Setting up the agetty service in OpenRC
 | 
				
			||||||
 | 
					=================================xxxxxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The agetty service is an OpenRC specific way to monitor and respawn a
 | 
					The agetty service is an OpenRC specific way to monitor and respawn a
 | 
				
			||||||
getty, using agetty, on Linux. To use this method, make sure you aren't
 | 
					getty, using agetty, on Linux. To use this method, make sure you aren't
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										11
									
								
								bash-completion/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								bash-completion/Makefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					DIR=	${BASHCOMPDIR}
 | 
				
			||||||
 | 
					CONF=	openrc \
 | 
				
			||||||
 | 
							openrc-service-script \
 | 
				
			||||||
 | 
							rc-service \
 | 
				
			||||||
 | 
							rc-status \
 | 
				
			||||||
 | 
							rc-update \
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MK=	../mk
 | 
				
			||||||
 | 
					include ${MK}/os.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					include ${MK}/scripts.mk
 | 
				
			||||||
							
								
								
									
										10
									
								
								bash-completion/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								bash-completion/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					bash_completions = [
 | 
				
			||||||
 | 
					  'openrc',
 | 
				
			||||||
 | 
					  'openrc-service-script',
 | 
				
			||||||
 | 
					  'rc-service',
 | 
				
			||||||
 | 
					  'rc-status',
 | 
				
			||||||
 | 
					  'rc-update',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(bash_completions,
 | 
				
			||||||
 | 
					  install_dir : get_option('datadir') / 'bash-completion/completions')
 | 
				
			||||||
							
								
								
									
										24
									
								
								bash-completion/openrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								bash-completion/openrc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					# 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# openrc completion command
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					_openrc()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local cur
 | 
				
			||||||
 | 
						COMPREPLY=()
 | 
				
			||||||
 | 
						cur="${COMP_WORDS[COMP_CWORD]}"
 | 
				
			||||||
 | 
						if [[ ${#COMP_WORDS[*]} -le 2 ]]; then
 | 
				
			||||||
 | 
							COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					} &&
 | 
				
			||||||
 | 
					complete -F _openrc openrc
 | 
				
			||||||
							
								
								
									
										29
									
								
								bash-completion/openrc-service-script
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								bash-completion/openrc-service-script
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					# 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					_openrc_service_script()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local script="${COMP_WORDS[0]}"
 | 
				
			||||||
 | 
						local cur="${COMP_WORDS[$COMP_CWORD]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [[ ( -f "${script}" || -h "${script}" ) && -r "${script}" ]] \
 | 
				
			||||||
 | 
						&& [[ "$(head -n 1 "${script}")" =~ \#\!.*/openrc-run ]]
 | 
				
			||||||
 | 
						then
 | 
				
			||||||
 | 
							[[ $COMP_CWORD -gt 1 ]] && return 1
 | 
				
			||||||
 | 
							COMPREPLY=($(opts="start stop status restart pause zap ineed needsme iuse usesme broken"; \
 | 
				
			||||||
 | 
								eval "$(grep '^opts=' "${script}")"; echo "${opts}"))
 | 
				
			||||||
 | 
							[[ -n "$COMPREPLY" ]] || COMPREPLY=(start stop restart zap)
 | 
				
			||||||
 | 
							COMPREPLY=($(compgen -W "${COMPREPLY[*]}" -- "${cur}"))
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							COMPREPLY=($(compgen -o default -- "${cur}"))
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					complete -F _openrc_service_script */etc/init.d/*
 | 
				
			||||||
							
								
								
									
										116
									
								
								bash-completion/rc-service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								bash-completion/rc-service
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,116 @@
 | 
				
			|||||||
 | 
					# 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# rc-service completion command
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					_rc_service()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local cur prev numwords opts
 | 
				
			||||||
 | 
						local words i x filename
 | 
				
			||||||
 | 
						local action actionpos
 | 
				
			||||||
 | 
						COMPREPLY=()
 | 
				
			||||||
 | 
						cur="${COMP_WORDS[COMP_CWORD]}"
 | 
				
			||||||
 | 
						prev="${COMP_WORDS[COMP_CWORD-1]}"
 | 
				
			||||||
 | 
						numwords=${#COMP_WORDS[*]}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [[ ${prev} == '>' || ${prev} == '<' ]] ; then
 | 
				
			||||||
 | 
							COMPREPLY=($(compgen -f -- ${cur}))
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# find action
 | 
				
			||||||
 | 
						for x in ${COMP_LINE} ; do
 | 
				
			||||||
 | 
							if [[ ${x} =~ --(list|exists|resolve) ]] || [[ ${x} =~ -(l|e|r) ]]
 | 
				
			||||||
 | 
							then
 | 
				
			||||||
 | 
								action=${x}
 | 
				
			||||||
 | 
								break
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						if [[ -n ${action} ]]; then
 | 
				
			||||||
 | 
							for ((i = 0; i < ${numwords}; i++ )); do
 | 
				
			||||||
 | 
								if [[ ${COMP_WORDS[${i}]} == "${action}" ]]; then
 | 
				
			||||||
 | 
									actionpos=${i}
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							for ((i = 1; i < ${numwords}; i++ )); do
 | 
				
			||||||
 | 
								if [[ ! ${COMP_WORDS[$i]} == -* ]]; then
 | 
				
			||||||
 | 
									break
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [[ ${COMP_CWORD} -eq 3 ]]; then
 | 
				
			||||||
 | 
							return 1
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						# check if an option was typed
 | 
				
			||||||
 | 
						if [[ ${cur} == -* ]]; then
 | 
				
			||||||
 | 
							if [[ ${cur} == --* ]]; then
 | 
				
			||||||
 | 
								opts="--list --exists --resolve"
 | 
				
			||||||
 | 
								COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							elif [[ ${cur} == -* ]]; then
 | 
				
			||||||
 | 
								opts="-l -e -r"
 | 
				
			||||||
 | 
								COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							# NOTE: This slows things down!
 | 
				
			||||||
 | 
							# (Adapted from bash_completion by Ian Macdonald <ian@caliban.org>)
 | 
				
			||||||
 | 
							# This removes any options from the list of completions that have
 | 
				
			||||||
 | 
							# already been specified on the command line.
 | 
				
			||||||
 | 
							COMPREPLY=($(echo "${COMP_WORDS[@]}" | \
 | 
				
			||||||
 | 
							(while read -d ' ' i; do
 | 
				
			||||||
 | 
								[[ -z ${i} ]] && continue
 | 
				
			||||||
 | 
								# flatten array with spaces on either side,
 | 
				
			||||||
 | 
								# otherwise we cannot grep on word boundaries of
 | 
				
			||||||
 | 
								# first and last word
 | 
				
			||||||
 | 
								COMPREPLY=" ${COMPREPLY[@]} "
 | 
				
			||||||
 | 
								# remove word from list of completions
 | 
				
			||||||
 | 
								COMPREPLY=(${COMPREPLY/ ${i%% *} / })
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
							echo ${COMPREPLY[@]})))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							# no option was typed
 | 
				
			||||||
 | 
							if [[ ${COMP_CWORD} -eq 1 ]]; then			  # if first word typed
 | 
				
			||||||
 | 
								words="$(rc-service --list | grep ^${cur})"		  # complete for init scripts
 | 
				
			||||||
 | 
								COMPREPLY=($(for i in ${words} ; do \
 | 
				
			||||||
 | 
								[[ ${i} == ${cur}* ]] && echo ${i} ; \
 | 
				
			||||||
 | 
								done))
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							elif [[ ${COMP_CWORD} -eq 2 ]] && [[ ${prev} != -* ]]; then # if second word typed and we didn't type in a function
 | 
				
			||||||
 | 
								rc-service --exists "$prev" || return
 | 
				
			||||||
 | 
								shopt -s extglob
 | 
				
			||||||
 | 
								while read -r _ line; do
 | 
				
			||||||
 | 
									if [[ $line == +([[:alnum:]_]):* ]]; then
 | 
				
			||||||
 | 
										opts+="${line%%:*} "
 | 
				
			||||||
 | 
									fi
 | 
				
			||||||
 | 
								done < <(rc-service "$prev" describe 2>&1)
 | 
				
			||||||
 | 
								shopt -u extglob
 | 
				
			||||||
 | 
								COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
 | 
				
			||||||
 | 
								return 0
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						if [[ ${action} == '--exists' ]] || [[ ${action} == '-e' ]] || \
 | 
				
			||||||
 | 
							[[ ${action} == '--resolve' ]]  || [[ ${action} == '-r' ]]; then
 | 
				
			||||||
 | 
							words="$(rc-service --list | grep ^${cur})"
 | 
				
			||||||
 | 
							COMPREPLY=($(for i in ${words} ; do \
 | 
				
			||||||
 | 
								[[ ${i} == ${cur}* ]] && echo ${i} ; \
 | 
				
			||||||
 | 
							done))
 | 
				
			||||||
 | 
							return 0
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					} &&
 | 
				
			||||||
 | 
					complete -F _rc_service rc-service
 | 
				
			||||||
							
								
								
									
										31
									
								
								bash-completion/rc-status
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								bash-completion/rc-status
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					# 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# rc-status completion command
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					_rcstatus()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local cur
 | 
				
			||||||
 | 
						cur="${COMP_WORDS[COMP_CWORD]}"
 | 
				
			||||||
 | 
						if [[ $COMP_CWORD -eq 1 ]]; then
 | 
				
			||||||
 | 
							if [[ "${cur}" == --* ]]; then
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W '--all --list --unused' -- ${cur}))
 | 
				
			||||||
 | 
							elif [[ "${cur}" == -* ]]; then
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W '-a -l -u' -- ${cur}))
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W "$(rc-status --list)" -- ${cur}))
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							unset COMPREPLY
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					} &&
 | 
				
			||||||
 | 
					complete -F _rcstatus rc-status
 | 
				
			||||||
							
								
								
									
										42
									
								
								bash-completion/rc-update
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								bash-completion/rc-update
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					# 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# rc-update completion command
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					_rc_update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local cur show
 | 
				
			||||||
 | 
						COMPREPLY=()
 | 
				
			||||||
 | 
						cur="${COMP_WORDS[COMP_CWORD]}"
 | 
				
			||||||
 | 
						if [[ $COMP_CWORD -eq 1 ]]; then
 | 
				
			||||||
 | 
							if [[ "${cur}" == -* ]]; then
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W '-a -d -s' -- ${cur}))
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W 'add del show' ${cur}))
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							if [[ "${COMP_WORDS[1]}" == "show" ]] || [[ "${COMP_WORDS[1]}" == "-s" ]]; then
 | 
				
			||||||
 | 
								show="TRUE"
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
							if ([[ $COMP_CWORD -eq 3 ]] && [[ -z "$show" ]]) || \
 | 
				
			||||||
 | 
								([[ $COMP_CWORD -eq 2 ]] && [[ -n "$show" ]]); then
 | 
				
			||||||
 | 
							COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
 | 
				
			||||||
 | 
							elif [[ $COMP_CWORD -eq 2 ]]; then
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W "$(rc-service --list)" $cur))
 | 
				
			||||||
 | 
							elif [[ ${#COMP_WORDS[*]} -gt 2 ]] ; then
 | 
				
			||||||
 | 
								COMPREPLY=($(compgen -W "$(rc-status --list)" -- $cur))
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								unset COMPREPLY
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					} &&
 | 
				
			||||||
 | 
					complete -F _rc_update rc-update
 | 
				
			||||||
							
								
								
									
										21
									
								
								ci/cirrus.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								ci/cirrus.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,21 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# Copyright (c) 2007-2018 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					set -u
 | 
				
			||||||
 | 
					set -x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# These are steps to run on Cirrus CI under a jailed FreeBSD system.
 | 
				
			||||||
 | 
					# See $TOP/.cirrus.yml for more info about the Cirrus CI setup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cpus=$(getconf NPROCESSORS_CONF || echo 1)
 | 
				
			||||||
 | 
					gmake -j"${cpus}" -O
 | 
				
			||||||
 | 
					gmake test
 | 
				
			||||||
							
								
								
									
										40
									
								
								ci/travis.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										40
									
								
								ci/travis.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,40 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					# Copyright (c) 2007-2018 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					set -u
 | 
				
			||||||
 | 
					set -x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# These are steps to run on TravisCI under a containerized Ubuntu system.
 | 
				
			||||||
 | 
					# See $TOP/.travis.yml for more info about the TravisCI setup.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Run shellcheck, but don't fail (yet):
 | 
				
			||||||
 | 
					shellcheck --version
 | 
				
			||||||
 | 
					for shellscript in $(git ls-files); do
 | 
				
			||||||
 | 
						case $shellscript in
 | 
				
			||||||
 | 
							init.d/*.in) ;;
 | 
				
			||||||
 | 
							sh/*.in) ;;
 | 
				
			||||||
 | 
							sh/*.sh) ;;
 | 
				
			||||||
 | 
							support/init.d.examples/*.in) ;;
 | 
				
			||||||
 | 
							support/openvpn/*.sh) ;;
 | 
				
			||||||
 | 
							support/sysvinit/halt.sh) ;;
 | 
				
			||||||
 | 
							test/*.sh) ;;
 | 
				
			||||||
 | 
							*) continue ;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						echo "Checking ${shellscript} with shellcheck:"
 | 
				
			||||||
 | 
						shellcheck -s sh "${shellscript}" || true
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cpus=$(getconf _NPROCESSORS_CONF || echo 1)
 | 
				
			||||||
 | 
					# make on TravisCI doesn't support -O yet
 | 
				
			||||||
 | 
					make -j"${cpus}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					make test
 | 
				
			||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
# Set to the hostname of this machine
 | 
					# Hostname fallback if /etc/hostname does not exist
 | 
				
			||||||
hostname="localhost"
 | 
					hostname="localhost"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										59
									
								
								conf.d/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								conf.d/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					conf_d_dir = get_option('sysconfdir') / 'conf.d'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_common = [
 | 
				
			||||||
 | 
					  'bootmisc',
 | 
				
			||||||
 | 
					  'fsck',
 | 
				
			||||||
 | 
					  'hostname',
 | 
				
			||||||
 | 
					  'localmount',
 | 
				
			||||||
 | 
					  'netmount',
 | 
				
			||||||
 | 
					  'swap',
 | 
				
			||||||
 | 
					  'urandom',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_net = [
 | 
				
			||||||
 | 
					  'network',
 | 
				
			||||||
 | 
					  'staticroute',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_FreeBSD = [
 | 
				
			||||||
 | 
					  'ipfw',
 | 
				
			||||||
 | 
					  'modules',
 | 
				
			||||||
 | 
					  'moused',
 | 
				
			||||||
 | 
					  'powerd',
 | 
				
			||||||
 | 
					  'rarpd',
 | 
				
			||||||
 | 
					  'savecore',
 | 
				
			||||||
 | 
					  'syscons',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_Linux = [
 | 
				
			||||||
 | 
					  'agetty',
 | 
				
			||||||
 | 
					  'consolefont',
 | 
				
			||||||
 | 
					  'devfs',
 | 
				
			||||||
 | 
					  'dmesg',
 | 
				
			||||||
 | 
					  'hwclock',
 | 
				
			||||||
 | 
					  'keymaps',
 | 
				
			||||||
 | 
					  'killprocs',
 | 
				
			||||||
 | 
					  'modules',
 | 
				
			||||||
 | 
					  'mtab',
 | 
				
			||||||
 | 
					  'net-online',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_NetBSD =  [
 | 
				
			||||||
 | 
					  'moused',
 | 
				
			||||||
 | 
					  'rarpd',
 | 
				
			||||||
 | 
					  'savecore',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					conf_data = conf_common
 | 
				
			||||||
 | 
					if get_option('newnet')
 | 
				
			||||||
 | 
					  conf_data = conf_data + conf_net
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					if os == 'FreeBSD'
 | 
				
			||||||
 | 
					  conf_data = conf_data + conf_FreeBSD
 | 
				
			||||||
 | 
					elif os == 'Linux'
 | 
				
			||||||
 | 
					  conf_data = conf_data + conf_Linux
 | 
				
			||||||
 | 
					elif os == 'NetBSD'
 | 
				
			||||||
 | 
					  conf_data = conf_data + conf_NetBSD
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(conf_data, install_dir : conf_d_dir)
 | 
				
			||||||
@@ -8,11 +8,6 @@
 | 
				
			|||||||
#modules_2="ipv6"
 | 
					#modules_2="ipv6"
 | 
				
			||||||
#modules="ohci1394"
 | 
					#modules="ohci1394"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Linux users can give modules a different name when they load - the new name
 | 
					 | 
				
			||||||
# will also be used to pick arguments below.
 | 
					 | 
				
			||||||
# This is not supported on FreeBSD.
 | 
					 | 
				
			||||||
#modules="dummy:dummy1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Linux users can give the modules some arguments if needed, per version
 | 
					# Linux users can give the modules some arguments if needed, per version
 | 
				
			||||||
# if necessary.
 | 
					# if necessary.
 | 
				
			||||||
# Again, the most specific versioned variable will take precedence.
 | 
					# Again, the most specific versioned variable will take precedence.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										14
									
								
								conf.d/mtab
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								conf.d/mtab
									
									
									
									
									
								
							@@ -1,5 +1,13 @@
 | 
				
			|||||||
 | 
					# As far as we are aware, there are no modern linux tools or use cases
 | 
				
			||||||
 | 
					# which require /etc/mtab to be a separate file from /proc/self/mounts,
 | 
				
			||||||
 | 
					# so this setting should be commented out.
 | 
				
			||||||
 | 
					# If it is set to yes, please comment it out and run this command:
 | 
				
			||||||
 | 
					# # rc-service mtab restart
 | 
				
			||||||
 | 
					# In the future, the mtab service will be removed since we are not aware
 | 
				
			||||||
 | 
					# of any need to manipulate /etc/mtab as a separate file from
 | 
				
			||||||
 | 
					# /proc/self/mounts.
 | 
				
			||||||
 | 
					# If you have a technical reason we should keep this support, please
 | 
				
			||||||
 | 
					# open an issue at https://github.com/openrc/openrc/issues and let us
 | 
				
			||||||
 | 
					# know about your situation.
 | 
				
			||||||
# This setting controls whether /etc/mtab is a file or symbolic link.
 | 
					# This setting controls whether /etc/mtab is a file or symbolic link.
 | 
				
			||||||
# Most of the time, you shouldn't touch this. However, if the default
 | 
					 | 
				
			||||||
# breaks your system in some way, please see the NEWS.md file that comes
 | 
					 | 
				
			||||||
# with OpenRC for the actions to take.
 | 
					 | 
				
			||||||
# mtab_is_file=no
 | 
					# mtab_is_file=no
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										44
									
								
								etc/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								etc/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
				
			|||||||
 | 
					etc_conf_data = configuration_data()
 | 
				
			||||||
 | 
					if os == 'FreeBSD'
 | 
				
			||||||
 | 
					  etc_conf_data.set('TERM', 'cons25')
 | 
				
			||||||
 | 
					elif os == 'Linux'
 | 
				
			||||||
 | 
					  etc_conf_data.set('TERM', 'wsvt25')
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					etc_conf_common = [
 | 
				
			||||||
 | 
					  'rc.conf',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					etc_bin_FreeBSD = [
 | 
				
			||||||
 | 
					  'rc.devd',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					etc_conf_FreeBSD = [
 | 
				
			||||||
 | 
					  'devd.conf',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					etc_bin_NetBSD =  [
 | 
				
			||||||
 | 
					  'rc.in',
 | 
				
			||||||
 | 
					  'rc.shutdown.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(etc_conf_common,
 | 
				
			||||||
 | 
					  install_dir : get_option('sysconfdir'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if os == 'FreeBSD'
 | 
				
			||||||
 | 
					  install_data(etc_bin_FreeBSD,
 | 
				
			||||||
 | 
					    install_dir : get_option('sysconfdir'),
 | 
				
			||||||
 | 
					    install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					  install_data(etc_conf_FreeBSD,
 | 
				
			||||||
 | 
					    install_dir : get_option('sysconfdir'))
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if os == 'FreeBSD' or os == 'NetBSD'
 | 
				
			||||||
 | 
					  foreach file : etc_bin_NetBSD
 | 
				
			||||||
 | 
					    configure_file(input : file,
 | 
				
			||||||
 | 
					      output : '@BASENAME@',
 | 
				
			||||||
 | 
					      configuration : etc_conf_data,
 | 
				
			||||||
 | 
					      install_dir: get_option('sysconfdir'),
 | 
				
			||||||
 | 
					      install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					  endforeach
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
							
								
								
									
										12
									
								
								etc/rc.conf
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								etc/rc.conf
									
									
									
									
									
								
							@@ -198,10 +198,9 @@ rc_tty_number=12
 | 
				
			|||||||
# "unified" mounts cgroups version 2 on /sys/fs/cgroup
 | 
					# "unified" mounts cgroups version 2 on /sys/fs/cgroup
 | 
				
			||||||
#rc_cgroup_mode="hybrid"
 | 
					#rc_cgroup_mode="hybrid"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This is a list of controllers which should be enabled for cgroups version 2.
 | 
					# This is a list of controllers which should be enabled for cgroups version 2
 | 
				
			||||||
# If hybrid mode is being used, controllers listed here will not be
 | 
					# when hybrid mode is being used.
 | 
				
			||||||
# available for cgroups version 1.
 | 
					# Controllers listed here will not be available for cgroups version 1.
 | 
				
			||||||
# This is a global setting.
 | 
					 | 
				
			||||||
#rc_cgroup_controllers=""
 | 
					#rc_cgroup_controllers=""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This variable contains the cgroups version 2 settings for your services.
 | 
					# This variable contains the cgroups version 2 settings for your services.
 | 
				
			||||||
@@ -227,6 +226,11 @@ rc_tty_number=12
 | 
				
			|||||||
# /sys/fs/cgroup in hybrid or legacy mode.
 | 
					# /sys/fs/cgroup in hybrid or legacy mode.
 | 
				
			||||||
#rc_controller_cgroups="YES"
 | 
					#rc_controller_cgroups="YES"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The following setting turns on the memory.use_hierarchy setting in the
 | 
				
			||||||
 | 
					# root memory cgroup for cgroups v1.
 | 
				
			||||||
 | 
					# It must be set to yes in this file if you want this functionality.
 | 
				
			||||||
 | 
					#rc_cgroup_memory_use_hierarchy="NO"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# The following settings allow you to set up values for the cgroups version 1
 | 
					# The following settings allow you to set up values for the cgroups version 1
 | 
				
			||||||
# controllers for your services.
 | 
					# controllers for your services.
 | 
				
			||||||
# They can be set in this file;, however, if you do this, the settings
 | 
					# They can be set in this file;, however, if you do this, the settings
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
# Copyright (c) 2007-2015 The OpenRC Authors.
 | 
					# Copyright (c) 2007-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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
# Copyright (c) 2007-2015 The OpenRC Authors.
 | 
					# Copyright (c) 2007-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
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										47
									
								
								init-guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								init-guide.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					# OpenRC init process guide
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OpenRC now includes an init process which can be used on Linux systems
 | 
				
			||||||
 | 
					in place of sysvinit.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## migrating a live system to openrc-init
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Configuring a live system to use this init process is very
 | 
				
			||||||
 | 
					straight-forward, but the steps must be completed in this order.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* have your boot loader add "init=/sbin/openrc-init" to the kernel command line
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The details of how to do this will vary from distro to distro, so they are
 | 
				
			||||||
 | 
					out of scope for this document.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Install gettys into the runlevels where you need them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you are using the provided /etc/init.d/agetty script,, you should
 | 
				
			||||||
 | 
					first create symlinks in /etc/init.d to it for the ports where you
 | 
				
			||||||
 | 
					want gettys to run, e.g. the following will work if you want gettys on
 | 
				
			||||||
 | 
					tty1-tty6.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					# cd /etc/init.d
 | 
				
			||||||
 | 
					# for x in tty1 tty2 tty3 tty4 tty5 tty6; do
 | 
				
			||||||
 | 
					  ln -snf agetty agetty.$x
 | 
				
			||||||
 | 
					  done
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Once this is done, use ```rc-update``` as normal to install the agetty
 | 
				
			||||||
 | 
					services in the appropriate runlevels.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* Reboot your system.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					At this point you are running under openrc-init, and you should use
 | 
				
			||||||
 | 
					openrc-shutdown to handle shutting down, powering off, rebooting etc.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## optional sysvinit compatibility
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you build and install OpenRC with MKSYSVINIT=yes, you will build and install
 | 
				
			||||||
 | 
					wrappers that make openrc-init compatible with sysvinit -- you will have
 | 
				
			||||||
 | 
					commands like "halt" "shutdown" "reboot" and "poweroff".
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you want this functionality on a live system, you should first
 | 
				
			||||||
 | 
					migrate the system to openrc-init, remove sysvinit, then rebuild and
 | 
				
			||||||
 | 
					install this package with MKSYSVINIT=yes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,5 +1,6 @@
 | 
				
			|||||||
agetty
 | 
					agetty
 | 
				
			||||||
binfmt
 | 
					binfmt
 | 
				
			||||||
 | 
					cgroups
 | 
				
			||||||
modules-load
 | 
					modules-load
 | 
				
			||||||
bootmisc
 | 
					bootmisc
 | 
				
			||||||
fsck
 | 
					fsck
 | 
				
			||||||
@@ -40,6 +41,8 @@ rc-enabled
 | 
				
			|||||||
rpcbind
 | 
					rpcbind
 | 
				
			||||||
runsvdir
 | 
					runsvdir
 | 
				
			||||||
savecore
 | 
					savecore
 | 
				
			||||||
 | 
					save-keymaps
 | 
				
			||||||
 | 
					save-termencoding
 | 
				
			||||||
swap-blk
 | 
					swap-blk
 | 
				
			||||||
swclock
 | 
					swclock
 | 
				
			||||||
syslogd
 | 
					syslogd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,11 +19,12 @@ 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
 | 
							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 cgroups.in dmesg.in hwclock.in \
 | 
				
			||||||
	keymaps.in killprocs.in modules.in modules-load.in mount-ro.in mtab.in \
 | 
						consolefont.in keymaps.in killprocs.in modules.in \
 | 
				
			||||||
	numlock.in procfs.in net-online.in sysfs.in termencoding.in
 | 
						mount-ro.in mtab.in numlock.in procfs.in net-online.in save-keymaps.in \
 | 
				
			||||||
 | 
						save-termencoding.in sysfs.in termencoding.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 \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,15 +12,16 @@
 | 
				
			|||||||
description="start agetty on a terminal line"
 | 
					description="start agetty on a terminal line"
 | 
				
			||||||
supervisor=supervise-daemon
 | 
					supervisor=supervise-daemon
 | 
				
			||||||
port="${RC_SVCNAME#*.}"
 | 
					port="${RC_SVCNAME#*.}"
 | 
				
			||||||
 | 
					respawn_period="${respawn_period:-60}"
 | 
				
			||||||
term_type="${term_type:-linux}"
 | 
					term_type="${term_type:-linux}"
 | 
				
			||||||
command=/sbin/agetty
 | 
					command=/sbin/agetty
 | 
				
			||||||
command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
 | 
					command_args_foreground="${agetty_options} ${port} ${baud} ${term_type}"
 | 
				
			||||||
pidfile="/run/${RC_SVCNAME}.pid"
 | 
					pidfile="/run/${RC_SVCNAME}.pid"
 | 
				
			||||||
export EINFO_QUIET="${quiet:-yes}"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
depend() {
 | 
					depend() {
 | 
				
			||||||
	after local
 | 
						after local
 | 
				
			||||||
	keyword -prefix
 | 
						keyword -prefix
 | 
				
			||||||
 | 
						provide getty
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start_pre() {
 | 
					start_pre() {
 | 
				
			||||||
@@ -29,5 +30,12 @@ start_pre() {
 | 
				
			|||||||
		eerror "symbolic links to it for the ports you want to start"
 | 
							eerror "symbolic links to it for the ports you want to start"
 | 
				
			||||||
		eerror "agetty on and add those to the appropriate runlevels."
 | 
							eerror "agetty on and add those to the appropriate runlevels."
 | 
				
			||||||
		return 1
 | 
							return 1
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							export EINFO_QUIET="${quiet:-yes}"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stop_pre()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						export EINFO_QUIET="${quiet:-yes}"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -113,8 +113,10 @@ migrate_to_run()
 | 
				
			|||||||
 		rm $src
 | 
					 		rm $src
 | 
				
			||||||
 	elif [ ! -L $src -a -d $src ]; then
 | 
					 	elif [ ! -L $src -a -d $src ]; then
 | 
				
			||||||
 		ebegin "Migrating $src to $dst"
 | 
					 		ebegin "Migrating $src to $dst"
 | 
				
			||||||
 | 
					 		if ! rmdir $src 2>/dev/null; then
 | 
				
			||||||
 			cp -a $src/* $dst/
 | 
					 			cp -a $src/* $dst/
 | 
				
			||||||
 			rm -rf $src
 | 
					 			rm -rf $src
 | 
				
			||||||
 | 
					 		fi
 | 
				
			||||||
 		eend $?
 | 
					 		eend $?
 | 
				
			||||||
 	fi
 | 
					 	fi
 | 
				
			||||||
 	# If $src doesn't exist at all, just run this
 | 
					 	# If $src doesn't exist at all, just run this
 | 
				
			||||||
@@ -241,7 +243,13 @@ stop()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	# Write a halt record if we're shutting down
 | 
						# Write a halt record if we're shutting down
 | 
				
			||||||
	if [ "$RC_RUNLEVEL" = shutdown ]; then
 | 
						if [ "$RC_RUNLEVEL" = shutdown ]; then
 | 
				
			||||||
		[ "$RC_UNAME" = Linux ] && openrc-shutdown -w
 | 
							if [ "$RC_UNAME" = Linux ]; then
 | 
				
			||||||
 | 
								if [ -x /sbin/halt ]; then
 | 
				
			||||||
 | 
									halt -w
 | 
				
			||||||
 | 
								else
 | 
				
			||||||
 | 
									openrc-shutdown -w
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
		if [ "$RC_SYS" = OPENVZ ]; then
 | 
							if [ "$RC_SYS" = OPENVZ ]; then
 | 
				
			||||||
			yesno $RC_REBOOT && printf "" >/reboot
 | 
								yesno $RC_REBOOT && printf "" >/reboot
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										157
									
								
								init.d/cgroups.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										157
									
								
								init.d/cgroups.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,157 @@
 | 
				
			|||||||
 | 
					#!@SBINDIR@/openrc-run
 | 
				
			||||||
 | 
					# Copyright (c) 2017 The OpenRC Authors.
 | 
				
			||||||
 | 
					# See the Authors file at the top-level directory of this distribution and
 | 
				
			||||||
 | 
					# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description="Mount the control groups."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroup_opts=nodev,noexec,nosuid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depend()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						keyword -docker -prefix -systemd-nspawn -vserver
 | 
				
			||||||
 | 
						after sysfs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroup1_base()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						grep -qw cgroup /proc/filesystems || return 0
 | 
				
			||||||
 | 
						if ! mountinfo -q /sys/fs/cgroup; then
 | 
				
			||||||
 | 
							ebegin "Mounting cgroup filesystem"
 | 
				
			||||||
 | 
							local opts="${cgroup_opts},mode=755,size=${rc_cgroupsize:-10m}"
 | 
				
			||||||
 | 
							mount -n -t tmpfs -o "${opts}" cgroup_root /sys/fs/cgroup
 | 
				
			||||||
 | 
							eend $?
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if ! mountinfo -q /sys/fs/cgroup/openrc; then
 | 
				
			||||||
 | 
							local agent="${RC_LIBEXECDIR}/sh/cgroup-release-agent.sh"
 | 
				
			||||||
 | 
							mkdir /sys/fs/cgroup/openrc
 | 
				
			||||||
 | 
							mount -n -t cgroup \
 | 
				
			||||||
 | 
								-o none,${cgroup_opts},name=openrc,release_agent="$agent" \
 | 
				
			||||||
 | 
								openrc /sys/fs/cgroup/openrc
 | 
				
			||||||
 | 
							printf 1 > /sys/fs/cgroup/openrc/notify_on_release
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroup1_controllers()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						yesno "${rc_controller_cgroups:-YES}" && [ -e /proc/cgroups ]  &&
 | 
				
			||||||
 | 
						grep -qw cgroup /proc/filesystems || return 0
 | 
				
			||||||
 | 
						while read -r name _ _ enabled _; do
 | 
				
			||||||
 | 
							case "${enabled}" in
 | 
				
			||||||
 | 
								1)	mountinfo -q "/sys/fs/cgroup/${name}" && continue
 | 
				
			||||||
 | 
									local x
 | 
				
			||||||
 | 
									for x in $rc_cgroup_controllers; do
 | 
				
			||||||
 | 
									[ "${name}" = "blkio" ] && [ "${x}" = "io" ] &&
 | 
				
			||||||
 | 
										continue 2
 | 
				
			||||||
 | 
									[ "${name}" = "${x}" ] &&
 | 
				
			||||||
 | 
									continue 2
 | 
				
			||||||
 | 
									done
 | 
				
			||||||
 | 
									mkdir "/sys/fs/cgroup/${name}"
 | 
				
			||||||
 | 
									mount -n -t cgroup -o "${cgroup_opts},${name}" \
 | 
				
			||||||
 | 
										"${name}" "/sys/fs/cgroup/${name}"
 | 
				
			||||||
 | 
									yesno "${rc_cgroup_memory_use_hierarchy:-no}" &&
 | 
				
			||||||
 | 
										[ "${name}" = memory ] &&
 | 
				
			||||||
 | 
										echo 1 > /sys/fs/cgroup/memory/memory.use_hierarchy
 | 
				
			||||||
 | 
									;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
						done < /proc/cgroups
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroup2_base()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						grep -qw cgroup2 /proc/filesystems || return 0
 | 
				
			||||||
 | 
						local base
 | 
				
			||||||
 | 
						base="$(cgroup2_find_path)"
 | 
				
			||||||
 | 
						mkdir -p "${base}"
 | 
				
			||||||
 | 
						mount -t cgroup2 none -o "${cgroup_opts},nsdelegate" "${base}" 2> /dev/null ||
 | 
				
			||||||
 | 
							mount -t cgroup2 none -o "${cgroup_opts}" "${base}"
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroup2_controllers()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						grep -qw cgroup2 /proc/filesystems || return 0
 | 
				
			||||||
 | 
						local active cgroup_path x y
 | 
				
			||||||
 | 
						cgroup_path="$(cgroup2_find_path)"
 | 
				
			||||||
 | 
						[ -z "${cgroup_path}" ] && return 0
 | 
				
			||||||
 | 
						[ ! -e "${cgroup_path}/cgroup.controllers" ] && return 0
 | 
				
			||||||
 | 
						[ ! -e "${cgroup_path}/cgroup.subtree_control" ]&& return 0
 | 
				
			||||||
 | 
						read -r active < "${cgroup_path}/cgroup.controllers"
 | 
				
			||||||
 | 
						for x in ${active}; do
 | 
				
			||||||
 | 
						case "$rc_cgroup_mode" in
 | 
				
			||||||
 | 
							unified)
 | 
				
			||||||
 | 
								echo "+${x}"  > "${cgroup_path}/cgroup.subtree_control"
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							hybrid)
 | 
				
			||||||
 | 
								for y in ${rc_cgroup_controllers}; do
 | 
				
			||||||
 | 
									if [ "$x" = "$y" ]; then
 | 
				
			||||||
 | 
										echo "+${x}"  > "${cgroup_path}/cgroup.subtree_control"
 | 
				
			||||||
 | 
									fi
 | 
				
			||||||
 | 
								done
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroups_hybrid()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						cgroup1_base
 | 
				
			||||||
 | 
						cgroup2_base
 | 
				
			||||||
 | 
						cgroup2_controllers
 | 
				
			||||||
 | 
						cgroup1_controllers
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroups_legacy()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						cgroup1_base
 | 
				
			||||||
 | 
						cgroup1_controllers
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cgroups_unified()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						cgroup2_base
 | 
				
			||||||
 | 
						cgroup2_controllers
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mount_cgroups()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						case "${rc_cgroup_mode:-hybrid}" in
 | 
				
			||||||
 | 
						hybrid) cgroups_hybrid ;;
 | 
				
			||||||
 | 
						legacy) cgroups_legacy ;;
 | 
				
			||||||
 | 
						unified) cgroups_unified ;;
 | 
				
			||||||
 | 
						esac
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					restorecon_cgroups()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if [ -x /sbin/restorecon ]; then
 | 
				
			||||||
 | 
							ebegin "Restoring SELinux contexts in /sys/fs/cgroup"
 | 
				
			||||||
 | 
							restorecon -rF /sys/fs/cgroup >/dev/null 2>&1
 | 
				
			||||||
 | 
							eend $?
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# set up kernel support for cgroups
 | 
				
			||||||
 | 
						if [ -d /sys/fs/cgroup ]; then
 | 
				
			||||||
 | 
							mount_cgroups
 | 
				
			||||||
 | 
							restorecon_cgroups
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -13,7 +13,7 @@ description="Sets a font for the consoles."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	need localmount termencoding
 | 
						need termencoding
 | 
				
			||||||
	after hotplug bootmisc modules
 | 
						after hotplug bootmisc modules
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,14 +15,17 @@ depend()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	provide dev-mount
 | 
						provide dev-mount
 | 
				
			||||||
	before dev
 | 
						before dev
 | 
				
			||||||
	keyword -docker -lxc -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mount_dev()
 | 
					mount_dev()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local action=--mount devfstype msg=Mounting
 | 
						local action conf_d_dir devfstype msg mountopts
 | 
				
			||||||
 | 
						action=--mount
 | 
				
			||||||
 | 
						conf_d_dir="${RC_SERVICE%/*/*}/conf.d"
 | 
				
			||||||
 | 
						msg=Mounting
 | 
				
			||||||
	# Some devices require exec, Bug #92921
 | 
						# Some devices require exec, Bug #92921
 | 
				
			||||||
	local mountopts="exec,nosuid,mode=0755"
 | 
						mountopts="exec,nosuid,mode=0755"
 | 
				
			||||||
	if yesno ${skip_mount_dev:-no} ; then
 | 
						if yesno ${skip_mount_dev:-no} ; then
 | 
				
			||||||
		einfo "/dev will not be mounted due to user request"
 | 
							einfo "/dev will not be mounted due to user request"
 | 
				
			||||||
		return 0
 | 
							return 0
 | 
				
			||||||
@@ -33,7 +36,7 @@ mount_dev()
 | 
				
			|||||||
		msg=Remounting
 | 
							msg=Remounting
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	if fstabinfo -q /dev; then
 | 
						if fstabinfo -q /dev; then
 | 
				
			||||||
		ebegin "$msg /dev according to @SYSCONFDIR@/fstab"
 | 
							ebegin "$msg /dev according to fstab"
 | 
				
			||||||
		fstabinfo -q $action /dev
 | 
							fstabinfo -q $action /dev
 | 
				
			||||||
		eend $?
 | 
							eend $?
 | 
				
			||||||
		return 0
 | 
							return 0
 | 
				
			||||||
@@ -54,7 +57,7 @@ mount_dev()
 | 
				
			|||||||
		ewarn "is no entry for /dev in fstab."
 | 
							ewarn "is no entry for /dev in fstab."
 | 
				
			||||||
		ewarn "This means /dev will not be mounted."
 | 
							ewarn "This means /dev will not be mounted."
 | 
				
			||||||
		ewarn "To avoid this message, set CONFIG_DEVTMPFS or CONFIG_TMPFS to y"
 | 
							ewarn "To avoid this message, set CONFIG_DEVTMPFS or CONFIG_TMPFS to y"
 | 
				
			||||||
		ewarn "in your kernel configuration or see @SYSCONFDIR@/conf.d/devfs"
 | 
							ewarn "in your kernel configuration or see ${conf_d_dir}/${RC_SVCNAME}"
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -63,6 +66,7 @@ seed_dev()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	# Seed /dev with some things that we know we need
 | 
						# Seed /dev with some things that we know we need
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if [ "${RC_SYS}" != LXC ]; then
 | 
				
			||||||
		# creating /dev/console, /dev/tty and /dev/tty1 to be able to write
 | 
							# creating /dev/console, /dev/tty and /dev/tty1 to be able to write
 | 
				
			||||||
		# to $CONSOLE with/without bootsplash before udevd creates it
 | 
							# to $CONSOLE with/without bootsplash before udevd creates it
 | 
				
			||||||
		[ -c /dev/console ] || mknod -m 600 /dev/console c 5 1
 | 
							[ -c /dev/console ] || mknod -m 600 /dev/console c 5 1
 | 
				
			||||||
@@ -75,6 +79,7 @@ seed_dev()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		# so udev can add its start-message to dmesg
 | 
							# so udev can add its start-message to dmesg
 | 
				
			||||||
		[ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11
 | 
							[ -c /dev/kmsg ] || mknod -m 660 /dev/kmsg c 1 11
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# extra symbolic links not provided by default
 | 
						# extra symbolic links not provided by default
 | 
				
			||||||
	[ -e /dev/fd ] || ln -snf /proc/self/fd /dev/fd
 | 
						[ -e /dev/fd ] || ln -snf /proc/self/fd /dev/fd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,9 +20,9 @@ depend()
 | 
				
			|||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local h source x
 | 
						local h source x
 | 
				
			||||||
	if [ -s @SYSCONFDIR@/hostname ] && [ -r @SYSCONFDIR@/hostname ]; then
 | 
						if [ -s /etc/hostname ] && [ -r /etc/hostname ]; then
 | 
				
			||||||
		read h x <@SYSCONFDIR@/hostname
 | 
							read h x </etc/hostname
 | 
				
			||||||
		source="from @SYSCONFDIR@/hostname"
 | 
							source="from /etc/hostname"
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		# HOSTNAME variable used to be defined in caps in conf.d/hostname.
 | 
							# HOSTNAME variable used to be defined in caps in conf.d/hostname.
 | 
				
			||||||
		# It is also a magic variable in bash.
 | 
							# It is also a magic variable in bash.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -105,7 +105,7 @@ start()
 | 
				
			|||||||
			done
 | 
								done
 | 
				
			||||||
			[ -n "$modname" ] &&
 | 
								[ -n "$modname" ] &&
 | 
				
			||||||
				ewarn "The $modname module needs to be configured in" \
 | 
									ewarn "The $modname module needs to be configured in" \
 | 
				
			||||||
					"@SYSCONFDIR@/conf.d/modules or built in."
 | 
										"${RC_SERVICE%/*/*}/conf.d/modules or built in."
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,8 +13,8 @@ description="Applies a keymap for the consoles."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	need localmount termencoding
 | 
						need termencoding
 | 
				
			||||||
	after bootmisc clock
 | 
						after devfs
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -68,10 +68,5 @@ start()
 | 
				
			|||||||
		echo "altgr keycode 18 = U+20AC" | loadkeys -q -
 | 
							echo "altgr keycode 18 = U+20AC" | loadkeys -q -
 | 
				
			||||||
		eend $?
 | 
							eend $?
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
	# Save the keymapping for use immediately at boot
 | 
					 | 
				
			||||||
	if checkpath -W "$RC_LIBEXECDIR"; then
 | 
					 | 
				
			||||||
		mkdir -p "$RC_LIBEXECDIR"/console
 | 
					 | 
				
			||||||
		dumpkeys >"$RC_LIBEXECDIR"/console/keymap
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,10 @@
 | 
				
			|||||||
# This file may not be copied, modified, propagated, or distributed
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
# except according to the terms contained in the LICENSE file.
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
description="Executes user programs in @SYSCONFDIR@/local.d"
 | 
					conf_d_dir="${RC_SERVICE%/*/*}/conf.d"
 | 
				
			||||||
 | 
					local_d_dir="${RC_SERVICE%/*/*}/local.d"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description="Executes user programs in ${local_d_dir}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -19,12 +22,12 @@ depend()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ebegin "Starting local"
 | 
						local file has_errors redirect retval
 | 
				
			||||||
 | 
						has_errors=0
 | 
				
			||||||
	local file has_errors=0 redirect retval
 | 
					 | 
				
			||||||
	yesno $rc_verbose || redirect='> /dev/null 2>&1'
 | 
						yesno $rc_verbose || redirect='> /dev/null 2>&1'
 | 
				
			||||||
 | 
						ebegin "Starting local"
 | 
				
			||||||
	eindent
 | 
						eindent
 | 
				
			||||||
	for file in @SYSCONFDIR@/local.d/*.start; do
 | 
						for file in "${local_d_dir}"/*.start; do
 | 
				
			||||||
		if [ -x "${file}" ]; then
 | 
							if [ -x "${file}" ]; then
 | 
				
			||||||
			vebegin "Executing \"${file}\""
 | 
								vebegin "Executing \"${file}\""
 | 
				
			||||||
			eval "${file}" $redirect
 | 
								eval "${file}" $redirect
 | 
				
			||||||
@@ -38,32 +41,32 @@ start()
 | 
				
			|||||||
	eoutdent
 | 
						eoutdent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if command -v local_start >/dev/null 2>&1; then
 | 
						if command -v local_start >/dev/null 2>&1; then
 | 
				
			||||||
		ewarn "\"@SYSCONFDIR@/conf.d/local\" should be removed."
 | 
							ewarn "\"${conf_d_dir}/local\" should be removed."
 | 
				
			||||||
		ewarn "Please move the code from the local_start function"
 | 
							ewarn "Please move the code from the local_start function"
 | 
				
			||||||
		ewarn "to executable scripts with an .start extension"
 | 
							ewarn "to executable scripts with an .start extension"
 | 
				
			||||||
		ewarn "in \"@SYSCONFDIR@/local.d\""
 | 
							ewarn "in \"${local_d_dir}\""
 | 
				
			||||||
		local_start
 | 
							local_start
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eend ${has_errors}
 | 
						eend ${has_errors}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# We have to end with a zero exit code, because a failed execution
 | 
						# We have to end with a zero exit code, because a failed execution
 | 
				
			||||||
	# of an executable @SYSCONFDIR@/local.d/*.start file shouldn't result in
 | 
						# of an executable ${local_d_dir}/*.start file shouldn't result in
 | 
				
			||||||
	# marking the local service as failed. Otherwise we are unable to
 | 
						# marking the local service as failed. Otherwise we are unable to
 | 
				
			||||||
	# execute any executable @SYSCONFDIR@/local.d/*.stop file, because a failed
 | 
						# execute any executable ${local_d_dir}/*.stop file, because a failed
 | 
				
			||||||
	# marked service cannot be stopped (and the stop function would
 | 
						# marked service cannot be stopped (and the stop function would
 | 
				
			||||||
	# actually call the executable @SYSCONFDIR@/local.d/*.stop file(s)).
 | 
						# actually call the executable ${local_d_dir}/*.stop file(s)).
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
stop()
 | 
					stop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	ebegin "Stopping local"
 | 
						local file has_errors redirect retval
 | 
				
			||||||
 | 
						has_errors=0
 | 
				
			||||||
	local file has_errors=0 redirect retval
 | 
					 | 
				
			||||||
	yesno $rc_verbose || redirect='> /dev/null 2>&1'
 | 
						yesno $rc_verbose || redirect='> /dev/null 2>&1'
 | 
				
			||||||
 | 
						ebegin "Stopping local"
 | 
				
			||||||
	eindent
 | 
						eindent
 | 
				
			||||||
	for file in @SYSCONFDIR@/local.d/*.stop; do
 | 
						for file in "${local_d_dir}"/*.stop; do
 | 
				
			||||||
		if [ -x "${file}" ]; then
 | 
							if [ -x "${file}" ]; then
 | 
				
			||||||
			vebegin "Executing \"${file}\""
 | 
								vebegin "Executing \"${file}\""
 | 
				
			||||||
			eval "${file}" $redirect
 | 
								eval "${file}" $redirect
 | 
				
			||||||
@@ -77,16 +80,16 @@ stop()
 | 
				
			|||||||
	eoutdent
 | 
						eoutdent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if command -v local_stop >/dev/null 2>&1; then
 | 
						if command -v local_stop >/dev/null 2>&1; then
 | 
				
			||||||
		ewarn "\"@SYSCONFDIR@/conf.d/local\" should be removed."
 | 
							ewarn "\"${conf_d_dir}/local\" should be removed."
 | 
				
			||||||
		ewarn "Please move the code from the local_stop function"
 | 
							ewarn "Please move the code from the local_stop function"
 | 
				
			||||||
		ewarn "to executable scripts with an .stop extension"
 | 
							ewarn "to executable scripts with an .stop extension"
 | 
				
			||||||
		ewarn "in \"@SYSCONFDIR@/local.d\""
 | 
							ewarn "in \"${local_d_dir}\""
 | 
				
			||||||
		local_stop
 | 
							local_stop
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	eend ${has_errors}
 | 
						eend ${has_errors}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	# An executable @SYSCONFDIR@/local.d/*.stop file which failed with a
 | 
						# An executable ${local_d_dir}/*.stop file which failed with a
 | 
				
			||||||
	# non-zero exit status is not a reason to mark this service
 | 
						# non-zero exit status is not a reason to mark this service
 | 
				
			||||||
	# as failed, therefore we have to end with a zero exit code.
 | 
						# as failed, therefore we have to end with a zero exit code.
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,9 +13,9 @@ description="Mounts disks and swap according to /etc/fstab."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	need fsck
 | 
						need fsck root
 | 
				
			||||||
	use lvm modules mtab root
 | 
						use lvm modules
 | 
				
			||||||
	after clock lvm modules root
 | 
						after clock lvm modules
 | 
				
			||||||
	keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -jail -lxc -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										100
									
								
								init.d/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								init.d/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,100 @@
 | 
				
			|||||||
 | 
					init_d_dir = get_option('sysconfdir') / 'init.d'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_common =  [
 | 
				
			||||||
 | 
					  'bootmisc.in',
 | 
				
			||||||
 | 
					  'fsck.in',
 | 
				
			||||||
 | 
					  'hostname.in',
 | 
				
			||||||
 | 
					  'local.in',
 | 
				
			||||||
 | 
					  'localmount.in',
 | 
				
			||||||
 | 
					  'loopback.in',
 | 
				
			||||||
 | 
					  'netmount.in',
 | 
				
			||||||
 | 
					  'osclock.in',
 | 
				
			||||||
 | 
					  'root.in',
 | 
				
			||||||
 | 
					  'savecache.in',
 | 
				
			||||||
 | 
					  'swap.in',
 | 
				
			||||||
 | 
					  'swclock.in',
 | 
				
			||||||
 | 
					  'sysctl.in',
 | 
				
			||||||
 | 
					  'runsvdir.in',
 | 
				
			||||||
 | 
					  'urandom.in',
 | 
				
			||||||
 | 
					  's6-svscan.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if get_option('newnet')
 | 
				
			||||||
 | 
					  init_common = init_common + [
 | 
				
			||||||
 | 
					    'network.in',
 | 
				
			||||||
 | 
					    'staticroute.in',
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_Linux =  [
 | 
				
			||||||
 | 
					  'agetty.in',
 | 
				
			||||||
 | 
					  'binfmt.in',
 | 
				
			||||||
 | 
					  'cgroups.in',
 | 
				
			||||||
 | 
					  'consolefont.in',
 | 
				
			||||||
 | 
					  'devfs.in',
 | 
				
			||||||
 | 
					  'dmesg.in',
 | 
				
			||||||
 | 
					  'hwclock.in',
 | 
				
			||||||
 | 
					  'keymaps.in',
 | 
				
			||||||
 | 
					  'killprocs.in',
 | 
				
			||||||
 | 
					  'modules.in',
 | 
				
			||||||
 | 
					  'mount-ro.in',
 | 
				
			||||||
 | 
					  'mtab.in',
 | 
				
			||||||
 | 
					  'numlock.in',
 | 
				
			||||||
 | 
					  'procfs.in',
 | 
				
			||||||
 | 
					  'net-online.in',
 | 
				
			||||||
 | 
					  'save-keymaps.in',
 | 
				
			||||||
 | 
					  'save-termencoding.in',
 | 
				
			||||||
 | 
					  'sysfs.in',
 | 
				
			||||||
 | 
					  'termencoding.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_BSD =  [
 | 
				
			||||||
 | 
					  'hostid.in',
 | 
				
			||||||
 | 
					  'moused.in',
 | 
				
			||||||
 | 
					  'newsyslog.in',
 | 
				
			||||||
 | 
					  'pf.in',
 | 
				
			||||||
 | 
					  'rarpd.in',
 | 
				
			||||||
 | 
					  'rc-enabled.in',
 | 
				
			||||||
 | 
					  'rpcbind.in',
 | 
				
			||||||
 | 
					  'savecore.in',
 | 
				
			||||||
 | 
					  'syslogd.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_FreeBSD =  [
 | 
				
			||||||
 | 
					  'adjkerntz.in',
 | 
				
			||||||
 | 
					  'devd .in',
 | 
				
			||||||
 | 
					  'dumpon.in',
 | 
				
			||||||
 | 
					  'encswap.in',
 | 
				
			||||||
 | 
					  'ipfw.in',
 | 
				
			||||||
 | 
					  'modules.in',
 | 
				
			||||||
 | 
					  'mixer.in',
 | 
				
			||||||
 | 
					  'nscd.in',
 | 
				
			||||||
 | 
					  'powerd.in',
 | 
				
			||||||
 | 
					  'syscons.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_NetBSD =  [
 | 
				
			||||||
 | 
					  'devdb.in',
 | 
				
			||||||
 | 
					  'swap-blk.in',
 | 
				
			||||||
 | 
					  'ttys.in',
 | 
				
			||||||
 | 
					  'wscons.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_data = init_common
 | 
				
			||||||
 | 
					if os == 'Dragonfly'
 | 
				
			||||||
 | 
					  init_data = init_data + init_BSD
 | 
				
			||||||
 | 
					elif os == 'FreeBSD' or os == 'Gnu-kFreeBSD'
 | 
				
			||||||
 | 
					  init_data = init_data + init_BSD + init_FreeBSD
 | 
				
			||||||
 | 
					elif os == 'Linux'
 | 
				
			||||||
 | 
					  init_data = init_data + init_Linux
 | 
				
			||||||
 | 
					elif os == 'NetBSD'
 | 
				
			||||||
 | 
					  init_data = init_data + init_BSD + init_NetBSD
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach init_d_file : init_data
 | 
				
			||||||
 | 
					  configure_file(input : init_d_file,
 | 
				
			||||||
 | 
					    output : '@BASENAME@',
 | 
				
			||||||
 | 
					    configuration : init_d_conf_data,
 | 
				
			||||||
 | 
					    install_dir: init_d_dir,
 | 
				
			||||||
 | 
					    install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					endforeach
 | 
				
			||||||
@@ -1,72 +0,0 @@
 | 
				
			|||||||
#!@SBINDIR@/openrc-run
 | 
					 | 
				
			||||||
# Copyright (c) 2016 The OpenRC Authors.
 | 
					 | 
				
			||||||
# See the Authors file at the top-level directory of this distribution and
 | 
					 | 
				
			||||||
# https://github.com/OpenRC/openrc/blob/master/AUTHORS
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# This file is part of OpenRC. It is subject to the license terms in
 | 
					 | 
				
			||||||
# the LICENSE file found in the top-level directory of this
 | 
					 | 
				
			||||||
# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
					 | 
				
			||||||
# This file may not be copied, modified, propagated, or distributed
 | 
					 | 
				
			||||||
# except according to the terms contained in the LICENSE file.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
description="Loads a list of modules from systemd-compatible locations."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
depend()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
find_modfiles()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
 | 
					 | 
				
			||||||
	local basenames files fn x y
 | 
					 | 
				
			||||||
	for x in $dirs; do
 | 
					 | 
				
			||||||
		[ ! -d $x ] && continue
 | 
					 | 
				
			||||||
		for y in $x/*.conf; do
 | 
					 | 
				
			||||||
			[ -f $y ] && basenames="${basenames}\n${y##*/}"
 | 
					 | 
				
			||||||
		done
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	basenames=$(printf "$basenames" | sort -u)
 | 
					 | 
				
			||||||
	for x in $basenames; do
 | 
					 | 
				
			||||||
		for y in $dirs; do
 | 
					 | 
				
			||||||
			[ -r $y/$x ] &&
 | 
					 | 
				
			||||||
				fn=$y/$x
 | 
					 | 
				
			||||||
		done
 | 
					 | 
				
			||||||
		files="$files $fn"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	echo $files
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
load_modules()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local file m modules rc x
 | 
					 | 
				
			||||||
	file=$1
 | 
					 | 
				
			||||||
	[ -z "$file" ] && return 0
 | 
					 | 
				
			||||||
	while read m x; do
 | 
					 | 
				
			||||||
		case $m in
 | 
					 | 
				
			||||||
			\;*) continue ;;
 | 
					 | 
				
			||||||
			\#*) continue ;;
 | 
					 | 
				
			||||||
			*) modules="$modules $m"
 | 
					 | 
				
			||||||
			;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
	done < $file
 | 
					 | 
				
			||||||
	for x in $modules; do
 | 
					 | 
				
			||||||
		ebegin "Loading module $x"
 | 
					 | 
				
			||||||
		case "$RC_UNAME" in
 | 
					 | 
				
			||||||
			FreeBSD) kldload "$x"; rc=$? ;;
 | 
					 | 
				
			||||||
			Linux) modprobe --use-blacklist -q "$x"; rc=$? ;;
 | 
					 | 
				
			||||||
			*) ;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
		eend $rc "Failed to load $x"
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
start()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local x
 | 
					 | 
				
			||||||
	files=$(find_modfiles)
 | 
					 | 
				
			||||||
	for x in $files; do
 | 
					 | 
				
			||||||
		load_modules $x
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -14,10 +14,66 @@ description="Loads a user defined list of kernel modules."
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	use isapnp
 | 
						use isapnp
 | 
				
			||||||
	want modules-load
 | 
						provide modules-load
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					find_modfiles()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local dirs="/usr/lib/modules-load.d /run/modules-load.d /etc/modules-load.d"
 | 
				
			||||||
 | 
						local basenames files fn x y
 | 
				
			||||||
 | 
						for x in $dirs; do
 | 
				
			||||||
 | 
							[ ! -d $x ] && continue
 | 
				
			||||||
 | 
							for y in $x/*.conf; do
 | 
				
			||||||
 | 
								[ -f $y ] && basenames="${basenames}\n${y##*/}"
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						basenames=$(printf "$basenames" | sort -u)
 | 
				
			||||||
 | 
						for x in $basenames; do
 | 
				
			||||||
 | 
							for y in $dirs; do
 | 
				
			||||||
 | 
								[ -r $y/$x ] &&
 | 
				
			||||||
 | 
									fn=$y/$x
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
 | 
							files="$files $fn"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						echo $files
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load_modules()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local file m _modules rc x
 | 
				
			||||||
 | 
						file=$1
 | 
				
			||||||
 | 
						[ -z "$file" ] && return 0
 | 
				
			||||||
 | 
						while read m x; do
 | 
				
			||||||
 | 
							case $m in
 | 
				
			||||||
 | 
								\;*) continue ;;
 | 
				
			||||||
 | 
								\#*) continue ;;
 | 
				
			||||||
 | 
								*) _modules="$_modules $m"
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
						done < $file
 | 
				
			||||||
 | 
						for x in $_modules; do
 | 
				
			||||||
 | 
							ebegin "Loading module $x"
 | 
				
			||||||
 | 
							case "$RC_UNAME" in
 | 
				
			||||||
 | 
								FreeBSD) kldload "$x"; rc=$? ;;
 | 
				
			||||||
 | 
								Linux) modprobe --first-time -q --use-blacklist "$x"; rc=$? ;;
 | 
				
			||||||
 | 
								*) ;;
 | 
				
			||||||
 | 
							esac
 | 
				
			||||||
 | 
							eend $rc "Failed to load $x"
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					modules_load_d()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						local x
 | 
				
			||||||
 | 
						files=$(find_modfiles)
 | 
				
			||||||
 | 
						for x in $files; do
 | 
				
			||||||
 | 
							load_modules $x
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
FreeBSD_modules()
 | 
					FreeBSD_modules()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local cnt=0 x
 | 
						local cnt=0 x
 | 
				
			||||||
@@ -48,7 +104,7 @@ Linux_modules()
 | 
				
			|||||||
		x=${x%.*}
 | 
							x=${x%.*}
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local list= x= xx= y= args= mpargs= a=
 | 
						local list= x= xx= y= args=
 | 
				
			||||||
	for x in $kv_variant_list ; do
 | 
						for x in $kv_variant_list ; do
 | 
				
			||||||
		eval list=\$modules_$(shell_var "$x")
 | 
							eval list=\$modules_$(shell_var "$x")
 | 
				
			||||||
		[ -n "$list" ] && break
 | 
							[ -n "$list" ] && break
 | 
				
			||||||
@@ -57,24 +113,13 @@ Linux_modules()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	[ -n "$list" ] && ebegin "Loading kernel modules"
 | 
						[ -n "$list" ] && ebegin "Loading kernel modules"
 | 
				
			||||||
	for x in $list; do
 | 
						for x in $list; do
 | 
				
			||||||
		a=${x#*:}
 | 
					 | 
				
			||||||
		if [ "$a" = "$x" ]; then
 | 
					 | 
				
			||||||
			unset mpargs
 | 
					 | 
				
			||||||
		else
 | 
					 | 
				
			||||||
			x=${x%%:*}
 | 
					 | 
				
			||||||
			mpargs="-o $a"
 | 
					 | 
				
			||||||
		fi
 | 
					 | 
				
			||||||
		aa=$(shell_var "$a")
 | 
					 | 
				
			||||||
		xx=$(shell_var "$x")
 | 
							xx=$(shell_var "$x")
 | 
				
			||||||
		for y in $kv_variant_list ; do
 | 
							for y in $kv_variant_list ; do
 | 
				
			||||||
			eval args=\$module_${aa}_args_$(shell_var "$y")
 | 
					 | 
				
			||||||
			[ -n "${args}" ] && break
 | 
					 | 
				
			||||||
			eval args=\$module_${xx}_args_$(shell_var "$y")
 | 
								eval args=\$module_${xx}_args_$(shell_var "$y")
 | 
				
			||||||
			[ -n "${args}" ] && break
 | 
								[ -n "${args}" ] && break
 | 
				
			||||||
		done
 | 
							done
 | 
				
			||||||
		[ -z "$args" ] && eval args=\$module_${aa}_args
 | 
					 | 
				
			||||||
		[ -z "$args" ] && eval args=\$module_${xx}_args
 | 
							[ -z "$args" ] && eval args=\$module_${xx}_args
 | 
				
			||||||
		eval modprobe --use-blacklist --verbose "$mpargs" "$x" "$args"
 | 
							eval modprobe --first-time --use-blacklist --verbose "$x" "$args"
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	[ -n "$list" ] && eend
 | 
						[ -n "$list" ] && eend
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -82,7 +127,10 @@ Linux_modules()
 | 
				
			|||||||
start()
 | 
					start()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	case "$RC_UNAME" in
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
		FreeBSD|Linux) ${RC_UNAME}_modules ;;
 | 
							FreeBSD|Linux)
 | 
				
			||||||
 | 
								modules_load_d
 | 
				
			||||||
 | 
								${RC_UNAME}_modules
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
		*) ;;
 | 
							*) ;;
 | 
				
			||||||
	esac
 | 
						esac
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,7 @@ description="Update /etc/mtab to match what the kernel knows about"
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	after clock
 | 
						after clock
 | 
				
			||||||
 | 
						before localmount
 | 
				
			||||||
	need root
 | 
						need root
 | 
				
			||||||
	keyword -prefix -systemd-nspawn
 | 
						keyword -prefix -systemd-nspawn
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -30,6 +31,10 @@ start()
 | 
				
			|||||||
		einfo "Creating mtab symbolic link"
 | 
							einfo "Creating mtab symbolic link"
 | 
				
			||||||
		ln -snf /proc/self/mounts /etc/mtab
 | 
							ln -snf /proc/self/mounts /etc/mtab
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
 | 
							ewarn "The ${RC_SVCNAME} service will be removed in the future."
 | 
				
			||||||
 | 
							ewarn "Please change the mtab_is_file setting to no and run"
 | 
				
			||||||
 | 
							ewarn "# rc-service mtab restart"
 | 
				
			||||||
 | 
							ewarn "to create the mtab symbolic link."
 | 
				
			||||||
		[ -L /etc/mtab ] && ewarn "Removing /etc/mtab symbolic link"
 | 
							[ -L /etc/mtab ] && ewarn "Removing /etc/mtab symbolic link"
 | 
				
			||||||
		rm -f /etc/mtab
 | 
							rm -f /etc/mtab
 | 
				
			||||||
		einfo "Creating mtab file"
 | 
							einfo "Creating mtab file"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ description="Delays until the network is online or a specific timeout"
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	after modules
 | 
						after modules net
 | 
				
			||||||
	need sysfs
 | 
						need sysfs
 | 
				
			||||||
	provide network-online
 | 
						provide network-online
 | 
				
			||||||
	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
 | 
						keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -uml -vserver
 | 
				
			||||||
@@ -23,6 +23,7 @@ get_interfaces()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	local ifname iftype
 | 
						local ifname iftype
 | 
				
			||||||
	for ifname in /sys/class/net/*; do
 | 
						for ifname in /sys/class/net/*; do
 | 
				
			||||||
 | 
							[ -h "${ifname}" ] || continue
 | 
				
			||||||
		read iftype < ${ifname}/type
 | 
							read iftype < ${ifname}/type
 | 
				
			||||||
		[ "$iftype" = "1" ] && printf "%s " ${ifname##*/}
 | 
							[ "$iftype" = "1" ] && printf "%s " ${ifname##*/}
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
@@ -31,7 +32,7 @@ get_interfaces()
 | 
				
			|||||||
start ()
 | 
					start ()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	local carriers configured dev gateway ifcount infinite
 | 
						local carriers configured dev gateway ifcount infinite
 | 
				
			||||||
	local rc state x
 | 
						local carrier operstate rc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ebegin "Checking to see if the network is online"
 | 
						ebegin "Checking to see if the network is online"
 | 
				
			||||||
	rc=0
 | 
						rc=0
 | 
				
			||||||
@@ -44,10 +45,12 @@ start ()
 | 
				
			|||||||
	ifcount=0
 | 
						ifcount=0
 | 
				
			||||||
 	for dev in ${interfaces}; do
 | 
					 	for dev in ${interfaces}; do
 | 
				
			||||||
		: $((ifcount += 1))
 | 
							: $((ifcount += 1))
 | 
				
			||||||
		read x < /sys/class/net/$dev/carrier
 | 
							read carrier < /sys/class/net/$dev/carrier 2> /dev/null ||
 | 
				
			||||||
		[ $x -eq 1 ] && : $((carriers += 1))
 | 
								carrier=
 | 
				
			||||||
		read x < /sys/class/net/$dev/operstate
 | 
							[ "$carrier" = 1 ] && : $((carriers += 1))
 | 
				
			||||||
		[ "$x" = up ] && : $((configured += 1))
 | 
							read operstate < /sys/class/net/$dev/operstate 2> /dev/null ||
 | 
				
			||||||
 | 
								operstate=
 | 
				
			||||||
 | 
							[ "$operstate" = up ] && : $((configured += 1))
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	[ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break
 | 
						[ $configured -eq $ifcount ] && [ $carriers -ge 1 ] && break
 | 
				
			||||||
	sleep 1
 | 
						sleep 1
 | 
				
			||||||
@@ -61,8 +64,12 @@ start ()
 | 
				
			|||||||
 if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then
 | 
					 if [ $rc -eq 0 ] && yesno ${include_ping_test:-no}; then
 | 
				
			||||||
 	ping_test_host="${ping_test_host:-google.com}"
 | 
					 	ping_test_host="${ping_test_host:-google.com}"
 | 
				
			||||||
 	if [ -n "$ping_test_host" ]; then
 | 
					 	if [ -n "$ping_test_host" ]; then
 | 
				
			||||||
 | 
							while $infinite || [ $timeout -gt 0 ]; do
 | 
				
			||||||
			ping -c 1 $ping_test_host > /dev/null 2>&1
 | 
								ping -c 1 $ping_test_host > /dev/null 2>&1
 | 
				
			||||||
			rc=$?
 | 
								rc=$?
 | 
				
			||||||
 | 
								[ $rc -eq 0 ] && break
 | 
				
			||||||
 | 
								: $((timeout -= 1))
 | 
				
			||||||
 | 
							done
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 fi
 | 
					 fi
 | 
				
			||||||
 eend $rc "The network is offline"
 | 
					 eend $rc "The network is offline"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,7 +76,7 @@ tentative()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	case "$RC_UNAME" in
 | 
						case "$RC_UNAME" in
 | 
				
			||||||
	Linux)
 | 
						Linux)
 | 
				
			||||||
		[ -x /sbin/ip ] || [ -x /bin/ip ] || return 1
 | 
							[ -n "$(command -v ip)" ] || return 1
 | 
				
			||||||
		[ -n "$(ip -f inet6 addr show tentative)" ]
 | 
							[ -n "$(ip -f inet6 addr show tentative)" ]
 | 
				
			||||||
		;;
 | 
							;;
 | 
				
			||||||
	*)
 | 
						*)
 | 
				
			||||||
@@ -174,7 +174,7 @@ runip()
 | 
				
			|||||||
routeflush()
 | 
					routeflush()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if [ "$RC_UNAME" = Linux ]; then
 | 
						if [ "$RC_UNAME" = Linux ]; then
 | 
				
			||||||
		if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
 | 
							if [ -n "$(command -v ip)"  ]; then
 | 
				
			||||||
			ip route flush scope global
 | 
								ip route flush scope global
 | 
				
			||||||
			ip route delete default 2>/dev/null
 | 
								ip route delete default 2>/dev/null
 | 
				
			||||||
		else
 | 
							else
 | 
				
			||||||
@@ -346,7 +346,7 @@ stop()
 | 
				
			|||||||
		then
 | 
							then
 | 
				
			||||||
			veinfo "$int"
 | 
								veinfo "$int"
 | 
				
			||||||
			runargs /etc/ifdown."$int" "$downcmd"
 | 
								runargs /etc/ifdown."$int" "$downcmd"
 | 
				
			||||||
			if [ -x /sbin/ip ] || [ -x /bin/ip ]; then
 | 
								if [ -n "$(command -v ip)" ]; then
 | 
				
			||||||
				# We need to do this, otherwise we may
 | 
									# We need to do this, otherwise we may
 | 
				
			||||||
				# fail to add things correctly on restart
 | 
									# fail to add things correctly on restart
 | 
				
			||||||
				ip address flush dev "$int" 2>/dev/null
 | 
									ip address flush dev "$int" 2>/dev/null
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,6 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	need localmount
 | 
					 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,6 +42,8 @@ start()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
stop()
 | 
					stop()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						yesno $RC_GOINGDOWN && return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ebegin "Disabling numlock on ttys"
 | 
						ebegin "Disabling numlock on ttys"
 | 
				
			||||||
	_setleds -
 | 
						_setleds -
 | 
				
			||||||
	eend $? "Failed to disable numlock"
 | 
						eend $? "Failed to disable numlock"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,3 +17,15 @@ depend()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	provide clock
 | 
						provide clock
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# This stub function is required to avoid OpenRC warning at boot:
 | 
				
			||||||
 | 
						#
 | 
				
			||||||
 | 
						#  * The command variable is undefined.
 | 
				
			||||||
 | 
						#  * There is nothing for osclock to start.
 | 
				
			||||||
 | 
						#  * If this is what you intend, please write a start function.
 | 
				
			||||||
 | 
						#  * This will become a failure in a future release.
 | 
				
			||||||
 | 
						#
 | 
				
			||||||
 | 
						return 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,7 +16,6 @@ depend()
 | 
				
			|||||||
	after clock
 | 
						after clock
 | 
				
			||||||
	use devfs
 | 
						use devfs
 | 
				
			||||||
	want modules
 | 
						want modules
 | 
				
			||||||
	need localmount
 | 
					 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -27,8 +26,8 @@ start()
 | 
				
			|||||||
		[ ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
							[ ! -e /proc/sys/fs/binfmt_misc/register ]; then
 | 
				
			||||||
		if ! grep -qs binfmt_misc /proc/filesystems &&
 | 
							if ! grep -qs binfmt_misc /proc/filesystems &&
 | 
				
			||||||
			modprobe -q binfmt-misc; then
 | 
								modprobe -q binfmt-misc; then
 | 
				
			||||||
			ewarn "The binfmt-misc module needs to be configured in" \
 | 
								ewarn "The binfmt-misc module needs to be loaded by" \
 | 
				
			||||||
				"@SYSCONFDIR@/conf.d/modules or built in."
 | 
									"the modules service or built in."
 | 
				
			||||||
		fi
 | 
							fi
 | 
				
			||||||
		if grep -qs binfmt_misc /proc/filesystems; then
 | 
							if grep -qs binfmt_misc /proc/filesystems; then
 | 
				
			||||||
			ebegin "Mounting misc binary format filesystem"
 | 
								ebegin "Mounting misc binary format filesystem"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,9 +21,13 @@ depend()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
start_pre()
 | 
					start_pre()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
						if [ ! -e "$command" ]; then
 | 
				
			||||||
 | 
							eerror "$command is missing (please install s6)"
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
		einfo "Creating s6 scan directory"
 | 
							einfo "Creating s6 scan directory"
 | 
				
			||||||
		checkpath -d -m 0755 "$RC_SVCDIR"/s6-scan
 | 
							checkpath -d -m 0755 "$RC_SVCDIR"/s6-scan
 | 
				
			||||||
	return $?
 | 
						fi
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
stop_post()
 | 
					stop_post()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								init.d/save-keymaps.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								init.d/save-keymaps.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					#!@SBINDIR@/openrc-run
 | 
				
			||||||
 | 
					# Copyright (c) 2018 Sony Interactive Entertainment, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description="Save the keymap for use as early as possible"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depend()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						need termencoding
 | 
				
			||||||
 | 
						after bootmisc clock keymaps
 | 
				
			||||||
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						# Save the keymapping for use immediately at boot
 | 
				
			||||||
 | 
						ebegin "Saving key mapping"
 | 
				
			||||||
 | 
						if checkpath -W "$RC_LIBEXECDIR"; then
 | 
				
			||||||
 | 
							mkdir -p "$RC_LIBEXECDIR"/console
 | 
				
			||||||
 | 
							dumpkeys >"$RC_LIBEXECDIR"/console/keymap
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						eend $? "Unable to save keymapping"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										35
									
								
								init.d/save-termencoding.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								init.d/save-termencoding.in
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
				
			|||||||
 | 
					#!@SBINDIR@/openrc-run
 | 
				
			||||||
 | 
					# Copyright (c) 2018 Sony Interactive Entertainment, Inc.
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# This file is part of OpenRC. It is subject to the license terms in
 | 
				
			||||||
 | 
					# the LICENSE file found in the top-level directory of this
 | 
				
			||||||
 | 
					# distribution and at https://github.com/OpenRC/openrc/blob/master/LICENSE
 | 
				
			||||||
 | 
					# This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
 | 
					# except according to the terms contained in the LICENSE file.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					description="Configures terminal encoding."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
				
			||||||
 | 
					: ${unicode:=${UNICODE}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					depend()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
 | 
						use root
 | 
				
			||||||
 | 
						after bootmisc clock termencoding
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						ebegin "Saving terminal encoding"
 | 
				
			||||||
 | 
						# Save the encoding for use immediately at boot
 | 
				
			||||||
 | 
						if checkpath -W "$RC_LIBEXECDIR"; then
 | 
				
			||||||
 | 
							mkdir -p "$RC_LIBEXECDIR"/console
 | 
				
			||||||
 | 
							if yesno ${unicode:-${UNICODE}}; then
 | 
				
			||||||
 | 
								echo "" > "$RC_LIBEXECDIR"/console/unicode
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								rm -f "$RC_LIBEXECDIR"/console/unicode
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
						eend 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -49,7 +49,7 @@ start()
 | 
				
			|||||||
	fi
 | 
						fi
 | 
				
			||||||
	ebegin "Saving dependency cache"
 | 
						ebegin "Saving dependency cache"
 | 
				
			||||||
	local rc=0 save=
 | 
						local rc=0 save=
 | 
				
			||||||
	for x in shutdowntime softlevel rc.log; do
 | 
						for x in depconfig deptree rc.log shutdowntime softlevel; do
 | 
				
			||||||
		[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
 | 
							[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x"
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
	if [ -n "$save" ]; then
 | 
						if [ -n "$save" ]; then
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	after clock
 | 
						after clock root
 | 
				
			||||||
	before localmount
 | 
						before localmount
 | 
				
			||||||
	keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
						keyword -docker -jail -lxc -openvz -prefix -systemd-nspawn -vserver
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,7 @@ BSD_sysctl()
 | 
				
			|||||||
	[ -e /etc/sysctl.conf ] || return 0
 | 
						[ -e /etc/sysctl.conf ] || return 0
 | 
				
			||||||
	local retval=0 var= comments= conf=
 | 
						local retval=0 var= comments= conf=
 | 
				
			||||||
	eindent
 | 
						eindent
 | 
				
			||||||
	for conf in @SYSCONFDIR@/sysctl.conf @SYSCONFDIR@/sysctl.d/*.conf; do
 | 
						for conf in /etc/sysctl.conf /etc/sysctl.d/*.conf; do
 | 
				
			||||||
		if [ -r "$conf" ]; then
 | 
							if [ -r "$conf" ]; then
 | 
				
			||||||
			vebegin "applying $conf"
 | 
								vebegin "applying $conf"
 | 
				
			||||||
			while read var comments; do
 | 
								while read var comments; do
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										114
									
								
								init.d/sysfs.in
									
									
									
									
									
								
							
							
						
						
									
										114
									
								
								init.d/sysfs.in
									
									
									
									
									
								
							@@ -101,128 +101,17 @@ mount_misc()
 | 
				
			|||||||
	if [ -d /sys/firmware/efi/efivars ] &&
 | 
						if [ -d /sys/firmware/efi/efivars ] &&
 | 
				
			||||||
		! mountinfo -q /sys/firmware/efi/efivars; then
 | 
							! mountinfo -q /sys/firmware/efi/efivars; then
 | 
				
			||||||
		ebegin "Mounting efivarfs filesystem"
 | 
							ebegin "Mounting efivarfs filesystem"
 | 
				
			||||||
		mount -n -t efivarfs -o ro \
 | 
							mount -n -t efivarfs -o ${sysfs_opts} \
 | 
				
			||||||
			efivarfs /sys/firmware/efi/efivars 2> /dev/null
 | 
								efivarfs /sys/firmware/efi/efivars 2> /dev/null
 | 
				
			||||||
		eend 0
 | 
							eend 0
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cgroup1_base()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	grep -qw cgroup /proc/filesystems || return 0
 | 
					 | 
				
			||||||
	if ! mountinfo -q /sys/fs/cgroup; 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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if ! mountinfo -q /sys/fs/cgroup/openrc; then
 | 
					 | 
				
			||||||
		local agent="${RC_LIBEXECDIR}/sh/cgroup-release-agent.sh"
 | 
					 | 
				
			||||||
		mkdir /sys/fs/cgroup/openrc
 | 
					 | 
				
			||||||
		mount -n -t cgroup \
 | 
					 | 
				
			||||||
			-o none,${sysfs_opts},name=openrc,release_agent="$agent" \
 | 
					 | 
				
			||||||
			openrc /sys/fs/cgroup/openrc
 | 
					 | 
				
			||||||
		printf 1 > /sys/fs/cgroup/openrc/notify_on_release
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroup1_controllers()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	yesno "${rc_controller_cgroups:-YES}" && [ -e /proc/cgroups ] || return 0
 | 
					 | 
				
			||||||
	while read -r name _ _ enabled rest; do
 | 
					 | 
				
			||||||
		case "${enabled}" in
 | 
					 | 
				
			||||||
			1)	mountinfo -q "/sys/fs/cgroup/${name}" && continue
 | 
					 | 
				
			||||||
				local x
 | 
					 | 
				
			||||||
				for x in $rc_cgroup_controllers; do
 | 
					 | 
				
			||||||
				[ "${name}" = "blkio" ] && [ "${x}" = "io" ] &&
 | 
					 | 
				
			||||||
					continue 2
 | 
					 | 
				
			||||||
				[ "${name}" = "${x}" ] &&
 | 
					 | 
				
			||||||
				continue 2
 | 
					 | 
				
			||||||
				done
 | 
					 | 
				
			||||||
				mkdir "/sys/fs/cgroup/${name}"
 | 
					 | 
				
			||||||
				mount -n -t cgroup -o "${sysfs_opts},${name}" \
 | 
					 | 
				
			||||||
					"${name}" "/sys/fs/cgroup/${name}"
 | 
					 | 
				
			||||||
				;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
	done < /proc/cgroups
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroup2_base()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local base
 | 
					 | 
				
			||||||
	base="$(cgroup2_find_path)"
 | 
					 | 
				
			||||||
	mkdir -p "${base}"
 | 
					 | 
				
			||||||
	mount -t cgroup2 none -o "${sysfs_opts},nsdelegate" "${base}" 2> /dev/null ||
 | 
					 | 
				
			||||||
		mount -t cgroup2 none -o "${sysfs_opts}" "${base}"
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroup2_controllers()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	local active cgroup_path x y
 | 
					 | 
				
			||||||
	cgroup_path="$(cgroup2_find_path)"
 | 
					 | 
				
			||||||
	[ -z "${cgroup_path}" ] && return 0
 | 
					 | 
				
			||||||
	[ -e "${cgroup_path}/cgroup.controllers" ] &&
 | 
					 | 
				
			||||||
	read -r active < "${cgroup_path}/cgroup.controllers"
 | 
					 | 
				
			||||||
	for x in ${rc_cgroup_controllers}; do
 | 
					 | 
				
			||||||
		for y in ${active}; do
 | 
					 | 
				
			||||||
		[ "$x" = "$y" ] &&
 | 
					 | 
				
			||||||
			[ -e "${cgroup_path}/cgroup.subtree_control" ]&&
 | 
					 | 
				
			||||||
			echo "+${x}"  > "${cgroup_path}/cgroup.subtree_control"
 | 
					 | 
				
			||||||
		done
 | 
					 | 
				
			||||||
	done
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroups_hybrid()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	grep -qw cgroup /proc/filesystems || return 0
 | 
					 | 
				
			||||||
	cgroup1_base
 | 
					 | 
				
			||||||
	if grep -qw cgroup2 /proc/filesystems; then
 | 
					 | 
				
			||||||
		cgroup2_base
 | 
					 | 
				
			||||||
		cgroup2_controllers
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	cgroup1_controllers
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroups_legacy()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	grep -qw cgroup /proc/filesystems || return 0
 | 
					 | 
				
			||||||
	cgroup1_base
 | 
					 | 
				
			||||||
	cgroup1_controllers
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cgroups_unified()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	cgroup2_base
 | 
					 | 
				
			||||||
	cgroup2_controllers
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mount_cgroups()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
	# set up kernel support for cgroups
 | 
					 | 
				
			||||||
	if [ -d /sys/fs/cgroup ]; then
 | 
					 | 
				
			||||||
		case "${rc_cgroup_mode:-hybrid}" in
 | 
					 | 
				
			||||||
		hybrid) cgroups_hybrid ;;
 | 
					 | 
				
			||||||
		legacy) cgroups_legacy ;;
 | 
					 | 
				
			||||||
		unified) cgroups_unified ;;
 | 
					 | 
				
			||||||
		esac
 | 
					 | 
				
			||||||
	fi
 | 
					 | 
				
			||||||
	return 0
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
restorecon_sys()
 | 
					restorecon_sys()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if [ -x /sbin/restorecon ]; then
 | 
						if [ -x /sbin/restorecon ]; then
 | 
				
			||||||
		ebegin "Restoring SELinux contexts in /sys"
 | 
							ebegin "Restoring SELinux contexts in /sys"
 | 
				
			||||||
		restorecon -F /sys/devices/system/cpu/online >/dev/null 2>&1
 | 
							restorecon -F /sys/devices/system/cpu/online >/dev/null 2>&1
 | 
				
			||||||
		restorecon -rF /sys/fs/cgroup >/dev/null 2>&1
 | 
					 | 
				
			||||||
		eend $?
 | 
							eend $?
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -231,7 +120,6 @@ start()
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
	mount_sys
 | 
						mount_sys
 | 
				
			||||||
	mount_misc
 | 
						mount_misc
 | 
				
			||||||
	mount_cgroups
 | 
					 | 
				
			||||||
	restorecon_sys
 | 
						restorecon_sys
 | 
				
			||||||
	return 0
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,8 +17,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}}
 | 
				
			|||||||
depend()
 | 
					depend()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
						keyword -docker -lxc -openvz -prefix -systemd-nspawn -uml -vserver -xenu
 | 
				
			||||||
	use root
 | 
						after devfs
 | 
				
			||||||
	after bootmisc clock
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								local.d/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								local.d/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					local_d_dir = get_option('sysconfdir') / 'local.d'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local_data =  [
 | 
				
			||||||
 | 
					  'README'
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(local_data, install_dir : local_d_dir)
 | 
				
			||||||
							
								
								
									
										34
									
								
								man/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								man/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,34 @@
 | 
				
			|||||||
 | 
					man3 = [
 | 
				
			||||||
 | 
					  'einfo.3',
 | 
				
			||||||
 | 
					  'rc_config.3',
 | 
				
			||||||
 | 
					  'rc_deptree.3',
 | 
				
			||||||
 | 
					  'rc_find_pids.3',
 | 
				
			||||||
 | 
					  'rc_plugin_hook.3',
 | 
				
			||||||
 | 
					  'rc_runlevel.3',
 | 
				
			||||||
 | 
					  'rc_service.3',
 | 
				
			||||||
 | 
					  'rc_stringlist.3',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					man8 = [
 | 
				
			||||||
 | 
					  'openrc.8',
 | 
				
			||||||
 | 
					  'openrc-run.8',
 | 
				
			||||||
 | 
					  'rc-service.8',
 | 
				
			||||||
 | 
					  'rc-status.8',
 | 
				
			||||||
 | 
					  'rc-update.8',
 | 
				
			||||||
 | 
					  'start-stop-daemon.8',
 | 
				
			||||||
 | 
					  'supervise-daemon.8',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if os == 'Linux'
 | 
				
			||||||
 | 
					  man8 = man8 + [
 | 
				
			||||||
 | 
					    'rc-sstat.8',
 | 
				
			||||||
 | 
					    'openrc-init.8',
 | 
				
			||||||
 | 
					    'openrc-shutdown.8',
 | 
				
			||||||
 | 
					    ]
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(man3,
 | 
				
			||||||
 | 
					  install_dir : get_option('mandir') / 'man3')
 | 
				
			||||||
 | 
					install_data(man8,
 | 
				
			||||||
 | 
					  install_dir : get_option('mandir') / 'man8')
 | 
				
			||||||
 | 
					meson.add_install_script('meson_man_links.sh', get_option('mandir'), man3 + man8)
 | 
				
			||||||
							
								
								
									
										20
									
								
								man/meson_man_links.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										20
									
								
								man/meson_man_links.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_links() {
 | 
				
			||||||
 | 
						sed -e 's/ ,//g' \
 | 
				
			||||||
 | 
							-e '/^\.Sh NAME$/,/\.Sh/ s/\.Nm //p' \
 | 
				
			||||||
 | 
							-n ${MESON_SOURCE_ROOT}/man/${1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MANDIR="$1"
 | 
				
			||||||
 | 
					shift
 | 
				
			||||||
 | 
					for man in $@; do
 | 
				
			||||||
 | 
						prefix=${man%%.*}
 | 
				
			||||||
 | 
						suffix=${man#*.}
 | 
				
			||||||
 | 
						links=$(get_links ${man})
 | 
				
			||||||
 | 
						for link in ${links}; do
 | 
				
			||||||
 | 
							if [ "${link}" != "${prefix}" ]; then
 | 
				
			||||||
 | 
								ln -sf ${man} ${MESON_INSTALL_DESTDIR_PREFIX}/${MANDIR}/man${suffix}/${link}.${suffix}
 | 
				
			||||||
 | 
							fi
 | 
				
			||||||
 | 
						done
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
@@ -8,7 +8,7 @@
 | 
				
			|||||||
.\" This file may not be copied, modified, propagated, or distributed
 | 
					.\" This file may not be copied, modified, propagated, or distributed
 | 
				
			||||||
.\"    except according to the terms contained in the LICENSE file.
 | 
					.\"    except according to the terms contained in the LICENSE file.
 | 
				
			||||||
.\"
 | 
					.\"
 | 
				
			||||||
.Dd December 31, 2011
 | 
					.Dd November 30, 2017
 | 
				
			||||||
.Dt openrc-run 8 SMM
 | 
					.Dt openrc-run 8 SMM
 | 
				
			||||||
.Os OpenRC
 | 
					.Os OpenRC
 | 
				
			||||||
.Sh NAME
 | 
					.Sh NAME
 | 
				
			||||||
@@ -104,18 +104,22 @@ supervisor=s6.
 | 
				
			|||||||
or set
 | 
					or set
 | 
				
			||||||
supervisor=supervise-daemon
 | 
					supervisor=supervise-daemon
 | 
				
			||||||
to use supervise-daemon.
 | 
					to use supervise-daemon.
 | 
				
			||||||
Note that supervise-daemon is still in early development, so it is
 | 
					 | 
				
			||||||
considered experimental.
 | 
					 | 
				
			||||||
.It Ar s6_service_path
 | 
					.It Ar s6_service_path
 | 
				
			||||||
The path to the s6 service directory if you are monitoring this service
 | 
					The path to the s6 service directory if you are monitoring this service
 | 
				
			||||||
with S6. The default is /var/svc.d/${RC_SVCNAME}.
 | 
					with S6. The default is /var/svc.d/${RC_SVCNAME}.
 | 
				
			||||||
.It Ar s6_svwait_options_start
 | 
					.It Ar s6_svwait_options_start
 | 
				
			||||||
The options to pass to s6-svwait when starting the service via s6.
 | 
					The options to pass to s6-svwait when starting the service via s6.
 | 
				
			||||||
 | 
					.It Ar s6_force_kill
 | 
				
			||||||
 | 
					Should we force-kill this service if s6_service_timeout_stop expires
 | 
				
			||||||
 | 
					but the service doesn't go down during shutdown? The default is yes.
 | 
				
			||||||
.It Ar s6_service_timeout_stop
 | 
					.It Ar s6_service_timeout_stop
 | 
				
			||||||
The amount of time, in milliseconds, s6-svc should wait for the service
 | 
					The amount of time, in milliseconds, s6-svc should wait for the service
 | 
				
			||||||
to go down when stopping the service. The default is 10000.
 | 
					to go down when stopping the service. The default is 60000.
 | 
				
			||||||
.It Ar start_stop_daemon_args
 | 
					.It Ar start_stop_daemon_args
 | 
				
			||||||
List of arguments passed to start-stop-daemon when starting the daemon.
 | 
					List of arguments passed to start-stop-daemon when starting the daemon.
 | 
				
			||||||
 | 
					.It Ar supervise_daemon_args
 | 
				
			||||||
 | 
					List of arguments passed to supervise-daemon when starting the daemon.
 | 
				
			||||||
 | 
					If undefined, start_stop_daemon_args is used as a fallback.
 | 
				
			||||||
.It Ar command
 | 
					.It Ar command
 | 
				
			||||||
Daemon to start or stop via
 | 
					Daemon to start or stop via
 | 
				
			||||||
.Nm start-stop-daemon
 | 
					.Nm start-stop-daemon
 | 
				
			||||||
@@ -149,11 +153,46 @@ Set this to "true", "yes" or "1" (case-insensitive) if you want
 | 
				
			|||||||
to display a progress meter when waiting for a daemon to stop.
 | 
					to display a progress meter when waiting for a daemon to stop.
 | 
				
			||||||
.It Ar command_user
 | 
					.It Ar command_user
 | 
				
			||||||
If the daemon does not support changing to a different user id, you can
 | 
					If the daemon does not support changing to a different user id, you can
 | 
				
			||||||
use this to change the user id before
 | 
					use this to change the user id, and optionally group id,  before
 | 
				
			||||||
.Xr start-stop-daemon 8
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
or
 | 
					or
 | 
				
			||||||
.Xr supervise-daemon 8
 | 
					.Xr supervise-daemon 8
 | 
				
			||||||
launches the daemon
 | 
					launches the daemon.
 | 
				
			||||||
 | 
					.It Ar output_log
 | 
				
			||||||
 | 
					This is the path to a file or named pipe where the standard output from
 | 
				
			||||||
 | 
					the service will be redirected. If you are starting this service with
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8 ,
 | 
				
			||||||
 | 
					,  you must set
 | 
				
			||||||
 | 
					.Pa command_background
 | 
				
			||||||
 | 
					to true. Keep in mind that this path will be inside the chroot if the
 | 
				
			||||||
 | 
					.Pa chroot
 | 
				
			||||||
 | 
					variable is set.
 | 
				
			||||||
 | 
					.It Ar error_log
 | 
				
			||||||
 | 
					The same thing as
 | 
				
			||||||
 | 
					.Pa output_log
 | 
				
			||||||
 | 
					but for the standard error output.
 | 
				
			||||||
 | 
					.It Ar output_logger
 | 
				
			||||||
 | 
					This is a process which will be used to log the standard output from the
 | 
				
			||||||
 | 
					service.  If you are starting this service with
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8 ,
 | 
				
			||||||
 | 
					,  you must set
 | 
				
			||||||
 | 
					.Pa command_background
 | 
				
			||||||
 | 
					to true. Keep in mind that this command must be executable as a shell
 | 
				
			||||||
 | 
					command inside the chroot if the
 | 
				
			||||||
 | 
					.Pa chroot
 | 
				
			||||||
 | 
					variable is set. Keep in mind also that this command works by accepting
 | 
				
			||||||
 | 
					the stdout of the service on stdin.
 | 
				
			||||||
 | 
					An example of a command that can be run this way is logger if you want
 | 
				
			||||||
 | 
					your service output to go to syslog.
 | 
				
			||||||
 | 
					.It Ar error_logger
 | 
				
			||||||
 | 
					The same thing as
 | 
				
			||||||
 | 
					.Pa output_logger
 | 
				
			||||||
 | 
					but for the standard error output.
 | 
				
			||||||
 | 
					.It Ar directory
 | 
				
			||||||
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
 | 
					and
 | 
				
			||||||
 | 
					.Xr supervise-daemon 8
 | 
				
			||||||
 | 
					will chdir to this directory before starting the daemon.
 | 
				
			||||||
.It Ar chroot
 | 
					.It Ar chroot
 | 
				
			||||||
.Xr start-stop-daemon 8
 | 
					.Xr start-stop-daemon 8
 | 
				
			||||||
and
 | 
					and
 | 
				
			||||||
@@ -198,6 +237,8 @@ used along with in_background_fake to support re-entrant services.
 | 
				
			|||||||
.It Ar in_background_fake
 | 
					.It Ar in_background_fake
 | 
				
			||||||
Space separated list of commands which should always succeed when
 | 
					Space separated list of commands which should always succeed when
 | 
				
			||||||
in_background is yes.
 | 
					in_background is yes.
 | 
				
			||||||
 | 
					.It Ar umask
 | 
				
			||||||
 | 
					Set the umask of the daemon.
 | 
				
			||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
Keep in mind that eval is used to process chroot, command, command_args_*,
 | 
					Keep in mind that eval is used to process chroot, command, command_args_*,
 | 
				
			||||||
command_user, pidfile and procname. This may affect how they are
 | 
					command_user, pidfile and procname. This may affect how they are
 | 
				
			||||||
@@ -418,6 +459,7 @@ Mark the service as inactive.
 | 
				
			|||||||
.Op Fl p , -pipe
 | 
					.Op Fl p , -pipe
 | 
				
			||||||
.Op Fl m , -mode Ar mode
 | 
					.Op Fl m , -mode Ar mode
 | 
				
			||||||
.Op Fl o , -owner Ar owner
 | 
					.Op Fl o , -owner Ar owner
 | 
				
			||||||
 | 
					.Op Fl s , -symlinks
 | 
				
			||||||
.Op Fl W , -writable
 | 
					.Op Fl W , -writable
 | 
				
			||||||
.Op Fl q , -quiet
 | 
					.Op Fl q , -quiet
 | 
				
			||||||
.Ar path ...
 | 
					.Ar path ...
 | 
				
			||||||
@@ -438,6 +480,11 @@ or with names, and are separated by a colon.
 | 
				
			|||||||
The truncate options (-D and -F) cause the directory or file to be
 | 
					The truncate options (-D and -F) cause the directory or file to be
 | 
				
			||||||
cleared of all contents.
 | 
					cleared of all contents.
 | 
				
			||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
 | 
					If -s is not specified on a non-linux platform, checkpath will refuse to
 | 
				
			||||||
 | 
					allow non-terminal symbolic links to exist in the path. This is for
 | 
				
			||||||
 | 
					security reasons so that a non-root user can't create a symbolic link to
 | 
				
			||||||
 | 
					a root-owned file and take ownership of that file.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
If -W is specified, checkpath checks to see if the first path given on
 | 
					If -W is specified, checkpath checks to see if the first path given on
 | 
				
			||||||
the command line is writable.  This is different from how the test
 | 
					the command line is writable.  This is different from how the test
 | 
				
			||||||
command in the shell works, because it also checks to make sure the file
 | 
					command in the shell works, because it also checks to make sure the file
 | 
				
			||||||
@@ -447,6 +494,7 @@ Also, the -d, -f or -p options should not be specified along with this option.
 | 
				
			|||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
The -q option suppresses all informational output. If it is specified
 | 
					The -q option suppresses all informational output. If it is specified
 | 
				
			||||||
twice, all error messages are suppressed as well.
 | 
					twice, all error messages are suppressed as well.
 | 
				
			||||||
 | 
					.It Xo
 | 
				
			||||||
.Ic fstabinfo
 | 
					.Ic fstabinfo
 | 
				
			||||||
.Op Fl M , -mount
 | 
					.Op Fl M , -mount
 | 
				
			||||||
.Op Fl R , -remount
 | 
					.Op Fl R , -remount
 | 
				
			||||||
@@ -463,6 +511,7 @@ remounted.
 | 
				
			|||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
The -q option suppresses all informational output. If it is specified
 | 
					The -q option suppresses all informational output. If it is specified
 | 
				
			||||||
twice, all error messages are suppressed as well.
 | 
					twice, all error messages are suppressed as well.
 | 
				
			||||||
 | 
					.It Xo
 | 
				
			||||||
.Ic mountinfo
 | 
					.Ic mountinfo
 | 
				
			||||||
.Op Fl f, -fstype-regex Ar regex
 | 
					.Op Fl f, -fstype-regex Ar regex
 | 
				
			||||||
.Op Fl F, -skip-fstype-regex Ar regex
 | 
					.Op Fl F, -skip-fstype-regex Ar regex
 | 
				
			||||||
@@ -569,7 +618,7 @@ 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
 | 
					# This can also be used to block a script from running in all
 | 
				
			||||||
# containers except one or two
 | 
					# containers except one or two
 | 
				
			||||||
rc_keyword="!-containers !-docker"
 | 
					rc_keyword="!-containers !-docker"
 | 
				
			||||||
.Ed
 | 
					.Ed
 | 
				
			||||||
@@ -708,6 +757,8 @@ Users are encouraged to use the is_newer_than function which returns correctly.
 | 
				
			|||||||
.Xr rc_plugin_hook 3 ,
 | 
					.Xr rc_plugin_hook 3 ,
 | 
				
			||||||
.Xr sh 1p ,
 | 
					.Xr sh 1p ,
 | 
				
			||||||
.Xr start-stop-daemon 8 ,
 | 
					.Xr start-stop-daemon 8 ,
 | 
				
			||||||
 | 
					.Xr supervise-daemon 8 ,
 | 
				
			||||||
.Xr uname 1
 | 
					.Xr uname 1
 | 
				
			||||||
.Sh AUTHORS
 | 
					.Sh AUTHORS
 | 
				
			||||||
.An Roy Marples <roy@marples.name>
 | 
					.An Roy Marples <roy@marples.name>
 | 
				
			||||||
 | 
					.An William Hubbs <w.d.hubbs@gmail.com>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,15 +16,36 @@
 | 
				
			|||||||
.Nd bring the system down
 | 
					.Nd bring the system down
 | 
				
			||||||
.Sh SYNOPSIS
 | 
					.Sh SYNOPSIS
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl c , -cancel
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl R , -reexec
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl w , -write-only
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
.Op Fl d , -no-write
 | 
					.Op Fl d , -no-write
 | 
				
			||||||
.Op Fl D , -dry-run
 | 
					.Op Fl D , -dry-run
 | 
				
			||||||
.Op Fl H , -halt
 | 
					.Op Fl H , -halt
 | 
				
			||||||
 | 
					time
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl d , -no-write
 | 
				
			||||||
 | 
					.Op Fl D , -dry-run
 | 
				
			||||||
.Op Fl k , -kexec
 | 
					.Op Fl k , -kexec
 | 
				
			||||||
 | 
					time
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl d , -no-write
 | 
				
			||||||
 | 
					.Op Fl D , -dry-run
 | 
				
			||||||
.Op Fl p , -poweroff
 | 
					.Op Fl p , -poweroff
 | 
				
			||||||
.Op Fl R , -reexec
 | 
					time
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl d , -no-write
 | 
				
			||||||
 | 
					.Op Fl D , -dry-run
 | 
				
			||||||
.Op Fl r , -reboot
 | 
					.Op Fl r , -reboot
 | 
				
			||||||
 | 
					time
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl d , -no-write
 | 
				
			||||||
 | 
					.Op Fl D , -dry-run
 | 
				
			||||||
.Op Fl s , -single
 | 
					.Op Fl s , -single
 | 
				
			||||||
.Op Fl w , -write-only
 | 
					time
 | 
				
			||||||
.Sh DESCRIPTION
 | 
					.Sh DESCRIPTION
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
is the utility that communicates with
 | 
					is the utility that communicates with
 | 
				
			||||||
@@ -32,6 +53,8 @@ is the utility that communicates with
 | 
				
			|||||||
to bring down the system or instruct openrc-init to re-execute itself.
 | 
					to bring down the system or instruct openrc-init to re-execute itself.
 | 
				
			||||||
It supports the following options:
 | 
					It supports the following options:
 | 
				
			||||||
.Bl -tag -width "poweroff"
 | 
					.Bl -tag -width "poweroff"
 | 
				
			||||||
 | 
					.It Fl c , -cancel
 | 
				
			||||||
 | 
					Cancel a pending shutdown.
 | 
				
			||||||
.It Fl d , -no-write
 | 
					.It Fl d , -no-write
 | 
				
			||||||
Do not write the wtmp boot record.
 | 
					Do not write the wtmp boot record.
 | 
				
			||||||
.It Fl D , -dry-run
 | 
					.It Fl D , -dry-run
 | 
				
			||||||
@@ -53,7 +76,7 @@ Stop all services, kill all processes and reboot the system.
 | 
				
			|||||||
.It Fl s , -single
 | 
					.It Fl s , -single
 | 
				
			||||||
Stop all services, kill all processes and move to single user mode.
 | 
					Stop all services, kill all processes and move to single user mode.
 | 
				
			||||||
.It Fl w , -write-only
 | 
					.It Fl w , -write-only
 | 
				
			||||||
Stop all services, kill all processes and move to single user mode.
 | 
					Wrrite a wtmp shutdown record and do nothing else.
 | 
				
			||||||
.El
 | 
					.El
 | 
				
			||||||
.Sh SEE ALSO
 | 
					.Sh SEE ALSO
 | 
				
			||||||
.Xr openrc-init 8 ,
 | 
					.Xr openrc-init 8 ,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								man/openrc.8
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								man/openrc.8
									
									
									
									
									
								
							@@ -65,7 +65,31 @@ Instead you should use
 | 
				
			|||||||
and
 | 
					and
 | 
				
			||||||
.Xr shutdown 8
 | 
					.Xr shutdown 8
 | 
				
			||||||
and let them call these special runlevels.
 | 
					and let them call these special runlevels.
 | 
				
			||||||
 | 
					.Sh OPTIONS
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
 | 
					.Bl -tag -width "-o , --override"
 | 
				
			||||||
 | 
					.It Fl n , -no-stop
 | 
				
			||||||
 | 
					Do not stop any services.
 | 
				
			||||||
 | 
					.It Fl o , -override
 | 
				
			||||||
 | 
					Override the next runlevel to change into when leaving single user or boot
 | 
				
			||||||
 | 
					runlevels
 | 
				
			||||||
 | 
					.It Fl s , -service
 | 
				
			||||||
 | 
					Run the service specified with the rest of the arguments.
 | 
				
			||||||
 | 
					.It Fl S , -sys
 | 
				
			||||||
 | 
					Output the RC system type, if any.
 | 
				
			||||||
 | 
					.It Fl h , -help
 | 
				
			||||||
 | 
					Display usage information and exit.
 | 
				
			||||||
 | 
					.It Fl C , -nocolor
 | 
				
			||||||
 | 
					Disable color output.
 | 
				
			||||||
 | 
					.It Fl V , -version
 | 
				
			||||||
 | 
					Display software version.
 | 
				
			||||||
 | 
					.It Fl v , -verbose
 | 
				
			||||||
 | 
					Run verbosely.
 | 
				
			||||||
 | 
					.It Fl q , -quiet
 | 
				
			||||||
 | 
					Run quietly (repeat to suppress errors).
 | 
				
			||||||
 | 
					.El
 | 
				
			||||||
.Sh SEE ALSO
 | 
					.Sh SEE ALSO
 | 
				
			||||||
 | 
					.Xr openrc-run 8 ,
 | 
				
			||||||
.Xr rc-status 8 ,
 | 
					.Xr rc-status 8 ,
 | 
				
			||||||
.Xr rc-update 8 ,
 | 
					.Xr rc-update 8 ,
 | 
				
			||||||
.Xr init 8 ,
 | 
					.Xr init 8 ,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -16,6 +16,18 @@
 | 
				
			|||||||
.Nd locate and run an OpenRC service with the given arguments
 | 
					.Nd locate and run an OpenRC service with the given arguments
 | 
				
			||||||
.Sh SYNOPSIS
 | 
					.Sh SYNOPSIS
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl c , -ifcrashed
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Fl d , -debug
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Fl D , -nodeps
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
.Op Fl i , -ifexists
 | 
					.Op Fl i , -ifexists
 | 
				
			||||||
.Ar service cmd
 | 
					.Ar service cmd
 | 
				
			||||||
.Op Ar ...
 | 
					.Op Ar ...
 | 
				
			||||||
@@ -28,9 +40,21 @@
 | 
				
			|||||||
.Ar service cmd
 | 
					.Ar service cmd
 | 
				
			||||||
.Op Ar ...
 | 
					.Op Ar ...
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl s , -ifstarted
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					.Op Fl S , -ifstopped
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
.Fl e , -exists
 | 
					.Fl e , -exists
 | 
				
			||||||
.Ar service
 | 
					.Ar service
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
 | 
					.Fl Z , -dry-run
 | 
				
			||||||
 | 
					.Ar service cmd
 | 
				
			||||||
 | 
					.Op Ar ...
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
.Fl l , -list
 | 
					.Fl l , -list
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
.Fl r , -resolve
 | 
					.Fl r , -resolve
 | 
				
			||||||
@@ -64,6 +88,15 @@ return 0 if it can find
 | 
				
			|||||||
otherwise -1.
 | 
					otherwise -1.
 | 
				
			||||||
.Fl r , -resolve
 | 
					.Fl r , -resolve
 | 
				
			||||||
does the same and also prints the full path of the service to stdout.
 | 
					does the same and also prints the full path of the service to stdout.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
 | 
					.Fl d , -debug
 | 
				
			||||||
 | 
					sets -x when running the service script(s).
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
 | 
					.Fl D , -nodeps
 | 
				
			||||||
 | 
					ignores dependencies when running the service.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
 | 
					.Fl Z , -dry-run
 | 
				
			||||||
 | 
					displays commands rather than executing them.
 | 
				
			||||||
.Sh SEE ALSO
 | 
					.Sh SEE ALSO
 | 
				
			||||||
.Xr openrc 8 ,
 | 
					.Xr openrc 8 ,
 | 
				
			||||||
.Xr stdout 3
 | 
					.Xr stdout 3
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@
 | 
				
			|||||||
.Sh SYNOPSIS
 | 
					.Sh SYNOPSIS
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
.Op Fl aclsuC
 | 
					.Op Fl aclsuC
 | 
				
			||||||
 | 
					.Op Fl f Ar ini
 | 
				
			||||||
.Op Ar runlevel
 | 
					.Op Ar runlevel
 | 
				
			||||||
.Sh DESCRIPTION
 | 
					.Sh DESCRIPTION
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
@@ -37,12 +38,17 @@ The options are as follows:
 | 
				
			|||||||
Show all runlevels and their services.
 | 
					Show all runlevels and their services.
 | 
				
			||||||
.It Fl c , -crashed
 | 
					.It Fl c , -crashed
 | 
				
			||||||
List all services that have crashed.
 | 
					List all services that have crashed.
 | 
				
			||||||
 | 
					.It Fl f , -format
 | 
				
			||||||
 | 
					Select a format for the output. Currently, the only one that can be
 | 
				
			||||||
 | 
					specified is ini, which outputs in *.ini format.
 | 
				
			||||||
.It Fl l , -list
 | 
					.It Fl l , -list
 | 
				
			||||||
List all defined runlevels.
 | 
					List all defined runlevels.
 | 
				
			||||||
.It Fl m , -manual
 | 
					.It Fl m , -manual
 | 
				
			||||||
Show all manually started services.
 | 
					Show all manually started services.
 | 
				
			||||||
.It Fl r , -runlevel
 | 
					.It Fl r , -runlevel
 | 
				
			||||||
Print the current runlevel name.
 | 
					Print the current runlevel name.
 | 
				
			||||||
 | 
					.It Fl S , -supervised
 | 
				
			||||||
 | 
					Show all supervised services.
 | 
				
			||||||
.It Fl s , -servicelist
 | 
					.It Fl s , -servicelist
 | 
				
			||||||
Show all services.
 | 
					Show all services.
 | 
				
			||||||
.It Fl u , -unused
 | 
					.It Fl u , -unused
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -120,7 +120,7 @@ Saves the pid of the daemon in the file specified by the
 | 
				
			|||||||
.Fl p , -pidfile
 | 
					.Fl p , -pidfile
 | 
				
			||||||
option. Only useful when used with daemons that run in the foreground and
 | 
					option. Only useful when used with daemons that run in the foreground and
 | 
				
			||||||
forced into the background with the
 | 
					forced into the background with the
 | 
				
			||||||
.Fl -b , -background
 | 
					.Fl b , -background
 | 
				
			||||||
option.
 | 
					option.
 | 
				
			||||||
.It Fl I , -ionice Ar class Ns Op : Ns Ar data
 | 
					.It Fl I , -ionice Ar class Ns Op : Ns Ar data
 | 
				
			||||||
Modifies the IO scheduling priority of the daemon.
 | 
					Modifies the IO scheduling priority of the daemon.
 | 
				
			||||||
@@ -131,9 +131,34 @@ Modifies the scheduling priority of the daemon.
 | 
				
			|||||||
.It Fl 1 , -stdout Ar logfile
 | 
					.It Fl 1 , -stdout Ar logfile
 | 
				
			||||||
Redirect the standard output of the process to logfile when started with
 | 
					Redirect the standard output of the process to logfile when started with
 | 
				
			||||||
.Fl background .
 | 
					.Fl background .
 | 
				
			||||||
Must be an absolute pathname, but relative to the path optionally given with
 | 
					The logfile Must be an absolute pathname, but relative to the path
 | 
				
			||||||
 | 
					optionally given with
 | 
				
			||||||
.Fl r , -chroot .
 | 
					.Fl r , -chroot .
 | 
				
			||||||
The logfile can also be a named pipe.
 | 
					The logfile can also be a named pipe.
 | 
				
			||||||
 | 
					.It Fl 2 , -stderr Ar logfile
 | 
				
			||||||
 | 
					Redirect the standard error of the process to logfile when started with
 | 
				
			||||||
 | 
					.Fl background .
 | 
				
			||||||
 | 
					The logfile must be an absolute pathname, but relative to the path
 | 
				
			||||||
 | 
					optionally given with
 | 
				
			||||||
 | 
					.Fl r , -chroot .
 | 
				
			||||||
 | 
					The logfile can also be a named pipe.
 | 
				
			||||||
 | 
					.It Fl 3 , -stdout-logger Ar cmd
 | 
				
			||||||
 | 
					Run cmd as a child process redirecting the standard output to the
 | 
				
			||||||
 | 
					standard input of cmd when started with
 | 
				
			||||||
 | 
					.Fl background .
 | 
				
			||||||
 | 
					Cmd must be an absolute pathname, but relative to the path optionally given with
 | 
				
			||||||
 | 
					.Fl r , -chroot .
 | 
				
			||||||
 | 
					This process must be prepared to accept input on stdin and be able to
 | 
				
			||||||
 | 
					log it or send it to another location.
 | 
				
			||||||
 | 
					.It Fl 4 , -stderr-logger Ar cmd
 | 
				
			||||||
 | 
					Run cmd as a child process and 
 | 
				
			||||||
 | 
					Redirect the standard error of the process to the standard input of cmd
 | 
				
			||||||
 | 
					when started with
 | 
				
			||||||
 | 
					.Fl background .
 | 
				
			||||||
 | 
					Cmd must be an absolute pathname, but relative to the path optionally given with
 | 
				
			||||||
 | 
					.Fl r , -chroot .
 | 
				
			||||||
 | 
					This process must be prepared to accept input on stdin and be able to
 | 
				
			||||||
 | 
					log it or send it to another location.
 | 
				
			||||||
.It Fl w , -wait Ar milliseconds
 | 
					.It Fl w , -wait Ar milliseconds
 | 
				
			||||||
Wait
 | 
					Wait
 | 
				
			||||||
.Ar milliseconds
 | 
					.Ar milliseconds
 | 
				
			||||||
@@ -151,6 +176,7 @@ These options are only used for stopping daemons:
 | 
				
			|||||||
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
 | 
					.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
 | 
				
			||||||
The retry specification can be either a timeout in seconds or multiple
 | 
					The retry specification can be either a timeout in seconds or multiple
 | 
				
			||||||
signal/timeout pairs (like SIGTERM/5).
 | 
					signal/timeout pairs (like SIGTERM/5).
 | 
				
			||||||
 | 
					If this option is not given, the default is SIGTERM/5.
 | 
				
			||||||
.El
 | 
					.El
 | 
				
			||||||
.Sh ENVIRONMENT
 | 
					.Sh ENVIRONMENT
 | 
				
			||||||
.Va SSD_IONICELEVEL
 | 
					.Va SSD_IONICELEVEL
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,13 +9,18 @@
 | 
				
			|||||||
.\"    except according to the terms contained in the LICENSE file.
 | 
					.\"    except according to the terms contained in the LICENSE file.
 | 
				
			||||||
.\"
 | 
					.\"
 | 
				
			||||||
.Dd April 27, 2016
 | 
					.Dd April 27, 2016
 | 
				
			||||||
.Dt supervise-DAEMON 8 SMM
 | 
					.Dt SUPERVISE-DAEMON 8 SMM
 | 
				
			||||||
.Os OpenRC
 | 
					.Os OpenRC
 | 
				
			||||||
.Sh NAME
 | 
					.Sh NAME
 | 
				
			||||||
.Nm supervise-daemon
 | 
					.Nm supervise-daemon
 | 
				
			||||||
.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
 | 
				
			||||||
 | 
					servicename
 | 
				
			||||||
 | 
					.Fl a , -healthcheck-timer
 | 
				
			||||||
 | 
					.Ar seconds
 | 
				
			||||||
 | 
					.Fl A , -healthcheck-delay
 | 
				
			||||||
 | 
					.Ar seconds
 | 
				
			||||||
.Fl D , -respawn-delay
 | 
					.Fl D , -respawn-delay
 | 
				
			||||||
.Ar seconds
 | 
					.Ar seconds
 | 
				
			||||||
.Fl d , -chdir
 | 
					.Fl d , -chdir
 | 
				
			||||||
@@ -33,7 +38,7 @@
 | 
				
			|||||||
.Fl N , -nicelevel
 | 
					.Fl N , -nicelevel
 | 
				
			||||||
.Ar level
 | 
					.Ar level
 | 
				
			||||||
.Fl p , -pidfile
 | 
					.Fl p , -pidfile
 | 
				
			||||||
.Ar pidfile
 | 
					.Ar supervisorpidfile
 | 
				
			||||||
.Fl P , -respawn-period
 | 
					.Fl P , -respawn-period
 | 
				
			||||||
.Ar seconds
 | 
					.Ar seconds
 | 
				
			||||||
.Fl R , -retry
 | 
					.Fl R , -retry
 | 
				
			||||||
@@ -51,10 +56,15 @@
 | 
				
			|||||||
.Op Fl -
 | 
					.Op Fl -
 | 
				
			||||||
.Op Ar arguments
 | 
					.Op Ar arguments
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
 | 
					servicename
 | 
				
			||||||
.Fl K , -stop
 | 
					.Fl K , -stop
 | 
				
			||||||
.Ar daemon
 | 
					.Ar daemon
 | 
				
			||||||
.Fl p , -pidfile
 | 
					.Fl r , -chroot
 | 
				
			||||||
.Ar pidfile
 | 
					.Ar chrootpath
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					servicename
 | 
				
			||||||
 | 
					.Fl s , -signal
 | 
				
			||||||
 | 
					.Ar signal
 | 
				
			||||||
.Fl r , -chroot
 | 
					.Fl r , -chroot
 | 
				
			||||||
.Ar chrootpath
 | 
					.Ar chrootpath
 | 
				
			||||||
.Sh DESCRIPTION
 | 
					.Sh DESCRIPTION
 | 
				
			||||||
@@ -62,22 +72,15 @@
 | 
				
			|||||||
provides a consistent method of starting, stopping and restarting
 | 
					provides a consistent method of starting, stopping and restarting
 | 
				
			||||||
daemons. If
 | 
					daemons. If
 | 
				
			||||||
.Fl K , -stop
 | 
					.Fl K , -stop
 | 
				
			||||||
 | 
					or
 | 
				
			||||||
 | 
					.Fl s , -signal
 | 
				
			||||||
is not provided, then we assume we are starting the daemon.
 | 
					is not provided, then we assume we are starting the daemon.
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
only works with daemons which do not fork. Also, it uses its own pid
 | 
					only works with daemons which do not fork. If your daemon has options to
 | 
				
			||||||
file, so the daemon should not write a pid file, or the pid file passed
 | 
					tell it not to fork, it should be configured to not fork.
 | 
				
			||||||
to 
 | 
					 | 
				
			||||||
.Nm
 | 
					 | 
				
			||||||
should not be the one the daemon writes.
 | 
					 | 
				
			||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
Here are the options to specify the daemon and how it should start or stop:
 | 
					Here are the options to specify the daemon and how it should start or stop:
 | 
				
			||||||
.Bl -tag -width indent
 | 
					.Bl -tag -width indent
 | 
				
			||||||
.It Fl p , -pidfile Ar pidfile
 | 
					 | 
				
			||||||
When starting, we write a
 | 
					 | 
				
			||||||
.Ar pidfile
 | 
					 | 
				
			||||||
so we know which supervisor to stop.  When stopping we only stop the pid(s)
 | 
					 | 
				
			||||||
listed in the
 | 
					 | 
				
			||||||
.Ar pidfile .
 | 
					 | 
				
			||||||
.It Fl u , -user Ar user Ns Op : Ns Ar group
 | 
					.It Fl u , -user Ar user Ns Op : Ns Ar group
 | 
				
			||||||
Start the daemon as the
 | 
					Start the daemon as the
 | 
				
			||||||
.Ar user
 | 
					.Ar user
 | 
				
			||||||
@@ -87,11 +90,17 @@ owned by the user. You can optionally append a
 | 
				
			|||||||
name here also.
 | 
					name here also.
 | 
				
			||||||
.It Fl v , -verbose
 | 
					.It Fl v , -verbose
 | 
				
			||||||
Print the action(s) that are taken just before doing them.
 | 
					Print the action(s) that are taken just before doing them.
 | 
				
			||||||
 | 
					.El
 | 
				
			||||||
.Pp
 | 
					.Pp
 | 
				
			||||||
The options are as follows:
 | 
					The options are as follows:
 | 
				
			||||||
.Bl -tag -width indent
 | 
					.Bl -tag -width indent
 | 
				
			||||||
 | 
					.It Fl a , -healthcheck-timer Ar seconds
 | 
				
			||||||
 | 
					Run the healthcheck() command, possibly followed by the unhealthy()
 | 
				
			||||||
 | 
					command every time this number of seconds passes.
 | 
				
			||||||
 | 
					.It Fl A , -healthcheck-delay Ar seconds
 | 
				
			||||||
 | 
					Wait this long before the first health check.
 | 
				
			||||||
.It Fl D , -respawn-delay Ar seconds
 | 
					.It Fl D , -respawn-delay Ar seconds
 | 
				
			||||||
wait this number of seconds before restarting a daemon after it crashes.
 | 
					Wait this number of seconds before restarting a daemon after it crashes.
 | 
				
			||||||
The default is 0.
 | 
					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.
 | 
				
			||||||
@@ -106,23 +115,34 @@ 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
 | 
					.It Fl m , -respawn-max Ar count
 | 
				
			||||||
Sets the maximum number of times a daemon will be respawned during a
 | 
					Sets the maximum number of times a daemon will be respawned. If a daemon
 | 
				
			||||||
respawn period. If a daemon dies more than this number of times during a
 | 
					crashes more than this number of times,
 | 
				
			||||||
respawn period,
 | 
					 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
will give up trying to respawn it and exit. The default is 10, and 0
 | 
					will give up and exit. The default is 10 and 0 means unlimited.
 | 
				
			||||||
means unlimited.
 | 
					.Pp
 | 
				
			||||||
 | 
					If respawn-period is also set, more than respawn-max crashes must occur
 | 
				
			||||||
 | 
					during respawn-period seconds to cause
 | 
				
			||||||
 | 
					.Nm
 | 
				
			||||||
 | 
					to give up and exit.
 | 
				
			||||||
 | 
					.It Fl p , -pidfile Ar supervisorpidfile
 | 
				
			||||||
 | 
					Sets a path for the supervisor's pid file. Note that this is not the pid
 | 
				
			||||||
 | 
					file of the process that is being supervised.
 | 
				
			||||||
.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
 | 
					.It Fl P , -respawn-period Ar seconds
 | 
				
			||||||
Sets the length of a respawn period. The default is 10 seconds. See the
 | 
					Sets the length of a respawn period. See the
 | 
				
			||||||
description of --respawn-max for more information.
 | 
					description of --respawn-max for more information.
 | 
				
			||||||
.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
 | 
					.It Fl R , -retry Ar timeout | Ar signal Ns / Ns Ar timeout
 | 
				
			||||||
The retry specification can be either a timeout in seconds or multiple
 | 
					The retry specification can be either a timeout in seconds or multiple
 | 
				
			||||||
signal/timeout pairs (like SIGTERM/5).
 | 
					signal/timeout pairs (like SIGTERM/5).
 | 
				
			||||||
 | 
					If this option is not given, the default is SIGTERM/5.
 | 
				
			||||||
.It Fl r , -chroot Ar path
 | 
					.It Fl r , -chroot Ar path
 | 
				
			||||||
chroot to this directory before starting the daemon. All other paths, such
 | 
					chroot to this directory before starting the daemon. All other paths, such
 | 
				
			||||||
as the path to the daemon, chdir and pidfile, should be relative to the chroot.
 | 
					as the path to the daemon and chdir should be relative to the chroot.
 | 
				
			||||||
 | 
					.It Fl  , -signal Ar signal
 | 
				
			||||||
 | 
					Instruct a supervisor to signal the process it is supervising. The
 | 
				
			||||||
 | 
					process to communicate with is determined by the name of the service
 | 
				
			||||||
 | 
					taken from the RC_SVCNAME environment variable.
 | 
				
			||||||
.It Fl u , -user Ar user
 | 
					.It Fl u , -user Ar user
 | 
				
			||||||
Start the daemon as the specified user.
 | 
					Start the daemon as the specified user.
 | 
				
			||||||
.It Fl 1 , -stdout Ar logfile
 | 
					.It Fl 1 , -stdout Ar logfile
 | 
				
			||||||
@@ -135,8 +155,11 @@ The same thing as
 | 
				
			|||||||
.Fl 1 , -stdout
 | 
					.Fl 1 , -stdout
 | 
				
			||||||
but with the standard error output.
 | 
					but with the standard error output.
 | 
				
			||||||
.El
 | 
					.El
 | 
				
			||||||
.El
 | 
					 | 
				
			||||||
.Sh ENVIRONMENT
 | 
					.Sh ENVIRONMENT
 | 
				
			||||||
 | 
					.Va SSD_IONICELEVEL
 | 
				
			||||||
 | 
					can also set the IO scheduling priority of the daemon, but the command line
 | 
				
			||||||
 | 
					option takes precedence.
 | 
				
			||||||
 | 
					.Pp
 | 
				
			||||||
.Va SSD_NICELEVEL
 | 
					.Va SSD_NICELEVEL
 | 
				
			||||||
can also set the scheduling priority of the daemon, but the command line
 | 
					can also set the scheduling priority of the daemon, but the command line
 | 
				
			||||||
option takes precedence.
 | 
					option takes precedence.
 | 
				
			||||||
@@ -157,15 +180,16 @@ 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
 | 
					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
 | 
					to infinite respawning since there can never be 10 respawns within 5
 | 
				
			||||||
seconds.
 | 
					seconds.
 | 
				
			||||||
 | 
					.Sh NOTE
 | 
				
			||||||
 | 
					Invoking supervise-daemon requires both the RC_SVCNAME  environment
 | 
				
			||||||
 | 
					variable to be set and the name of the service as the first argument on
 | 
				
			||||||
 | 
					the command line, so it is best to invoke it inside a service script
 | 
				
			||||||
 | 
					rather than manually.
 | 
				
			||||||
.Sh SEE ALSO
 | 
					.Sh SEE ALSO
 | 
				
			||||||
.Xr chdir 2 ,
 | 
					.Xr chdir 2 ,
 | 
				
			||||||
.Xr chroot 2 ,
 | 
					.Xr chroot 2 ,
 | 
				
			||||||
.Xr getopt 3 ,
 | 
					.Xr getopt 3 ,
 | 
				
			||||||
.Xr nice 2 ,
 | 
					.Xr nice 2 ,
 | 
				
			||||||
.Xr rc_find_pids 3
 | 
					 | 
				
			||||||
.Sh BUGS
 | 
					 | 
				
			||||||
.Nm
 | 
					 | 
				
			||||||
cannot stop an interpreted daemon that no longer exists without a pidfile.
 | 
					 | 
				
			||||||
.Sh HISTORY
 | 
					.Sh HISTORY
 | 
				
			||||||
.Nm
 | 
					.Nm
 | 
				
			||||||
first appeared in Debian.
 | 
					first appeared in Debian.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										212
									
								
								meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,212 @@
 | 
				
			|||||||
 | 
					project('OpenRC', 'c',
 | 
				
			||||||
 | 
					  version : '0.44.8',
 | 
				
			||||||
 | 
					  license: 'BSD-2',
 | 
				
			||||||
 | 
					  default_options : [
 | 
				
			||||||
 | 
					    'c_std=c99',
 | 
				
			||||||
 | 
						'prefix=/usr',
 | 
				
			||||||
 | 
					    'warning_level=3',
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					  meson_version : '>=0.49.0')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cc = meson.get_compiler('c')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					audit_dep = dependency('audit', required : get_option('audit'))
 | 
				
			||||||
 | 
					if audit_dep.found()
 | 
				
			||||||
 | 
					  cc_audit_flags = '-DHAVE_AUDIT'
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  cc_audit_flags = []
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if get_option('branding') != ''
 | 
				
			||||||
 | 
					  cc_branding_flags = '-DBRANDING=' + get_option('branding')
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  cc_branding_flags = []
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					libname = get_option('libdir').split('/')[-1]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option_local_prefix = get_option('local_prefix')
 | 
				
			||||||
 | 
					if option_local_prefix == ''
 | 
				
			||||||
 | 
					  local_prefix = get_option('prefix') / 'usr' / 'local'
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  local_prefix = option_local_prefix
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option_os = get_option('os')
 | 
				
			||||||
 | 
					if option_os == ''
 | 
				
			||||||
 | 
					  uname = find_program('uname')
 | 
				
			||||||
 | 
					  r = run_command(uname, '-s')
 | 
				
			||||||
 | 
					  os = r.stdout().strip()
 | 
				
			||||||
 | 
					  os = '-'.join(os.split('/'))
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  os = option_os
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pam_dep = dependency('pam', required: false)
 | 
				
			||||||
 | 
					if not pam_dep.found()
 | 
				
			||||||
 | 
					  pam_dep = cc.find_library('pam', required: false)
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					if pam_dep.found() and get_option('pam')
 | 
				
			||||||
 | 
					  cc_pam_flags = '-DHAVE_PAM'
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  cc_pam_flags = []
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if not pam_dep.found() and get_option('pam')
 | 
				
			||||||
 | 
					  error('Pam was requested but could not be located')
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					option_pkg_prefix = get_option('pkg_prefix')
 | 
				
			||||||
 | 
					if option_pkg_prefix == ''
 | 
				
			||||||
 | 
					  if os == 'Dragonfly' or os == 'FreeBSD'
 | 
				
			||||||
 | 
					    pkg_prefix = '/usr/local'
 | 
				
			||||||
 | 
					  elif os == 'GNU' or os == 'GNU-kFreeBSD' or os == 'Linux'
 | 
				
			||||||
 | 
					    pkg_prefix = '/usr'
 | 
				
			||||||
 | 
					  elif os == 'NetBSD'
 | 
				
			||||||
 | 
					    pkg_prefix = '/usr/pkg'
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  pkg_prefix = option_pkg_prefix
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if get_option('split-usr') == 'auto'
 | 
				
			||||||
 | 
					  split_usr = run_command('test', '-L', '/bin').returncode() != 0
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  split_usr = get_option('split-usr') == 'true'
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rootprefix = get_option('rootprefix')
 | 
				
			||||||
 | 
					rootprefix_default = '/'
 | 
				
			||||||
 | 
					if rootprefix == ''
 | 
				
			||||||
 | 
					rootprefix = rootprefix_default
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					bindir = rootprefix / get_option('bindir')
 | 
				
			||||||
 | 
					libdir = rootprefix / get_option('libdir')
 | 
				
			||||||
 | 
					libexecdir = get_option('libexecdir')
 | 
				
			||||||
 | 
					if os == 'Linux' and libexecdir == 'libexec'
 | 
				
			||||||
 | 
					  libexecdir = 'lib'
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					libexecdir = rootprefix / libexecdir
 | 
				
			||||||
 | 
					rc_libexecdir = libexecdir / 'rc'
 | 
				
			||||||
 | 
					rc_bindir = rc_libexecdir / 'bin'
 | 
				
			||||||
 | 
					rc_sbindir = rc_libexecdir / 'sbin'
 | 
				
			||||||
 | 
					sbindir = rootprefix / get_option('sbindir')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					crypt_dep = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					selinux_dep = dependency('libselinux', required : get_option('selinux'))
 | 
				
			||||||
 | 
					pam_misc_dep = []
 | 
				
			||||||
 | 
					if selinux_dep.found()
 | 
				
			||||||
 | 
					  cc_selinux_flags = '-DHAVE_SELINUX'
 | 
				
			||||||
 | 
					  if pam_dep.found() and get_option('pam')
 | 
				
			||||||
 | 
					    pam_misc_dep = dependency('pam_misc', required: false)
 | 
				
			||||||
 | 
					    if not pam_misc_dep.found()
 | 
				
			||||||
 | 
					      pam_misc_dep = cc.find_library('pam_misc', required: false)
 | 
				
			||||||
 | 
					    endif
 | 
				
			||||||
 | 
					    if not pam_misc_dep.found() and get_option('pam')
 | 
				
			||||||
 | 
					      error('Pam was requested but could not be located')
 | 
				
			||||||
 | 
					    endif
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    crypt_dep = dependency('libcrypt', required : false)
 | 
				
			||||||
 | 
					    if not crypt_dep.found()
 | 
				
			||||||
 | 
					      crypt_dep = cc.find_library('crypt', required : true)
 | 
				
			||||||
 | 
					    endif
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  cc_selinux_flags = []
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					termcap = get_option('termcap')
 | 
				
			||||||
 | 
					if termcap != ''
 | 
				
			||||||
 | 
					  termcap_dep = dependency(termcap)
 | 
				
			||||||
 | 
					  termcap_flags = '-DHAVE_TERMCAP'
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					  termcap_dep = []
 | 
				
			||||||
 | 
					  termcap_flags = []
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if get_option('buildtype').startswith('debug')
 | 
				
			||||||
 | 
					  cc_debug_flags = ['-DRC_DEBUG']
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  cc_debug_flags = []
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if os == 'Linux' or os == 'GNU-kFreeBSD'
 | 
				
			||||||
 | 
					  cc_os_flags = ['-D_DEFAULT_SOURCE']
 | 
				
			||||||
 | 
					elif os == 'FreeBSD'
 | 
				
			||||||
 | 
					  cc_os_flags = ['-D_BSD_SOURCE']
 | 
				
			||||||
 | 
					elif os == 'GNU'
 | 
				
			||||||
 | 
					  cc_os_flags = ['-D_DEFAULT_SOURCE', '-DMAXPATHLEN=4096', '-DPATH_MAX=4096']
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Try and use some good cc flags if we're building from git. We don't use
 | 
				
			||||||
 | 
					# -pedantic as it will warn about our perfectly valid use of %m in our logger.
 | 
				
			||||||
 | 
					# We should be using -Wredundant-decls, but our library hidden proto stuff gives
 | 
				
			||||||
 | 
					# loads of warnings. I don't fully understand it (the hidden proto, not the
 | 
				
			||||||
 | 
					# warning) so we just silence the warning.
 | 
				
			||||||
 | 
					cc_warning_flags_test = [
 | 
				
			||||||
 | 
					  '-Wcast-align',
 | 
				
			||||||
 | 
					  '-Wcast-qual',
 | 
				
			||||||
 | 
					  '-Wdeclaration-after-statement',
 | 
				
			||||||
 | 
					  '-Wformat=2',
 | 
				
			||||||
 | 
					  '-Winline',
 | 
				
			||||||
 | 
					  '-Wmissing-declarations',
 | 
				
			||||||
 | 
					  '-Wmissing-format-attribute',
 | 
				
			||||||
 | 
					  '-Wmissing-noreturn',
 | 
				
			||||||
 | 
					  '-Wmissing-prototypes',
 | 
				
			||||||
 | 
					  '-Wnested-externs',
 | 
				
			||||||
 | 
					  '-Wpointer-arith',
 | 
				
			||||||
 | 
					  '-Wsequence-point',
 | 
				
			||||||
 | 
					  '-Wshadow',
 | 
				
			||||||
 | 
					  '-Wwrite-strings',
 | 
				
			||||||
 | 
					  '-Werror=implicit-function-declaration',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					cc_warning_flags = cc.get_supported_arguments(cc_warning_flags_test)
 | 
				
			||||||
 | 
					cc_flags = [cc_debug_flags, cc_os_flags, cc_warning_flags]
 | 
				
			||||||
 | 
					add_project_arguments(cc_flags, language : 'c')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					incdir = include_directories('src/includes')
 | 
				
			||||||
 | 
					einfo_incdir = include_directories('src/libeinfo')
 | 
				
			||||||
 | 
					rc_incdir = include_directories('src/librc')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					init_d_conf_data = configuration_data()
 | 
				
			||||||
 | 
					init_d_conf_data.set('SBINDIR', sbindir)
 | 
				
			||||||
 | 
					init_d_conf_data.set('PKG_PREFIX', pkg_prefix)
 | 
				
			||||||
 | 
					init_d_conf_data.set('SYSCONFDIR', get_option('sysconfdir'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dl_dep = cc.find_library('dl', required: false)
 | 
				
			||||||
 | 
					util_dep = cc.find_library('util', required: false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if get_option('bash-completions')
 | 
				
			||||||
 | 
					  subdir('bash-completion')
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					subdir('conf.d')
 | 
				
			||||||
 | 
					subdir('etc')
 | 
				
			||||||
 | 
					subdir('init.d')
 | 
				
			||||||
 | 
					subdir('local.d')
 | 
				
			||||||
 | 
					subdir('man')
 | 
				
			||||||
 | 
					if get_option('pam')
 | 
				
			||||||
 | 
					subdir('pam')
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					if get_option('pkgconfig')
 | 
				
			||||||
 | 
					subdir('pkgconfig')
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					subdir('scripts')
 | 
				
			||||||
 | 
					subdir('sh')
 | 
				
			||||||
 | 
					subdir('src')
 | 
				
			||||||
 | 
					subdir('support')
 | 
				
			||||||
 | 
					subdir('sysctl.d')
 | 
				
			||||||
 | 
					if get_option('zsh-completions')
 | 
				
			||||||
 | 
					  subdir('zsh-completion')
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					meson.add_install_script('tools/meson_runlevels.sh',
 | 
				
			||||||
 | 
					  os,
 | 
				
			||||||
 | 
					  get_option('newnet') ? 'yes' : 'no',
 | 
				
			||||||
 | 
					  rc_libexecdir,
 | 
				
			||||||
 | 
					  get_option('sysconfdir'),
 | 
				
			||||||
 | 
					  get_option('sysvinit') ? 'yes' : 'no')
 | 
				
			||||||
 | 
					meson.add_install_script('tools/meson_final.sh',
 | 
				
			||||||
 | 
					  rc_libexecdir,
 | 
				
			||||||
 | 
					  os)
 | 
				
			||||||
							
								
								
									
										37
									
								
								meson_options.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								meson_options.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
				
			|||||||
 | 
					option('audit', type : 'feature', value : 'auto',
 | 
				
			||||||
 | 
					  description : 'enable libaudit support')
 | 
				
			||||||
 | 
					option('bash-completions', type : 'boolean',
 | 
				
			||||||
 | 
					  description : 'install bash completions')
 | 
				
			||||||
 | 
					option('branding', type : 'string',
 | 
				
			||||||
 | 
					  description : 'Add branding to OpenRC')
 | 
				
			||||||
 | 
					option('local_prefix', type : 'string', value : '/usr/local',
 | 
				
			||||||
 | 
					  description : 'default location of user maintained packages')
 | 
				
			||||||
 | 
					option('newnet', type : 'boolean',
 | 
				
			||||||
 | 
					  description : 'build and install our networking scripts')
 | 
				
			||||||
 | 
					option('os', type : 'combo',
 | 
				
			||||||
 | 
					  choices :
 | 
				
			||||||
 | 
					    [ '', 'DragonFly', 'FreeBSD', 'GNU', 'GNU-kFreeBSD', 'Linux', 'NetBSD' ],
 | 
				
			||||||
 | 
					  description : 'Operating System (autodetected if not specified)')
 | 
				
			||||||
 | 
					option('pam', type : 'boolean',
 | 
				
			||||||
 | 
					  description : 'enable PAM support')
 | 
				
			||||||
 | 
					option('pkg_prefix', type : 'string',
 | 
				
			||||||
 | 
					  description : 'default location where packages are installed')
 | 
				
			||||||
 | 
					option('pkgconfig', type : 'boolean',
 | 
				
			||||||
 | 
					  description : 'build PKGConfig files')
 | 
				
			||||||
 | 
					option('rootprefix', type : 'string',
 | 
				
			||||||
 | 
					  description : 'override the root prefix')
 | 
				
			||||||
 | 
					option('selinux', type : 'feature', value : 'auto',
 | 
				
			||||||
 | 
					  description : 'enable SELinux support')
 | 
				
			||||||
 | 
					option('shell', type : 'string', value : '/bin/sh',
 | 
				
			||||||
 | 
					  description : 'Default posix compatible shell')
 | 
				
			||||||
 | 
					option('split-usr', type : 'combo',
 | 
				
			||||||
 | 
					  choices : ['auto', 'true', 'false'],
 | 
				
			||||||
 | 
					  description : '''/bin, /sbin aren't symlinks into /usr''')
 | 
				
			||||||
 | 
					option('sysvinit', type : 'boolean', value : false,
 | 
				
			||||||
 | 
					  description : 'enable SysVinit compatibility (linux only)')
 | 
				
			||||||
 | 
					option('termcap', type : 'combo',
 | 
				
			||||||
 | 
					  choices :
 | 
				
			||||||
 | 
					    [ '', 'ncurses', 'termcap' ],
 | 
				
			||||||
 | 
					  description : 'the termcap library to use')
 | 
				
			||||||
 | 
					option('zsh-completions', type : 'boolean',
 | 
				
			||||||
 | 
					  description : 'install zsh completions')
 | 
				
			||||||
@@ -52,13 +52,12 @@ ${SHLIB_NAME}:	${SOBJS}
 | 
				
			|||||||
	${SOBJS} ${LDADD}
 | 
						${SOBJS} ${LDADD}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
install: all
 | 
					install: all
 | 
				
			||||||
ifeq (${MKSTATICLIBS},yes)
 | 
					 | 
				
			||||||
	${INSTALL} -d ${DESTDIR}${LIBDIR}
 | 
						${INSTALL} -d ${DESTDIR}${LIBDIR}
 | 
				
			||||||
 | 
					ifeq (${MKSTATICLIBS},yes)
 | 
				
			||||||
	${INSTALL} -m ${LIBMODE} lib${LIB}.a ${DESTDIR}${LIBDIR}
 | 
						${INSTALL} -m ${LIBMODE} lib${LIB}.a ${DESTDIR}${LIBDIR}
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
	${INSTALL} -d ${DESTDIR}${SHLIBDIR}
 | 
						${INSTALL} -m ${LIBMODE} ${SHLIB_NAME} ${DESTDIR}${LIBDIR}
 | 
				
			||||||
	${INSTALL} -m ${LIBMODE} ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}
 | 
						ln -fs ${SHLIB_NAME} ${DESTDIR}${LIBDIR}/${SHLIB_LINK}
 | 
				
			||||||
	ln -fs ${SHLIB_NAME} ${DESTDIR}${SHLIBDIR}/${SHLIB_LINK}
 | 
					 | 
				
			||||||
	${INSTALL} -d ${DESTDIR}${INCDIR}
 | 
						${INSTALL} -d ${DESTDIR}${INCDIR}
 | 
				
			||||||
	for x in ${INCS}; do ${INSTALL} -m ${INCMODE} $$x ${DESTDIR}${INCDIR}; done
 | 
						for x in ${INCS}; do ${INSTALL} -m ${INCMODE} $$x ${DESTDIR}${INCDIR}; done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,3 +11,5 @@
 | 
				
			|||||||
# Generic definitions
 | 
					# Generic definitions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
include ${MK}/os-BSD.mk
 | 
					include ${MK}/os-BSD.mk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CPPFLAGS+=	-D_BSD_SOURCE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,6 @@
 | 
				
			|||||||
SFX=		.GNU-kFreeBSD.in
 | 
					SFX=		.GNU-kFreeBSD.in
 | 
				
			||||||
PKG_PREFIX?=	/usr
 | 
					PKG_PREFIX?=	/usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS+=	-D_BSD_SOURCE -D_XOPEN_SOURCE=700
 | 
					CPPFLAGS+=	-D_BSD_SOURCE
 | 
				
			||||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
					LIBDL=		-Wl,-Bdynamic -ldl
 | 
				
			||||||
LIBKVM?=
 | 
					LIBKVM?=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,5 +11,5 @@
 | 
				
			|||||||
SFX=		.GNU.in
 | 
					SFX=		.GNU.in
 | 
				
			||||||
PKG_PREFIX?=	/usr
 | 
					PKG_PREFIX?=	/usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700 -DMAXPATHLEN=4096 -DPATH_MAX=4096
 | 
					CPPFLAGS+=	-D_DEFAULT_SOURCE -DMAXPATHLEN=4096 -DPATH_MAX=4096
 | 
				
			||||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
					LIBDL=		-Wl,-Bdynamic -ldl
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,7 +11,7 @@
 | 
				
			|||||||
SFX=		.Linux.in
 | 
					SFX=		.Linux.in
 | 
				
			||||||
PKG_PREFIX?=	/usr
 | 
					PKG_PREFIX?=	/usr
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CPPFLAGS+=	-D_DEFAULT_SOURCE -D_XOPEN_SOURCE=700
 | 
					CPPFLAGS+=	-D_DEFAULT_SOURCE -D_POSIX_C_SOURCE=200809L -D_BSD_SOURCE -D_XOPEN_SOURCE
 | 
				
			||||||
LIBDL=		-Wl,-Bdynamic -ldl
 | 
					LIBDL=		-Wl,-Bdynamic -ldl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ifeq (${MKSELINUX},yes)
 | 
					ifeq (${MKSELINUX},yes)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ _PKG_SED:=		$(shell ${_PKG_SED_SH})
 | 
				
			|||||||
_LCL_SED_SH=		if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi
 | 
					_LCL_SED_SH=		if test "${PREFIX}" = "${LOCAL_PREFIX}"; then echo "-e 's:@LOCAL_PREFIX@::g'"; else echo "-e 's:@LOCAL_PREFIX@:${LOCAL_PREFIX}:g'"; fi
 | 
				
			||||||
_LCL_SED:=		$(shell ${_LCL_SED_SH})
 | 
					_LCL_SED:=		$(shell ${_LCL_SED_SH})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
SED_REPLACE=		-e 's:@SHELL@:${SH}:g' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@BINDIR@:${BINDIR}:g' -e 's:@SBINDIR@:${SBINDIR}:g' ${_PKG_SED} ${_LCL_SED}
 | 
					SED_REPLACE=		-e 's:@SHELL@:${SH}:' -e 's:@LIB@:${LIBNAME}:g' -e 's:@SYSCONFDIR@:${SYSCONFDIR}:g' -e 's:@LIBEXECDIR@:${LIBEXECDIR}:g' -e 's:@PREFIX@:${PREFIX}:g' -e 's:@BINDIR@:${BINDIR}:g' -e 's:@SBINDIR@:${SBINDIR}:g' ${_PKG_SED} ${_LCL_SED}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Tweak our shell scripts
 | 
					# Tweak our shell scripts
 | 
				
			||||||
%.sh: %.sh.in
 | 
					%.sh: %.sh.in
 | 
				
			||||||
@@ -53,7 +53,6 @@ realinstall: ${BIN} ${CONF} ${INC}
 | 
				
			|||||||
install: all realinstall ${INSTALLAFTER}
 | 
					install: all realinstall ${INSTALLAFTER}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
check test::
 | 
					check test::
 | 
				
			||||||
	@if test -e runtests.sh ; then ./runtests.sh || exit $$? ; fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# A lot of scripts don't have anything to clean
 | 
					# A lot of scripts don't have anything to clean
 | 
				
			||||||
# Also, some rm implentation require a file argument regardless of error
 | 
					# Also, some rm implentation require a file argument regardless of error
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										13
									
								
								mk/sys.mk
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								mk/sys.mk
									
									
									
									
									
								
							@@ -34,6 +34,7 @@ PICFLAG?=		-fPIC
 | 
				
			|||||||
SYSCONFDIR?=		${PREFIX}/etc
 | 
					SYSCONFDIR?=		${PREFIX}/etc
 | 
				
			||||||
INITDIR?=		${SYSCONFDIR}/init.d
 | 
					INITDIR?=		${SYSCONFDIR}/init.d
 | 
				
			||||||
CONFDIR?=		${SYSCONFDIR}/conf.d
 | 
					CONFDIR?=		${SYSCONFDIR}/conf.d
 | 
				
			||||||
 | 
					CONFMODE?=		0644
 | 
				
			||||||
LOCALDIR?=		${SYSCONFDIR}/local.d
 | 
					LOCALDIR?=		${SYSCONFDIR}/local.d
 | 
				
			||||||
SYSCTLDIR?=		${SYSCONFDIR}/sysctl.d
 | 
					SYSCTLDIR?=		${SYSCONFDIR}/sysctl.d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -44,20 +45,22 @@ SBINDIR?=		${PREFIX}/sbin
 | 
				
			|||||||
SBINMODE?=		0755
 | 
					SBINMODE?=		0755
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INCDIR?=		${UPREFIX}/include
 | 
					INCDIR?=		${UPREFIX}/include
 | 
				
			||||||
INCMODE?=		0444
 | 
					INCMODE?=		0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_LIBNAME_SH=		case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac
 | 
					_LIBNAME_SH=		case `readlink /lib` in /lib64|lib64) echo "lib64";; *) echo "lib";; esac
 | 
				
			||||||
_LIBNAME:=		$(shell ${_LIBNAME_SH})
 | 
					_LIBNAME:=		$(shell ${_LIBNAME_SH})
 | 
				
			||||||
LIBNAME?=		${_LIBNAME}
 | 
					LIBNAME?=		${_LIBNAME}
 | 
				
			||||||
LIBDIR?=		${UPREFIX}/${LIBNAME}
 | 
					LIBDIR?=		${UPREFIX}/${LIBNAME}
 | 
				
			||||||
LIBMODE?=		0444
 | 
					LIBMODE?=		0644
 | 
				
			||||||
SHLIBDIR?=		${PREFIX}/${LIBNAME}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIBEXECDIR?=		${PREFIX}/libexec/rc
 | 
					LIBEXECDIR?=		${PREFIX}/libexec/rc
 | 
				
			||||||
 | 
					PKGCONFIGDIR?= ${UPREFIX}/${LIBNAME}/pkgconfig
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MANPREFIX?=		${UPREFIX}/share
 | 
					MANPREFIX?=		${UPREFIX}/share
 | 
				
			||||||
MANDIR?=		${MANPREFIX}/man
 | 
					MANDIR?=		${MANPREFIX}/man
 | 
				
			||||||
MANMODE?=		0444
 | 
					MANMODE?=		0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BASHCOMPDIR?=		${UPREFIX}/share/bash-completion/completions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DATADIR?=		${UPREFIX}/share/openrc
 | 
					DATADIR?=		${UPREFIX}/share/openrc
 | 
				
			||||||
DATAMODE?=		0644
 | 
					DATAMODE?=		0644
 | 
				
			||||||
@@ -65,4 +68,4 @@ DATAMODE?=		0644
 | 
				
			|||||||
DOCDIR?=		${UPREFIX}/share/doc
 | 
					DOCDIR?=		${UPREFIX}/share/doc
 | 
				
			||||||
DOCMODE?=		0644
 | 
					DOCMODE?=		0644
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CONFMODE?=		0644
 | 
					ZSHCOMPDIR?=		${UPREFIX}/share/zsh/site-functions
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										9
									
								
								pam/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								pam/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					pam_dir =	get_option('sysconfdir') / 'pam.d'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pam_files = [
 | 
				
			||||||
 | 
					  'start-stop-daemon',
 | 
				
			||||||
 | 
					  'supervise-daemon',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(pam_files,
 | 
				
			||||||
 | 
					  install_dir : pam_dir)
 | 
				
			||||||
							
								
								
									
										6
									
								
								pam/start-stop-daemon
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								pam/start-stop-daemon
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					#%PAM-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					auth            required        pam_permit.so
 | 
				
			||||||
 | 
					account         required        pam_permit.so
 | 
				
			||||||
 | 
					password        required        pam_deny.so
 | 
				
			||||||
 | 
					session         optional        pam_limits.so
 | 
				
			||||||
							
								
								
									
										6
									
								
								pam/supervise-daemon
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								pam/supervise-daemon
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					#%PAM-1.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					auth            required        pam_permit.so
 | 
				
			||||||
 | 
					account         required        pam_permit.so
 | 
				
			||||||
 | 
					password        required        pam_deny.so
 | 
				
			||||||
 | 
					session         optional        pam_limits.so
 | 
				
			||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
DIR=	${LIBDIR}/pkgconfig
 | 
					DIR=	${PKGCONFIGDIR}
 | 
				
			||||||
SRCS=	einfo.pc.in openrc.pc.in
 | 
					SRCS=	einfo.pc.in openrc.pc.in
 | 
				
			||||||
INC=	einfo.pc openrc.pc
 | 
					INC=	einfo.pc openrc.pc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										22
									
								
								pkgconfig/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkgconfig/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
				
			|||||||
 | 
					pkgconfig_dir =	get_option('libdir') / 'pkgconfig'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pkgconfig_conf_data = configuration_data()
 | 
				
			||||||
 | 
					if rootprefix != '/'
 | 
				
			||||||
 | 
					  pkgconfig_conf_data.set('PREFIX', rootprefix)
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					  pkgconfig_conf_data.set('PREFIX', '')
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					pkgconfig_conf_data.set('LIB', get_option('libdir'))
 | 
				
			||||||
 | 
					pkgconfig_conf_data.set('VERSION', meson.project_version())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pkgconfig_files = [
 | 
				
			||||||
 | 
					  'einfo.pc.in',
 | 
				
			||||||
 | 
					  'openrc.pc.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					foreach file : pkgconfig_files
 | 
				
			||||||
 | 
					  configure_file(input : file,
 | 
				
			||||||
 | 
					    output : '@BASENAME@',
 | 
				
			||||||
 | 
					    configuration : pkgconfig_conf_data,
 | 
				
			||||||
 | 
					    install_dir : pkgconfig_dir)
 | 
				
			||||||
 | 
					endforeach
 | 
				
			||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# Using runit with OpenRC
 | 
					Using runit with OpenRC
 | 
				
			||||||
 | 
					=======================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Beginning with OpenRC-0.21, we support using runit [1] in place of
 | 
					Beginning with OpenRC-0.21, we support using runit [1] in place of
 | 
				
			||||||
start-stop-daemon for monitoring and restarting daemons.
 | 
					start-stop-daemon for monitoring and restarting daemons.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,9 +36,10 @@ BOOT-FreeBSD+=	hostid modules newsyslog savecore syslogd
 | 
				
			|||||||
# FreeBSD specific stuff
 | 
					# FreeBSD specific stuff
 | 
				
			||||||
BOOT-FreeBSD+=	adjkerntz dumpon syscons
 | 
					BOOT-FreeBSD+=	adjkerntz dumpon syscons
 | 
				
			||||||
 | 
					
 | 
				
			||||||
BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs termencoding
 | 
					BOOT-Linux+=	binfmt hwclock keymaps modules mtab procfs save-keymaps \
 | 
				
			||||||
 | 
						save-termencoding termencoding
 | 
				
			||||||
SHUTDOWN-Linux=	killprocs mount-ro
 | 
					SHUTDOWN-Linux=	killprocs mount-ro
 | 
				
			||||||
SYSINIT-Linux=	devfs dmesg sysfs
 | 
					SYSINIT-Linux=	devfs cgroups dmesg sysfs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Generic BSD stuff
 | 
					# Generic BSD stuff
 | 
				
			||||||
BOOT-NetBSD+=	hostid newsyslog savecore syslogd
 | 
					BOOT-NetBSD+=	hostid newsyslog savecore syslogd
 | 
				
			||||||
@@ -89,6 +90,12 @@ install:
 | 
				
			|||||||
			fi; \
 | 
								fi; \
 | 
				
			||||||
			ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
 | 
								ln -snf ${INITDIR}/"$$x" ${SHUTDOWNDIR}/"$$x" || exit $$?; done \
 | 
				
			||||||
	fi
 | 
						fi
 | 
				
			||||||
 | 
						if test "${MKSYSVINIT}" = yes && test "${OS}" = Linux; then \
 | 
				
			||||||
 | 
							for x in tty1 tty2 tty3 tty4 tty5 tty6; do \
 | 
				
			||||||
 | 
								ln -snf ${INITDIR}/agetty ${DESTDIR}/${INITDIR}/"agetty.$$x" || exit $$?; \
 | 
				
			||||||
 | 
								ln -snf ${INITDIR}/agetty.$$x ${DEFAULTDIR}/"agetty.$$x" || exit $$?; \
 | 
				
			||||||
 | 
							done; \
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
check test::
 | 
					check test::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,5 @@
 | 
				
			|||||||
# Using S6 with OpenRC
 | 
					Using S6 with OpenRC
 | 
				
			||||||
 | 
					====================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Beginning with OpenRC-0.16, we support using the s6 supervision suite
 | 
					Beginning with OpenRC-0.16, we support using the s6 supervision suite
 | 
				
			||||||
from Skarnet Software in place of start-stop-daemon for monitoring
 | 
					from Skarnet Software in place of start-stop-daemon for monitoring
 | 
				
			||||||
@@ -39,6 +40,10 @@ s6_service_path - the path to the s6 service directory. The default is
 | 
				
			|||||||
s6_svwait_options_start - the options to pass to s6-svwait when starting
 | 
					s6_svwait_options_start - the options to pass to s6-svwait when starting
 | 
				
			||||||
the service. If this is not set, s6-svwait will not be called.
 | 
					the service. If this is not set, s6-svwait will not be called.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					s6_force_kill - Should we try to force kill this service if the
 | 
				
			||||||
 | 
					s6_service_timeout_stop timeout expires when shutting down this service?
 | 
				
			||||||
 | 
					The default is yes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc
 | 
					s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc
 | 
				
			||||||
should wait for a service to go down when stopping.
 | 
					should wait for a service to go down when stopping.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option_arg=
 | 
					option_arg=
 | 
				
			||||||
poweroff_arg=
 | 
					poweroff_arg=
 | 
				
			||||||
@@ -21,4 +21,9 @@ if [ -z "${poweroff_arg}" ]; then
 | 
				
			|||||||
	poweroff_arg=--poweroff
 | 
						poweroff_arg=--poweroff
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@"
 | 
					script_args="$@"
 | 
				
			||||||
 | 
					if [ -z "${script_args}" ]; then
 | 
				
			||||||
 | 
						script_args=now
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "${script_args}"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								scripts/meson.build
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								scripts/meson.build
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					script_conf_data = configuration_data()
 | 
				
			||||||
 | 
					script_conf_data.set('SBINDIR', sbindir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					script_dir = rc_libexecdir / 'bin'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					scripts_internal = [
 | 
				
			||||||
 | 
					  'on_ac_power',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					scripts_Linux = [
 | 
				
			||||||
 | 
					  'rc-sstat.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					scripts_sysvinit = [
 | 
				
			||||||
 | 
					  'halt.in',
 | 
				
			||||||
 | 
					  'poweroff.in',
 | 
				
			||||||
 | 
					  'shutdown.in',
 | 
				
			||||||
 | 
					  'reboot.in',
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					install_data(scripts_internal,
 | 
				
			||||||
 | 
					  install_dir : script_dir,
 | 
				
			||||||
 | 
					  install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if os == 'Linux'
 | 
				
			||||||
 | 
					  foreach file : scripts_Linux
 | 
				
			||||||
 | 
					    configure_file(input : file,
 | 
				
			||||||
 | 
					      output : '@BASENAME@',
 | 
				
			||||||
 | 
					      configuration : script_conf_data,
 | 
				
			||||||
 | 
					      install_dir: script_dir,
 | 
				
			||||||
 | 
					      install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					  endforeach
 | 
				
			||||||
 | 
					  if get_option('sysvinit')
 | 
				
			||||||
 | 
					    foreach file : scripts_sysvinit
 | 
				
			||||||
 | 
					      configure_file(input : file,
 | 
				
			||||||
 | 
					        output : '@BASENAME@',
 | 
				
			||||||
 | 
					        configuration : script_conf_data,
 | 
				
			||||||
 | 
						    install_dir: script_dir,
 | 
				
			||||||
 | 
					        install_mode: 'rwxr-xr-x')
 | 
				
			||||||
 | 
					    endforeach
 | 
				
			||||||
 | 
					  endif
 | 
				
			||||||
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					meson.add_install_script('meson_script_links.sh', rc_libexecdir,
 | 
				
			||||||
 | 
						sbindir)
 | 
				
			||||||
							
								
								
									
										19
									
								
								scripts/meson_script_links.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										19
									
								
								scripts/meson_script_links.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -e
 | 
				
			||||||
 | 
					set -u
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rc_libexecdir="$1"
 | 
				
			||||||
 | 
					sbindir="$2"
 | 
				
			||||||
 | 
					binaries=" halt poweroff rc-sstat reboot shutdown"
 | 
				
			||||||
 | 
					for f in $binaries; do
 | 
				
			||||||
 | 
						if [ -x "${DESTDIR}${rc_libexecdir}/bin/${f}"  ]; then
 | 
				
			||||||
 | 
							ln -snf "${rc_libexecdir}/bin/${f}" \
 | 
				
			||||||
 | 
								"${DESTDIR}${sbindir}/${f}"
 | 
				
			||||||
 | 
						fi
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					# sysvinit is active when halt exits
 | 
				
			||||||
 | 
					if [ -x "${DESTDIR}${rc_libexecdir}/bin/halt"  ]; then
 | 
				
			||||||
 | 
						ln -snf "${sbindir}/openrc-init" \
 | 
				
			||||||
 | 
							"${DESTDIR}${sbindir}/init"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
@@ -18,9 +18,10 @@ if [ -f /proc/acpi/ac_adapter/*/state ]; then
 | 
				
			|||||||
		"state:"*"off-line") exit 128;;
 | 
							"state:"*"off-line") exit 128;;
 | 
				
			||||||
		esac
 | 
							esac
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
elif [ -f /sys/class/power_supply/*/online ]; then
 | 
					elif [ -d /sys/class/power_supply ]; then
 | 
				
			||||||
	cat /sys/class/power_supply/*/online | while read line; do
 | 
						for dir in /sys/class/power_supply/*/; do
 | 
				
			||||||
		[ "${line}" = 0 ] && exit 128
 | 
							[ "$(cat "${dir}/type")" != "Mains" ] && continue
 | 
				
			||||||
 | 
							[ "$(cat "${dir}/online")" = 0 ] && exit 128
 | 
				
			||||||
	done
 | 
						done
 | 
				
			||||||
elif [ -f /proc/pmu/info ]; then
 | 
					elif [ -f /proc/pmu/info ]; then
 | 
				
			||||||
	cat /proc/pmu/info | while read line; do
 | 
						cat /proc/pmu/info | while read line; do
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option_arg=
 | 
					option_arg=
 | 
				
			||||||
poweroff_arg=
 | 
					poweroff_arg=
 | 
				
			||||||
@@ -20,4 +20,9 @@ if [ -z "${poweroff_arg}" ]; then
 | 
				
			|||||||
	poweroff_arg=--poweroff
 | 
						poweroff_arg=--poweroff
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@"
 | 
					script_args="$@"
 | 
				
			||||||
 | 
					if [ -z "${script_args}" ]; then
 | 
				
			||||||
 | 
						script_args=now
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "${script_args}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
# Copyright (c) 2015 The OpenRC Authors.
 | 
					# Copyright (c) 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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
option_arg=
 | 
					option_arg=
 | 
				
			||||||
poweroff_arg=
 | 
					poweroff_arg=
 | 
				
			||||||
@@ -22,4 +22,9 @@ if [ -z "${poweroff_arg}" ]; then
 | 
				
			|||||||
	poweroff_arg=--reboot
 | 
						poweroff_arg=--reboot
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "$@"
 | 
					script_args="$@"
 | 
				
			||||||
 | 
					if [ -z "${script_args}" ]; then
 | 
				
			||||||
 | 
						script_args=now
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec @SBINDIR@/openrc-shutdown ${option_arg} ${poweroff_arg} "${script_args}"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,31 @@
 | 
				
			|||||||
#!@SHELL@
 | 
					#!/bin/sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
shutdown_arg=
 | 
					do_halt=false
 | 
				
			||||||
while getopts :akrhPHfFnct: opt; do
 | 
					while getopts :akrhPHfFnct: opt; do
 | 
				
			||||||
	case "$opt" in
 | 
						case "$opt" in
 | 
				
			||||||
		a) ;;
 | 
							a) ;;
 | 
				
			||||||
		k) ;;
 | 
							k) ;;
 | 
				
			||||||
		r) shutdown_arg=--reboot ;;
 | 
							r)
 | 
				
			||||||
		h) shutdown_arg=--halt ;;
 | 
								shutdown_arg=--reboot
 | 
				
			||||||
		P) shutdown_arg=--poweroff ;;
 | 
								;;
 | 
				
			||||||
		H) shutdown_arg=--halt ;;
 | 
							h)
 | 
				
			||||||
 | 
								do_halt=true
 | 
				
			||||||
 | 
								shutdown_arg=--poweroff
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							P)
 | 
				
			||||||
 | 
								if ! ${do_halt}; then
 | 
				
			||||||
 | 
									printf "%s\n" "The -P flag requires the -h flag" >&2
 | 
				
			||||||
 | 
									exit 1
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
								shutdown_arg=--poweroff
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
 | 
							H)
 | 
				
			||||||
 | 
								if ! ${do_halt}; then
 | 
				
			||||||
 | 
									printf "%s\n" "The -H flag requires the -h flag" >&2
 | 
				
			||||||
 | 
									exit 1
 | 
				
			||||||
 | 
								fi
 | 
				
			||||||
 | 
								shutdown_arg=--halt
 | 
				
			||||||
 | 
								;;
 | 
				
			||||||
		f) ;;
 | 
							f) ;;
 | 
				
			||||||
		F) ;;
 | 
							F) ;;
 | 
				
			||||||
		n) ;;
 | 
							n) ;;
 | 
				
			||||||
@@ -25,5 +42,5 @@ if [ -z "${shutdown_arg}" ]; then
 | 
				
			|||||||
	shutdown_arg=--single
 | 
						shutdown_arg=--single
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo @SBINDIR@/openrc-shutdown ${shutdown_arg} "$@"
 | 
					printf "%s %s\n" "@SBINDIR@/openrc-shutdown ${shutdown_arg}" "$@"
 | 
				
			||||||
exec @SBINDIR@/openrc-shutdown ${shutdown_arg} "$@"
 | 
					exec @SBINDIR@/openrc-shutdown ${shutdown_arg} "$@"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										495
									
								
								service-script-guide.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										495
									
								
								service-script-guide.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,495 @@
 | 
				
			|||||||
 | 
					OpenRC Service Script Writing Guide
 | 
				
			||||||
 | 
					===================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This document is aimed at developers or packagers who
 | 
				
			||||||
 | 
					write OpenRC service scripts, either for their own projects, or for
 | 
				
			||||||
 | 
					the packages they maintain. It contains advice, suggestions, tips,
 | 
				
			||||||
 | 
					tricks, hints, and counsel; cautions, warnings, heads-ups,
 | 
				
			||||||
 | 
					admonitions, proscriptions, enjoinders, and reprimands.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It is intended to prevent common mistakes that are found "in the wild"
 | 
				
			||||||
 | 
					by pointing out those mistakes and suggesting alternatives.  Each
 | 
				
			||||||
 | 
					good/bad thing that you should/not do has a section devoted to it. We
 | 
				
			||||||
 | 
					don't consider anything exotic, and assume that you will use
 | 
				
			||||||
 | 
					start-stop-daemon to manage a fairly typical long-running UNIX
 | 
				
			||||||
 | 
					process.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Syntax of Service Scripts
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Service scripts are shell scripts. OpenRC aims at using only the standardized 
 | 
				
			||||||
 | 
					POSIX sh subset for portability reasons. The default interpreter (build-time 
 | 
				
			||||||
 | 
					toggle) is `/bin/sh`, so using for example mksh is not a problem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OpenRC has been tested with busybox sh, ash, dash, bash, mksh, zsh and possibly 
 | 
				
			||||||
 | 
					others. Using busybox sh has been difficult as it replaces commands with 
 | 
				
			||||||
 | 
					builtins that don't offer the expected features.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The interpreter for service scripts is `#!/sbin/openrc-run`.
 | 
				
			||||||
 | 
					Not using this interpreter will break the use of dependencies and is not 
 | 
				
			||||||
 | 
					supported. (iow: if you insist on using `#!/bin/sh` you're on your own)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A `depend` function declares the dependencies of this service script.
 | 
				
			||||||
 | 
					All scripts must have start/stop/status functions, but defaults are
 | 
				
			||||||
 | 
					provided and should be used unless you have a very strong reason not to
 | 
				
			||||||
 | 
					use them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Extra functions can be added easily:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					extra_commands="checkconfig"
 | 
				
			||||||
 | 
					checkconfig() {
 | 
				
			||||||
 | 
						doSomething
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This exports the checkconfig function so that `/etc/init.d/someservice 
 | 
				
			||||||
 | 
					checkconfig` will be available, and it "just" runs this function.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					While commands defined in `extra_commands` are always available, commands
 | 
				
			||||||
 | 
					defined in `extra_started_commands` will only work when the service is started
 | 
				
			||||||
 | 
					and those defined in `extra_stopped_commands` will only work when the service is
 | 
				
			||||||
 | 
					stopped. This can be used for implementing graceful reload and similar
 | 
				
			||||||
 | 
					behaviour.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Adding a restart function will not work, this is a design decision within 
 | 
				
			||||||
 | 
					OpenRC. Since there may be dependencies involved (e.g. network -> apache) a 
 | 
				
			||||||
 | 
					restart function is in general not going to work. 
 | 
				
			||||||
 | 
					restart is internally mapped to `stop()` + `start()` (plus handling dependencies).
 | 
				
			||||||
 | 
					If a service needs to behave differently when it is being restarted vs
 | 
				
			||||||
 | 
					started or stopped, it should test the `$RC_CMD` variable, for example:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					[ "$RC_CMD" = restart ] && do_something
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The Depend Function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This function declares the dependencies for a service script. This
 | 
				
			||||||
 | 
					determines the order the service scripts start.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					depend() {
 | 
				
			||||||
 | 
						need net
 | 
				
			||||||
 | 
						use dns logger netmount
 | 
				
			||||||
 | 
						want coolservice
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`need` declares a hard dependency - net always needs to be started before this 
 | 
				
			||||||
 | 
						service does
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`use` is a soft dependency - if dns, logger or netmount is in this runlevel 
 | 
				
			||||||
 | 
						start it before, but we don't care if it's not in this runlevel.
 | 
				
			||||||
 | 
						`want` is between need and use - try to start coolservice if it is
 | 
				
			||||||
 | 
						installed on the system, regardless of whether it is in the
 | 
				
			||||||
 | 
						runlevel, but we don't care if it starts.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`before` declares that we need to be started before another service
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`after` declares that we need to be started after another service, without 
 | 
				
			||||||
 | 
						creating a dependency (so on calling stop the two are independent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`provide` allows multiple implementations to provide one service type, e.g.:
 | 
				
			||||||
 | 
						`provide cron` is set in all cron-daemons, so any one of them started 
 | 
				
			||||||
 | 
						satisfies a cron dependency
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`keyword` allows platform-specific overrides, e.g. `keyword -lxc` makes this 
 | 
				
			||||||
 | 
						service script a noop in lxc containers. Useful for things like keymaps, 
 | 
				
			||||||
 | 
						module loading etc. that are either platform-specific or not available 
 | 
				
			||||||
 | 
						in containers/virtualization/...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FIXME: Anything missing in this list?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The Default Functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					All service scripts are assumed to have the following functions:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					start()
 | 
				
			||||||
 | 
					stop()
 | 
				
			||||||
 | 
					status()
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are default implementations in `lib/rc/sh/openrc-run.sh` - this allows very 
 | 
				
			||||||
 | 
					compact service scripts. These functions can be overridden per service script as 
 | 
				
			||||||
 | 
					needed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The default functions assume the following variables to be set in the service 
 | 
				
			||||||
 | 
					script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					command=
 | 
				
			||||||
 | 
					command_args=
 | 
				
			||||||
 | 
					pidfile=
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Thus the 'smallest' service scripts can be half a dozen lines long
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Don't write your own start/stop functions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					OpenRC is capable of stopping and starting most daemons based on the
 | 
				
			||||||
 | 
					information that you give it. For a well-behaved daemon that
 | 
				
			||||||
 | 
					backgrounds itself and writes its own PID file by default, the
 | 
				
			||||||
 | 
					following OpenRC variables are likely all that you'll need:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * command
 | 
				
			||||||
 | 
					  * command_args
 | 
				
			||||||
 | 
					  * pidfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Given those three pieces of information, OpenRC will be able to start
 | 
				
			||||||
 | 
					and stop the daemon on its own. The following is taken from an
 | 
				
			||||||
 | 
					[OpenNTPD](http://www.openntpd.org/) service script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					command="/usr/sbin/ntpd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The special RC_SVCNAME variable contains the name of this service.
 | 
				
			||||||
 | 
					pidfile="/run/${RC_SVCNAME}.pid"
 | 
				
			||||||
 | 
					command_args="-p ${pidfile}"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the daemon runs in the foreground by default but has options to
 | 
				
			||||||
 | 
					background itself and to create a pidfile, then you'll also need
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * command_args_background
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					That variable should contain the flags needed to background your
 | 
				
			||||||
 | 
					daemon, and to make it write a PID file. Take for example the
 | 
				
			||||||
 | 
					following snippet of an
 | 
				
			||||||
 | 
					[NRPE](https://github.com/NagiosEnterprises/nrpe) service script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					command="/usr/bin/nrpe"
 | 
				
			||||||
 | 
					command_args="--config=/etc/nagios/nrpe.cfg"
 | 
				
			||||||
 | 
					command_args_background="--daemon"
 | 
				
			||||||
 | 
					pidfile="/run/${RC_SVCNAME}.pid"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since NRPE runs as *root* by default, it needs no special permissions
 | 
				
			||||||
 | 
					to write to `/run/nrpe.pid`. OpenRC takes care of starting and
 | 
				
			||||||
 | 
					stopping the daemon with the appropriate arguments, even passing the
 | 
				
			||||||
 | 
					`--daemon` flag during startup to force NRPE into the background (NRPE
 | 
				
			||||||
 | 
					knows how to write its own PID file).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					But what if the daemon isn't so well behaved? What if it doesn't know
 | 
				
			||||||
 | 
					how to background itself or create a pidfile? If it can do neither,
 | 
				
			||||||
 | 
					then use,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * command_background=true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					which will additionally pass `--make-pidfile` to start-stop-daemon,
 | 
				
			||||||
 | 
					causing it to create the `$pidfile` for you (rather than the daemon
 | 
				
			||||||
 | 
					itself being responsible for creating the PID file).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your daemon doesn't know how to change its own user or group, then
 | 
				
			||||||
 | 
					you can tell start-stop-daemon to launch it as an unprivileged user
 | 
				
			||||||
 | 
					with
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * command_user="user:group"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Finally, if your daemon always forks into the background but fails to
 | 
				
			||||||
 | 
					create a PID file, then your only option is to use
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  * procname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					With `procname`, OpenRC will try to find the running daemon by
 | 
				
			||||||
 | 
					matching the name of its process. That's not so reliable, but daemons
 | 
				
			||||||
 | 
					shouldn't background themselves without creating a PID file in the
 | 
				
			||||||
 | 
					first place. The next example is part of the [CA NetConsole
 | 
				
			||||||
 | 
					Daemon](https://oss.oracle.com/projects/cancd/) service script:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					command="/usr/sbin/cancd"
 | 
				
			||||||
 | 
					command_args="-p ${CANCD_PORT}
 | 
				
			||||||
 | 
					              -l ${CANCD_LOG_DIR}
 | 
				
			||||||
 | 
					              -o ${CANCD_LOG_FORMAT}"
 | 
				
			||||||
 | 
					command_user="cancd"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# cancd daemonizes itself, but doesn't write a PID file and doesn't
 | 
				
			||||||
 | 
					# have an option to run in the foreground. So, the best we can do
 | 
				
			||||||
 | 
					# is try to match the process name when stopping it.
 | 
				
			||||||
 | 
					procname="cancd"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To recap, in order of preference:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. If the daemon backgrounds itself and creates its own PID file, use
 | 
				
			||||||
 | 
					     `pidfile`.
 | 
				
			||||||
 | 
					  2. If the daemon does not background itself (or has an option to run
 | 
				
			||||||
 | 
					     in the foreground) and does not create a PID file, then use
 | 
				
			||||||
 | 
					     `command_background=true` and `pidfile`.
 | 
				
			||||||
 | 
					  3. If the daemon backgrounds itself and does not create a PID file,
 | 
				
			||||||
 | 
					     use `procname` instead of `pidfile`. But, if your daemon has the
 | 
				
			||||||
 | 
					     option to run in the foreground, then you should do that instead
 | 
				
			||||||
 | 
					     (that would be the case in the previous item).
 | 
				
			||||||
 | 
					  4. The last case, where the daemon does not background itself but
 | 
				
			||||||
 | 
					     does create a PID file, doesn't make much sense. If there's a way
 | 
				
			||||||
 | 
					     to disable the daemon's PID file (or, to write it straight into the
 | 
				
			||||||
 | 
					     garbage), then do that, and use `command_background=true`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Reloading your daemon's configuration
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Many daemons will reload their configuration files in response to a
 | 
				
			||||||
 | 
					signal. Suppose your daemon will reload its configuration in response
 | 
				
			||||||
 | 
					to a `SIGHUP`. It's possible to add a new "reload" command to your
 | 
				
			||||||
 | 
					service script that performs this action. First, tell the service
 | 
				
			||||||
 | 
					script about the new command.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					extra_started_commands="reload"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					We use `extra_started_commands` as opposed to `extra_commands` because
 | 
				
			||||||
 | 
					the "reload" action is only valid while the daemon is running (that
 | 
				
			||||||
 | 
					is, started). Now, start-stop-daemon can be used to send the signal to
 | 
				
			||||||
 | 
					the appropriate process (assuming you've defined the `pidfile`
 | 
				
			||||||
 | 
					variable elsewhere):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					reload() {
 | 
				
			||||||
 | 
					  ebegin "Reloading ${RC_SVCNAME}"
 | 
				
			||||||
 | 
					  start-stop-daemon --signal HUP --pidfile "${pidfile}"
 | 
				
			||||||
 | 
					  eend $?
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Don't restart/reload with a broken config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Often, users will start a daemon, make some configuration change, and
 | 
				
			||||||
 | 
					then attempt to restart the daemon. If the recent configuration change
 | 
				
			||||||
 | 
					contains a mistake, the result will be that the daemon is stopped but
 | 
				
			||||||
 | 
					then cannot be started again (due to the configuration error). It's
 | 
				
			||||||
 | 
					possible to prevent that situation with a function that checks for
 | 
				
			||||||
 | 
					configuration errors, and a combination of the `start_pre` and
 | 
				
			||||||
 | 
					`stop_pre` hooks.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					checkconfig() {
 | 
				
			||||||
 | 
					  # However you want to check this...
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start_pre() {
 | 
				
			||||||
 | 
					  # If this isn't a restart, make sure that the user's config isn't
 | 
				
			||||||
 | 
					  # busted before we try to start the daemon (this will produce
 | 
				
			||||||
 | 
					  # better error messages than if we just try to start it blindly).
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  # If, on the other hand, this *is* a restart, then the stop_pre
 | 
				
			||||||
 | 
					  # action will have ensured that the config is usable and we don't
 | 
				
			||||||
 | 
					  # need to do that again.
 | 
				
			||||||
 | 
					  if [ "${RC_CMD}" != "restart" ] ; then
 | 
				
			||||||
 | 
					    checkconfig || return $?
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stop_pre() {
 | 
				
			||||||
 | 
					  # If this is a restart, check to make sure the user's config
 | 
				
			||||||
 | 
					  # isn't busted before we stop the running daemon.
 | 
				
			||||||
 | 
					  if [ "${RC_CMD}" = "restart" ] ; then
 | 
				
			||||||
 | 
					      checkconfig || return $?
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To prevent a *reload* with a broken config, keep it simple:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					reload() {
 | 
				
			||||||
 | 
					  checkconfig || return $?
 | 
				
			||||||
 | 
					  ebegin "Reloading ${RC_SVCNAME}"
 | 
				
			||||||
 | 
					  start-stop-daemon --signal HUP --pidfile "${pidfile}"
 | 
				
			||||||
 | 
					  eend $?
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## PID files should be writable only by root
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PID files must be writable only by *root*, which means additionally
 | 
				
			||||||
 | 
					that they must live in a *root*-owned directory. This directory is
 | 
				
			||||||
 | 
					normally /run under Linux and /var/run under other operating systems.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Some daemons run as an unprivileged user account, and create their PID
 | 
				
			||||||
 | 
					files (as the unprivileged user) in a path like
 | 
				
			||||||
 | 
					`/var/run/foo/foo.pid`. That can usually be exploited by the unprivileged
 | 
				
			||||||
 | 
					user to kill *root* processes, since when a service is stopped, *root*
 | 
				
			||||||
 | 
					usually sends a SIGTERM to the contents of the PID file (which are
 | 
				
			||||||
 | 
					controlled by the unprivileged user). The main warning sign for that
 | 
				
			||||||
 | 
					problem is using `checkpath` to set ownership on the directory
 | 
				
			||||||
 | 
					containing the PID file. For example,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					# BAD BAD BAD BAD BAD BAD BAD BAD
 | 
				
			||||||
 | 
					start_pre() {
 | 
				
			||||||
 | 
					  # Ensure that the pidfile directory is writable by the foo user/group.
 | 
				
			||||||
 | 
					  checkpath --directory --mode 0700 --owner foo:foo "/var/run/foo"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					# BAD BAD BAD BAD BAD BAD BAD BAD
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If the *foo* user owns `/var/run/foo`, then he can put whatever he wants
 | 
				
			||||||
 | 
					in the `/var/run/foo/foo.pid` file. Even if *root* owns the PID file, the
 | 
				
			||||||
 | 
					*foo* user can delete it and replace it with his own. To avoid
 | 
				
			||||||
 | 
					security concerns, the PID file must be created as *root* and live in
 | 
				
			||||||
 | 
					a *root*-owned directory. If your daemon is responsible for forking
 | 
				
			||||||
 | 
					and writing its own PID file but the PID file is still owned by the
 | 
				
			||||||
 | 
					unprivileged runtime user, then you may have an upstream issue.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Once the PID file is being created as *root* (before dropping
 | 
				
			||||||
 | 
					privileges), it can be written directly to a *root*-owned
 | 
				
			||||||
 | 
					directory.  For example, the *foo* daemon might write
 | 
				
			||||||
 | 
					`/var/run/foo.pid`. No calls to checkpath are needed. Note: there is
 | 
				
			||||||
 | 
					nothing technically wrong with using a directory structure like
 | 
				
			||||||
 | 
					`/var/run/foo/foo.pid`, so long as *root* owns the PID file and the
 | 
				
			||||||
 | 
					directory containing it.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ideally (see "Upstream your service scripts"), your service script
 | 
				
			||||||
 | 
					will be integrated upstream and the build system will determine the
 | 
				
			||||||
 | 
					appropriate directory for the pid file. For example,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					pidfile="@piddir@/${RC_SVCNAME}.pid"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A decent example of this is the [Nagios core service
 | 
				
			||||||
 | 
					script](https://github.com/NagiosEnterprises/nagioscore/blob/master/openrc-init.in),
 | 
				
			||||||
 | 
					where the full path to the PID file is specified at build-time.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Don't let the user control the PID file location
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It's usually a mistake to let the end user control the PID file
 | 
				
			||||||
 | 
					location through a conf.d variable, for a few reasons:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. When the PID file path is controlled by the user, you need to
 | 
				
			||||||
 | 
					     ensure that its parent directory exists and is writable. This
 | 
				
			||||||
 | 
					     adds unnecessary code to the service script.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. If the PID file path changes while the service is running, then
 | 
				
			||||||
 | 
					     you'll find yourself unable to stop the service.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  3. The directory that should contain the PID file is best determined
 | 
				
			||||||
 | 
					     by the upstream build system (see "Upstream your service scripts").
 | 
				
			||||||
 | 
					     On Linux, the preferred location these days is `/run`. Other systems
 | 
				
			||||||
 | 
					     still use `/var/run`, though, and a `./configure` script is the
 | 
				
			||||||
 | 
					     best place to decide which one you want.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  4. Nobody cares where the PID file is located, anyway.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Since OpenRC service names must be unique, a value of
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					pidfile="/var/run/${RC_SVCNAME}.pid"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					guarantees that your PID file has a unique name.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Upstream your service scripts (for packagers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The ideal place for an OpenRC service script is **upstream**. Much like
 | 
				
			||||||
 | 
					systemd services, a well-crafted OpenRC service script should be
 | 
				
			||||||
 | 
					distribution-agnostic, and the best place for it is upstream. Why? For
 | 
				
			||||||
 | 
					two reasons. First, having it upstream means that there's a single
 | 
				
			||||||
 | 
					authoritative source for improvements. Second, a few paths in every
 | 
				
			||||||
 | 
					service script are dependent upon flags passed to the build system. For
 | 
				
			||||||
 | 
					example,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					command=/usr/bin/foo
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					in an autotools-based build system should really be
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					command=@bindir@/foo
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					so that the user's value of `--bindir` is respected. If you keep the
 | 
				
			||||||
 | 
					service script in your own distribution's repository, then you have to
 | 
				
			||||||
 | 
					keep the command path and package synchronized yourself, and that's no
 | 
				
			||||||
 | 
					fun.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Be wary of "need net" dependencies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					There are two things you need to know about "need net" dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. They are not satisfied by the loopback interface, so "need net"
 | 
				
			||||||
 | 
					     requires some *other* interface to be up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. Depending on the value of `rc_depend_strict` in `rc.conf`, the
 | 
				
			||||||
 | 
					     "need net" will be satisfied when either *any* non-loopback
 | 
				
			||||||
 | 
					     interface is up, or when *all* non-loopback interfaces are up.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The first item means that "need net" is wrong for daemons that are
 | 
				
			||||||
 | 
					happy with `0.0.0.0`, and the second point means that "need net" is
 | 
				
			||||||
 | 
					wrong for daemons that need a particular (for example, the WAN)
 | 
				
			||||||
 | 
					interface. We'll consider the two most common users of "need net";
 | 
				
			||||||
 | 
					network clients who access some network resource, and network servers
 | 
				
			||||||
 | 
					who provide them.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Network clients
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Network clients typically want the WAN interface to be up. That may
 | 
				
			||||||
 | 
					tempt you to depend on the WAN interface; but first, you should ask
 | 
				
			||||||
 | 
					yourself a question: does anything bad happen if the WAN interface is
 | 
				
			||||||
 | 
					not available? In other words, if the administrator wants to disable
 | 
				
			||||||
 | 
					the WAN, should the service be stopped? Usually the answer to that
 | 
				
			||||||
 | 
					question is "no," and in that case, you should forego the "net"
 | 
				
			||||||
 | 
					dependency entirely.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Suppose, for example, that your service retrieves virus signature
 | 
				
			||||||
 | 
					updates from the internet. In order to do its job correctly, it needs
 | 
				
			||||||
 | 
					a (working) internet connection. However, the service itself does not
 | 
				
			||||||
 | 
					require the WAN interface to be up: if it is, great; otherwise, the
 | 
				
			||||||
 | 
					worst that will happen is that a "server unavailable" warning will be
 | 
				
			||||||
 | 
					logged. The signature update service will not crash, and—perhaps more
 | 
				
			||||||
 | 
					importantly—you don't want it to terminate if the administrator turns
 | 
				
			||||||
 | 
					off the WAN interface for a second.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Network servers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Network servers are generally easier to handle than their client
 | 
				
			||||||
 | 
					counterparts. Most server daemons listen on `0.0.0.0` (all addresses)
 | 
				
			||||||
 | 
					by default, and are therefore satisfied to have the loopback interface
 | 
				
			||||||
 | 
					present and operational. OpenRC ships with the loopback service in the
 | 
				
			||||||
 | 
					*boot* runlevel, and therefore most server daemons require no further
 | 
				
			||||||
 | 
					network dependencies.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The exceptions to this rule are those daemons who produce negative
 | 
				
			||||||
 | 
					side-effects when the WAN is unavailable. For example, the Nagios
 | 
				
			||||||
 | 
					server daemon will generate "the sky is falling" alerts for as long as
 | 
				
			||||||
 | 
					your monitored hosts are unreachable. So in that case, you should
 | 
				
			||||||
 | 
					require some other interface (often the WAN) to be up. A "need"
 | 
				
			||||||
 | 
					dependency would be appropriate, because you want Nagios to be
 | 
				
			||||||
 | 
					stopped before the network is taken down.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If your daemon can optionally be configured to listen on a particular
 | 
				
			||||||
 | 
					interface, then please see the "Depending on a particular interface"
 | 
				
			||||||
 | 
					section.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Depending on a particular interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					If you need to depend on one particular interface, usually it's not
 | 
				
			||||||
 | 
					easy to determine programmatically what that interface is. For
 | 
				
			||||||
 | 
					example, if your *sshd* daemon listens on `192.168.1.100` (rather than
 | 
				
			||||||
 | 
					`0.0.0.0`), then you have two problems:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  1. Parsing `sshd_config` to figure that out; and
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  2. Determining which network service name corresponds to the
 | 
				
			||||||
 | 
					     interface for `192.168.1.100`.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					It's generally a bad idea to parse config files in your service
 | 
				
			||||||
 | 
					scripts, but the second problem is the harder one. Instead, the most
 | 
				
			||||||
 | 
					robust (i.e. the laziest) approach is to make the user specify the
 | 
				
			||||||
 | 
					dependency when he makes a change to sshd_config. Include something
 | 
				
			||||||
 | 
					like the following in the service configuration file,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sh
 | 
				
			||||||
 | 
					# Specify the network service that corresponds to the "bind" setting
 | 
				
			||||||
 | 
					# in your configuration file. For example, if you bind to 127.0.0.1,
 | 
				
			||||||
 | 
					# this should be set to "loopback" which provides the loopback interface.
 | 
				
			||||||
 | 
					rc_need="loopback"
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					This is a sensible default for daemons that are happy with `0.0.0.0`,
 | 
				
			||||||
 | 
					but lets the user specify something else, like `rc_need="net.wan"` if
 | 
				
			||||||
 | 
					he needs it. The burden is on the user to determine the appropriate
 | 
				
			||||||
 | 
					service whenever he changes the daemon's configuration file.
 | 
				
			||||||
							
								
								
									
										3
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								sh/.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,10 +1,7 @@
 | 
				
			|||||||
functions.sh
 | 
					functions.sh
 | 
				
			||||||
gendepends.sh
 | 
					gendepends.sh
 | 
				
			||||||
rc-functions.sh
 | 
					 | 
				
			||||||
openrc-run.sh
 | 
					openrc-run.sh
 | 
				
			||||||
cgroup-release-agent.sh
 | 
					cgroup-release-agent.sh
 | 
				
			||||||
init.sh
 | 
					init.sh
 | 
				
			||||||
init-early.sh
 | 
					init-early.sh
 | 
				
			||||||
rc-cgroup.sh
 | 
					 | 
				
			||||||
migrate-to-run.sh
 | 
					 | 
				
			||||||
binfmt.sh
 | 
					binfmt.sh
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user