#! /bin/sh ### BEGIN INIT INFO # Provides: infinoted # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Launches infinoted. # Description: My hovercraft is full of eels. ### END INIT INFO #------------------------------------------------------------------------- # Author: Harald Pfeiffer # Version: 0.666 # This is basically the SysVinit skeleton from Debian with # whatever adjustments necessary (see comment lines) for infinote. # Lazy work, no comments removed, loads of hubbub remaining. # # Alterations made to the skeleton mechanics and not commented below: # status_of_proc: So we set up a $PIDFILE and don't pass it on to # status_of_proc? What's the danger in this? In infinoted's case, # however, we are heavily dependent on this. Added. # # Additional remarks: # CLI output: infinoted insists on puking its loaded plugins at you at any # startup, so the LSB startup line might look a bit chaotic. # Unfortunately, same as the location of the PID file, this is # hardcoded. *claps* # Workaround _with_ start-stop-daemon: Pipe around a bit involving # logger. #------------------------------------------------------------------------- # Do NOT "set -e" # PATH should only include /usr/* if it runs after the mountnfs.sh script # hp -- demo has a Debian package, might need to add /usr/local or whatever else here # when compiling yourselves PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="Infinoted, a server for collaborative editing" NAME=infinoted DAEMON=/usr/bin/$NAME SYSVDEFAULTS=/etc/default # hp -- We are now presenting some defaults here, will be overwritten if present in /etc/default/$NAME INFINOTE_ROOT="/usr/local/share/infinoted" INFINOTE_CERT="/etc/infinoted/cert.pem" INFINOTE_KEY="/etc/infinoted/key.pem" INFINOTE_PORT="6663" # hp -- infinoted is a nasty fucker with its pid file: it's hardcoded*. Whatever you pass on as -r # (infinote document root) will be used for the pid file as well ): # * harcoded as in: no option to change this path. Wonderful. # You might of course set up the document directory before (; don't forget to adjust # SCRIPTUSER below # hp -- Mind the major infinote release - the devs decided to put its number into the pid file name. # Bleh. INFINOTE_MAJVER="`infinoted -v|awk '{print $NF}'|awk -F\. '{print $1"."$2}'`" PIDFILE=$INFINOTE_ROOT/.infinoted/infinoted-$INFINOTE_MAJVER.pid SCRIPTNAME=/etc/init.d/$NAME # hp -- add a user to execute this. Might not want to run this as root (: SCRIPTUSER="infinote:infinote" [ -x "$DAEMON" ] || exit 0 [ -r $SYSVDEFAULTS/$NAME ] && . $SYSVDEFAULTS/$NAME DAEMON_ARGS="-d -c $INFINOTE_CERT -k $INFINOTE_KEY -p $INFINOTE_PORT -r $INFINOTE_ROOT" . /lib/init/vars.sh . /lib/lsb/init-functions # Tell whether you have started or stopped ffs VERBOSE="yes" do_start() { # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon -c $SCRIPTUSER --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ || return 1 start-stop-daemon -c $SCRIPTUSER --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ $DAEMON_ARGS < /dev/null 2>&1|logger 2>/dev/null\ || return 2 } do_stop() { # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon -c $SCRIPTUSER --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 start-stop-daemon -c $SCRIPTUSER --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON [ "$?" = 2 ] && return 2 #rm -f $PIDFILE return "$RETVAL" } # hp -- infinoted has SIGHUP for reload in infinoted-signal.c --> 'ere we go: do_reload() { start-stop-daemon -c $SCRIPTUSER --stop --signal 1 --quiet --make-pidfile --pidfile $PIDFILE --name $NAME return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_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" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; status) status_of_proc -p $PIDFILE "$DAEMON" "$NAME" && exit 0 || exit $? ;; reload|force-reload) log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" do_stop case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2 exit 3 ;; esac :