Raspberry Pi als Streamingclient für die Synology Audio Station

6. Juli 2014 · Anwendungen · andreas · Kein Kommentar

Die Audio Station von Synology ist eine komfortable Angelegenheit: kaum sind die Musikdateien auf dem NAS gelandet, kann bequem über den Browser oder eine App auf die Bibliothek der Audio Station zugegriffen und nach Herzenslust Playlisten zusammengestellt oder Musik abgespielt werden. Dies geht nicht nur über die am PC angeschlossenen Lautsprecher, im Netzwerk verfügbare Stremingclients können direkt eingebunden werden.

alarmpi

Ein naheliegender Gedanke ist, eine Abspielmöglichkeit über die Stereoanlage zu schaffen, wofür sich ein Raspberry Pi hervorragend eignet. Nicht nur, daß der Einplatinencomputer mit rund 30 Euro recht preisgünstig ist, es sind auch alle benötigten Anschlüsse vorhanden und der Stromverbrauch ist im Betrieb mit rund 3,5 Watt ebenfalls minimal.

Prinzipiell sind alle für den Raspberry Pi erhätlichen Linux-Derivate für den Einsatzzweck geeignet, als Plattform bietet sich Arch Linux an, das in einer Minimalkonfiguration ausgeliefert wird und für das alle benötigten Pakete im offiziellen Repository zur Verfügung stehen.

Als erster Schritt wird das offizielle Paket von Arch Linux heruntergeladen, entpackt und auf die SD-Karte geschrieben, wozu es auf der offiziellen Raspberry Pi-Seite entsprechende Anleitungen gibt. Unter Linux sehen die Schritte im Wesentlichen wie folgt aus:

user@linuxpc:/tmp# wget http://downloads.raspberrypi.org/arch_latest
user@linuxpc:/tmp# unzip arch_latest
user@linuxpc:/tmp# dd if=ArchLinuxARM-2014.06-rpi.img of=/dev/sdb bs=1M

Anschließend kann die SD-Karte in den Raspberry Pi eingelegt und dieser gestartet werden. Hierfür sind weder ein Bildschirm noch eine Tastatur notwendig, da ein SSH-Server mitgestartet wird, auf den man sich direkt mittels Client verbinden kann. Der Defaultname ist “alarmpi”, die Benutzerkennung und Initialkennwort sind “root”.

Da das Image standardmäßig mit der Zeitzone “America/Denver” ausgeliefert wird, sollte als erstes die Zeitzone korrigiert werden:

[root@alarmpi ~]# timedatectl set-timezone Europe/Berlin

bevor über den Paketmanager “pacman” eine Aktualisierung des gesamten Systems erfolgt:

[root@alarmpi ~]# pacman -Syu

Als letzter Installationsschritt wird dann das Paket “gmrender-resurrect-git” sowie die ebenfalls benötigte, aber nicht in den Abhängigkeiten auftauchende “libupnp” installiert:

[root@alarmpi ~]# pacman -S libupnp gmrender-resurrect-git

Ein erster Test kann direkt nach Installation über den Aufruf von

[root@alarmpi ~]# systemctl start gmediarender

erfolgen, damit der Streamingclient direkt beim Systemstart ausgeführt wird, ist ein

[root@alarmpi ~]# systemctl enable gmediarender

notwendig.

Sofern der Name des Clients angepasst werden soll, ist dies über die Konfigurationdatei “/etc/conf.d/gmediarender” möglich.

Optional: Dateisystem auf komplette SD-Karte ausdehnen

Das offizielle Arch Linux-Image belegt eine Größe von 2GB. Sofern mehr Platz benötigt wird, kann das Dateisystem im laufenden Betrieb auf die volle Größe der SD-Karte ausgedehnt werden. Der Trick hierbei ist, aus dem gestarteten System heraus zuerst die “root”-Partition zu löschen und dann mit neuer Größe anzulegen. Da die Daten erst nach Änderung der Größe tatsächlich auf die SD-Karte geschrieben werden, wird die Partition hierbei nicht beschädigt.

Zuerst wird eine Übersicht der aktuellen Partitonierung aufgerufen

[root@alarmpi ~]# fdisk -l

Disk /dev/mmcblk0: 15 GiB, 16155410432 bytes, 31553536 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x417ee54b

Device         Boot     Start       End  Blocks  Id System
/dev/mmcblk0p1           2048    186367   92160   c W95 FAT32 (LBA)
/dev/mmcblk0p2         186368   3667967 1740800   5 Extended
/dev/mmcblk0p5         188416   3667967 1739776  83 Linux

bevor dann “fdisk” unter Angabe des Datenträgers gestartet und die Partitonen manipuliert werden.

[root@alarmpi ~]# fdisk /dev/mmcblk0

Als erstes wird die erweiterte Partition mit dem darin enthaltenen logischen Laufwerk gelöscht:

Command (m for help): d
Partition number (1,2,5, default 5): 2

Partition 2 has been deleted.

Dann werden sowohl die erweitere Partition als auch das logische Laufwerk wieder neu angelegt. Herbei können die Vorgaben alle übernommen werden, sicherheitshalber sollte überprüft werden, daß die Startsektoren tatsächlich den ursprünglich bei “fdisk -l” ausgegebenen Sektoren entsprechen.

Zuerst die erweiterte Partition

Command (m for help): n

Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e
Partition number (2-4, default 2):
First sector (186368-31553535, default 186368):
Last sector, +sectors or +size{K,M,G,T,P} (186368-31553535, default 31553535):

Created a new partition 2 of type 'Extended' and of size 15 GiB.

und dann das logische Laufwerk

Command (m for help): n

Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l

Adding logical partition 5
First sector (188416-31553535, default 188416):
Last sector, +sectors or +size{K,M,G,T,P} (188416-31553535, default 31553535):

Created a new partition 5 of type 'Linux' and of size 15 GiB.

Beim Schreiben der neuen Partitionstabelle folgt der Hinweis, daß die Tabelle erst beim nächsten Reboot verwendet werden kann, weshalb dieser direkt durchgeführt werden sollte.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

[root@alarmpi ~]# reboot

Nachdem das System wieder verfügbar ist, muß als letzter Schritt lediglich das Dateisystem an die neue Partitionsgröße angepasst werden:

[root@alarmpi ~]# resize2fs /dev/mmcblk0p5
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/mmcblk0p5 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p5 is now 3920640 blocks long.

Optional: Dateisysteme nur lesend einbinden

Standardmäßig sind sowohl das “boot” als auc h das “root”-Dateisystem für Lese- und Schreibzugriff eingebunden. Dies ist im Normalfall auch sinnvoll, damit Änderungen gespeichert werden und nicht bei einem Neustart des Systems verloren gehen. Im Einsatz als Streamingclient kann sich dies nachteilig auswirken, insbesondere dann, wenn der Raspberry Pi einfach ausgeschaltet und nicht sauber heruntergefahren wird. Je nach Glück oder Unglück kann es hierbei zu fehlern in einzelnen Dateien bis zur kompletten Zerstörung des Dateisystems kommen.

Als einfachste Lösung bietet sich an, die beiden Dateisysteme nur lesend einzubinden und die wenigen Orte, an denen das Betriebssystem tatsächlich schreiben muß, in den Hauptspeicher zu verlagern.

Als erstes wird die Datei “/etc/fstab” bearbeitet und der “boot”-Partition das “ro”-Flag hinzugefügt sowie die beiden Verzeichnisse “/var/log” und “/var/tmp” als “tmpfs” eingebunden.

[root@alarmpi log]# vi /etc/fstab
 #
 # /etc/fstab: static file system information
 #
 #
 /dev/mmcblk0p1 /boot vfat defaults,ro 0 0
 tmpfs /var/log tmpfs nodev,nosuid 0 0
 tmpfs /var/tmp tmpfs nodev,nosuid 0 0

Um “/tmp” braucht man sich keine Gedanken zu machen, dieses wird standardmäßig als “tmpfs” eingebunden.

Sofern der Raspberry Pi mit DHCP konfiguriert wird, muß auch für die Datei “/etc/resolv.conf” ein neuer Speicherort gefunden wird.

[root@alarmpi ~]# rm /etc/resolv.conf
[root@alarmpi ~]# ln -s /tmp/resolv.conf /etc/resolv.conf

Als letzter Schritt muß auch noch die “ro”-Flag für die “root”-Partition gesetzt werden, dieses erfolgt durch Anpassung der Datei “/boot/cmdline.txt”:

[root@alarmpi ~]# vi /boot/cmdline.txt

ipv6.disable=1 avoid_safe_mode=1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p5 ro rootfstype=ext4 elevator=noop rootwait

Sofern zu einen späteren Zeitpunkt Änderungen vorgenommen werden sollen, können die Dateisysteme einfach on the fly für Schreibzugriffe eingebunden und anschließend wieder zurückgestellt werden:

[root@alarmpi ~]# mount -o remount,rw /
[root@alarmpi ~]# mount -o remount,rw /boot/
...
[root@alarmpi ~]# mount -o remount,ro /
[root@alarmpi ~]# mount -o remount,ro /boot/