From d0f76fd3b458aff39d715d09a17039ee0ba10d38 Mon Sep 17 00:00:00 2001 From: Russ Magee Date: Tue, 27 Oct 2020 13:22:50 -0700 Subject: [PATCH] Added sysv init script Signed-off-by: Russ Magee --- README.md | 11 +++- xsd.sysvrc | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+), 1 deletion(-) create mode 100755 xsd.sysvrc diff --git a/README.md b/README.md index d691048..9ab7ffa 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ $ make clean all $ sudo make [install | uninstall | reinstall] ``` -### To manage service (assuming openrc init) +### To manage service (openrc init) An example init script (xsd.initrc) is provided. Consult your Linux distribution documentation for proper service/daemon installation. For openrc, @@ -114,6 +114,15 @@ $ sudo cp xsd.initrc /etc/init.d/xsd $ sudo rc-config add xsd default ``` +### To manage service (sysV init) + +An example init script (xsd.sysvrc) is provided. Consult your Linux distribution documentation for proper service/daemon installation. For sysV init, + +``` +$ sudo cp xsd.sysvrc /etc/init.d/xsd +$ sudo sysv-rc-conf --level 2345 xsd on +``` + The make system assumes installation in /usr/local/sbin (xsd, xspasswd) and /usr/local/bin (xs/xc symlink). ``` diff --git a/xsd.sysvrc b/xsd.sysvrc new file mode 100755 index 0000000..8e617c5 --- /dev/null +++ b/xsd.sysvrc @@ -0,0 +1,162 @@ +#! /bin/sh + +### BEGIN INIT INFO +# Provides: xsd +# Required-Start: $remote_fs $syslog +# Required-Stop: $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: +# Short-Description: eXperimental Shell Daemon +### END INIT INFO + +set -e + +# /etc/init.d/xsd: start and stop the eXperimental "secure" Shell Daemon + +test -x /usr/local/sbin/xsd || exit 0 +( /usr/local/sbin/xsd -h 2>&1 | grep -q chaff ) 2>/dev/null || exit 0 + +umask 022 + +#if test -f /etc/default/ssh; then +# . /etc/default/ssh +#fi + +. /lib/lsb/init-functions + +if [ -n "$2" ]; then + XSD_OPTS="$XSD_OPTS $2" +fi + +# Are we running from init? +run_by_init() { + ([ "$previous" ] && [ "$runlevel" ]) || [ "$runlevel" = S ] +} + +check_for_no_start() { + # forget it if we're trying to start, and /etc/xsd_not_to_be_run exists + if [ -e /etc/xsd_not_to_be_run ]; then + if [ "$1" = log_end_msg ]; then + log_end_msg 0 || true + fi + if ! run_by_init; then + log_action_msg "eXperimental Shell Daemon not in use (/etc/xsd_not_to_be_run)" || true + fi + exit 0 + fi +} + +check_dev_null() { + if [ ! -c /dev/null ]; then + if [ "$1" = log_end_msg ]; then + log_end_msg 1 || true + fi + if ! run_by_init; then + log_action_msg "/dev/null is not a character device!" || true + fi + exit 1 + fi +} + +#check_privsep_dir() { +# # Create the PrivSep empty dir if necessary +# if [ ! -d /run/sshd ]; then +# mkdir /run/sshd +# chmod 0755 /run/sshd +# fi +#} + +#check_config() { +# if [ ! -e /etc/xsd_not_to_be_run ]; then +# /usr/local/sbin/xsd $XSD_OPTS -t || exit 1 +# fi +#} + +export PATH="${PATH:+$PATH:}/usr/local/sbin:/usr/sbin:/sbin" + +case "$1" in + start) + #check_privsep_dir + check_for_no_start + check_dev_null + log_daemon_msg "Starting eXperimental Shell Daemon" "xsd" || true + if start-stop-daemon --start -b --quiet --oknodo --chuid 0:0 --exec /usr/local/sbin/xsd -- $XSD_OPTS; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + stop) + log_daemon_msg "Stopping eXperimental Shell Daemon" "xsd" || true + if start-stop-daemon --stop --quiet --oknodo --exec /usr/local/sbin/xsd; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + reload|force-reload) + check_for_no_start + #check_config + log_daemon_msg "Reloading eXperimental Shell Daemon's configuration" "xsd" || true + if start-stop-daemon --stop --signal 1 --quiet --oknodo --exec /usr/local/sbin/xsd; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + restart) + #check_privsep_dir + #check_config + log_daemon_msg "Restarting eXperimental Shell Daemon" "xsd" || true + start-stop-daemon --stop --quiet --oknodo --retry 30 --exec /usr/local/sbin/xsd + check_for_no_start log_end_msg + check_dev_null log_end_msg + if start-stop-daemon --start -b --quiet --oknodo --chuid 0:0 --exec /usr/local/sbin/xsd -- $XSD_OPTS; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + + try-restart) + #check_privsep_dir + #check_config + log_daemon_msg "Restarting eXperimental Shell Daemon" "xsd" || true + RET=0 + start-stop-daemon --stop --quiet --retry 30 --exec /usr/local/sbin/xsd || RET="$?" + case $RET in + 0) + # old daemon stopped + check_for_no_start log_end_msg + check_dev_null log_end_msg + if start-stop-daemon --start -b --quiet --oknodo --chuid 0:0 --exec /usr/local/sbin/xsd -- $XSD_OPTS; then + log_end_msg 0 || true + else + log_end_msg 1 || true + fi + ;; + 1) + # daemon not running + log_progress_msg "(not running)" || true + log_end_msg 0 || true + ;; + *) + # failed to stop + log_progress_msg "(failed to stop)" || true + log_end_msg 1 || true + ;; + esac + ;; + + status) + status_of_proc -p /run/xsd.pid /usr/local/sbin/xsd xsd && exit 0 || exit $? + ;; + + *) + log_action_msg "Usage: /etc/init.d/xsd {start|stop|reload|force-reload|restart|try-restart|status}" || true + exit 1 +esac + +exit 0