On Mon, Jan 25, 2016 at 09:04:17PM +0100, Petter Reinholdtsen wrote: > > Based on the changes from [email protected], I had a closer look at the > init.d script and propose to change it like this: > > - Use correct path to program (/usr/bin, not /usr/sbin). > - Stop running as root, run as user calypso, and move pidfile to a > place writable by this user. > - By default, only listen on 127.0.0.1. > - Remove unused / disabled code. > - Change indentation from spaces and tabs to 4 spaces.
Is this tested an being used? Cheers, -- Guido > > diff --git a/calypso-init b/calypso-init > index 5a1728a..2716546 100755 > --- a/calypso-init > +++ b/calypso-init > @@ -12,14 +12,18 @@ > > # Author: Keith Packard <[email protected]> > # Author: Joe Nahmias <[email protected]> > +# Author: Petter Reinholdtsen <[email protected]> > > # PATH should only include /usr/* if it runs after the mountnfs.sh script > PATH=/sbin:/usr/sbin:/bin:/usr/bin > DESC="Calypso CalDAV Server" > NAME=calypso > -DAEMON=/usr/sbin/$NAME > -PIDFILE=/var/run/$NAME.pid > -SCRIPTNAME=/etc/init.d/$NAME > +USER=calypso > +GROUP=calypso > +BINDIP=127.0.0.1 > +DAEMON=/usr/bin/$NAME > +PIDFILE=/var/run/calypso/$NAME.pid > +CALYPSO_OPTS="--daemon" > > # Exit if the package is not installed > [ -x "$DAEMON" ] || exit 0 > @@ -27,6 +31,14 @@ SCRIPTNAME=/etc/init.d/$NAME > # Read configuration variable file if it is present > [ -r /etc/default/$NAME ] && . /etc/default/$NAME > > +if [ "$BINDIP" ] ; then > + CALYPSO_OPTS="${CALYPSO_OPTS:+$CALYPSO_OPTS }--host=$BINDIP" > +fi > + > +if [ "$PIDFILE" ] ; then > + CALYPSO_OPTS="${CALYPSO_OPTS:+$CALYPSO_OPTS }--pid-file=$PIDFILE" > +fi > + > # Load the VERBOSE setting and other rcS variables > . /lib/init/vars.sh > > @@ -38,14 +50,15 @@ SCRIPTNAME=/etc/init.d/$NAME > # > # Check whether daemon starting is enabled > # > -check_start_daemon() { > - if [ "$DISABLE_CALPYSO" = "yes" ]; then > - [ "$VERBOSE" != no ] && \ > - log_warning_msg "Not starting calypso, disabled via > /etc/default/calypso" > - return 1 > - else > - return 0 > - fi > +check_start_daemon() > +{ > + if [ "$DISABLE_CALPYSO" = "yes" ]; then > + [ "$VERBOSE" != no ] && \ > + log_warning_msg "Not starting $NAME, disabled via > /etc/default/$NAME" > + return 1 > + else > + return 0 > + fi > } > > # > @@ -53,18 +66,23 @@ check_start_daemon() { > # > do_start() > { > - # Return > - # 0 if daemon has been started > - # 1 if daemon was already running > - # 2 if daemon could not be started > - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON > --test > /dev/null \ > - || return 1 > - start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \ > - $CALYPSO_OPTS \ > - || return 2 > - # Add code here, if necessary, that waits for the process to be ready > - # to handle requests from services started subsequently which depend > - # on this one. As a last resort, sleep for some time. > + # Return > + # 0 if daemon has been started > + # 1 if daemon was already running > + # 2 if daemon could not be started > + mkdir -p $(dirname $PIDFILE) > + chown $USER:$GROUP $(dirname $PIDFILE) > + start-stop-daemon \ > + --quiet \ > + --start \ > + --chuid $USER \ > + --pidfile $PIDFILE \ > + --exec $DAEMON \ > + -- $CALYPSO_OPTS \ > + || return 2 > + # Add code here, if necessary, that waits for the process to be ready > + # to handle requests from services started subsequently which depend > + # on this one. As a last resort, sleep for some time. > } > > # > @@ -72,97 +90,84 @@ do_start() > # > do_stop() > { > - # Return > - # 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 --stop --quiet --retry=TERM/30/KILL/5 --pidfile > $PIDFILE --name $NAME > - RETVAL="$?" > - [ "$RETVAL" = 2 ] && return 2 > - # Wait for children to finish too if this is a daemon that forks > - # and if the daemon is only ever run from this initscript. > - # If the above conditions are not satisfied then add some other code > - # that waits for the process to drop all resources that could be > - # needed by services started subsequently. A last resort is to > - # sleep for some time. > - start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec > $DAEMON > - [ "$?" = 2 ] && return 2 > - # Many daemons don't delete their pidfiles when they exit. > - rm -f $PIDFILE > - return "$RETVAL" > -} > - > -# > -# Function that sends a SIGHUP to the daemon/service > -# > -do_reload() { > - # > - # If the daemon can reload its configuration without > - # restarting (for example, when it is sent a SIGHUP), > - # then implement that here. > - # > - start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name > $NAME > - return 0 > + # Return > + # 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 \ > + --stop \ > + --quiet \ > + --retry=TERM/30/KILL/5 \ > + --pidfile $PIDFILE \ > + --name $NAME > + RETVAL="$?" > + [ "$RETVAL" = 2 ] && return 2 > + # Wait for children to finish too if this is a daemon that forks > + # and if the daemon is only ever run from this initscript. > + # If the above conditions are not satisfied then add some other code > + # that waits for the process to drop all resources that could be > + # needed by services started subsequently. A last resort is to > + # sleep for some time. > + start-stop-daemon \ > + --stop \ > + --quiet \ > + --oknodo \ > + --retry=0/30/KILL/5 \ > + --exec $DAEMON > + [ "$?" = 2 ] && return 2 > + # Many daemons don't delete their pidfiles when they exit. > + rm -f $PIDFILE > + return "$RETVAL" > } > > case "$1" in > - start) > - check_start_daemon || exit 0 > - [ "$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 "$DAEMON" "$NAME" && exit 0 || exit $? > - ;; > - #reload|force-reload) > - # > - # If do_reload() is not implemented then leave this commented out > - # and leave 'force-reload' as an alias for 'restart'. > - # > - #log_daemon_msg "Reloading $DESC" "$NAME" > - #do_reload > - #log_end_msg $? > - #;; > - restart|force-reload) > - # > - # If the "reload" option is implemented then remove the > - # 'force-reload' alias > - # > - 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 > - echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 > - exit 3 > - ;; > + start) > + check_start_daemon || exit 0 > + [ "$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 "$DAEMON" "$NAME" && exit 0 || exit $? > + ;; > + restart|force-reload) > + # > + # If the "reload" option is implemented then remove the > + # 'force-reload' alias > + # > + 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: $0 {start|stop|status|restart|force-reload}" >&2 > + exit 3 > + ;; > esac > > : > > -- > Happy hacking > Petter Reinholdtsen > _______________________________________________ > Calypso mailing list > [email protected] > http://keithp.com/mailman/listinfo/calypso _______________________________________________ Calypso mailing list [email protected] http://keithp.com/mailman/listinfo/calypso
