mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
| #!/bin/sh
 | |
| 
 | |
| PROGRAM="sysctl"
 | |
| 
 | |
| SYSCTL_ARGS=""
 | |
| 
 | |
| # shellcheck source=/dev/null
 | |
| [ -r "/etc/default/$PROGRAM" ] && . "/etc/default/$PROGRAM"
 | |
| 
 | |
| # Files are read from directories in the SYSCTL_SOURCES list, in the given
 | |
| # order. A file may be used more than once, since there can be multiple
 | |
| # symlinks to it. No attempt is made to prevent this.
 | |
| SYSCTL_SOURCES="/etc/sysctl.d/ /usr/local/lib/sysctl.d/ /usr/lib/sysctl.d/ /lib/sysctl.d/ /etc/sysctl.conf"
 | |
| 
 | |
| # Use some scripting to mimic the --system option of the sysctl provided by
 | |
| # procps-ng but still reporting errors. Users not interested on error report
 | |
| # can put "-e" in SYSCTL_ARGS.
 | |
| #
 | |
| # The file redirections do the following:
 | |
| #
 | |
| # - stdout is redirected to syslog with facility.level "kern.info"
 | |
| # - stderr is redirected to syslog with facility.level "kern.err"
 | |
| # - file dscriptor 4 is used to pass the result to the "start" function.
 | |
| #
 | |
| # Testing the sysctl exit code is fruitless, as at the moment, since it ends
 | |
| # with status zero even if errors happen. Hopefully this will be fixed in a
 | |
| # future version of Busybox.
 | |
| #
 | |
| run_program() {
 | |
| 	# shellcheck disable=SC2086 # we need the word splitting
 | |
| 	find $SYSCTL_SOURCES -maxdepth 1 -name '*.conf' -print0 2> /dev/null | \
 | |
| 	xargs -0 -r -n 1 readlink -f | {
 | |
| 		prog_status="OK"
 | |
| 		while :; do
 | |
| 			read -r file
 | |
| 			if [ -z "$file" ]; then
 | |
| 				echo "$prog_status" >&4
 | |
| 				break
 | |
| 			fi
 | |
| 			echo "* Applying $file ..."
 | |
| 			/sbin/sysctl -p "$file" $SYSCTL_ARGS || prog_status="FAIL"
 | |
| 		done 2>&1 >&3 | /usr/bin/logger -t sysctl -p kern.err
 | |
| 	} 3>&1 | /usr/bin/logger -t sysctl -p kern.info
 | |
| }
 | |
| 
 | |
| start() {
 | |
| 	printf '%s %s: ' "$1" "$PROGRAM"
 | |
| 	status=$(run_program 4>&1)
 | |
| 	echo "$status"
 | |
| 	if [ "$status" = "OK" ]; then
 | |
| 		return 0
 | |
| 	fi
 | |
| 	return 1
 | |
| }
 | |
| 
 | |
| case "$1" in
 | |
| 	start)
 | |
| 		start "Running";;
 | |
| 	restart|reload)
 | |
| 		start "Rerunning";;
 | |
| 	stop)
 | |
| 		:;;
 | |
| 	*)
 | |
| 		echo "Usage: $0 {start|stop|restart|reload}"
 | |
| 		exit 1
 | |
| esac
 |