| #!/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" |
| |
| # The "--system" option activates "--ignore", which is bad because invalid |
| # variable settings in the configuration files will not be reported on the |
| # system log. Use some scripting to mimic the --system behavior 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. |
| # |
| 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 |