#!/bin/sh ### BEGIN INIT INFO # Provides: shellinabox # Required-Start: $network $remote_fs # Required-Stop: $network $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Shell In A Box Daemon # Description: Daemon for publishing a login shell at # http://localhost:SHELLINABOX_PORT # where default port number is 4200. ### END INIT INFO # Authors: Markus Gutschke , Marc Singer # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/bin:/usr/sbin:/usr/bin DESC="Shell In A Box Daemon" NAME="shellinabox" DAEMON="/usr/bin/shellinaboxd" PIDFILE="/var/run/shellinaboxd.pid" SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed [ -x $DAEMON ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # Set some default values SHELLINABOX_DATADIR="${SHELLINABOX_DATADIR:-/var/lib/shellinabox}" SHELLINABOX_PORT="${SHELLINABOX_PORT:-4200}" SHELLINABOX_USER="${SHELLINABOX_USER:-shellinabox}" SHELLINABOX_GROUP="${SHELLINABOX_GROUP:-shellinabox}" # # Function that starts the daemon/service. # d_start() { if [ -z "$SHELLINABOX_DAEMON_START" -o \ "$SHELLINABOX_DAEMON_START" = "0" ]; then return 0 fi eval start-stop-daemon --start --oknodo --pidfile "'$PIDFILE'" \ --exec "'$DAEMON'" -- -q --background="'$PIDFILE'" \ -c "'${SHELLINABOX_DATADIR}'" -p "'${SHELLINABOX_PORT}'" \ -u "'${SHELLINABOX_USER}'" -g "'${SHELLINABOX_GROUP}'" \ $(for i in $(ls /etc/shellinabox/options-enabled/*.css | sed -e \ 's/.*[/]\([0-9]*\)[-_+][^/:,;]*[.]css/\1/'| sort -u); do for j in /etc/shellinabox/options-enabled/"$i"*.css; do echo -n "$j" | sed -e 's/\(.*[/]\)\([0-9]*\)\([-_+]\)\([^/:,;]*\)[.]css/\4:\3\1\2\3\4.css,/ s/:_/:-/' done | sed -e 's/,$/;/' done | sed -e 's/;$// //b s/.*/--user-css "\0"/') \ "${SHELLINABOX_ARGS}" } # # Function that stops the daemon/service. # d_stop() { start-stop-daemon --stop --oknodo --pidfile "$PIDFILE" rm -f "$PIDFILE" } # # Function that reloads the config file for the daemon/service. # d_reload() { # Only reload if there are no active sessions running [ -r "$PIDFILE" ] && [ `ps o pid= --ppid "\`cat "$PIDFILE"\`\`ps o pid= --ppid \ \\\`cat "$PIDFILE"\\\`| xargs -r -n 1 printf ',%s'\`" | wc -l` -gt 1 ] && return 1 d_stop d_start } # # Function that check the status of the daemon/service. # d_status() { [ -r "$PIDFILE" ] && kill -0 `cat "$PIDFILE"` && echo "$DESC is running" || echo "$DESC is not running" } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" d_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" d_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; reload) [ "$VERBOSE" != no ] && log_daemon_msg "Reloading services for $DESC" "$NAME" d_reload case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; restart|force-reload) [ "$VERBOSE" != no ] && log_daemon_msg "Restarting $DESC" "$NAME" d_stop d_start case "$?" in 0) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 1) [ "$VERBOSE" != no ] && log_end_msg 1 ;; *) [ "$VERBOSE" != no ] && log_end_msg 1 ;; # Failed to start esac ;; status) d_status ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|reload}" >&2 exit 1 ;; esac exit 0