#!/bin/sh # roaraudio initscript # # Copyright (c) 2008-2010 Philipp 'ph3-der-loewe' Schafft # Copyright (c) 2007 Javier Fernandez-Sanguino # # This is free software; you may redistribute it and/or modify # it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 3, # or (at your option) any later version. # # This is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License with # the Debian operating system, in /usr/share/common-licenses/GPL; if # not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA # ### BEGIN INIT INFO # Provides: roaraudio # Required-Start: $network $local_fs $remote_fs $syslog # Required-Stop: $network $local_fs $remote_fs $syslog # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: sound server for audio mixing # Description: RoarAudio is a server for audio mixing. Its main purpose is to mix audio from # different clients before sending it to its outputs (for example a soundcard). # It is completely network transparent (UNIX sockets, TCP/IP, DECnet) and # supports many common codecs like Ogg Vorbis, Speex or FLAC. ### END INIT INFO #set -e PATH=/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/roard ROARCTL=/usr/bin/roarctl NAME=roaraudio DESC="RoarAudio" DAEMON_BN=`basename $DAEMON` PIDFILE=/var/run/$DAEMON_BN.pid SCRIPTNAME=/etc/init.d/$NAME USER_LIST="$DAEMON_BN roard roar nobody"; # List of files to chown to the daemon user CHOWN_LIST='' # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0; # Read config file if it is present. if [ -r /etc/default/$NAME ] then . /etc/default/$NAME fi if [ "$ROARAUDIO_DEFAULT_SOCKET" != '' ] then ln -s "$ROARAUDIO_DEFAULT_SOCKET" /etc/roarserver fi ROARD_OPTS="--log-syslog --daemon $ROARD_OPTS" [ "$PIDFILE" = '' ] || ROARD_OPTS="--pidfile $PIDFILE $ROARD_OPTS" [ "$ROARD_REALTIME" = 'YES' ] && ROARD_OPTS="--realtime $ROARD_OPTS" [ "$ROARD_REALTIME" = 'DOUBLE' ] && ROARD_OPTS="--realtime --realtime $ROARD_OPTS" [ "$ROARD_LOCATION" = '' ] || ROARD_OPTS="--location '$ROARD_LOCATION' $ROARD_OPTS" [ "$ROARD_DESCRIPTION" = '' ] || ROARD_OPTS="--description '$ROARD_DESCRIPTION' $ROARD_OPTS" case "$ROARD_AF" in UNIX|unix) ROARD_OPTS="-u $ROARD_OPTS" ;; TCP|tcp) ROARD_OPTS="-t $ROARD_OPTS" ;; DECnet|DECNET|decnet) ROARD_OPTS="-n $ROARD_OPTS" ;; esac ESD_OPTS='' case "$ROARD_EMUL_ESD_AF" in UNIX|unix) ROARD_PROFILES="esd-unix $ROARD_PROFILES" mkdir /tmp/.esd/ 2> /dev/null; CHOWN_LIST="$CHOWN_LIST /tmp/.esd/" ;; TCP|tcp) _host='localhost'; [ "$ROARD_HOST" = '' ] || _host="$ROARD_HOST" ESD_OPTS="--new-sock --proto esd -t -b $_host -p 16001" ;; esac RSOUND_OPTS='' case "$ROARD_EMUL_RSOUND_AF" in UNIX|unix) ROARD_PROFILES="rsound-unix $ROARD_PROFILES" ;; TCP|tcp) _host='localhost'; [ "$ROARD_HOST" = '' ] || _host="$ROARD_HOST" RSOUND_OPTS="--new-sock --proto rsound -t -b $_host -p 12345" ;; DECnet|DECNET|decnet) ROARD_PROFILES="rsound-dnet $ROARD_PROFILES" ;; esac [ "$ROARD_SOCKET" = '' ] || ROARD_OPTS="--sock $ROARD_SOCKET $ROARD_OPTS" [ "$ROARD_PORT" = '' ] || ROARD_OPTS="--port $ROARD_PORT $ROARD_OPTS" if [ "$ROARD_OBJECT" = '' ] then [ "$ROARD_HOST" = '' ] || ROARD_OPTS="--bind $ROARD_HOST $ROARD_OPTS" else ROARD_OPTS="--sock $ROARD_HOST::$ROARD_OBJECT $ROARD_OPTS" fi [ "$ROARD_SLP" = 'YES' ] && ROARD_OPTS="--slp $ROARD_OPTS" [ "$ROARD_RATE" = '' ] || ROARD_OPTS="-R $ROARD_RATE $ROARD_OPTS" [ "$ROARD_CHANNEL" = '' ] || ROARD_OPTS="-C $ROARD_CHANNEL $ROARD_OPTS" [ "$ROARD_BITS" = '' ] || ROARD_OPTS="-B $ROARD_BITS $ROARD_OPTS" [ "$ROARD_DRIVER" = '' ] || ROARD_OPTS="-o $ROARD_DRIVER $ROARD_OPTS" [ "$ROARD_DEVICE" = '' ] || ROARD_OPTS="-O $ROARD_DEVICE $ROARD_OPTS" [ "$ROARD_DRIVER_OPTIONS" = '' ] && ROARD_DRIVER_OPTIONS='sync' ROARD_OPTS="-oP -oO $ROARD_DRIVER_OPTIONS $ROARD_OPTS" [ "$ROARD_MIXERDRV" = '' ] || ROARD_OPTS="-m $ROARD_MIXERDRV $ROARD_OPTS" [ "$ROARD_MIXERDEV" = '' ] || ROARD_OPTS="-M $ROARD_MIXERDEV $ROARD_OPTS" [ "$ROARD_MIXER_OPTIONS" = '' ] || ROARD_OPTS="-mO $ROARD_MIXER_OPTIONS $ROARD_OPTS" [ "$ROARD_SOURCE_RADIONOISE" = 'YES' ] && ROARD_OPTS="-s radionoise $ROARD_OPTS" for _p in $ROARD_ROLESTACK do ROARD_OPTS="--rolestack-push $_p $ROARD_OPTS" done [ "$ROARD_ACCLEV_GUEST" = '' ] || ROARD_OPTS="--guest-acclev $ROARD_ACCLEV_GUEST $ROARD_OPTS" [ "$ROARD_ACCLEV_TRUST" = '' ] || ROARD_OPTS="--trust-acclev $ROARD_ACCLEV_TRUST $ROARD_OPTS" [ "$ROARD_AUTHFILE_FILENAME" = '' ] || ROARD_OPTS="--authfile-gen $ROARD_AUTHFILE_FILENAME $ROARD_OPTS" [ "$ROARD_AUTHFILE_TYPE" = '' ] || ROARD_OPTS="--authfile-type $ROARD_AUTHFILE_TYPE $ROARD_OPTS" [ "$ROARD_AUTHFILE_ACCLEV" = '' ] || ROARD_OPTS="--authfile-acclev $ROARD_AUTHFILE_ACCLEV $ROARD_OPTS" if [ "$ROARD_USER" = '' ] then for _u in $USER_LIST do _r=`id -un $_u 2> /dev/null` if [ "$_u" = "$_r" ] then ROARD_USER="$_u"; break; fi done else _r=`id -un "$ROARD_USER" 2> /dev/null` if [ "$_r" != "$ROARD_USER" ] then echo "Error starting RoarAudio: can not find configured user $ROARD_USER" >&2 echo "Hint: re-configure user in /etc/default/$NAME (see ROARD_USER)" >&2 exit 1; fi fi if [ "$ROARD_USER" = '' ] then echo "Error starting RoarAudio: can not find any user to run roard as." >&2 echo "Hint: configure user in /etc/default/$NAME explicitly (see ROARD_USER)" >&2 exit 1; else ROARD_OPTS="--setuid -U $ROARD_USER $ROARD_OPTS" fi ROARD_OPTS="--setgid $ROARD_OPTS" [ "$ROARD_GROUP" = '' ] || ROARD_OPTS="-G $ROARD_GROUP $ROARD_OPTS" [ "$ROARD_CHROOT" = '' ] || ROARD_OPTS="--chroot $ROARD_CHROOT $ROARD_OPTS" ROARD_OPTS="$ROARD_OPTS $ESD_OPTS $RSOUND_OPTS" if [ "$ROARD_PROFILES" != '' ] then _p=`echo "$ROARD_PROFILES" | sed 's/ */ --new-sock --proto-profile /g'` ROARD_OPTS="$ROARD_OPTS --new-sock --proto-profile $_p" fi for _p in $CHOWN_LIST do chown "$ROARD_USER":"$ROARD_GROUP" "$_p" done set -e case "$1" in start) [ "$ROARD" = 'YES' ] || exit 0; echo -n "Starting $DESC: " $DAEMON --start $ROARD_OPTS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " set +e if [ "$PIDFILE" != '' ] then PID=`cat $PIDFILE 2> /dev/null` if [ "$PID" != '' ] then kill -0 $PID 2> /dev/null if [ "$?" != '0' ] then exit 0; fi else exit 0; fi fi $DAEMON --stop $ROARD_OPTS echo "$NAME." set -e ;; status) echo -n "Status of $DESC: " set +e if [ "$PIDFILE" != '' ] then PID=`cat $PIDFILE 2> /dev/null` if [ "$PID" != '' ] then kill -0 $PID 2> /dev/null if [ "$?" = '0' ] then echo "running." exit 0; else echo "dead (stale pid file)." exit 1; fi else echo "not running." exit 3; fi fi set -e echo "unknown (no pid file configured)." exit 4 ;; restart|force-reload) [ "$ROARD" = 'YES' ] || exec $0 stop echo -n "Restarting $DESC: " $DAEMON --restart $ROARD_OPTS echo "$NAME." ;; terminate|shutdown) echo -n "Terminating $DESC: " $DAEMON --shutdown $ROARD_OPTS echo "$NAME." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|terminate|shutdown|status}" >&2 exit 1 ;; esac exit 0