Compare commits
	
		
			16 Commits
		
	
	
		
			0.18.2
			...
			openrc-0.1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 082995837f | ||
|   | 4f3df4cacb | ||
|   | 514b007e27 | ||
|   | 6ad9b134e6 | ||
|   | e571c67ff8 | ||
|   | c4067a65b0 | ||
|   | a8c30a89c4 | ||
|   | fe0847c9a2 | ||
|   | 58156137f9 | ||
|   | b1d7df15ef | ||
|   | 01088e282f | ||
|   | b95ae213e9 | ||
|   | 4f544f4130 | ||
|   | c65bed756e | ||
|   | ccc81a9cad | ||
|   | 3a1e304d6c | 
| @@ -1,3 +1,3 @@ | ||||
| NAME=		openrc | ||||
| VERSION=	0.18.2 | ||||
| VERSION=	0.16.4 | ||||
| PKG=		${NAME}-${VERSION} | ||||
|   | ||||
							
								
								
									
										11
									
								
								NEWS.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								NEWS.md
									
									
									
									
									
								
							| @@ -3,17 +3,6 @@ | ||||
| This file will contain a list of notable changes for each release. Note | ||||
| the information in this file is in reverse order. | ||||
|  | ||||
| ## OpenRC-0.18 | ||||
|  | ||||
| The behaviour of localmount and netmount in this version is changing. In | ||||
| the past, these services always started successfully. In this version, | ||||
| they will be able to fail if file systems they mount fail to mount. If | ||||
| you have file systems listed in fstab which should not be mounted at | ||||
| boot time, make sure to add noauto to the mount options. If you have | ||||
| file systems that you want to attempt to mount at boot time but failure | ||||
| should be allowed, add nofail to the mount options for these file | ||||
| systems in fstab. | ||||
|  | ||||
| ## OpenRC-0.14 | ||||
|  | ||||
| The binfmt service, which registers misc binary formats with the Linux | ||||
|   | ||||
| @@ -62,21 +62,12 @@ rc_tty_number=12 | ||||
| # Set the devices controller settings for this service. | ||||
| #rc_cgroup_devices="" | ||||
|  | ||||
| # Set the hugetlb controller settings for this service. | ||||
| #rc_cgroup_hugetlb="" | ||||
|  | ||||
| # Set the memory controller settings for this service. | ||||
| #rc_cgroup_memory="" | ||||
|  | ||||
| # Set the net_cls controller settings for this service. | ||||
| #rc_cgroup_net_cls="" | ||||
|  | ||||
| # Set the net_prio controller settings for this service. | ||||
| #rc_cgroup_net_prio="" | ||||
|  | ||||
| # Set the pids controller settings for this service. | ||||
| #rc_cgroup_pids="" | ||||
|  | ||||
| # Set this to YES if yu want all of the processes in a service's cgroup | ||||
| # killed when the service is stopped or restarted. | ||||
| # This should not be set globally because it kills all of the service's | ||||
|   | ||||
| @@ -16,5 +16,5 @@ start() | ||||
| 	ebegin "Loading custom binary format handlers" | ||||
| 	"$RC_LIBEXECDIR"/sh/binfmt.sh | ||||
| 	eend $? | ||||
| 	return 0 | ||||
| return 0 | ||||
| } | ||||
|   | ||||
| @@ -121,11 +121,11 @@ clean_run() | ||||
| 	local dir | ||||
| 	# If / is still read-only due to a problem, this will fail! | ||||
| 	if ! checkpath -W /; then | ||||
| 		ewarn "/ is not writable; unable to clean up underlying /run" | ||||
| 		eerror "/ is not writable; unable to clean up underlying /run" | ||||
| 		return 1 | ||||
| 	fi | ||||
| 	if ! checkpath -W /tmp; then | ||||
| 		ewarn "/tmp is not writable; unable to clean up underlying /run" | ||||
| 		eerror "/tmp is not writable; unable to clean up underlying /run" | ||||
| 		return 1 | ||||
| 	fi | ||||
| 	# Now we know that we can modify /tmp and / | ||||
| @@ -136,12 +136,13 @@ clean_run() | ||||
| 	dir=$(mktemp -d) | ||||
| 	if [ -n "$dir" -a -d $dir -a -w $dir ]; then | ||||
| 		mount --bind / $dir && rm -rf $dir/run/* || rc=1 | ||||
| 		umount $dir && rmdir $dir | ||||
| 		umount $dir | ||||
| 		rm -rf $dir | ||||
| 	else | ||||
| 		rc=1 | ||||
| 	fi | ||||
| 	if [ $rc -ne 0 ]; then | ||||
| 		ewarn "Could not clean up underlying /run on /" | ||||
| 		eerror "Could not clean up underlying /run on /" | ||||
| 		return 1 | ||||
| 	fi | ||||
| } | ||||
|   | ||||
| @@ -15,7 +15,7 @@ depend() | ||||
| start() | ||||
| { | ||||
| 	# Mount local filesystems in /etc/fstab. | ||||
| 	local types="noproc" x= no_netdev= rc= | ||||
| 	local types="noproc" x= no_netdev= | ||||
| 	for x in $net_fs_list $extra_net_fs_list; do | ||||
| 		types="${types},no${x}" | ||||
| 	done | ||||
| @@ -29,11 +29,9 @@ start() | ||||
| 	ebegin "Mounting local filesystems" | ||||
| 	mount -at "$types" $no_netdev | ||||
| 	eend $? "Some local filesystem failed to mount" | ||||
| 	rc=$? | ||||
| 	if [ "$RC_UNAME" != Linux ]; then | ||||
| 		rc=0 | ||||
| 	fi | ||||
| 	return $rc | ||||
|  | ||||
| 	# Always return 0 - some local mounts may not be critical for boot | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| stop() | ||||
| @@ -72,19 +70,17 @@ stop() | ||||
| 			sync | ||||
| 		fi | ||||
|  | ||||
| 		local aufs_branch aufs_mount_point aufs_si_id aufs_br_id branches | ||||
| 		for aufs_si_dir in /sys/fs/aufs/si*; do | ||||
| 			[ -d "${aufs_si_dir}" ] || continue | ||||
| 			aufs_si_id="si=${aufs_si_dir#/sys/fs/aufs/si_}" | ||||
| 		local aufs_branch aufs_mount_dir aufs_mount_point aufs_si_dir aufs_si_id | ||||
| 		for aufs_si_dir in /sys/fs/aufs/*; do | ||||
| 			aufs_mount_dir=${aufs_si_dir#/sys/fs/aufs/} | ||||
| 			aufs_si_id="$(printf "%s" $aufs_mount_dir | sed 's/_/=/g')" | ||||
| 			aufs_mount_point="$(mountinfo -o ${aufs_si_id})" | ||||
| 			branches="$aufs_si_dir/br[0-9] $aufs_si_dir/br[0-9][0-9] $aufs_si_dir/br[0-9][0-9][0-9]" | ||||
| 			for x in $branches; do | ||||
| 				[ -e "${x}" ] || continue | ||||
| 			for x in $aufs_si_dir/br[0-9][0-9][0-9]; do | ||||
| 				aufs_branch=$(sed 's/=.*//g' $x) | ||||
| 				eindent | ||||
| 				if ! mount -o "remount,del:$aufs_branch" "$aufs_mount_point" > /dev/null 2>&1; then | ||||
| 					ewarn "Failed to remove branch $aufs_branch from aufs \ | ||||
| 					$aufs_mount_point" | ||||
| 						$aufs_mount_point" | ||||
| 				fi | ||||
| 				eoutdent | ||||
| 				sync | ||||
|   | ||||
| @@ -12,18 +12,21 @@ depend() | ||||
|  | ||||
| start() | ||||
| { | ||||
| 	[ -L /etc/mtab ] && return 0 | ||||
| 	local rc=0 | ||||
| 	ebegin "Updating /etc/mtab" | ||||
| 	if [ -L /etc/mtab ] ; then | ||||
| 		ewarn "/etc/mtab is a symlink, not updating." | ||||
| 		ewarn "FYI - You can safely remove mtab from your runlevels." | ||||
| 	elif ! checkpath -W /etc; then | ||||
| 	if ! checkpath -W /etc; then | ||||
| 		rc=1 | ||||
| 	elif [ ! -e /etc/mtab ]; then | ||||
| 		einfo "Creating mtab symlink" | ||||
| 		ln -snf /proc/self/mounts /etc/mtab | ||||
| 	else | ||||
| 		einfo "Updating mtab file" | ||||
| 		ewarn "The support for updating /etc/mtab as a file is" | ||||
| 		ewarn "deprecated and will be removed in the future." | ||||
| 		ewarn "Please run the following command as root on your system." | ||||
| 		ewarn | ||||
| 		ewarn "ln -snf /proc/self/mounts /etc/mtab" | ||||
| 		ewarn | ||||
|  | ||||
| 		# With / as tmpfs we cannot umount -at tmpfs in localmount as that | ||||
| 		# makes / readonly and dismounts all tmpfs even if in use which is | ||||
| 		# not good. Luckily, umount uses /etc/mtab instead of /proc/mounts | ||||
|   | ||||
| @@ -27,10 +27,7 @@ start() | ||||
| 		rc=$? | ||||
| 	fi | ||||
| 	ewend $rc "Could not mount all network filesystems" | ||||
| 	if [ "$RC_UNAME" != Linux ]; then | ||||
| 		rc=0 | ||||
| 	fi | ||||
| 	return $rc | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| stop() | ||||
|   | ||||
| @@ -7,53 +7,43 @@ description="Saves the caches OpenRC uses to non volatile storage" | ||||
| start() | ||||
| { | ||||
| 	if [ -e "$RC_SVCDIR"/clock-skewed ]; then | ||||
| 		ewarn "Clock skew detected!" | ||||
| 		ewarn "WARNING: clock skew detected!" | ||||
| 		if ! yesno "${RC_GOINGDOWN}"; then | ||||
| 			eerror "Not saving deptree cache" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| 	if [ ! -d "$RC_LIBEXECDIR"/cache ]; then | ||||
| 		if ! checkpath -W "$RC_LIBEXECDIR"; then | ||||
| 			eerror "${RC_LIBEXECDIR} is not writable!" | ||||
| 			eerror "Unable to save dependency cache" | ||||
| 			if yesno "${RC_GOINGDOWN}"; then | ||||
| 				return 0 | ||||
| 			fi | ||||
| 	if ! checkpath -W "$RC_LIBEXECDIR"; then | ||||
| 		ewarn "WARNING: ${RC_LIBEXECDIR} is not writable!" | ||||
| 		if ! yesno "${RC_GOINGDOWN}"; then | ||||
| 			ewarn "Unable to save deptree cache" | ||||
| 			return 1 | ||||
| 		fi | ||||
| 		rm -rf "$RC_LIBEXECDIR"/cache | ||||
| 		if ! mkdir -p "$RC_LIBEXECDIR"/cache; then | ||||
| 			eerror "Unable to create $RC_LIBEXECDIR/cache" | ||||
| 			eerror "Unable to save dependency cache" | ||||
| 			if yesno "${RC_GOINGDOWN}"; then | ||||
| 				return 0 | ||||
| 			fi | ||||
| 			return 1 | ||||
| 		fi | ||||
| 	fi | ||||
| 	if ! checkpath -W "$RC_LIBEXECDIR"/cache; then | ||||
| 		eerror "${RC_LIBEXECDIR}/cache is not writable!" | ||||
| 		eerror "Unable to save dependency cache" | ||||
| 		if yesno "${RC_GOINGDOWN}"; then | ||||
| 			return 0 | ||||
| 		fi | ||||
| 		return 1 | ||||
| 		return 0 | ||||
| 	fi | ||||
| 	ebegin "Saving dependency cache" | ||||
| 	local rc=0 save= | ||||
| 	local rc= | ||||
| 	if [ ! -d "$RC_LIBEXECDIR"/cache ]; then | ||||
| 		rm -rf "$RC_LIBEXECDIR"/cache | ||||
| 		if ! mkdir -p "$RC_LIBEXECDIR"/cache; then | ||||
| 			rc=$? | ||||
| 			if yesno "${RC_GOINGDOWN}"; then | ||||
| 				rc=0 | ||||
| 			fi | ||||
| 			eend $rc "Unable to create $RC_SVCDIR/cache" | ||||
| 			return $rc | ||||
| 		fi | ||||
| 	fi | ||||
| 	local save= | ||||
| 	for x in deptree depconfig shutdowntime softlevel nettree rc.log; do | ||||
| 		[ -e "$RC_SVCDIR/$x" ] && save="$save $RC_SVCDIR/$x" | ||||
| 	done | ||||
| 	if [ -n "$save" ]; then | ||||
| 		cp -p $save "$RC_LIBEXECDIR"/cache | ||||
| 		rc=$? | ||||
| 		cp -p $save "$RC_LIBEXECDIR"/cache 2>/dev/null | ||||
| 	fi | ||||
| 	rc=$? | ||||
| 	if yesno "${RC_GOINGDOWN}"; then | ||||
| 		if [ $rc -ne 0 ]; then | ||||
| 			eerror "Unable to save dependency cache" | ||||
| 		fi | ||||
| 		eend 0 | ||||
| 		rc=0 | ||||
| 	fi | ||||
| 	eend $rc "Unable to save dependency cache" | ||||
| 	eend $rc | ||||
| } | ||||
|   | ||||
| @@ -116,7 +116,7 @@ mount_cgroups() | ||||
| 		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 | ||||
| 		echo 1 > /sys/fs/cgroup/openrc/notify_on_release | ||||
| 	fi | ||||
|  | ||||
| 	yesno ${rc_controller_cgroups:-YES} && [ -e /proc/cgroups ] || return 0 | ||||
|   | ||||
							
								
								
									
										10
									
								
								man/Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								man/Makefile
									
									
									
									
									
								
							| @@ -1,17 +1,9 @@ | ||||
| MK=		../mk | ||||
| include ${MK}/sys.mk | ||||
| include ${MK}/os.mk | ||||
|  | ||||
| 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=		rc-service.8 rc-status.8 rc-update.8 openrc.8 openrc-run.8 \ | ||||
| 		service.8 start-stop-daemon.8 | ||||
|  | ||||
| ifeq (${OS},Linux) | ||||
| MAN8 += rc-sstat.8 | ||||
| endif | ||||
|  | ||||
| # Handy macro to create symlinks | ||||
| # This does rely on correctly formatting our manpages! | ||||
| MAKE_LINKS=	suffix=$${man\#*.}; \ | ||||
| @@ -24,6 +16,8 @@ MAKE_LINKS=	suffix=$${man\#*.}; \ | ||||
| 		fi; \ | ||||
| 		done; | ||||
|  | ||||
| MK=		../mk | ||||
| include ${MK}/sys.mk | ||||
| include ${MK}/gitignore.mk | ||||
|  | ||||
| all: | ||||
|   | ||||
| @@ -1,46 +0,0 @@ | ||||
| .\" 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> | ||||
							
								
								
									
										1
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								scripts/.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | ||||
| rc-sstat | ||||
| @@ -1,19 +1,5 @@ | ||||
| MK=	../mk | ||||
| include ${MK}/os.mk | ||||
|  | ||||
| DIR=	${LIBEXECDIR}/bin | ||||
| 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 | ||||
|   | ||||
| @@ -1,140 +0,0 @@ | ||||
| #!@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 | ||||
| @@ -221,22 +221,20 @@ done | ||||
| # Load our script | ||||
| sourcex "$RC_SERVICE" | ||||
|  | ||||
| eval "printf '%s\n' $required_dirs" | while read _d; do | ||||
| 	if [ -n "$_d" ] && [ ! -d "$_d" ]; then | ||||
| for _d in $required_dirs; do | ||||
| 	if [ ! -d $_d ]; then | ||||
| 		eerror "$RC_SVCNAME: \`$_d' is not a directory" | ||||
| 		exit 1 | ||||
| 	fi | ||||
| done | ||||
| [ $? -ne 0 ] && exit 1 | ||||
| unset _d | ||||
|  | ||||
| eval "printf '%s\n' $required_files" | while read _f; do | ||||
| 	if [ -n "$_f" ] && [ ! -r "$_f" ]; then | ||||
| for _f in $required_files; do | ||||
| 	if [ ! -r $_f ]; then | ||||
| 		eerror "$RC_SVCNAME: \`$_f' is not readable" | ||||
| 		exit 1 | ||||
| 	fi | ||||
| done | ||||
| [ $? -ne 0 ] && exit 1 | ||||
| unset _f | ||||
|  | ||||
| if [ -n "$opts" ]; then | ||||
|   | ||||
| @@ -54,9 +54,7 @@ cgroup_set_values() | ||||
| 				val= | ||||
| 				;; | ||||
| 			*) | ||||
| 				[ -n "$val" ] && | ||||
| 					val="$val $1" || | ||||
| 					val="$1" | ||||
| 				val="$val $1" | ||||
| 				;; | ||||
| 		esac | ||||
| 		shift | ||||
| @@ -109,21 +107,12 @@ cgroup_set_limits() | ||||
| 	local devices="${rc_cgroup_devices:-$RC_CGROUP_DEVICES}" | ||||
| 	[ -n "$devices" ] && cgroup_set_values devices "$devices" | ||||
|  | ||||
| 	local hugetlb="${rc_cgroup_hugetlb:-$RC_CGROUP_HUGETLB}" | ||||
| 	[ -n "$hugetlb" ] && cgroup_set_values hugetlb "$hugetlb" | ||||
|  | ||||
| 	local memory="${rc_cgroup_memory:-$RC_CGROUP_MEMORY}" | ||||
| 	[ -n "$memory" ] && cgroup_set_values memory "$memory" | ||||
|  | ||||
| 	local net_cls="${rc_cgroup_net_cls:-$RC_CGROUP_NET_CLS}" | ||||
| 	[ -n "$net_cls" ] && cgroup_set_values net_cls "$net_cls" | ||||
|  | ||||
| 	local net_prio="${rc_cgroup_net_prio:-$RC_CGROUP_NET_PRIO}" | ||||
| 	[ -n "$net_prio" ] && cgroup_set_values net_prio "$net_prio" | ||||
|  | ||||
| 	local pids="${rc_cgroup_pids:-$RC_CGROUP_PIDS}" | ||||
| 	[ -n "$pids" ] && cgroup_set_values pids "$pids" | ||||
|  | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -4,13 +4,7 @@ | ||||
|  | ||||
| ssd_start() | ||||
| { | ||||
| 	if [ -z "$command" ]; then | ||||
| 		ewarn "The command variable is undefined." | ||||
| 		ewarn "There is nothing for ${name:-$RC_SVCNAME} to start." | ||||
| 		ewarn "If this is what you intend, please write a start function." | ||||
| 		ewarn "This will become a failure in a future release." | ||||
| 		return 0 | ||||
| 	fi | ||||
| 	[ -n "$command" ] || return 0 | ||||
|  | ||||
| 	local _background= | ||||
| 	ebegin "Starting ${name:-$RC_SVCNAME}" | ||||
|   | ||||
							
								
								
									
										23
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										23
									
								
								sh/tmpfiles.sh.in
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							| @@ -53,18 +53,10 @@ relabel() { | ||||
| 	done | ||||
| } | ||||
|  | ||||
| splitpath() { | ||||
|     local path=$1 | ||||
|     while [ -n "$path" ]; do | ||||
|         echo $path | ||||
|         path=${path%/*} | ||||
|     done | ||||
| } | ||||
|  | ||||
| _restorecon() { | ||||
|     local path=$1 | ||||
|     if [ -x /sbin/restorecon ]; then | ||||
|         dryrun_or_real restorecon -F $(splitpath "$path") | ||||
|         dryrun_or_real restorecon -F "$path" | ||||
|     fi | ||||
| } | ||||
|  | ||||
| @@ -130,7 +122,6 @@ _d() { | ||||
|  | ||||
| 	if [ ! -d "$path" ]; then | ||||
| 		dryrun_or_real mkdir -p "$path" 2>/dev/null | ||||
| 		_restorecon "$path" | ||||
| 		dryrun_or_real $CHECKPATH -dq -m "$mode" -o "$uid:$gid" "$path" | ||||
| 	fi | ||||
| } | ||||
| @@ -146,18 +137,10 @@ _D() { | ||||
|  | ||||
| 	if [ $CREATE -gt 0 ]; then | ||||
| 		dryrun_or_real mkdir -p "$path" 2>/dev/null | ||||
| 		_restorecon "$path" | ||||
| 		dryrun_or_real $CHECKPATH -Dq -m "$mode" -o "$uid:$gid" "$path" | ||||
| 	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() { | ||||
| 	# Create a symlink if it doesn't exist yet | ||||
| 	local path=$1 mode=$2 uid=$3 gid=$4 age=$5 arg=$6 | ||||
| @@ -353,7 +336,7 @@ for FILE in $tmpfiles_d ; do | ||||
|  | ||||
| 		# whine about invalid entries | ||||
| 		case $cmd in | ||||
| 			f|F|w|d|D|v|p|L|c|C|b|x|X|r|R|z|Z) ;; | ||||
| 			f|F|w|d|D|p|L|c|C|b|x|X|r|R|z|Z) ;; | ||||
| 			*) warninvalid ; continue ;; | ||||
| 		esac | ||||
|  | ||||
| @@ -361,7 +344,7 @@ for FILE in $tmpfiles_d ; do | ||||
| 		if [ "$mode" = '-' -o "$mode" = '' ]; then | ||||
| 			case "$cmd" in | ||||
| 				p|f|F) mode=0644 ;; | ||||
| 				d|D|v) mode=0755 ;; | ||||
| 				d|D) mode=0755 ;; | ||||
| 				C|z|Z|x|r|R|L) ;; | ||||
| 			esac | ||||
| 		fi | ||||
|   | ||||
| @@ -298,7 +298,7 @@ find_mounts(struct args *args) | ||||
| 	int netdev; | ||||
| 	RC_STRINGLIST *list; | ||||
|  | ||||
| 	if ((fp = fopen("/proc/self/mounts", "r")) == NULL) | ||||
| 	if ((fp = fopen("/proc/mounts", "r")) == NULL) | ||||
| 		eerrorx("getmntinfo: %s", strerror(errno)); | ||||
|  | ||||
| 	list = rc_stringlist_new(); | ||||
| @@ -315,8 +315,6 @@ find_mounts(struct args *args) | ||||
| 		if ((ent = getmntfile(to))) { | ||||
| 			if (strstr(ent->mnt_opts, "_netdev")) | ||||
| 				netdev = 0; | ||||
| 			else | ||||
| 				netdev = 1; | ||||
| 		} | ||||
|  | ||||
| 		process_mount(list, args, from, to, fst, opts, netdev); | ||||
| @@ -349,7 +347,7 @@ get_regex(const char *string) | ||||
|  | ||||
| #include "_usage.h" | ||||
| #define extraopts "[mount1] [mount2] ..." | ||||
| #define getoptstring "f:F:n:N:o:O:p:P:iste:E:" getoptstring_COMMON | ||||
| #define getoptstring "f:F:n:N:o:O:p:P:ist" getoptstring_COMMON | ||||
| static const struct option longopts[] = { | ||||
| 	{ "fstype-regex",        1, NULL, 'f'}, | ||||
| 	{ "skip-fstype-regex",   1, NULL, 'F'}, | ||||
|   | ||||
| @@ -85,12 +85,8 @@ static bool sighup, in_background, deps, dry_run; | ||||
| static pid_t service_pid; | ||||
| static int signal_pipe[2] = { -1, -1 }; | ||||
|  | ||||
| static RC_STRINGLIST *deptypes_b; | ||||
| static RC_STRINGLIST *deptypes_n; | ||||
| static RC_STRINGLIST *deptypes_nu; | ||||
| static RC_STRINGLIST *deptypes_nua; | ||||
| static RC_STRINGLIST *deptypes_m; | ||||
| static RC_STRINGLIST *deptypes_mua; | ||||
| static RC_STRINGLIST *types_b, *types_n, *types_nu, *types_nua, *types_m; | ||||
| static RC_STRINGLIST *types_mua = NULL; | ||||
|  | ||||
| static void | ||||
| handle_signal(int sig) | ||||
| @@ -235,12 +231,12 @@ cleanup(void) | ||||
| 	rc_plugin_unload(); | ||||
|  | ||||
| #ifdef DEBUG_MEMORY | ||||
| 	rc_stringlist_free(deptypes_b); | ||||
| 	rc_stringlist_free(deptypes_n); | ||||
| 	rc_stringlist_free(deptypes_nu); | ||||
| 	rc_stringlist_free(deptypes_nua); | ||||
| 	rc_stringlist_free(deptypes_m); | ||||
| 	rc_stringlist_free(deptypes_mua); | ||||
| 	rc_stringlist_free(types_b); | ||||
| 	rc_stringlist_free(types_n); | ||||
| 	rc_stringlist_free(types_nu); | ||||
| 	rc_stringlist_free(types_nua); | ||||
| 	rc_stringlist_free(types_m); | ||||
| 	rc_stringlist_free(types_mua); | ||||
| 	rc_deptree_free(deptree); | ||||
| 	rc_stringlist_free(restart_services); | ||||
| 	rc_stringlist_free(need_services); | ||||
| @@ -522,30 +518,30 @@ get_started_services(void) | ||||
| } | ||||
|  | ||||
| static void | ||||
| setup_deptypes(void) | ||||
| setup_types(void) | ||||
| { | ||||
| 	deptypes_b = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_b, "broken"); | ||||
| 	types_b = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_b, "broken"); | ||||
|  | ||||
| 	deptypes_n = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_n, "ineed"); | ||||
| 	types_n = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_n, "ineed"); | ||||
|  | ||||
| 	deptypes_nu = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_nu, "ineed"); | ||||
| 	rc_stringlist_add(deptypes_nu, "iuse"); | ||||
| 	types_nu = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_nu, "ineed"); | ||||
| 	rc_stringlist_add(types_nu, "iuse"); | ||||
|  | ||||
| 	deptypes_nua = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_nua, "ineed"); | ||||
| 	rc_stringlist_add(deptypes_nua, "iuse"); | ||||
| 	rc_stringlist_add(deptypes_nua, "iafter"); | ||||
| 	types_nua = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_nua, "ineed"); | ||||
| 	rc_stringlist_add(types_nua, "iuse"); | ||||
| 	rc_stringlist_add(types_nua, "iafter"); | ||||
|  | ||||
| 	deptypes_m = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_m, "needsme"); | ||||
| 	types_m = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_m, "needsme"); | ||||
|  | ||||
| 	deptypes_mua = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(deptypes_mua, "needsme"); | ||||
| 	rc_stringlist_add(deptypes_mua, "usesme"); | ||||
| 	rc_stringlist_add(deptypes_mua, "beforeme"); | ||||
| 	types_mua = rc_stringlist_new(); | ||||
| 	rc_stringlist_add(types_mua, "needsme"); | ||||
| 	rc_stringlist_add(types_mua, "usesme"); | ||||
| 	rc_stringlist_add(types_mua, "beforeme"); | ||||
| } | ||||
|  | ||||
| static void | ||||
| @@ -608,10 +604,10 @@ svc_start_deps(void) | ||||
|  | ||||
| 	if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL)) | ||||
| 		eerrorx("failed to load deptree"); | ||||
| 	if (!deptypes_b) | ||||
| 		setup_deptypes(); | ||||
| 	if (!types_b) | ||||
| 		setup_types(); | ||||
|  | ||||
| 	services = rc_deptree_depends(deptree, deptypes_b, applet_list, | ||||
| 	services = rc_deptree_depends(deptree, types_b, applet_list, | ||||
| 	    runlevel, 0); | ||||
| 	if (TAILQ_FIRST(services)) { | ||||
| 		eerrorn("ERROR: %s needs service(s) ", applet); | ||||
| @@ -629,9 +625,9 @@ svc_start_deps(void) | ||||
| 	rc_stringlist_free(services); | ||||
| 	services = NULL; | ||||
|  | ||||
| 	need_services = rc_deptree_depends(deptree, deptypes_n, | ||||
| 	need_services = rc_deptree_depends(deptree, types_n, | ||||
| 	    applet_list, runlevel, depoptions); | ||||
| 	use_services = rc_deptree_depends(deptree, deptypes_nu, | ||||
| 	use_services = rc_deptree_depends(deptree, types_nu, | ||||
| 	    applet_list, runlevel, depoptions); | ||||
|  | ||||
| 	if (!rc_runlevel_starting()) { | ||||
| @@ -659,7 +655,7 @@ svc_start_deps(void) | ||||
| 		return; | ||||
|  | ||||
| 	/* Now wait for them to start */ | ||||
| 	services = rc_deptree_depends(deptree, deptypes_nua, applet_list, | ||||
| 	services = rc_deptree_depends(deptree, types_nua, applet_list, | ||||
| 	    runlevel, depoptions); | ||||
| 	/* We use tmplist to hold our scheduled by list */ | ||||
| 	tmplist = rc_stringlist_new(); | ||||
| @@ -864,10 +860,10 @@ svc_stop_deps(RC_SERVICE state) | ||||
| 	if (!deptree && ((deptree = _rc_deptree_load(0, NULL)) == NULL)) | ||||
| 		eerrorx("failed to load deptree"); | ||||
|  | ||||
| 	if (!deptypes_m) | ||||
| 		setup_deptypes(); | ||||
| 	if (!types_m) | ||||
| 		setup_types(); | ||||
|  | ||||
| 	services = rc_deptree_depends(deptree, deptypes_m, applet_list, | ||||
| 	services = rc_deptree_depends(deptree, types_m, applet_list, | ||||
| 	    runlevel, depoptions); | ||||
| 	tmplist = rc_stringlist_new(); | ||||
| 	TAILQ_FOREACH_REVERSE(svc, services, rc_stringlist, entries) { | ||||
| @@ -927,7 +923,7 @@ svc_stop_deps(RC_SERVICE state) | ||||
|  | ||||
| 	/* We now wait for other services that may use us and are | ||||
| 	 * stopping. This is important when a runlevel stops */ | ||||
| 	services = rc_deptree_depends(deptree, deptypes_mua, applet_list, | ||||
| 	services = rc_deptree_depends(deptree, types_mua, applet_list, | ||||
| 	    runlevel, depoptions); | ||||
| 	TAILQ_FOREACH(svc, services, entries) { | ||||
| 		if (rc_service_state(svc->value) & RC_SERVICE_STOPPED) | ||||
|   | ||||
| @@ -66,7 +66,6 @@ static const char *const env_whitelist[] = { | ||||
| 	"LC_MONETARY", "LC_MESSAGES", "LC_PAPER", "LC_NAME", "LC_ADDRESS", | ||||
| 	"LC_TELEPHONE", "LC_MEASUREMENT", "LC_IDENTIFICATION", "LC_ALL", | ||||
| 	"IN_HOTPLUG", "IN_BACKGROUND", "RC_INTERFACE_KEEP_CONFIG", | ||||
| 	"EERROR_QUIET", "EINFO_QUIET", | ||||
| 	NULL | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user