Logitech Media Server mit Raspberry Pi 3 B+ und 3.2″ TFT Display
Meine Begeisterung vom Squeezebox Ökosystem begann schon vor etlichen Jahren. Die erste Squeezebox habe ich mir 2005 zugelegt. Es war eine Squeezebox2 mit sehr gut lesbarer Vakuum-Fluoreszenzanzeige und tollem Klang dank hochwertigem Digital-Analog-Wandler. Damals hieß die Firma noch Slim Devices, wurde aber 2006 von Logitech übernommen. Es folgten noch einige sehr interessante Geräte, aber 2012 stellte Logitech die Produktion der Squeezeboxen leider ein. Seitdem gibt es die Geräte nur noch gebraucht zu kaufen oder solche vom Typ Eigenbau. Ich bin dem System bis heute treu geblieben, da ich noch nichts Vergleichbares gefunden habe, dass auch nur annähernd so praktisch und flexibel ist.
Der Logitech Media Server, früher auch SlimServer, SqueezeCenter oder Squeezebox Server genannt, ist das Herz des Squeezebox Ökosystems. Da er von Slim Devices von Anfang an als Open Source zur Verfügung gestellt wurde, wird die Software bis heute noch weiterentwickelt. Mein Server läuft inzwischen schon einige Jahre auf einem Raspberry Pi 3 B+ problemlos vor sich hin. Jetzt möchte ein guter Freund von mir auch einen günstigen Squeezebox Server installieren, was mich auf die Idee gebracht hat, eine kleine Anleitung dafür zu schreiben.
Hardware
Für einen Logitech Media Server sind im Grunde nicht sehr viele Bauteile nötig, einige davon liegen vielleicht sogar ungenutzt schon irgendwo herum. Die Liste ist daher auch nicht besonders lang. Das Display ist nur eine kleine Spielerei und eigentlich nicht nötig:
- Raspberry Pi 3 B+ mit passendem Netzteil
- microSD Karte, 8GB oder größer
- externe USB Disk, Größe je nach Umfang der Musiksammlung
- Waveshare 3.2" TFT Display
- Joy-it 3.2" Display-Gehäuse
Das Display wird einfach auf die GPIO Ports des Raspberry gesteckt und anschließend das Gehäuse zusammengesteckt. Das Ganze dauert keine 5 Minuten. Zum Gehäuse gibt es auch eine Anleitung auf der JOY-IT Webseite.
Installation Raspberry Pi OS
Im nächsten Schritt wird das Betriebssystem des Raspberry Pi installiert. Für den Logitech Media Server würde eigentlich das Raspberry Pi OS Lite ausreichen. Da ich jedoch noch einen Systemmonitor installieren werde, der den Desktop benötigt, brauche ich folglich das Raspberry Pi OS with desktop. Die Installation erfolgt am Einfachsten mit dem Raspberry Pi Imager. Die derzeitig aktuelle Version ist Debian Buster.
Nachdem das Betriebssystem auf die SD Karte geschrieben ist, muss die Karte noch vorbereitet werden, damit sich der Raspberry mit dem WLAN verbinden kann und ein Zugang per SSH möglich ist. Dazu entfernt man die Karte kurz und schiebt sie wieder in den PC. Jetzt sollte ein neues Laufwerk mit der /boot Partition der SD Karte verfügbar sein.
Zur Konfiguration des WLANs wird eine Datei mit dem Namen wpa_supplicant.conf und folgendem Inhalt auf die Karte kopiert. Die Felder für das Land, SSID und Passwort müssen entsprechend angepasst werden.
country=XX ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="WLAN_NAME" psk="WLAN_PASSWORT" key_mgmt=WPA-PSK }
Für den SSH Zugriff muss lediglich eine leere Datei mit dem Namen ssh auf die Karte kopiert werden.
Jetzt kann die SD Karte in den Raspberry Pi gesteckt und der Rechner gebootet werden. Nach dem Bootvorgang kann man am Router kontrollieren, ob der Raspberry korrekt gestartet hat und welche IP Adresse er hat. Er erscheint in der Liste der Verbindungen unter dem Namen raspberrypi. Dann kann man sich (am einfachsten mit PuTTY) per SSH auf dem Raspberry mit dem Default Login pi/raspberry einloggen.
Es empfiehlt sich, zunächst das Default Passwort zu ändern und anschließend das System mit den Kommandos
sudo apt-get update sudo apt-get upgrade
auf den neuesten Stand zu bringen. Das kann einige Minuten dauern. Zuletzt wird noch die Zeitzone auf den passenden Wert gesetzt. In meinem Fall ist das
sudo timedatectl set-timezone Europe/Vienna
Die Liste der verfügbaren Zeitzonen liegt im Verzechnis /usr/share/zoneinfo.
Display Treiber
Der Display Treiber wird mit den folgenden Kommandos installiert:
git clone https://github.com/waveshare/LCD-show.git cd LCD-show chmod +x LCD32-show sudo ./LCD32-show
Am Ende startet der Raspberry neu und sollte dann wie folgt aussehen:
Optimierungen
Zunächst wird der Hostname des Raspberry geändert:
sudo hostname -b SqueezeboxServer sudo hostnamectl set-hostname SqueezeboxServer sudo reboot
Danach sollte der Rechner auch am Router unter dem Namen SqueezeboxServer erscheinen.
Es folgen einige Änderungen, um die Lebensdauer der SD Karte zu verlängern, indem die Schreibzugriffe verringert werden. Zunächst wird das Swapping deaktiviert:
sudo service dphys-swapfile stop sudo systemctl disable dphys-swapfile sudo apt-get purge dphys-swapfile
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 ganze Zeile schaut dann so aus:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fbcon=map:10 fbcon=font:ProFont6x11 logo.nologo noswap
Um zu verhindern, dass 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=afd7b074-01 /boot vfat defaults,noatime 0 2 PARTUUID=afd7b074-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:
pi@SqueezeboxServer:~ $ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 29G 3.2G 25G 12% / devtmpfs 430M 0 430M 0% /dev tmpfs 463M 0 463M 0% /dev/shm tmpfs 463M 6.3M 456M 2% /run tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 463M 0 463M 0% /sys/fs/cgroup tmpfs 128M 0 128M 0% /var/tmp tmpfs 256M 4.0K 256M 1% /tmp tmpfs 128M 216K 128M 1% /var/log /dev/mmcblk0p1 253M 48M 205M 19% /boot tmpfs 93M 4.0K 93M 1% /run/user/1000
Externe Festplatte mounten
Die externe Festplatte soll in einem definierten Verzeichnis automatisch gemountet 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 und notwendige Pakete installiert:
sudo mkdir /media/usb-drive sudo chown pi:pi /media/usb-drive/ sudo apt-get install exfat-fuse sudo apt-get install exfat-utils
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="7616-4FD8" TYPE="vfat" PARTUUID="afd7b074-01" /dev/mmcblk0p2: LABEL="rootfs" UUID="87b585d1-84c3-486a-8f3d-77cf16f84f30" TYPE="ext4" PARTUUID="afd7b074-02" /dev/mmcblk0: PTUUID="afd7b074" PTTYPE="dos" /dev/sda1: LABEL="Music" UUID="9292-2EB8" TYPE="exfat" PARTUUID="eefca9f3-01"
Die letzte Zeile zeigt die externe Festplatte. Zum Mounten wird nun die UUID benötigt, in diesem Fall also 9292-2EB8. 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=afd7b074-01 /boot vfat defaults,noatime 0 2 PARTUUID=afd7b074-02 / ext4 defaults,noatime 0 1 # Musik Disk UUID=9292-2EB8 /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 sollte nun die externe Festplatte unter /media/usb-drive zur Verfügung stehen.
Samba Freigabe einrichten
Damit die Musikdateien bequem vom PC aus auf den Squeezebox Server kopiert werden können, ist es hilfreich, einen freigegebenen Ordner mit Samba zu erstellen. Dazu muss das Samba Paket zunächst installiert werden. Die Frage nach dem WINS Server kann mit No beantwortet 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 man das Netzlaufwerk auf dem PC einbinden. Beim Login gibt man den User an, der gerade angelegt wurde. Jetzt kann man ganz einfach die Musiksammlung auf die Festplatte des Squeezebox Servers kopieren.
Logitech Media Server
Es folgt die eigentliche Server Software. Ich verwende nicht die nighlty Pakete, sondern bleibe auf dem stable Zweig. Für den Raspberry muss die Software für Arm-Architektur heruntergeladen werden. Aktuell ist es die Version 8.2.0.
wget https://downloads.slimdevices.com/LogitechMediaServer_v8.2.0/logitechmediaserver_8.2.0_arm.deb
Die Installation des Pakets und einiger Libraries zum Encoden erfolgt mit
sudo apt-get --fix-broken install libio-socket-ssl-perl sudo dpkg -i logitechmediaserver_8.2.0_arm.deb sudo apt-get install -y libsox-fmt-all libflac-dev libfaad2
Das war es auch schon. Der Server ist jetzt unter Port 9000 mit der jeweiligen IP Adresse erreichbar. Bei mir ist das
http://192.168.0.123:9000/
Im Browser öffnet sich dann ein Setup Wizard, mit dem die wichtigsten Grundeinstellungen des Logitech Media Servers vorgenommen werden. Nach Abschluss des Setups erscheint die eigentlichen Startseite.
Allerdings gibt es noch ein kleines Problem. Nach einem Neustart des Raspberry würde der Server nicht mehr starten. Das liegt daran, dass der /var/logs Pfad weiter oben in ein temporäres Verzeichnis verlegt worden ist. Bei der Installation des Server Pakets wurde in dem logs-Verzeichnis ein Unterordner squeezeboxserver erstellt. Da alle Änderungen nur im RAM vorhanden sind, existiert dieses Verzeichnis folglich nach dem Neustart nicht mehr. Eigentlich sollten Services beim Start automatisch die nötigen Verzeichnisse anlegen, aber der Logitech Media Server hat scheinbar ein Problem damit. Daher muss dieses Verzeichnis beim Start des Service angelegt werden. Dazu editiert man das Startskript mit
sudo nano /etc/init.d/logitechmediaserver
und fügt den fett markierten Teil ein:
# 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 # Create Logfiles directory if [ ! -d /var/log/$NAME ]; then mkdir /var/log/$NAME/ chown squeezeboxserver:nogroup /var/log/$NAME/ fi
Damit diese Änderung wirksam wird, muss noch das Kommando
sudo systemctl daemon-reload
ausgeführt werden. Jetzt wird der Squeezebox Server auch nach einem Neustart korrekt hochfahren.
Systemmonitor einrichten
Was fehlt, ist noch ein kleines Programm, um das System zu monitoren und die wichtigsten Daten am Display anzuzeigen. Dazu gibt es einen kleinen, aber vielseitigen Systemmonitor namens Conky. Das Paket wird einfach mit
sudo apt-get install conky
installiert. In einer Konfigurationsdatei wird definiert, welche Objekte wo 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=9', gap_x = 0, gap_y = 0, minimum_width = 315, maximum_width = 320, minimum_height = 240, maximum_height = 240, 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 ${color grey}CPU: $color$freq MHz ${color grey}GPU: $color$freq_g GHz ${color grey}Temperature: $color$acpitemp °C ${color grey}CPU Usage:$color $cpu% ${cpubar 6} ${color grey}RAM Usage:$color $mem/$memmax - $memperc% ${membar 6} ${color grey}Networking: Up: $color${upspeed wlan0}${color grey} - Down: $color${downspeed wlan0} ${color grey}File systems: ${color grey} SD Card $color${fs_used /}/${fs_size /} ${fs_bar 6 /} ${color grey} Disk $color${fs_used /media/usb-drive}/${fs_size /media/usb-drive} ${fs_bar 6 /media/usb-drive} ${color grey}Name PID CPU% MEM% ${color lightgrey} ${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1} ${color lightgrey} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2} ${color lightgrey} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3} ${color lightgrey} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4} ]]
Damit Conky 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
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
Was jetzt noch stört, ist der Mauszeiger mitten im Display. Der kann in der Datei
sudo nano /etc/lightdm/lightdm.conf
konfiguriert werden. Dazu muss man die Zeile
#xserver-command=X
suchen und wie folgt ändern:
xserver-command=X -nocursor
Zuletzt wird noch der Setup Wizard deaktiviert:
sudo rm /etc/xdg/autostart/piwiz.desktop
Nach einem finalen Neustart sollte es dann so aussehen. Das Display ist natürlich reine Spielerei und für den Betrieb des Squeezebox Servers nicht notwendig. Aber ich finde es sehr praktisch, immer zu wissen, wie es meinem Server geht :)
Damit ist der Logitech Media Server fertig installiert und kann nun seinen Dienst antreten. Wie oben schon geschrieben, läuft das System bei mir nun schon einige Jahre ohne irgendwelche Probleme. Vielleicht werde ich die Festplatte irgendwann durch eine SSD ersetzen, aber das eilt nicht. Ganz wichtig sind aber regelmäßige Backups der Festplatte! In meiner Musiksammlung steckt inzwischen sehr viel Arbeit und ich würde nur ungern wieder von vorne anfangen.
Sollte irgendwas in der Anleitung unklar sein oder sich ein Fehler eingeschlichen haben, hinterlasst mir einfach eine Nachricht.