Где можно получить последние установочные файлы для 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