Eigenes Squeezeserver / Logitech-Media-Server / LMS-Image erzeugen

Ein frühes Multiroom-System existiert kommerziell leider nicht mehr - aber es lebt munter weiter! Die gute alte SqueezeBox welche zunächst von SlimDevices, später von Logitech vertrieben wurden. Vor allem die Möglichkeit es ohne Cloud zu betreiben und trotzdem Zugriff auf Internetradiosender zu haben machte es für mich interessant.

Auch heute noch gibt es die SqueezeBox, SqueezeBox Boom und Squeezebox Touch gebraucht zu kaufen. Dabei ist die Klangqualität der SqueezeBox und SqueezeBox mit ihren eingebauten Lautsprechern recht beachtlich!

Was dieses System leben lässt: Der Raspberry PI! Es gibt zahlreiche Kommerzielle und Open Source Projekte, welche einen Raspberry PI in einen Squeeze Player verwandeln. Die Qualität hängt dabei vom Audioteil ab. Die Tonausgabe kann über die vorhandene Audiobuchse aber auch über diverse Soundkarten unterschiedlichster Qualität erfolgen.

Für den Cloud-losen Betrieb wird zwingend ein Server benötigt. Dieser wird nach wie vor weiter entwickelt, ist Open Source und für viele Plattformen verfügbar. Auch hier reicht ein Raspberry PI vollkommen aus!

Der Name des Servers lautet Logitech Media Server (kurz LMS, früher auch SlimServer, SqueezeCenter und Squeezebox Server).
Man kann ihn unter <http://downloads.slimdevices.com/LogitechMediaServer_v7.9.2> für seine Plattform herunterladen. Das Paket "logitechmediaserver_7.9.2_all.deb" enthält die Versionen für amd64, arm und i386.

Und wie immer: Die Veröffentlichung dieses Howtos erfolgt in der Hoffnung, dass es dem Ein oder Anderen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK.

Schnittstellen des LMS-Images

Der Logitech-Media-Server benötigt folgende Volumes:

  1. /config
  2. /music
  3. /playlists

Diese Volumes werden beim Erzeugen eines Containers auf lokale Verzeichnisse außerhalb des Containers gemappt. Ich glaube der Zweck für die Verzeichnisse ist erkennbar!? Auf jeden Fall ist auf die Zugriffrechet zu achten, da der LMS mit einem eigenen Benutzer arbeitet (ID 101).

Erzeugen des LMS-Image

Als erstes wird ein Verzeichnis angelegt, in dem alles bearbeitet wird:

mkdir lms-image
cd lms-image 

In diesem Verzeichnis wird eine Datei mit dem Namen "Dockerfile" angelegt. Diese hat den folgenden Inhalt:

FROM "raspbian-buster"
COPY logitechmediaserver.deb /logitechmediaserver.deb
ENV LC_ALL="C.UTF-8" LANG="de_DE.UTF-8" LANGUAGE="de_DE.UTF-8"
RUN \
  apt-get update -qq && \
  apt-get install -qy libalgorithm-diff-perl \
    libalgorithm-diff-xs-perl \
    libalgorithm-merge-perl \
    libdpkg-perl \
    libexif12 \
    libfile-fcntllock-perl \
    libgif7 \
    libio-socket-ssl-perl \
    libjpeg8 \
    libnet-libidn-perl \
    libnet-ssleay-perl \
    libperl5.28 \
    libpng12-0 \
    perl \
   perl-modules-5.28 \
   perl-openssl-defaults \
   ca-certificates && \
   apt-get clean -qy && \
   rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN /bin/bash -c '\
  export DEBIAN_FRONTEND="noninteractive" && \
  dpkg -i /logitechmediaserver.deb && \
  rm /logitechmediaserver.deb \
  '
RUN \
  mkdir /config /music /playlists && \
  chown squeezeboxserver:nogroup /config /music /playlists
VOLUME /config /music /playlists
EXPOSE 3483 3483/udp 9000 9090
USER squeezeboxserver
ENTRYPOINT ["squeezeboxserver"]
CMD ["--prefsdir", "/config/prefs", "--logdir", "/config/logs", "--cachedir", "/config/cache"]

Zeile 02

Kopieren des heruntergeladenen Installationspaketes in das Image.

Zeile 03

Setzen der Umgebungsvariable.

Zeilen 05 - 22

Installation notwendiger Pakete.

Zeilen 23 - 24

Aufräumen von "apt-get".

Zeilen 25 - 29

Installieren des Logitech Media Servers und löschen des Installationspaketes.

Zeilen 31 - 33

Erzeugen der Arbeitsverzeichnisse und der Volumes als Schnittstellen zur Außenwelt.

Zeile 34

Festlegen der außen verfügbaren Ports.

Zeile 35

Festlegen des Benutzers.

Zeilen 36 - 37

Der Startbefehl des LMS.


Nun muss noch sicher gestellt werden, dass das heruntergeladene Installationspaket in das Verzeichnis "lms-image" abgelegt wird. Hierbei ist es wichtig, dass der Name des Paketes auf "logitechmediaserver.deb" abgeändert wird.
Nur wenn es im selben Verzeichnis wie das Dockerfile und mit genau diesem Namen abgelegt ist kann es beim Erzeugen des Docker Images eingelesen werden.


Um das eigentliche Image zu erzeugen wird der folgende Befehl ausgeführt. Dabei ist zu beachten, dass der Befehl im Verzeichnis der Datei "Dockerfile" ausgeführt wird.

docker build -t docker-lms .

Erzeugen und Starten des LMS-Containers

Bevor wir den eigentlichen Container erzeugen und starten müssen einige Verzeichnisse angelegt werden.

/root/docker/lms-image/Music

In diesem Verzeichnis wird die Musiksammlung abgelegt.

mkdir /root/docker/lms-image/Music
chown 101:65534  /root/docker/lms-image/Music

/root/docker/lms-image/Playlists

Hier landen die Wiedergabelisten.

mkdir /root/docker/lms-image/Playlists
chown 101:65534  /root/docker/lms-image/Playlists

/root/docker/lms-image/Config

In diesem Verzeichnis legt der LMS seine Veränderlichen Daten an.

mkdir /root/docker/lms-image/Config
chown 101:65534  /root/docker/lms-image/Config


Nun wird es Zeit, aus dem gerade erzeugten Image einen Container zu erstellen. Dies kann aus der Kommandozeile oder aber auch durch ein Skript erfolgen.

docker run -d \
  --name="logitechmediaserver" \
  --restart=always \
  -p 3483:3483 \
  -p 3483:3483/udp \
  -p 9000:9000 \
  -p 9090:9090 \
  -v /etc/localtime:/etc/localtime:ro \
  -v /root/docker/lms-image/Config:/config \
  -v /root/docker/lms-image/Music:/music:ro \
  -v /root/docker/lms-image/Playlists:/playlists \
  docker-lms

Zeile 02

Hier wird der zukünftige Name des Docker Containers angegeben.

Zeile 03

In dieser Zeile wird das Restartverhalten angegeben. Ich stelle es so ein, dass der Container nicht automatisch neu gestartet wird. Der Grund wird nachfolgend noch beschrieben.

Zeilen 04 - 07

Mappen der externen zu den internen TCP-/UDP-Ports.

Zeilen 08 - 11

Mappen der Volumes zu lokalen Verzeichnissen.

Zeile 12

Das Image das als Grundlage für diesen Container verwendet wird.

Einrichtungsdialog des LMS

Nachdem der LMS gestartet wurde kann nun der Einrichtungsdialog durchlaufen werden. Hier muss eigentlich nur festgelegt werden in welchem Verzeichnis die Musik (Verzeichnis "/music" ) liegt und wo die Wiedergabelisten (Verzeichnis "/playlists" ) abgelegt werden.
Hierzu wird die GUI des LMS unter <http://<IP des Raspberry PI>:9000> geöffnet und der Dialog startet automatisch.

Ach ja! Die erste Abfrage nach dem Online-Konto kann übersprungen werden.