Compare commits
	
		
			18 Commits
		
	
	
		
			0.16
			...
			mount-serv
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 7c9f1add21 | ||
|   | a643e918dd | ||
|   | eeadca0b8a | ||
|   | dde339070b | ||
|   | 1736be3bc3 | ||
|   | a36a635b01 | ||
|   | 9310ccc06b | ||
|   | 0c2e4eb3cd | ||
|   | d2ce07e227 | ||
|   | b209fe3859 | ||
|   | c94c8288cd | ||
|   | bcb9c44e73 | ||
|   | bbabf546f9 | ||
|   | a7fcc1e264 | ||
|   | b79d058f16 | ||
|   | ddce529c71 | ||
|   | e372f97beb | ||
|   | c2abf4b436 | 
							
								
								
									
										95
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								ChangeLog
									
									
									
									
									
								
							| @@ -1,3 +1,98 @@ | |||||||
|  | commit d2ce07e227ec95370e8aee5f1199edc6ad61aff9 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Add rc-sstat script | ||||||
|  |      | ||||||
|  |     The rc-sstat script is written to display status of s6 services and | ||||||
|  |     run rc-status to display all services status. | ||||||
|  |      | ||||||
|  |     This currently only works on Linux. | ||||||
|  |  | ||||||
|  | commit b209fe3859c05c286037843bb34058f849c54b15 | ||||||
|  | Author: Mike Gilbert <floppym@gentoo.org> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     bootmisc: Don't call dmesg in systemd-nspawn containers | ||||||
|  |      | ||||||
|  |     This fixes #57. | ||||||
|  |  | ||||||
|  | commit c94c8288cd5217b01c24d6f048c64ebbc30bee02 | ||||||
|  | Author: Mike Frysinger <vapier@gentoo.org> | ||||||
|  | Commit: Mike Frysinger <vapier@gentoo.org> | ||||||
|  |  | ||||||
|  |     fix link to s6 website | ||||||
|  |  | ||||||
|  | commit bcb9c44e73ccf332c7c961a6f82520699c6e776d | ||||||
|  | Author: Mike Gilbert <floppym@gentoo.org> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     man: Document the stopsig variable | ||||||
|  |      | ||||||
|  |     This variable can be used to set the signal to send if the service is | ||||||
|  |     using start-stop-daemon. | ||||||
|  |      | ||||||
|  |     This fixes #56 | ||||||
|  |  | ||||||
|  | commit bbabf546f9d72cbfc48bd839a6d01b402ee6cced | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Document bash's handling of ulimit options | ||||||
|  |      | ||||||
|  |     When bash is used in posix mode for the shell, the ulimit command uses | ||||||
|  |     a block size of 512 bytes for the -c and -f options. | ||||||
|  |      | ||||||
|  |     X-Gentoo-Bug: 549238 | ||||||
|  |     X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=549238 | ||||||
|  |  | ||||||
|  | commit a7fcc1e264b035177b4e524a40b27145baa86969 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     S6: kick the scanner and sleep 1.5 seconds to avoid a race condition | ||||||
|  |  | ||||||
|  | commit b79d058f162d8b49ccc968744e7cb1b7a7ba729c | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     s6: Use s6-svc -Dd to stop services | ||||||
|  |      | ||||||
|  |     This allows us to get rid of the sleep call in the stop function. Also, | ||||||
|  |     we set a configurable timeout value for stopping daemons. | ||||||
|  |  | ||||||
|  | commit ddce529c71c2e9f01d8e5666e27050b6ed6c6761 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     More s6 fixes | ||||||
|  |      | ||||||
|  |     - When no service link is in the scan directory, show the default | ||||||
|  |       stopped message. | ||||||
|  |     - Do not remove the service link when stopping the service. | ||||||
|  |  | ||||||
|  | commit e372f97bebd4866633ad56aa5d5b1ae59fa88118 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Fix the s6 handling | ||||||
|  |      | ||||||
|  |     This changes the default s6 service directory to /var/svc.d, also | ||||||
|  |     it changes the code to work with the individual services instead of | ||||||
|  |     forcing a rescan when a service is started or stopped. | ||||||
|  |  | ||||||
|  | commit c2abf4b436b8cca8ebed395ff08f5fdc546eadac | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Start work on 0.17 | ||||||
|  |  | ||||||
|  | commit d247ac4cbbe0ab62564ef82a5940b4f1a03973b3 | ||||||
|  | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  |  | ||||||
|  |     Update changelog | ||||||
|  |  | ||||||
| commit bb2d7becfd3008379f8f69b5d036922281aa211f | commit bb2d7becfd3008379f8f69b5d036922281aa211f | ||||||
| Author: William Hubbs <w.d.hubbs@gmail.com> | Author: William Hubbs <w.d.hubbs@gmail.com> | ||||||
| Commit: William Hubbs <w.d.hubbs@gmail.com> | Commit: William Hubbs <w.d.hubbs@gmail.com> | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| NAME=		openrc | NAME=		openrc | ||||||
| VERSION=	0.16 | VERSION=	0.18 | ||||||
| PKG=		${NAME}-${VERSION} | PKG=		${NAME}-${VERSION} | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| include ../mk/net.mk | include ../mk/net.mk | ||||||
|  |  | ||||||
| DIR=	${CONFDIR} | DIR=	${CONFDIR} | ||||||
| CONF=	bootmisc fsck hostname localmount netmount urandom tmpfiles \ | CONF=	bootmisc fsck hostname localmount mount netmount urandom tmpfiles \ | ||||||
| 		${CONF-${OS}} | 		${CONF-${OS}} | ||||||
|  |  | ||||||
| ifeq (${MKNET},yes) | ifeq (${MKNET},yes) | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								conf.d/mount
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								conf.d/mount
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | |||||||
|  | # The mount service is a multiplexed service. This means you must have | ||||||
|  | # symbolic links to it in your init.d directory for each file system you | ||||||
|  | # want to mount. I recommend naming those symbolic links the same as the | ||||||
|  | # paths to the file systems they mount, removing the leading slash and | ||||||
|  | # substituting _ for the remaining slashes, for example: | ||||||
|  | # | ||||||
|  | # cd /etc/init.d | ||||||
|  | # ln -s mount mount.usr | ||||||
|  | # ln -s mount mount.usr_local | ||||||
|  | # | ||||||
|  | # Set up a symbolic link like this for each file system you wish to | ||||||
|  | # mount, then add the symbolic link to the appropriate runlevel. Once | ||||||
|  | # that is done, add the appropriate definitions for the file system to | ||||||
|  | # this file. | ||||||
|  | # | ||||||
|  | #You will need to define the mountpoint and any dependencies for each | ||||||
|  | #filesystem as shown here. | ||||||
|  | # | ||||||
|  | #If the mountpoint does not match an entry in fstab, the mount will be | ||||||
|  | #ignored. | ||||||
|  | # | ||||||
|  | #mount_usr_mountpoint="/usr" | ||||||
|  | # | ||||||
| @@ -116,6 +116,9 @@ | |||||||
| #SSD_NICELEVEL="-19" | #SSD_NICELEVEL="-19" | ||||||
|  |  | ||||||
| # Pass ulimit parameters | # Pass ulimit parameters | ||||||
|  | # If you are using bash in POSIX mode for your shell, note that the | ||||||
|  | # ulimit command uses a block size of 512 bytes for the -c and -f | ||||||
|  | # options | ||||||
| #rc_ulimit="-u 30" | #rc_ulimit="-u 30" | ||||||
|  |  | ||||||
| # It's possible to define extra dependencies for services like so | # It's possible to define extra dependencies for services like so | ||||||
|   | |||||||
| @@ -10,6 +10,6 @@ name="Avahi DNS Configuration Daemon" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use dns | 	use dns | ||||||
| 	need localmount dbus | 	need mount.usr mount.var dbus | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,6 +10,6 @@ name="Avahi Service Advertisement Daemon" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use dns | 	use dns | ||||||
| 	need localmount dbus | 	need mount.usr mount.var dbus | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ name="Message Bus Daemon" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount net | 	need mount.usr mount.var net | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ name="DHCP Client Daemon" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	provide net | 	provide net | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	use logger | 	use logger | ||||||
| 	after bootmisc modules | 	after bootmisc modules | ||||||
| 	before dns | 	before dns | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ extra_started_commands="reload" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	provide dns | 	provide dns | ||||||
| 	need localmount net | 	need mount.usr mount.var net | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ esac | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	provide dns | 	provide dns | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ name="Network Time Protocol Daemon" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use dns | 	use dns | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc ntp-client | 	after bootmisc ntp-client | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -31,7 +31,7 @@ fi | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount net | 	need mount.usr mount.var net | ||||||
| 	use dns | 	use dns | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ name="WPA Supplicant Daemon" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	use logger | 	use logger | ||||||
| 	after bootmisc modules | 	after bootmisc modules | ||||||
| 	before dns dhcpcd net | 	before dns dhcpcd net | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								init.d/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -4,6 +4,7 @@ hostname | |||||||
| local | local | ||||||
| localmount | localmount | ||||||
| loopback | loopback | ||||||
|  | mount | ||||||
| moused | moused | ||||||
| netmount | netmount | ||||||
| network | network | ||||||
|   | |||||||
| @@ -2,7 +2,7 @@ include ../mk/net.mk | |||||||
|  |  | ||||||
| DIR=	${INITDIR} | DIR=	${INITDIR} | ||||||
| SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \ | SRCS=	bootmisc.in fsck.in hostname.in local.in localmount.in loopback.in \ | ||||||
| 	netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \ | 	mount.in netmount.in osclock.in root.in savecache.in swap.in swapfiles.in \ | ||||||
| 	tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}} | 	tmpfiles.setup.in swclock.in sysctl.in urandom.in s6-svscan.in ${SRCS-${OS}} | ||||||
| BIN=	${OBJS} | BIN=	${OBJS} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	before logger | 	before logger | ||||||
| 	after clock root sysctl | 	after clock root sysctl | ||||||
| 	keyword -prefix -timeout | 	keyword -prefix -timeout | ||||||
| @@ -214,10 +214,13 @@ start() | |||||||
| 	if yesno $log_dmesg; then | 	if yesno $log_dmesg; then | ||||||
| 		if $logw || checkpath -W /var/log; then | 		if $logw || checkpath -W /var/log; then | ||||||
| 			# Create an 'after-boot' dmesg log | 			# Create an 'after-boot' dmesg log | ||||||
| 			if [ "$RC_SYS" != VSERVER -a "$RC_SYS" != OPENVZ -a "$RC_SYS" != LXC ]; then | 			case "$RC_SYS" in | ||||||
| 				dmesg > /var/log/dmesg | 				VSERVER|OPENVZ|LXC|SYSTEMD-NSPAWN) ;; | ||||||
| 				chmod 640 /var/log/dmesg | 				*) | ||||||
| 			fi | 					dmesg > /var/log/dmesg | ||||||
|  | 					chmod 640 /var/log/dmesg | ||||||
|  | 					;; | ||||||
|  | 			esac | ||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
|  |  | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ description="Sets a font for the consoles." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount termencoding | 	need mount.usr mount.var termencoding | ||||||
| 	after hotplug bootmisc | 	after hotplug bootmisc | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ command_args=$devd_args | |||||||
| name="Device State Change Daemon" | name="Device State Change Daemon" | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	before net.lo0 | 	before net.lo0 | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ description="Creates the dev database" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ description="Applies a keymap for the consoles." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount termencoding | 	need mount.usr mount.var termencoding | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | 	keyword -openvz -prefix -systemd-nspawn -uml -vserver -xenu -lxc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ extra_commands="restore" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										118
									
								
								init.d/mount.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								init.d/mount.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,118 @@ | |||||||
|  | #!@SBINDIR@/openrc-run | ||||||
|  | # Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com> | ||||||
|  | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
|  | description="Mount a file system defined in @SYSCONFDIR@/fstab" | ||||||
|  | extra_commands="generate" | ||||||
|  |  | ||||||
|  | depend() | ||||||
|  | { | ||||||
|  | 	need fsck | ||||||
|  | 	use modules mtab | ||||||
|  | 	after modules | ||||||
|  | 	keyword -jail -prefix -vserver -lxc | ||||||
|  | } | ||||||
|  |  | ||||||
|  | . "$RC_LIBEXECDIR"/sh/rc-mount.sh | ||||||
|  |  | ||||||
|  | start_pre() | ||||||
|  | { | ||||||
|  | 	# Do not start this service as "mount" | ||||||
|  | 	if [ "$rc_svcname" = mount ]; then | ||||||
|  | 		eerror "The mount service should not be started directly" | ||||||
|  | 		return 1 | ||||||
|  | 	fi | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | start() | ||||||
|  | { | ||||||
|  | 	if [ "$rc_svcname" = mount-generate-symlinks ]; then | ||||||
|  | 		generate | ||||||
|  | 		return $? | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	local mountname=${rc_svcname#*.} | ||||||
|  | 	local fspath=${mount_${mountname}_mountpoint} | ||||||
|  |  | ||||||
|  | 	# for now, make sure fspath is in fstab | ||||||
|  | 	if [ ! fstabinfo -q $fspath ]; then | ||||||
|  | 		einfo "$rc_svcname: $fspath is not in @SYSCONFDIR@/fstab" | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Is the file system mounted? | ||||||
|  | 	if mountinfo -q $fspath; then | ||||||
|  | 		action=remount | ||||||
|  | 		msg=Remounting | ||||||
|  | 	else | ||||||
|  | 		action=mount | ||||||
|  | 		msg=Mounting | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	ebegin "$msg $fspath according to @SYSCONFDIR@/fstab" | ||||||
|  | 	fstabinfo --$action $fspath | ||||||
|  | 	eend $? "$fspath failed to $action" | ||||||
|  | } | ||||||
|  |  | ||||||
|  | stop_pre() | ||||||
|  | { | ||||||
|  | 	# Do not stop this service as "mount" | ||||||
|  | 	if [ "$rc_svcname" = mount ]; then | ||||||
|  | 		eerror "The mount service should not be stopped directly" | ||||||
|  | 		return 1 | ||||||
|  | 	fi | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | stop() | ||||||
|  | { | ||||||
|  | 	yesno $RC_GOINGDOWN || return 0 | ||||||
|  | 	local mountname=${rc_svcname#*.} | ||||||
|  | 	local fspath=${mount_${mountname}_mountpoint} | ||||||
|  |  | ||||||
|  | 	# make sure fspath is in fstab | ||||||
|  | 	if ! fstabinfo -q $fspath; then | ||||||
|  | 		einfo "$rc_svcname: $fspath is not in @SYSCONFDIR@/fstab" | ||||||
|  | 		return 0 | ||||||
|  | 	fi | ||||||
|  |  | ||||||
|  | 	# Is the file system mounted? | ||||||
|  | 	mountinfo -q $fspath || return 0 | ||||||
|  |  | ||||||
|  | 	# Flush all pending disk writes now | ||||||
|  | 	sync | ||||||
|  |  | ||||||
|  | 	ebegin "Unmounting $fspath" | ||||||
|  | 	do_unmount umount $fspath | ||||||
|  | 	eend $? "Unable to umount $fspath" | ||||||
|  | 	return 0 | ||||||
|  | } | ||||||
|  |  | ||||||
|  | generate() | ||||||
|  | { | ||||||
|  | 	local fslist="$(fstabinfo)" | ||||||
|  | 	local fs fsopts rc=0 | ||||||
|  | 	local svcpath=${RC_SVCNAME%/*} | ||||||
|  | 	ebegin "Generating mount symlinks" | ||||||
|  | 	for fs in $fslist; do | ||||||
|  | 		case $fs in | ||||||
|  | 		/) ;; | ||||||
|  | 		/*) | ||||||
|  | 			fsopts="$(fstabinfo -o $fs)" | ||||||
|  | 			case "$fsopts" in | ||||||
|  | 			*noauto*) ;; | ||||||
|  | 			*) | ||||||
|  | 				local name="${fs#/}" | ||||||
|  | 				name="$(echo $name | sed 's#/#.#g')" | ||||||
|  | 				einfo ln -snf mount "${svcpath}/${name}" | ||||||
|  | 				rc=$? | ||||||
|  | 				[ $rc -ne 0 ] && break | ||||||
|  | 			*) ;; | ||||||
|  | 			esac | ||||||
|  | 		*) ;; | ||||||
|  | 		esac | ||||||
|  | 	done | ||||||
|  | 	eend $rc "Failed to generate symlinks for all mounts" | ||||||
|  | 	return $rc | ||||||
|  | } | ||||||
| @@ -14,7 +14,7 @@ name="Console Mouse Daemon" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ __nl=" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	if [ -n "$(interfaces)" ]; then | 	if [ -n "$(interfaces)" ]; then | ||||||
| 		provide net | 		provide net | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ required_files="/etc/newsyslog.conf" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ name="Name Service Cache Daemon" | |||||||
| extra_started_commands="flush" | extra_started_commands="flush" | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	use net dns ldap ypbind | 	use net dns ldap ypbind | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| } | } | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ ttyn=${rc_tty_number:-${RC_TTY_NUMBER:-12}} | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,7 +10,7 @@ extra_commands="checkconfig showstatus" | |||||||
| extra_started_commands="reload" | extra_started_commands="reload" | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ name="Power Control Daemon" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	use logger | 	use logger | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ description="Mounts misc filesystems in /proc." | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	use modules devfs | 	use modules devfs | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -openvz -prefix -systemd-nspawn -vserver -lxc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ command_background=YES | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	need net | 	need net | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount net | 	need mount.usr mount.var net | ||||||
| 	after * | 	after * | ||||||
| 	before local | 	before local | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ name="RPC program number mapper" | |||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	provide rpc | 	provide rpc | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	use net logger dns | 	use net logger dns | ||||||
| 	before inetd xinetd ntpd ntp-client | 	before inetd xinetd ntpd ntp-client | ||||||
| } | } | ||||||
|   | |||||||
| @@ -9,7 +9,7 @@ pidfile=/var/run/s6-svscan.pid | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| } | } | ||||||
|  |  | ||||||
| start_pre() | start_pre() | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ start() | |||||||
| 			if yesno "${RC_GOINGDOWN}"; then | 			if yesno "${RC_GOINGDOWN}"; then | ||||||
| 				rc=0 | 				rc=0 | ||||||
| 			fi | 			fi | ||||||
| 			eend $rc "Unable to create $RC_SVCDIR/cache" | 			eend $rc "Unable to create $RC_LIBEXECDIR/cache" | ||||||
| 			return $rc | 			return $rc | ||||||
| 		fi | 		fi | ||||||
| 	fi | 	fi | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ description="Saves a kernel dump." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need dumpon localmount | 	need dumpon mount.usr mount.var | ||||||
| 	before encswap | 	before encswap | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	before localmount | 	before mount.usr mount.var | ||||||
| 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | 	keyword -jail -openvz -prefix -systemd-nspawn -vserver -lxc | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ | |||||||
| # Released under the 2-clause BSD license. | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
| depend() { | depend() { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -jail -prefix | 	keyword -jail -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -14,7 +14,7 @@ depend() | |||||||
| { | { | ||||||
| 	provide logger | 	provide logger | ||||||
| 	use net newsyslog | 	use net newsyslog | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	after bootmisc | 	after bootmisc | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|   | |||||||
| @@ -6,7 +6,7 @@ description="Set up tmpfiles.d entries" | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| } | } | ||||||
|  |  | ||||||
| start() | start() | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ description="Initializes the random number generator." | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -jail -lxc -openvz -prefix -systemd-nspawn | 	keyword -jail -lxc -openvz -prefix -systemd-nspawn | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -4,7 +4,7 @@ | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
| 	need localmount | 	need mount.usr mount.var | ||||||
| 	keyword -prefix | 	keyword -prefix | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								man/Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								man/Makefile
									
									
									
									
									
								
							| @@ -1,9 +1,17 @@ | |||||||
|  | MK=		../mk | ||||||
|  | include ${MK}/sys.mk | ||||||
|  | include ${MK}/os.mk | ||||||
|  |  | ||||||
| MAN3=		einfo.3 \ | MAN3=		einfo.3 \ | ||||||
| 		rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \ | 		rc_config.3 rc_deptree.3 rc_find_pids.3 rc_plugin_hook.3 \ | ||||||
| 		rc_runlevel.3 rc_service.3 rc_stringlist.3 | 		rc_runlevel.3 rc_service.3 rc_stringlist.3 | ||||||
| MAN8=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | MAN8=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | ||||||
| 		service.8 start-stop-daemon.8 | 		service.8 start-stop-daemon.8 | ||||||
|  |  | ||||||
|  | ifeq (${OS},Linux) | ||||||
|  | MAN8 += rc-sstat.8 | ||||||
|  | endif | ||||||
|  |  | ||||||
| # Handy macro to create symlinks | # Handy macro to create symlinks | ||||||
| # This does rely on correctly formatting our manpages! | # This does rely on correctly formatting our manpages! | ||||||
| MAKE_LINKS=	suffix=$${man\#*.}; \ | MAKE_LINKS=	suffix=$${man\#*.}; \ | ||||||
| @@ -16,8 +24,6 @@ MAKE_LINKS=	suffix=$${man\#*.}; \ | |||||||
| 		fi; \ | 		fi; \ | ||||||
| 		done; | 		done; | ||||||
|  |  | ||||||
| MK=		../mk |  | ||||||
| include ${MK}/sys.mk |  | ||||||
| include ${MK}/gitignore.mk | include ${MK}/gitignore.mk | ||||||
|  |  | ||||||
| all: | all: | ||||||
|   | |||||||
| @@ -114,11 +114,12 @@ in this release is S6 from Skarnet software. To use this, set | |||||||
| supervisor=s6. | supervisor=s6. | ||||||
| .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 /etc/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_svwait_options_stop | .It Ar s6_service_timeout_stop | ||||||
| The options to pass to s6-svwait when stopping the service via s6. | The amount of time, in milliseconds, s6-svc should wait for the service | ||||||
|  | to go down when stopping the service. The default is 10000. | ||||||
| .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 command | .It Ar command | ||||||
| @@ -140,6 +141,8 @@ will chroot into this path before writing the pid file or starting the daemon. | |||||||
| Pidfile to use for the above defined command. | Pidfile to use for the above defined command. | ||||||
| .It Ar name | .It Ar name | ||||||
| Display name used for the above defined command. | Display name used for the above defined command. | ||||||
|  | .It Ar stopsig | ||||||
|  | Signal to send when stopping the daemon. | ||||||
| .It Ar retry | .It Ar retry | ||||||
| Retry schedule to use when stopping the daemon. It can either be a | Retry schedule to use when stopping the daemon. It can either be a | ||||||
| timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5). | timeout in seconds or multiple signal/timeout pairs (like SIGTERM/5). | ||||||
| @@ -484,8 +487,8 @@ _need_dbus() | |||||||
|  |  | ||||||
| depend() | depend() | ||||||
| { | { | ||||||
|     # We write a pidfile and to /var/cache, so we need localmount. |     # We write a pidfile and to /var/cache, so we need mount.var. | ||||||
|     need localmount |     need mount.var | ||||||
|     # We can optionally use the network, but it's not essential. |     # We can optionally use the network, but it's not essential. | ||||||
|     use net |     use net | ||||||
|     # We should be after bootmisc so that /var/run is cleaned before |     # We should be after bootmisc so that /var/run is cleaned before | ||||||
|   | |||||||
							
								
								
									
										46
									
								
								man/rc-sstat.8
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								man/rc-sstat.8
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | .\" Copyright (c) 2015 William Hubbs | ||||||
|  | .\" | ||||||
|  | .\" Redistribution and use in source and binary forms, with or without | ||||||
|  | .\" modification, are permitted provided that the following conditions | ||||||
|  | .\" are met: | ||||||
|  | .\" 1. Redistributions of source code must retain the above copyright | ||||||
|  | .\"    notice, this list of conditions and the following disclaimer. | ||||||
|  | .\" 2. Redistributions in binary form must reproduce the above copyright | ||||||
|  | .\"    notice, this list of conditions and the following disclaimer in the | ||||||
|  | .\"    documentation and/or other materials provided with the distribution. | ||||||
|  | .\" | ||||||
|  | .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||||
|  | .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||||
|  | .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||||
|  | .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||||
|  | .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||||
|  | .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||||
|  | .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||||
|  | .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||||
|  | .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||||
|  | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||||
|  | .\" SUCH DAMAGE. | ||||||
|  | .\" | ||||||
|  | .Dd April 24, 2008 | ||||||
|  | .Dt RC-sstat 8 SMM | ||||||
|  | .Os OpenRC | ||||||
|  | .Sh NAME | ||||||
|  | .Nm rc-sstat | ||||||
|  | .Nd show status info about services supervised by s6 then rc-status | ||||||
|  | info | ||||||
|  | .Sh SYNOPSIS | ||||||
|  | .Nm | ||||||
|  | .Sh DESCRIPTION | ||||||
|  | .Nm | ||||||
|  | gathers and displays information about the status of services supervised | ||||||
|  | by s6 then runs rc-status to show info about nnormal OpenRC services. | ||||||
|  | .Pp | ||||||
|  | .Sh EXIT STATUS | ||||||
|  | .Nm | ||||||
|  | exits 1 if there is an internal error or exits with the same exit codes | ||||||
|  | as rc-status. | ||||||
|  | .Sh SEE ALSO | ||||||
|  | .Xr rc-status 8 , | ||||||
|  | .Xr rc-update 8 | ||||||
|  | .Sh AUTHORS | ||||||
|  | .An William Hubbs <w.d.hubbs@gmail.com> | ||||||
							
								
								
									
										46
									
								
								mount-service.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								mount-service.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | |||||||
|  | # New Mount Service | ||||||
|  |  | ||||||
|  | This is definitely considered testing code, so if you use it on your | ||||||
|  | system and it breaks, you have been warned. | ||||||
|  |  | ||||||
|  | This document will evolve as the testing proceeds and will be removed | ||||||
|  | once the script goes mainline. | ||||||
|  |  | ||||||
|  | Since this is on a topic branch, this branch will be subject to | ||||||
|  | rebasing, merging commits, etc. When it goes to master, everything here | ||||||
|  | will be in one commit. | ||||||
|  |  | ||||||
|  | The goal of this is to replace the localmount and metmount services with | ||||||
|  | a single mount service which will be multiplexed so that there is one | ||||||
|  | service for each file system that will be mounted. | ||||||
|  |  | ||||||
|  | - rc-service mount generate | ||||||
|  |  | ||||||
|  | scans your fstab and attempts to generate symbolic links in /etc/init.d | ||||||
|  | for each file system you want to mount. | ||||||
|  |  | ||||||
|  | Then you must edit /etc/conf.d/mount to list all of your file systems | ||||||
|  | and the dependencies they have by using | ||||||
|  | rc_mount_foo_before/after/need/use settings. | ||||||
|  |  | ||||||
|  | rc-service mount.foo start | ||||||
|  |  | ||||||
|  | tries to mount a file system and | ||||||
|  |  | ||||||
|  | rc-service mount.foo stop | ||||||
|  |  | ||||||
|  | tries to unmount it if your system is going down. | ||||||
|  |  | ||||||
|  | I'm considering automating the generation of symlinks into the boot | ||||||
|  | process, but I'm not sure yet whether this is a good idea. | ||||||
|  |  | ||||||
|  | I haven't decided yet exactly how I want to handle the transition from | ||||||
|  | localmount/netmount to this new mount service yet, so you will | ||||||
|  | definitely not have a clean boot if you try to boot with this. | ||||||
|  |  | ||||||
|  | Another question is whether I want to try automating adding the mount | ||||||
|  | services to runlevels; I think no, but let me know if you feel | ||||||
|  | differently. | ||||||
|  |  | ||||||
|  | Any suggestions would be helpful. | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								s6-guide.md
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								s6-guide.md
									
									
									
									
									
								
							| @@ -33,24 +33,16 @@ supervisor=s6 | |||||||
| Several other variables affect s6 services. They are documented on the | Several other variables affect s6 services. They are documented on the | ||||||
| openrc-run man page, but I will list them here for convenience: | openrc-run man page, but I will list them here for convenience: | ||||||
|  |  | ||||||
| s6_service_path - the path to the s6 service directory | s6_service_path - the path to the s6 service directory. The default is | ||||||
|  | /var/svc.d/$RC_SVCNAME. | ||||||
|  |  | ||||||
| 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 | ||||||
| s6_svwait_options_stop - the options to pass to s6-svwait when stopping. | the service. If this is not set, s6-svwait will not be called. | ||||||
|  |  | ||||||
| The s6_service_path variable defaults to /etc/svc.d/${RC_SVCNAME} if it | s6_service_timeout_stop - the amount of time, in milliseconds, s6-svc | ||||||
| is not set in the service script. For example, if you want a service | should wait for a service to go down when stopping. | ||||||
| script called /etc/init.d/foobar to use s6 to monitor its daemon, the s6 |  | ||||||
| service should be the directory /etc/svc.d/foobar. |  | ||||||
|  |  | ||||||
| See the documentation for s6 for more information about s6 service |  | ||||||
| directories. |  | ||||||
|  |  | ||||||
| The s6_svwait_options_* variables set command line options to pass to |  | ||||||
| s6-svwait when starting or stopping the s6 service. These can be very |  | ||||||
| useful for waiting for s6 services to signal when they are up, timing out |  | ||||||
| when an s6 service doesn't come up, etc. |  | ||||||
|  |  | ||||||
| This is very early support, so feel free to file bugs if you have | This is very early support, so feel free to file bugs if you have | ||||||
| issues. | issues. | ||||||
|  |  | ||||||
| [1] https://www.skarnet.org/software/s6 | [1] http://www.skarnet.org/software/s6 | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | rc-sstat | ||||||
| @@ -1,5 +1,19 @@ | |||||||
|  | MK=	../mk | ||||||
|  | include ${MK}/os.mk | ||||||
|  |  | ||||||
| DIR=	${LIBEXECDIR}/bin | DIR=	${LIBEXECDIR}/bin | ||||||
| BIN=	on_ac_power | BIN=	on_ac_power | ||||||
|  | INSTALLAFTER = _installafter | ||||||
|  |  | ||||||
|  | ifeq (${OS},Linux) | ||||||
|  | SRCS+= rc-sstat.in | ||||||
|  | BIN+=	rc-sstat | ||||||
|  | endif | ||||||
|  |  | ||||||
|  | _installafter: | ||||||
|  | ifeq (${OS},Linux) | ||||||
|  | 	${INSTALL} -d ${DESTDIR}${SBINDIR} | ||||||
|  | 	ln -s ${DIR}/rc-sstat ${DESTDIR}/${SBINDIR}/rc-sstat | ||||||
|  | endif | ||||||
|  |  | ||||||
| MK=	../mk |  | ||||||
| include ${MK}/scripts.mk | include ${MK}/scripts.mk | ||||||
|   | |||||||
							
								
								
									
										140
									
								
								scripts/rc-sstat.in
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								scripts/rc-sstat.in
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,140 @@ | |||||||
|  | #!@SHELL@ | ||||||
|  |  | ||||||
|  | # Define variables | ||||||
|  | scandir="/run/openrc/s6-scan" | ||||||
|  | statfile=/dev/shm/s6-svstat.${USER} | ||||||
|  |  | ||||||
|  | color_red='\E[01;31m' | ||||||
|  | color_green='\E[32m' | ||||||
|  | color_yellow='\E[01;33m' | ||||||
|  |  | ||||||
|  | # Time Modules | ||||||
|  | uptimeModules() { | ||||||
|  | 	# Given a single integer argument representing seconds of uptime... | ||||||
|  | 	# convert uptime to a friendly human readable string: '2d 16h 58m 46s' | ||||||
|  | 	# define a variable to keep track of the longest length uptime string | ||||||
|  | 	uSec=${1:-0} | ||||||
|  |  | ||||||
|  | 	uDay=$(( $uSec / 86400 )) | ||||||
|  | 	uSec=$(( $uSec % 86400 )) | ||||||
|  | 	uHour=$(( $uSec / 3600 )) | ||||||
|  | 	uSec=$(( $uSec % 3600 )) | ||||||
|  | 	uMin=$(( $uSec / 60 )) | ||||||
|  | 	uSec=$(( $uSec % 60 )) | ||||||
|  |  | ||||||
|  | 	[ $uDay -ne 0 ] && pDay="${uDay}d " || pDay="" | ||||||
|  | 	[ $uHour -ne 0 ] && pHour="${uHour}h " || pHour="" | ||||||
|  | 	[ $uMin -ne 0 ] && pMin="${uMin}m " || pMin="" | ||||||
|  | 	[ $uSec -ne 0 ] && pSec="${uSec}s " || pSec="" | ||||||
|  |  | ||||||
|  | 	parsedUptime="$( echo ${pDay}${pHour}${pMin}${pSec} | sed 's#[ \t]*$##' )" | ||||||
|  | 	uCharCount=${#parsedUptime} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | # Make sure we are running as root | ||||||
|  | if [ $(id -u) != 0 ]; then | ||||||
|  | 	printf "This command must be run as root\n" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Make sure scandir exists | ||||||
|  | if [ ! -d $scandir ]; then | ||||||
|  | 	printf "%s\n" "$scandir does not exist" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Make sure s6-svscan is running  | ||||||
|  | if ! pgrep s6-svscan >/dev/null ; then  | ||||||
|  | 	printf "s6-svscan is not running\n" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # If TERM is undefined (launching sstat through an ssh command) then make it vt100 | ||||||
|  | if [ -z $TERM -o $TERM = "dumb" ]; then | ||||||
|  | 	export TERM=vt100 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Gather list of candidate services s6-supervise may be supervising | ||||||
|  | # filter for folders and symlinks at /run/openrc/s6-scan/* ommiting output starting with '.' | ||||||
|  | services="$(find $scandir -maxdepth 1 -mindepth 1 \( -type d -or -type l \) | awk -F'/' '{ if ( $NF !~ "^\\." ) print $NF}')" | ||||||
|  | if [ -z "$services" ]; then | ||||||
|  | 	printf "s6 found no services configured for supervision\n" | ||||||
|  | 	exit 1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | # Gather status for each service from s6-svstat | ||||||
|  | # write to tmp file in memory for non I/O bound repeatative access | ||||||
|  | rm -f $statfile 2>/dev/null | ||||||
|  | for service in $services ; do | ||||||
|  | 	echo "$service $(s6-svstat ${scandir}/${service})" >> $statfile | ||||||
|  | done | ||||||
|  |  | ||||||
|  | # Define longest string from parsed uptime (default to 7 to match string length of 'Up Time') | ||||||
|  | timeStringLength=7 | ||||||
|  | for uptime in $(awk '$2 == "up" {print $5}' $statfile | sort -run) | ||||||
|  | do | ||||||
|  | 	uptimeModules $uptime | ||||||
|  | 	[ ${uCharCount} -gt $timeStringLength ] && timeStringLength=$uCharCount | ||||||
|  | done | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #   Print the status header like so... | ||||||
|  | #                Service Name  State    PID         Up Time           Start Time | ||||||
|  | #----------------------------  -----  -----  --------------  ------------------- | ||||||
|  | printf "\n" | ||||||
|  | printf "%28s  %5s  %5s  %${timeStringLength}s  %19s\n" "Service Name" "State" "PID" "Up Time" "Start Time" | ||||||
|  | for dashes in 28 5 5 $timeStringLength 19 ; do | ||||||
|  | 	printf "%0.s-" $(seq 1 $dashes) ; echo -n '  ' | ||||||
|  | done && printf "\n" | ||||||
|  |  | ||||||
|  |  | ||||||
|  | #   sshd up (pid 26300) 80373 seconds | ||||||
|  | cat $statfile | \ | ||||||
|  | while read line | ||||||
|  | do | ||||||
|  | 	set $line | ||||||
|  |  | ||||||
|  | 	service=$1 | ||||||
|  | 	state=$2 | ||||||
|  | 	pid=${4/)/} | ||||||
|  | 	time=$5 | ||||||
|  |  | ||||||
|  | 	# call function to convert time in seconds and define additional variables | ||||||
|  | 	uptimeModules $time | ||||||
|  |  | ||||||
|  | 	if [ "$state" = up ]; then | ||||||
|  | 		if [ $time -lt 30 ]; then | ||||||
|  | 			# uptime < 30 seconds, color the whole line yellow | ||||||
|  | 			echo -en "$color_yellow" | ||||||
|  | 			# 1st 4 columns are printed with printf for space padding | ||||||
|  | 			printf "%28s  %5s  %5s  %${timeStringLength}s" $service $state $pid "$parsedUptime" | ||||||
|  | 			# 4th column is output from date -d | ||||||
|  | 			echo -e "  $(date -d "${time} seconds ago" "+%F %T")" | ||||||
|  | 			# reset terminal colors | ||||||
|  | 			tput sgr0 | ||||||
|  | 		else | ||||||
|  | 			printf "%28s" $service | ||||||
|  | 			# uptime > 30 seconds, color just the "state" value green | ||||||
|  | 			echo -en "$color_green" | ||||||
|  | 			printf "  %5s" $state | ||||||
|  | 			# reset terminal colors | ||||||
|  | 			tput sgr0 | ||||||
|  | 			printf "  %5s" $pid | ||||||
|  | 			printf "  %${timeStringLength}s"  "$parsedUptime" | ||||||
|  | 			echo -e "  $(date -d "${time} seconds ago" "+%F %T")" | ||||||
|  | 		fi | ||||||
|  | 	else | ||||||
|  | 		printf "%28s" $service | ||||||
|  | 		echo -en "$color_red" | ||||||
|  | 		printf "  %5s" $state | ||||||
|  | 		tput sgr0 | ||||||
|  | 		echo "" | ||||||
|  | 	fi | ||||||
|  | done | ||||||
|  |  | ||||||
|  | # Cleanup  | ||||||
|  | rm -f $statfile 2>/dev/null | ||||||
|  |  | ||||||
|  | printf "\n\n" | ||||||
|  |  | ||||||
|  | rc-status | ||||||
							
								
								
									
										40
									
								
								sh/s6.sh
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								sh/s6.sh
									
									
									
									
									
								
							| @@ -2,7 +2,7 @@ | |||||||
| # Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com> | # Copyright (c) 2015 William Hubbs <w.d.hubbs@gmail.com> | ||||||
| # Released under the 2-clause BSD license. | # Released under the 2-clause BSD license. | ||||||
|  |  | ||||||
| [ -z "${s6_service_path}" ] && s6_service_path="/etc/svc.d/${RC_SVCNAME}" | [ -z "${s6_service_path}" ] && s6_service_path="/var/svc.d/${RC_SVCNAME}" | ||||||
|  |  | ||||||
| s6_start() | s6_start() | ||||||
| { | { | ||||||
| @@ -10,16 +10,19 @@ s6_start() | |||||||
| 		eerror "${s6_service_path} does not exist." | 		eerror "${s6_service_path} does not exist." | ||||||
|  	return 1 |  	return 1 | ||||||
|  fi |  fi | ||||||
| 	local rc | 	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | ||||||
| 	ebegin "Starting ${name:-$RC_SVCNAME}" | 	ebegin "Starting ${name:-$RC_SVCNAME}" | ||||||
| 	ln -sf "${s6_service_path}" "${RC_SVCDIR}"/s6-scan | 	ln -sf "${s6_service_path}" "${s6_service_link}" | ||||||
| 	s6-svscanctl -an "${RC_SVCDIR}"/s6-scan | 	s6-svscanctl -na "${RC_SVCDIR}"/s6-scan | ||||||
| 	rc=$? | 	sleep 1.5 | ||||||
|  | 	s6-svc -u "${s6_service_link}" | ||||||
| 	if [ -n "$s6_svwait_options_start" ]; then | 	if [ -n "$s6_svwait_options_start" ]; then | ||||||
| 		s6-svwait ${s6_svwait_options_start} "${s6_service_path}" | 		s6-svwait ${s6_svwait_options_start} "${s6_service_link}" | ||||||
| 		rc=$? |  | ||||||
| 	fi | 	fi | ||||||
| 	eend $rc "Failed to start $RC_SVCNAME" | 	sleep 1.5 | ||||||
|  | 	set -- $(s6-svstat "${s6_service_link}") | ||||||
|  | 	[ "$1" = "up" ] | ||||||
|  | 	eend $? "Failed to start $RC_SVCNAME" | ||||||
| } | } | ||||||
|  |  | ||||||
| s6_stop() | s6_stop() | ||||||
| @@ -28,19 +31,20 @@ s6_stop() | |||||||
| 		eerror "${s6_service_path} does not exist." | 		eerror "${s6_service_path} does not exist." | ||||||
|  	return 1 |  	return 1 | ||||||
|  fi |  fi | ||||||
| 	local rc | 	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | ||||||
| 	ebegin "Stopping ${name:-$RC_SVCNAME}" | 	ebegin "Stopping ${name:-$RC_SVCNAME}" | ||||||
| 	rm -rf "${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | 	s6-svc -Dd -T ${s6_service_timeout_stop:-10000} "${s6_service_link}" | ||||||
| 	s6-svscanctl -an "${RC_SVCDIR}"/s6-scan | 	set -- $(s6-svstat "${s6_service_link}") | ||||||
| 	rc=$?  | 	[ "$1" = "down" ] | ||||||
| 	if [ -n "$s6_svwait_options_stop" ]; then | 	eend $? "Failed to stop $RC_SVCNAME" | ||||||
| 		s6-svwait ${s6_svwait_options_stop} "${s6_service_path}" |  | ||||||
| 		rc=$? |  | ||||||
| 	fi |  | ||||||
| 	eend $rc "Failed to stop $RC_SVCNAME" |  | ||||||
| } | } | ||||||
|  |  | ||||||
| s6_status() | s6_status() | ||||||
| { | { | ||||||
| 	s6-svstat "${s6_service_path}" | 	s6_service_link="${RC_SVCDIR}/s6-scan/${s6_service_path##*/}" | ||||||
|  | 	if [ -L "${s6_service_link}" ]; then | ||||||
|  | 		s6-svstat "${s6_service_link}" | ||||||
|  | 	else | ||||||
|  | 		_status | ||||||
|  | 	fi | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										11
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							| @@ -141,6 +141,13 @@ _D() { | |||||||
| 	fi | 	fi | ||||||
| } | } | ||||||
|  |  | ||||||
|  | _v() { | ||||||
|  | 	# Create a subvolume if the path does not exist yet and the file system | ||||||
|  | 	# supports this (btrfs). Otherwise create a normal directory. | ||||||
|  | 	# TODO: Implement btrfs subvol creation. | ||||||
|  | 	_d "$@" | ||||||
|  | } | ||||||
|  |  | ||||||
| _L() { | _L() { | ||||||
| 	# Create a symlink if it doesn't exist yet | 	# Create a symlink if it doesn't exist yet | ||||||
| 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||||
| @@ -336,7 +343,7 @@ for FILE in $tmpfiles_d ; do | |||||||
|  |  | ||||||
| 		# whine about invalid entries | 		# whine about invalid entries | ||||||
| 		case $cmd in | 		case $cmd in | ||||||
| 			f|F|w|d|D|p|L|c|C|b|x|X|r|R|z|Z) ;; | 			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;; | ||||||
| 			*) warninvalid ; continue ;; | 			*) warninvalid ; continue ;; | ||||||
| 		esac | 		esac | ||||||
|  |  | ||||||
| @@ -344,7 +351,7 @@ for FILE in $tmpfiles_d ; do | |||||||
| 		if [ "$mode" = '-' -o "$mode" = '' ]; then | 		if [ "$mode" = '-' -o "$mode" = '' ]; then | ||||||
| 			case "$cmd" in | 			case "$cmd" in | ||||||
| 				p|f|F) mode=0644 ;; | 				p|f|F) mode=0644 ;; | ||||||
| 				d|D) mode=0755 ;; | 				d|D|v) mode=0755 ;; | ||||||
| 				C|z|Z|x|r|R|L) ;; | 				C|z|Z|x|r|R|L) ;; | ||||||
| 			esac | 			esac | ||||||
| 		fi | 		fi | ||||||
|   | |||||||
| @@ -939,9 +939,9 @@ svc_stop_real(void) | |||||||
| { | { | ||||||
| 	bool stopped; | 	bool stopped; | ||||||
|  |  | ||||||
| 	/* If we're stopping localmount, set LC_ALL=C so that | 	/* If we're stopping mount.*, set LC_ALL=C so that | ||||||
| 	 * bash doesn't load anything blocking the unmounting of /usr */ | 	 * bash doesn't load anything blocking the unmounting of /usr */ | ||||||
| 	if (strcmp(applet, "localmount") == 0) | 	if (strncmp(applet, "mount.", 6) == 0) | ||||||
| 		setenv("LC_ALL", "C", 1); | 		setenv("LC_ALL", "C", 1); | ||||||
|  |  | ||||||
| 	if (ibsave) | 	if (ibsave) | ||||||
|   | |||||||
| @@ -66,6 +66,7 @@ static const char *const env_whitelist[] = { | |||||||
| 	"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS", | 	"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS", | ||||||
| 	"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL", | 	"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL", | ||||||
| 	"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG", | 	"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG", | ||||||
|  | 	"EERROR_QUIET", "EINFO_QUIET", | ||||||
| 	NULL | 	NULL | ||||||
| }; | }; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user