Box und Bibliothek einrichten¶
2. Eine Box einrichten¶
2.1 Was man braucht¶
- einen Raspberry Pi mit der Hardware der Box (box.md, Abschnitt 1) – auch eine Box, die noch nicht verdrahtet ist, lässt sich installieren; ihre Seite antwortet, und das Log nennt, was fehlt
- eine SD-Karte und den Raspberry Pi Imager auf dem PC
- ein WLAN mit Internet: Der Installer holt die Pakete des Betriebssystems
- das Passwort, das der Benutzer
adminder Seite der Box bekommen soll, mindestens 8 Zeichen - mit Bibliothek: ihr Bootstrap-Passwort, festgelegt bei der Installation der Bibliothek (Abschnitt 3)
2.2 Die Karte schreiben¶
- Im Raspberry Pi Imager „Raspberry Pi OS Lite (64 Bit)“ wählen.
- In den Einstellungen des Imagers den Hostnamen setzen (z. B.
kueche– die Seite ist dannhttps://kueche.local), den Benutzer, das WLAN mit seinem Land, die Zeitzone und SSH; der Imager bietet an, nur die Anmeldung mit Schlüssel zu erlauben. - Die Karte schreiben, in die Box stecken und die Box einschalten.
- Vom PC aus anmelden:
ssh <Benutzer>@<Hostname>.local.
Was der Imager eingestellt hat, fasst der Installer nie an: Hostname, Benutzer, WLAN, Zeitzone, SSH.
2.3 Der Installer¶
Eine Box, die für sich allein arbeitet, holt den Installer von GitHub:
curl -fsSL https://github.com/tgd1975/tinyjukebox/releases/latest/download/install.sh | sudo bash
Eine Box für eine Bibliothek bekommt ihre Zeile von der Seite der Bibliothek: Tab „Boxen“, Abschnitt „Box hinzufügen“, „Kopieren“. Die Zeile nennt die Bibliothek und den Schlüssel ihres Zertifikats, damit die Box genau dieser Bibliothek vertraut.
Was passiert:
- Alle Fragen kommen zuerst: das Passwort des Benutzers
adminder Seite und, mit Bibliothek, das Bootstrap-Passwort. Sie werden vom Terminal gelesen, nie von der Befehlszeile. - Der Installer prüft, ob er auf Raspberry Pi OS Lite (64 Bit), Debian 13, läuft. Auf allem anderen hört er auf, bevor er etwas ändert, und sagt, was er gefunden hat.
- Er richtet das System ein, installiert die Box-Software in einen Slot und zeigt die Adresse der Seite. Er startet die Box einmal neu. Auf einem Pi 3 dauert das ein paar Minuten; kompiliert wird nichts.
- Eine Box für eine Bibliothek meldet sich bei ihrem ersten Start an und erscheint von selbst im Tab „Boxen“ der Bibliothek.
- Was er ausgegeben hat, steht in
/var/log/tinyjukebox-install.log, auch was nach dem Neustart geschah.
Ein zweiter Lauf schadet nicht: Er ändert nichts, was schon stimmt, und er fasst Alben, Tags, Fortschritte, Benutzer und die Verbindung zu einer Bibliothek nie an. Er ist auch der Weg, das System einer Box auf den neuen Stand zu bringen (Abschnitt 4.4). Ein Deinstallationsprogramm gibt es nicht: Einen Pi macht man frei, indem man seine Karte neu schreibt.
Alle Optionen des Installers: deployment.md, Abschnitt 5.1.
2.4 Nach der Installation¶
- Der erste Start sollte mit WLAN geschehen: Die Box hat keine Uhr, und das Zertifikat der Seite entsteht dabei.
- Die Seite öffnen und als
adminanmelden. Beim ersten Mal warnt der Browser vor dem Zertifikat (Abschnitt 5.4). - Die Sprache unter der Anmeldung wählen, „Deutsch / English“.
- Einen Tag auflegen: Die LED wird gelb, und der Tab „Jetzt“ bietet an, ihn zu verknüpfen (Benutzerhandbuch, Abschnitt 7.2).
- Gibt es mehrere Boxen, der Box einen Namen geben: Tab „System“, Abschnitt „Bibliothek“, „Umbenennen“.
Für eine neu eingerichtete Box geht die Abnahme-Checkliste Start, Tasten, LED, Tags und Kopfhörer der Reihe nach durch.
2.5 Mit dem Playbook¶
Unsere eigene Box wird vom PC aus mit einem Ansible-Playbook eingerichtet. Es führt den Installer aus und schreibt außerdem die Konfiguration der Box und ihre Benutzer. Das ist der Weg für Entwickler, die die Box im Repository führen: deployment.md, Abschnitt 5.2.
3. Die Bibliothek¶
3.1 Wo sie läuft¶
| Wo | Wie | Aktualisiert |
|---|---|---|
| Synology-NAS | das Paket tinyjukebox-library, installiert im Paket-Zentrum |
von Hand, mit einem neueren Paket (Abschnitt 4.3) |
| Docker | das Image ghcr.io/tgd1975/tinyjukebox (linux/amd64, linux/arm64) |
durch Holen eines neueren Images |
| PC | pip install tinyjukebox, dann tinyjukebox-library --data ORDNER |
mit pip install --upgrade tinyjukebox |
Das Paket ist für eine Plattform gebaut, rtd1296 – die DS418j und NAS mit demselben Prozessor. Ein anderes NAS
braucht einen anderen Build oder Docker.
3.2 Auf dem NAS¶
- Vorher: das Python 3.12 von SynoCommunity auf dem NAS installieren (das Paket
python312). Ein Bootstrap-Passwort mit mindestens 16 Zeichen wählen, z. B. mitopenssl rand -hex 24. Jede Box weist es einmal vor, beim ersten Verbinden. - Das Paket holen (
tinyjukebox-library-<version>-<build>-rtd1296.spk), aus dem neuesten Release auf GitHub. Mit einem Klon des Repositorys auf dem PC holt./fetch_release.shes nachdist/und prüft es. - Installieren: Paket-Zentrum von DSM, „Manuelle Installation“, die Datei wählen, die Warnung vor Paketen von
Drittanbietern bestätigen. Der Dialog fragt nach dem Passwort des Benutzers
adminder Seite (mindestens 8 Zeichen) und nach dem Bootstrap-Passwort. - Prüfen: Das Paket-Zentrum zeigt das Paket als laufend, und
https://<nas>:8866öffnet die Seite. Alsadminanmelden. Ist der Start fehlgeschlagen, steht der Grund invar/server.log(Abschnitt 7.2). - Benutzer: Die Bibliothek hat nur den Benutzer
admin. Die anderen auf ihrer Seite anlegen, Tab „System“, Abschnitt „Benutzer“.
Das Paket läuft als eigener Benutzer, tinyjukebox-library. DSM legt beim ersten Start den freigegebenen Ordner
tinyjukebox an, darin albums/, images/ und json/; Alben lassen sich auch per SMB oder File Station dort
ablegen, und Hyper Backup sichert den Ordner mit. Zertifikat, Benutzer und Konfiguration liegen in
/var/packages/tinyjukebox-library/var/. Ein Update behält diesen Ordner, und DSM löscht ihn nie – auch nicht, wenn
das Paket entfernt wird. Ganz von vorn beginnen:
library.md, Abschnitt 3.7.
3.3 In Docker¶
Zwei Passwörter als Dateien, dann startet compose eine Bibliothek und eine Box ohne Hardware zum Ausprobieren:
cd deploy/docker && openssl rand -hex 12 > admin-password && openssl rand -hex 24 > bootstrap-password
docker compose up -d # https://localhost:8866/ und https://localhost:8443/, Benutzer admin, das Passwort in admin-password
Die Bibliothek allein:
docker run -d --name library --restart unless-stopped -p 8866:8866 \
-v library:/data -v /pfad/zu/alben:/data/albums ghcr.io/tgd1975/tinyjukebox
- Alles, was bleiben muss, liegt unter
/data: ein Volume, und wenn gewünscht die Alben als Ordner des Rechners. Ein eingebundener Ordner muss für den Benutzer des Images (uid 1000) beschreibbar sein. - Ohne
TINYJUKEBOX_ADMIN_PASSWORDwird das Passwort vonadminerzeugt und einmal ausgegeben:docker logs library. - Das Bootstrap-Passwort kommt aus
TINYJUKEBOX_BOOTSTRAP_PASSWORD, oder es wird im Tab „Boxen“ gesetzt. - Statt der Passwörter selbst nennen
TINYJUKEBOX_ADMIN_PASSWORD_FILEundTINYJUKEBOX_BOOTSTRAP_PASSWORD_FILEeine Datei, die sie enthält; eine Variable lässt sich mitdocker inspectlesen. - Eine Box kommt mit der Zeile des Tabs „Boxen“ dazu. Ihre Adresse muss die des Rechners sein, nicht der Name des Containers.
Mehr: library.md, Abschnitt 3.9.
3.4 Auf einem PC¶
pip install tinyjukebox
tinyjukebox-library --data ~/bibliothek # https://localhost:8866/
Alles liegt unter dem Ordner: data/, albums/, images/, ssl/, log/, backups/. Beim ersten Start fragt sie
im Terminal nach dem Passwort von admin. Ein ausgeschalteter Rechner ist für die Boxen keine Bibliothek: Sie spielen
mit dem weiter, was sie haben, und liefern ihre Änderungen später ab.
3.5 Mit den Daten einer Box füllen¶
Die Bibliothek beginnt leer. Hat eine Box schon Alben und Tags, bringt ein Befehl auf dem PC sie hinüber. Er behält die Nummern, damit Box und Bibliothek von Anfang an übereinstimmen, und er lässt sich wiederholen: Was schon da ist, wird übersprungen.
rsync -a pi@tinyjukebox.local:/srv/tinyjukebox/json/ ~/box-copy/json/
rsync -a pi@tinyjukebox.local:/srv/tinyjukebox/albums/ ~/box-copy/albums/
tinyjukebox-fill-library https://<nas>:8866 --user admin \
--json ~/box-copy/json --albums ~/box-copy/albums --images ~/box-copy/json/images
Er fragt nach dem Passwort und zeigt den Fingerabdruck des Zertifikats der Bibliothek zur Bestätigung (Abschnitt 5.4).
In einem Klon des Repositorys heißt der Befehl uv run tinyjukebox-fill-library …. Die Fortschritte kommen mit der
ersten Synchronisation von der Box selbst. Eine Box, die man einfach mit der Bibliothek verbindet, bringt ihre Daten
ebenfalls mit (Benutzerhandbuch, Abschnitt 13.2); dieser
Befehl ist für viele Alben auf einmal.
3.6 Die Boxen verbinden¶
- Eine Box, die schon läuft: auf ihrer Seite, Tab „System“, Abschnitt „Bibliothek“: Adresse und Bootstrap-Passwort (Benutzerhandbuch, Abschnitt 13.2).
- Eine neue Box: die Zeile des Tabs „Boxen“, Abschnitt „Box hinzufügen“ (Abschnitt 2.3).
- Eine neu eingerichtete Box ist eine neue Box. Auf der Seite der Bibliothek, Tab „Boxen“, übernimmt sie die Fortschritte und Einstellungen der alten.
3.7 Neue Versionen für die Boxen¶
Die Bibliothek holt die Versionen der Box-Software aus den Releases auf GitHub und gibt sie an ihre Boxen weiter. Dafür braucht sie Zugang zu den Releases:
- Das Repository ist öffentlich: Eine leere Datei
var/github-tokenauf dem NAS genügt, mit dem Benutzertinyjukebox-libraryals Eigentümer; danach das Paket stoppen und starten. - Das Repository ist privat: auf GitHub einen fein granulierten Token für dieses eine Repository mit dem Recht „Contents: Read-only“ anlegen und auf der Seite der Bibliothek eintragen, Tab „Versionen“, Abschnitt „Zugang zu den Releases“. Die Bibliothek prüft ihn, bevor sie ihn speichert, und sucht sofort nach einem Release.
Das Docker-Image und tinyjukebox-library --data fragen die Releases des Projekts ohne Token. Welche Version eine Box
bekommt und wie sie ausprobiert wird: Abschnitt 4.1.