Logitech Media Server (Squeezebox Server) をインストールするにはどうすればいいですか?

Logitech Media Server (Squeezebox Server) をインストールするにはどうすればいいですか?

Logitech Media Server の最新のインストール ファイルはどこで入手できますか? また、適切にインストールするにはどうすればよいですか?

(私は Raspberry Pi 2 でこれを実行していますが、SD カードの故障により何度か再インストールする必要がありました。そのため、主に自分自身へのリマインダーとしてこの質問に答えます。)

答え1

執筆時点での最新バージョンは 7.9.2 です。

利用可能ですここ他のいくつかのバージョンの概要はこちらをご覧くださいここ.linkシステムに応じてファイルをクリップボードにコピーします。

でファイルをシステムにダウンロードしますwget linkfileでをインストールしますsudo dpkg -i fileインストールに失敗する依存関係が欠落しているため。

で修正してくださいsudo apt -f install

から始めましょうsudo service logitechmediaserver start

で実行されているかどうかを確認しますtop

で利用可能な Web-GUI 経由でサーバーに接続します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/ の古いものを削除しました。

次に、バージョン 8.0 (ベータ) の新しい deb パケットを以下から入手しました。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 チェックアウトも試したので、他のスクリプトが気付かないうちにすでに実行している詳細が不足していないことを願っています。

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

関連情報