Как установить Logitech Media Server (Squeezebox Server)?

Как установить Logitech Media Server (Squeezebox Server)?

Где можно получить последние установочные файлы для Logitech Media Server и как правильно выполнить установку?

(Я запускаю его на Raspberry Pi 2, и мне пришлось переустанавливать его несколько раз из-за неисправности SD-карты. Поэтому я отвечу на этот вопрос в основном как напоминание для себя.)

решение1

На момент написания статьи последняя версия — 7.9.2.

Это доступноздесь. Вы можете найти обзор нескольких других версийздесь. Скопируйте linkфайл в соответствии с вашей системой в буфер обмена.

Загрузите файл в свою систему с помощью wget link. Установите fileс помощью sudo dpkg -i file. Это позволитне удалось установитьиз-за отсутствия зависимостей.

Исправьте это с помощью sudo apt -f install.

Начните с sudo service logitechmediaserver start.

Проверьте, работает ли top.

Подключитесь к серверу через веб-интерфейс, доступный по адресу http://IPofYOURserver:9000.


Настройкинаходятся в /var/lib/squeezeboxserver/prefs/server.prefs.

Сюда входят каталоги для медиабиблиотеки, а также настройки для локальных клиентов, такие как размер информации, отображаемой на дисплее старого проигрывателя Squeezebox Boom.

Если вы хотите избежать настройки всего нового, вы можете переопределить server.prefs. Чтобы иметь возможность сделать это, вам нужно sudo systemctl stop logitechmediaserver.

Затем скопируйте файл и sudo chown squeezeboxserver:nogroup /var/lib/squeezeboxserver/prefs/server.prefs.

Окончательно, sudo systemctl start logitechmediaserver.


ОБНОВЛЕНИЕ: Возможно, пользователя squeezeboxserverнужно добавить в группу users. Также, местоположения для плейлистов должны быть chmod 775.


Если вы используете брандмауэр, например, ufwобработкупортыобъясняетсяздесь.


Другие файлы можно найти здесь:http://wiki.slimdevices.com/index.php/Logitech_Media_Server_file_locations#Ubuntu_.3E12.04

решение2

Я обновился до Ubuntu 20.04, и это сломало мою установку, но я нашел, как заставить ее работать снова:

После некоторых раздумий я решил сделать новую установку. Поэтому я удалил старые вещи в /var/lib/squeezeboxserver/

Затем я получил свежий deb-пакет для версии 8.0 (бета) отсюда:http://downloads.slimdevices.com/nightly/?ver=8.0

Лично я использовал наиболее платформенную версию, но в зависимости от платформы просто выберите подходящий deb:

wget http://downloads.slimdevices.com/nightly/8.0/lms/cf7bcdb87b4f8bf6f71f5b5444c923afae4c300d/logitechmediaserver_8.0.0~1589180193_all.deb

Установил с помощью: dpkg -i logitechmediaserver_8.0.0_1588799628_all.deb

Поскольку я пробовал и более старые версии, и даже пробовал git checkout, я надеюсь, что не упустил ни одной детали, которую другой скрипт уже сделал за меня, не заметив этого.

Если при установке dpkg еще не добавлены пользователь и группа, сделайте это:

adduser squeezeboxserver
usermod -a -G squeezeboxserver squeezeboxserver

Создайте каталог для pid-файла:

mkdir /var/run/logitechmediaserver

И передайте его этому пользователю и группе:

chown squeezeboxserver:squeezeboxserver /var/run/logitechmediaserver

То же самое касается содержимого в /var/lib/squeezeboxserver/

chown squeezeboxserver:squeezeboxserver /var/lib/squeezeboxserver
chown -R squeezeboxserver:squeezeboxserver /var/lib/squeezeboxserver/*

Проблема связана со скриптом запуска в /etc/init.d. Он просто не работает, так как в Ubuntu 20.04 больше нет start-stop-daemon. Он просто связан с /bin/true, что может работать для некоторых скриптов, но не работает для logitechmediaserver. Я попробовал реализацию этой программы на C, но она была зависшей, поэтому я удалил start-stop-daemon и изменил программу запуска соответствующим образом.

Просто сохраните старый скрипт запуска (просто на всякий случай) и скопируйте его содержимое в редактор по вашему выбору:

#!/bin/sh
#
# $Id$
#
# logitechmediaserver   initscript for slimserver.pl
#           This file should be placed in /etc/init.d.
#
# Original Author: Mattias Holmlund
#
# Updated By: Dan Sully, Michael Herger, Alexander Hartmann

#
### BEGIN INIT INFO
# Provides:             logitechmediaserver
# Required-Start:       $all
# Required-Stop:        $all
# Should-Start:         $all
# Should-Stop:          $all
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Startup script for the Logitech Media Server
# Description:      Logitech Media Server powers the Squeezebox, Transporter and SLIMP3 network music \
#           players and is the best software to stream your music to any software MP3 \
#           player. It supports MP3, AAC, WMA, FLAC, Ogg Vorbis, WAV and more! \
#           As of version 7.7 it also supports UPnP clients, serving pictures and movies too!"
### END INIT INFO
#
# -e  Exit immediately if a command exits with a non-zero status.
set -e

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions


### About logitechmediaserver
# The logitechmediaserver is kind of special. It uses the
# squeezeboxserver_safe script, to restart any died squeezeboxserver. This
# can easily happen, for example if you use a MySQL server. Depending on unix
# flavour you are running they sometimes do a regular restart. That would
# cause the squeezeboxserver to terminate. Because of that the 
# squeezeboxserver_safe starts a logitechmediaserver every few seconds, which
# gets shut down again if any other logitechmediaserver is still running.
#
# Sadly this procedure messes up, the process id file. You would get a new id
# file, every time a new server process gets started. That process will
# terminate but the process id of the first server process is lost. So the
# killing the squeezeboxserver have to be done with analysing the process
# table.
#
# As I upgraded to Ubuntu 20.04 my logitechmediaserver stopped working.
# Installing the lastest 8.0 version was no problem downloading the deb-packet
# and installing with dpkg. But the server did not start. I could start it
# manually but the startup script was not able to start it. After some looking
# around I found this:
#
#           /sbin/start-stop-daemon -> /bin/true
#
# This explains why the start up script is not working. There is no package
# in the ubuntu package repository for the start-stop-daemon.
#
# First I tried the C implementation of start-stop-daemon from Dale O'Brien on
# github (https://github.com/daleobrien/start-stop-daemon). It does not
# implement the --remove-pidfile option the original script. But more 
# problematic it threw the error not able to terminate the server while
# doing it without a problem.
#
# I had to compile the C implementation from Dale O'Brien myself, which
# worked without a hitch. Considering the limiations of the implementation
# I came to the conclusion to ditch the start-stop-daemon completly and 
# doing it the old school way.


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Logitech Media Server"
NAME=squeezeboxserver
NEWNAME=logitechmediaserver
DAEMON=/usr/sbin/$NAME
DAEMON_RESTARTER=/usr/sbin/${NAME}_safe
PIDFILE=/var/run/$NEWNAME/${NEWNAME}.pid
SCRIPTNAME=/etc/init.d/$NEWNAME
SLIMUSER=$NAME
SLIGROUP=$NAME
PREFSDIR=/var/lib/$NAME/prefs
LOGDIR=/var/log/$NAME/
CACHEDIR=/var/lib/$NAME/cache
CHARSET=utf8
SLEEPTIMER=1

## if you want to add additional options
## use /usr/sbin/squeezeboxserver --help 
## for the supported options and place them
## into the configfile  /etc/default/logitechmediaserver


# Read config file if it is present.
if [ -r /etc/default/$NEWNAME ]; then
    . /etc/default/$NEWNAME
elif [ -r /etc/default/$NAME ]; then
    . /etc/default/$NAME
fi

#
#   Function that starts the daemon/service.
#
d_start() {
        # Where is your su installed?
        SU_BIN=$(command -v su)

        # Use squeezeboxserver_safe to restart the daemon when
        # it dies. This must be done to handle mysql restarts.

        $SU_BIN - $SLIMUSER \
          -s /bin/sh \
          -c "$DAEMON_RESTARTER \
                $DAEMON \
                  --user $SLIMUSER \
                  --group $SLIGROUP \
                  --prefsdir $PREFSDIR \
                  --logdir $LOGDIR \
                  --cachedir $CACHEDIR \
                  --charset=$CHARSET \
                  --daemon \
                  $SLIMOPTIONS \
              > /dev/null 2>&1 &"


        # Writing the pid for the restarter          
        PID=$(ps ax | \
          grep "$DAEMON_RESTARTER $DAEMON" | \
          grep -v grep | \
          head -1 | \
          awk '{print $1}' )

        if [ $PID ]
        then
          if [ $PID -gt 0 ]
          then
            echo -n "  Started the restarter with the process id: "
            echo $PID

            if [ -e $PIDFILE ]
            then
              rm $PIDFILE
            fi

            echo -n $PID > $PIDFILE
          fi
        else
            echo "  ERROR: No process id for the restarter could be found!"
        fi


        # Check if the server is successfully started        
        PERL_BIN=$(command -v perl)

        PID_SERVER=$(ps ax | \
          grep "$PERL_BIN $DAEMON" | \
          grep -v grep | \
          head -1 | \
          awk '{print $1}' )

        if [ $PID_SERVER ]
        then
          if [ $PID_SERVER -gt 0 ]
          then
            echo "  Started the server successfully."
          else
            echo "  ERROR: No process id for the server could be found!"        
          fi
        fi
}


#   Function that stops the daemon/service.
#
d_stop() {
    echo -n "  Checking if the restarter is still running: "

    ## This will kill the squeezeboxserver_safe script. So we don't have
    ## to bother about it, starting new processes.

    PID1=$(ps ax | \
      grep "$DAEMON_RESTARTER $DAEMON" | \
      grep -v grep | \
      head -1 | \
      awk '{print $1}' )


    if [ $PID1 ]
    then
      echo positive
      if [ $PID1 -gt 0 ]
      then
        echo -n "  Stopping now restarter: "

        kill $PID1

            if [ -e $PIDFILE ]
            then
              rm $PIDFILE
        fi

        echo done.
      fi
    else
            echo negative
        fi

    ## We have to kill at least one server process. Possible two processes
    ## and in weird cases  under real high load even three processess.
    ## So a loop it is.
    ## We have to wait for at least one second for closing the process
    ## and analyzing the process list again.

        echo -n "  Checking if any server instances are running: "

    PERL_BIN=$(command -v perl)

        PID2=$(ps ax | \
          grep "$PERL_BIN $DAEMON" | \
          grep -v grep | \
          head -1 | \
          awk '{print $1}' )

        if [ $PID2 ]
        then
          echo positive
          echo -n "  Stopping now all server instances: "
          if [ $PID2 -gt 0 ]
          then
            while [ $(ps ax | \
              grep "$PERL_BIN $DAEMON" | \
              grep -v grep | \
              head -1 | \
              awk '{print $1}') ]
            do
          kill $(ps ax | \
                grep "$PERL_BIN $DAEMON" | \
                grep -v grep | \
                head -1 | \
                awk '{print $1}')
              sleep $SLEEPTIMER
            done
            echo done
          fi
        else
          echo negative
        fi
}

#
#   Function that sends a SIGHUP to the daemon/service.
#
d_reload() {
    start-stop-daemon --stop --quiet --pidfile $PIDFILE --signal 1
}

case "$1" in
  start)
    echo "Making sure that $DESC is not running: "
    d_stop
    echo "Starting $DESC:"
    d_start
    ;;
  stop)
    echo "Stopping $DESC:"
    d_stop
    ;;
  restart|force-reload)
    #
    #   If the "reload" option is implemented, move the "force-reload"
    #   option to the "reload" entry above. If not, "force-reload" is
    #   just the same as "restart".
    #
    echo "Restarting $NAME."
    d_stop
    d_start
    ;;
  status)  
    status_of_proc /usr/bin/$NEWNAME $NEWNAME
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
    exit 1
    ;;
esac

exit 0

Да, это некрасиво, но это делает работу для меня и, надеюсь, поможет вам тоже. Вы должны поместить это в /etc/init.d под именем logitechmediaserver

После этого вам нужно выполнить следующую команду, чтобы systemctl заработал:

systemctl daemon-reload

Просто проведите тестовый запуск:

/etc/init.d/logitechmediaserver start

Вы должны иметь возможность войти в систему с помощью своего веб-браузера, чтобыhttp://ВашIP-адресСервера:9000/и настроить его.

И проверьте, выключится ли он снова:

/etc/init.d/logitechmediaserver stop

Когда все получится, включите службу:

systemctl enable logitechmediaserver.service

Связанный контент