Skip to content

Box und Bibliothek einrichten

English

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 admin der 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

  1. Im Raspberry Pi Imager „Raspberry Pi OS Lite (64 Bit)“ wählen.
  2. In den Einstellungen des Imagers den Hostnamen setzen (z. B. kueche – die Seite ist dann https://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.
  3. Die Karte schreiben, in die Box stecken und die Box einschalten.
  4. 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 admin der 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 admin anmelden. 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

  1. 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. mit openssl rand -hex 24. Jede Box weist es einmal vor, beim ersten Verbinden.
  2. 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.sh es nach dist/ und prüft es.
  3. 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 admin der Seite (mindestens 8 Zeichen) und nach dem Bootstrap-Passwort.
  4. Prüfen: Das Paket-Zentrum zeigt das Paket als laufend, und https://<nas>:8866 öffnet die Seite. Als admin anmelden. Ist der Start fehlgeschlagen, steht der Grund in var/server.log (Abschnitt 7.2).
  5. 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_PASSWORD wird das Passwort von admin erzeugt 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_FILE und TINYJUKEBOX_BOOTSTRAP_PASSWORD_FILE eine Datei, die sie enthält; eine Variable lässt sich mit docker inspect lesen.
  • 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-token auf dem NAS genügt, mit dem Benutzer tinyjukebox-library als 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.