Logitech Media Server auf dem Raspberry Pi 4B mit 5 Zoll Display installieren

Seit meiner Beschreibung, wie man den Logitech Media Server auf einem Raspberry Pi 3B installiert, sind schon einige Monate vergangen. Inzwischen ist die Situation aber so, dass die Raspberry 3 Modelle kaum mehr zu bekommen sind bzw. nur zu unverschämt hohen Preisen. Vor ein paar Tagen konnte ich aber ein Raspberry 4B Bundle mit einen Raspberry 4B (4GB RAM), Netzteil, SD-Karte und Kühlkörper Set für knapp 120 Euro ergattern. Das ist zwar immer noch viel zu teuer, aber wer weiß, wie lange es noch dauert, bis sich die Preise wieder erholen. 

Da sich bei der Installation des Logitech Media Servers inzwischen einige Dinge geändert und vereinfacht haben, möchte ich euch hier eine aktualisierte Anleitung für den Raspberry 4B liefern.

Hardware

Für den Betrieb eines Squeezebox Servers ist nicht viel Hardware nötig. Das folgende Bild zeigt alle Komponenten, die ich dafür verwendet habe. Das Display ist nicht zwingend nötig, es dient nur der Anzeige von Statusinformationen.

Logitech Media Server Raspberry PI Setup

Im Detail habe ich diese Komponenten verwendet:

  • Raspberry Pi 4 Modell B, 4 GB RAM
  • SD-Karte mit 32 GB
  • offizielles Netzteil für Raspberry Pi 4 Model B, USB-C, 5.1V, 3A
  • Waveshare 5 Zoll Display mit DSI Schnittstelle
  • 2,5 Zoll Festplatte
  • Gehäuse für die Festplatte
  • USB Verbindungs-Kabel

Der Raspberry Pi wird einfach mit 4 Schrauben auf das Display geschraubt. Danach wird das Display mit dem beiliegenden Flachbandkabel mit dem Raspberry Pi verbunden:

Raspberry Pi 5 inch display

Anschließend wird der Kühlkörper auf den Raspberry Pi geschraubt und der Anschluss des Lüfters auf die GPIO Leiste gesteckt.

Raspberry Pi heatsink

Damit ist die Hardware auch schon abgeschlossen. Wie oben schon erwähnt, kann man das Display auch weglassen. Für die Funktionalität des Squeezebox Servers macht das keinen Unterschied.

Installation Raspberry Pi OS

Die Installation des aktuellen Raspberry OS (Debian "Bullseye") kann am einfachsten mit dem Raspberry Pi Imager durchgeführt werden. Mit diesem Werkzeug können inzwischen alle wichtigen Grundeinstellungen, wie WLAN-Zugang, Benutzerkonto, Hostname und Spracheinstellungen, konfiguriert werden. Der SSH-Zugang muss auch aktiviert werden. Die folgenden Screenshots zeigen den Installationsprozess:

Nachdem das Betriebssystem auf die SD-Karte geschrieben wurde, kann diese in den Slot des Raspberry Pi eingesetzt und das Netzteil angeschlossen werden. Nach dem Bootvorgang kann man über den Router kontrollieren, ob der Raspberry korrekt gestartet ist und welche IP-Adresse er hat. Er erscheint in der Liste der Verbindungen unter dem Namen, der im Setup angegeben wurde. Ich empfehle, dem Raspberry Pi eine feste IP-Adresse zuzuordnen, damit er später immer mit dieser Adresse aufgerufen werden kann.

Nach dem Bootvorgang sollte am Display dieses Bild erscheinen:

setup_raspberry_5.jpg

Jetzt kann man sich (am einfachsten mit PuTTY) per SSH auf dem Raspberry mit dem konfigurierten User einloggen. Es empfiehlt sich, zunächst das System mit den Kommandos

sudo apt-get update
sudo apt-get upgrade
sudo reboot

auf den neuesten Stand zu bringen. Das kann einige Minuten dauern. Nach dem Neustart hat man nun eine aktuelle Raspberry Pi OS Installation.

Anschließend folgen noch einige Konfigurationen, um die Lebensdauer der SD-Karte zu erhöhen. Zunächst wir das Swapping mit diesen Kommandos deaktiviert:

sudo service dphys-swapfile stop
sudo systemctl disable dphys-swapfile
sudo apt-get purge dphys-swapfile
sudo apt autoremove

Anschließend erfolgt noch ein Eintrag in /boot/cmdline.txt. Der Editor wird mit

sudo nano /boot/cmdline.txt

gestartet. Am Ende der Zeile wird die Option noswap angefügt. Die Zeile schaut dann so aus:

console=serial0,115200 console=tty1 root=PARTUUID=221d34c4-02 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles noswap

Um zu verhindern, dass permanent Logfiles auf die SD-Karte geschrieben werden, können temporäre Verzeichnisse in den Arbeitsspeicher verlagert werden. Dazu wird die Datei /etc/fstab mit

sudo nano /etc/fstab

bearbeitet und sollte danach folgendermaßen aussehen:

proc            /proc           proc    defaults          0       0
PARTUUID=221d34c4-01  /boot           vfat    defaults,noatime  0       2
PARTUUID=221d34c4-02  /               ext4    defaults,noatime  0       1

# Log to RAM
tmpfs   /tmp            tmpfs   defaults,noatime,nosuid,mode=1777,size=256m 0 0
tmpfs   /var/log        tmpfs   defaults,noatime,nosuid,mode=0755,size=128m 0 0
tmpfs   /var/tmp        tmpfs   defaults,noatime,nosuid,mode=0755,size=128m 0 0

# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

Nach einem Reboot können die Anpassungen mit dem Kommando

df -h

überprüft werden. Das Ergebnis sollte etwa wie folgt aussehen:

Filesystem      Size  Used Avail Use% Mounted on
/dev/root        29G  3.8G   24G  14% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           768M  9.2M  759M   2% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           256M  4.0K  256M   1% /tmp
tmpfs           128M  280K  128M   1% /var/log
tmpfs           128M     0  128M   0% /var/tmp
/dev/mmcblk0p1  255M   50M  206M  20% /boot
tmpfs           384M   20K  384M   1% /run/user/1000

Externe Festplatte mounten

Die externe Festplatte soll im Verzeichnis /media/usb-drive/ automatisch eingebunden werden. Als Filesystem verwende ich exFAT, damit auch Dateien, die größer als 4GB sind, gespeichert werden können. 

Zunächst wird das Verzeichnis erstellt:

sudo mkdir /media/usb-drive
sudo chown pi:pi /media/usb-drive/

Jetzt wird die externe USB Festplatte angeschlossen. Mit dem Kommando

sudo blkid

werden die verfügbaren Partitionen angezeigt. Die Liste schaut beispielsweise folgendermaßen aus:

/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="D386-9DE9" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="221d34c4-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="996c1b5f-170b-4f38-a5e0-85eef5acf12c" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="221d34c4-02"
/dev/sda1: LABEL="Musik" UUID="A635-6C3E" BLOCK_SIZE="512" TYPE="exfat" PARTUUID="ac3dfbd1-01"

Die letzte Zeile zeigt die externe Festplatte. Zum Mounten wird nun die UUID benötigt, in diesem Fall also A635-6C3E. Jetzt wird wieder die Datei /etc/fstab mit 

sudo nano /etc/fstab

editiert und der Eintrag für diese externe Festplatte eingefügt. Die Datei schaut danach folgendermaßen aus:

proc            /proc           proc    defaults          0       0
PARTUUID=221d34c4-01  /boot           vfat    defaults,noatime  0       2
PARTUUID=221d34c4-02  /               ext4    defaults,noatime  0       1

# Musik Disk
UUID=A635-6C3E /media/usb-drive exfat utf8,uid=pi,gid=pi,noatime 0

# Log to RAM
tmpfs   /tmp            tmpfs   defaults,noatime,nosuid,mode=1777,size=256m 0 0
tmpfs   /var/log        tmpfs   defaults,noatime,nosuid,mode=0755,size=128m 0 0
tmpfs   /var/tmp        tmpfs   defaults,noatime,nosuid,mode=0755,size=128m 0 0

# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

Nach einem Neustart steht nun die externe Festplatte unter /media/usb-drive/ zur Verfügung.

Samba Freigabe einrichten

Damit die Musikdateien vom PC aus auf den Squeezebox Server kopiert werden können, ist es hilfreich, einen freigegebenen Ordner einzurichten. Dazu muss zunächst das Samba Paket installiert werden.

sudo apt-get install samba

Danach wird in der Datei /etc/samba/smb.conf der freigegebene Ordner konfiguriert:

sudo nano /etc/samba/smb.conf

Am Ende der Datei wird die folgende Konfiguration angefügt:

[Musik]
 comment=Raspberry Pi Share
 path=/media/usb-drive
 browseable=Yes
 writeable=Yes
 only guest=no
 create mask=0644
 directory mask=0755
 public=no

Jetzt muss noch ein Samba User angelegt werden. Ich verwende dazu auch den User pi mit dem gleichen Passwort wie oben.

sudo smbpasswd -a pi

Nach einem Neustart das Samba Service mit

sudo service smbd restart

kann das Netzlaufwerk auf dem PC eingebunden werden. Beim Login gibt man den User an, der gerade angelegt wurde. Jetzt kann die Musiksammlung auf die Festplatte des Squeezebox Servers kopiert werden.

Logitech Media Server installieren

Jetzt folgt die eigentliche Server Software. Für den Raspberry Pi muss die Version für Arm-Architektur heruntergeladen werden. Aktuell ist es die Version 8.3.0. Zusätzlich werden auch einige weitere notwendige Pakete installiert:

sudo apt-get install libsox-fmt-all libflac-dev libfaad2 
sudo apt-get install libio-socket-ssl-perl 
sudo apt-get install libcrypt-openssl-bignum-perl 
sudo apt-get install libcrypt-openssl-random-perl 
sudo apt-get install libcrypt-openssl-rsa-perl 
wget https://downloads.slimdevices.com/LogitechMediaServer_v8.3.0/logitechmediaserver_8.3.0_arm.deb 
sudo dpkg -i logitechmediaserver_8.3.0_arm.deb

Sobald die Pakete installiert sind, ist der Server unter dem Port 9000 mit der jeweiligen IP Adresse erreichbar. Bei mir ist das

http://192.168.0.150:9000/

Im Browser öffnet sich unter diese Adresse ein Setup Wizard, mit dem die wichtigsten Grundeinstellungen des Logitech Media Servers vorgenommen werden. Die Anmeldung bei mysqueezebox.com ist optional und kann übersprungen werden. Nach Abschluss des Setups erscheint die eigentliche Startseite. Unter Einstellungen können gegebenenfalls weitere Verzeichnisse konfiguriert werden, in denen sich Musikdateien befinden.

Damit ist die Installation des Logitech Media Servers abgeschlossen. In den Einstellungen können jetzt unter dem Reiter Plugins unnötige Plugins entfernt und bei Bedarf zusätzliche Plugins hinzugefügt werden. Da die Benutzeroberfläche inzwischen etwas in die Jahre gekommen ist, empfehle ich den Plugin Material Skin. Nach der Installation ist das Webinterface unter der Adresse 

http://192.168.0.150:9000/material/

zu erreichen. Mit diesem Plugin ist das Benutzerinterface nicht nur deutlich moderner gestaltet, sondern ist auch am Smartphone verwendbar und ersetzt dadurch die Notwendigkeit von eigenständigen Apps.

Systemmonitor installieren

Um das System zu überwachen und die wichtigsten Daten auf dem Display anzuzeigen, benötigt man noch ein kleines Programm namens Conky. Conky ist ein leistungsfähiger Systemmonitor, der einfach mithilfe von

sudo apt-get install conky

installiert werden kann. In einer Konfigurationsdatei kann festgelegt werden, welche Objekte an welcher Stelle angezeigt werden sollen. Die Konfiguration wird mit

nano .config/.conkyrc

erstellt und dann der folgende Inhalt hineinkopiert:

conky.config = {
    alignment = 'top_left',
    double_buffer = true,
    background = false,
    border_width = 0,
    cpu_avg_samples = 2,
    default_color = 'white',
    default_outline_color = 'white',
    default_shade_color = 'white',
    draw_borders = false,
    draw_graph_borders = true,
    draw_outline = false,
    draw_shades = false,
    use_xft = true,
    font = 'LiberationMono:bold:size=14',
    gap_x = 0,
    gap_y = 0,
    minimum_width = 800,
    maximum_width = 800,
    minimum_height = 600,
    maximum_height = 600,
    net_avg_samples = 2,
    no_buffers = true,
    out_to_console = false,
    out_to_stderr = false,
    extra_newline = false,
    own_window = true,
    own_window_class = 'Conky',
    own_window_type = 'desktop',
    stippled_borders = 0,
    update_interval = 1.0,
    uppercase = false,
    use_spacer = 'none',
    show_graph_scale = false,
    show_graph_range = false
}

conky.text = [[
${color grey}Time: $color${time %a %d. %b %k:%M}  ${color grey}Uptime: $color$uptime
${voffset 4}${color grey}CPU Freq: $color$freq MHz   ${goto 225}${color grey}Temp: $color$acpitemp °C ${goto 400}${color grey}RAM Used:$color $mem  ${goto 615}${color grey}Total: $color$memmax
${color grey}CPU Usage:$color ${goto 115}${cpugraph cpu0 64,270 00ff00 ff0000 -t} ${goto 400}${color grey}RAM Usage:$color${offset 4}${memgraph 64,280 00ff00 ff0000 -t}
${color grey}Net Up: $color ${goto 115}${upspeedgraph wlan0 64,270 00ff00 ff0000 -t} ${goto 115}${voffset 10} ${upspeed wlan0}  ${voffset -10}  ${goto 400}${color grey}Down: $color ${goto 514}${downspeedgraph wlan0 64,280 00ff00 ff0000 -t} ${goto 514}${voffset 10} ${downspeed wlan0}  ${voffset -10}
${color grey}SD Card: $color ${goto 115}${fs_used /}/${fs_size /} ${goto 400}${color grey}Disk IO: $color${goto 514}${diskiograph sda1 64,280 00ff00 ff0000 -t} 
${voffset -60}${color grey}Disk: $color ${goto 115}${fs_used /media/usb-drive}/${fs_size /media/usb-drive}
${voffset 40}${tail /var/log/squeezeboxserver/server.log 7}
]]

Damit der Systemmonitor nach dem Booten automatisch startet, muss eine entsprechende Datei mit

mkdir -p .config/autostart
nano .config/autostart/conky.desktop

erstellt werden und der folgende Inhalt eingetragen werden:

[Desktop Entry]
Type=Application
Name=Conky
Comment=Conky starten
Exec=/usr/bin/conky -b -c /home/pi/.config/.conkyrc

Jetzt muss noch die obere Menüzeile des Desktops ausgeblendet werden. Dazu ruft man den Editor mit

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart  

auf und kommentiert die erste Zeile aus. Der Inhalt muss dann so aussehen:

#@lxpanel --profile LXDE-pi
@pcmanfm --desktop --profile LXDE-pi
@xscreensaver -no-splash

Um den Screensaver zu deaktivieren, wird wieder eine Datei mit

mkdir -p .config/lxsession/LXDE-pi
nano .config/lxsession/LXDE-pi/autostart

erstellt und dieser Inhalt eingetragen:

@xset s 0 0
@xset s noblank
@xset s noexpose
@xset dpms 0 0 0

Nach einem Neustart sollte man am Monitor dann dieses Bild sehen:

Conky System Monitor

Damit ist die Installation des Logitech Media Servers auf dem Raspberry 4B abgeschlossen. Ich wünsche euch viel Spaß mit eurem neuen Server und hoffe, dass ihr viele Stunden damit verbringt, eure Lieblingssongs zu hören. Falls ihr Fragen oder Verbesserungsvorschläge habt, zögert nicht, mich zu kontaktieren.

Konversation wird geladen