Squeezeslave on the core

From LinuxMCE
Revision as of 19:38, 22 June 2008 by Niz23 (Talk | contribs) (LMCE init script)

Jump to: navigation, search

Squeezeslave Setup

Here's how to setup squeezeslave to run on the core. It's fairly straight forward. One small issue is that because squeezeslave uses the OSS interface, you will need a separate sound card for each instance of squeezeslave you want to run.

Download Source

First download a version of Squeezeslave. I'm running the latest version as it fixed some playback bugs I was having, but any version that works with you're setup should be fine.

Installing

  • You'll want to put it somewhere in you're path.
    • Example: /usr/local/bin

Modify /etc/rc.local

Next add the following to /etc/rc.local (this is my setup for two)

 /usr/local/bin/squeezeslave -m 00:00:00:00:00:01 -o 0 -s -r &
 /usr/local/bin/squeezeslave -m 00:00:00:00:00:02 -o 1 -s -r &
  • the MAC address can be whatever you want
  • the -o option specifies which OSS output device ie /dev/dsp1
  • the -s option tells squeezeslave to wait for a signal to quit rather than control-C
  • the -r option tells squeezeslave to keep retrying to connect to the server, useful if the server is not running yet.

Setting Up Alsamixer

Next make sure all the volume levels in the mixer (alsamixer) are set correctly

 aslamixer

Make sure that the settings are as desired and save (Esc button)

Setting Up LinuxMCE

Next step, manually add the squeezeslave to linuxmce as a squeezebox using the mac address you gave it.

Select Device

  • Select Device->A/V Equipment
  • Select SqueezeBox Player from the dropdown options
  • Assign it to a room and entertainment area.
  • Regen your orbiters and reload the router.

LMCE init script

Copy attached script text into a file named /etc/init.d/squeezeslave

Startup Script

#! /bin/sh
### BEGIN INIT INFO
# Provides:          squeezeslave
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      S 0 1 6
# Short-Description: Initscript for squeezeslave
# Description:       This init script make it possible to start squeezeslave as a daemon
#                    It is placed in /etc/init.d.
### END INIT INFO

# Author: Magnus Nilsson <magnus@karabas.nu>
#


# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Squeezeslave dameon"
NAME=squeezeslave
DAEMON=/root/squeezeslave-0.7.1/$NAME
DAEMON_ARGS="-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1"
PIDFILE=/var/run/$NAME.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
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
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 -b --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start -b --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || 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.
}

#
# Function that stops the daemon/service
#
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/3/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/3/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
}

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
        ;;
  #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|restart|force-reload}" >&2
        exit 3
        ;;
esac

:

Make script executable

sudo chmod +x /etc/init.d/squeezeslave

Modify Parameters

Modify parameters in the beginning of the file to suite your needs.

  • MAC address
  • slimserver host
  • binary location
  • soundcard device.

Below is the parameters you should change:

NAME=squeezeslave
DAEMON=/root/squeezeslave-0.7.1/$NAME
DAEMON_ARGS="-o 1 -m 00:04:20:00:00:01 -r -s 192.168.80.1"

Setup to Run at Start Up

  • Run from shell:
 sudo default-rd.d /etc/init.d/squeezeslave default 50
  • You should now be able to start/stop squeezeslave from shell.
sudo /etc/init.d/squeezeslave start
  • Check with ps if it is running:
 ps aux | grep squeezeslave
    • Example output:
root      9007  0.0  0.3  64116  5436 ?        Sl   Jun18   0:03 /root/squeezeslave-0.7.1/squeezeslave -o 1 -m    00:04:20:00:00:01 -r -s 192.168.80.1
  • To stop:
sudo /etc/init.d/squeezeslave stop
  • Restart your core and check if everything start as it should, including squeezeslave.

That should do it.