Eine Emby-DB selbst auswerten

Emby muss seine Daten ja irgendwo speichern. Warum sollte es also nicht möglich sein, auch ohne die Emby-GUI in die Daten zu schauen? Irgendwo hatte ich gelesen, dass es sich um eine SQLite-Datenbank handelt, die die Daten verwaltet. Nach kurzer Recherche wurde klar, dass die relevante Datei library.db ist.

Läuft Emby auf einem aktuellen Synology-NAS, stößt man hier auf ein erstes Hindernis. Die Daten der App-Installationen ist nicht mehr so einfach zu erreichen. Um trotzdem an die Daten zu kommen, gibt es sicherlich viele Wege.

1.) in Emby ein Backup (Backup&Restore) einrichten. Hier kann man ein Zielverzeichnis wählen, dass auf normalem Weg zu erreichen ist. Ist aber langweilig und: es wird das gesamte Anwendungsverzeichnis gesichert. Das ist mir zuviel.

2.) Eine Möglichkeit finden, schnell und einfach via GUI auf die Daten zuzugreifen: Root File Browser

3.) Einen Backupjob einrichten, der nur die Datei library.db sichert. Idealerweise sehr leicht erreichbar.

Root File Browser auf Synology einrichten

Folgt bitte meiner Anleitung zur Einrichtung des Root File Browsers

Nun könnt ihr in das Verzeichnis /volume1/@appdata/EmbyServer/data browsen und euch die Datei library.db herunterladen:

Backupjob für library.db nach google drive einrichten

Dieser Weg hat mir irgendwie am besten gefallen. Dazu habe ich die folgende kleine Anleitung geschrieben.

Wenn du die Datei über das Backupscript gesichert hast, dann muss die Datei zuerst entpackt werden. In diesem Fall geht das mit 7zip.

Auswerten der Library.db

Es handelt sich, wie bereits erwähnt, um eine SQLite-Datenbank. Zur Auswertung einer solchen DB bieten sich diverse Wege an. Der für mich komfortabelste ist der SQLite-Browser:

ladet also https://sqlitebrowser.org/dl/ herunter.

Mit diesem Programm kann man nun die Datei library.db öffnen. Dort finden wir eine ganze Menge Tabellen. Zur Orientierung für euch empfehle ich die Tabellen Mediaitems und Mediastreams2. In die Tabellen kann man einfach so reinschauen. Die Datenbank (um ein solche handelt es sich) bietet den Vorteil, SQL-Abfragen zu definieren, die einem dann eine tolle Auswertungsmöglichkeit gibt. Ich habe für meinen Fall folgendes Select zusammengestellt.

select distinct items.name, items.OriginalTitle, ProductionYear
from mediastreams2 streams, mediaitems items
where (lower(streams.title) like '%kommentar%' or lower(streams.title) like '%commentary%')#####
and streams.itemid = items.id
and items.type=5
order by lower(items.name)

Diese Abfrage liefert mir alle Filme, in denen es Audiostreams gibt, die den Begriff „Kommentar“ oder „commentary“ enthalten.

Einen Überblick verschaffen kann man sich mit

select path, OriginalTitle, name, type from MediaItems order by type

Wir finden dort beispielsweise folgende Typen:

  • Type 3 Verzeichnisnamen
  • Type 4 Libraries
  • Type 5 Filme
  • Type 6 Serien
  • Type 8 Episodes
  • Type 11 musik tracks
  • Type 12 Hörbücher
  • Type 13 Musik/Hörbuch-Interpreten
  • Type 23 Cast & Crew
  • Type 25 Fotos

Viel Spaß beim Erkunden

Backupjob auf Synology NAS einrichten

dieser Backupjob wird verwendet, um einzelne Dateien auf google drive zu sichern, die in einem App-Verzeichnis liegen und vom normalen Backupjob des NAS nicht erreicht werden können.

Auch hier geht der Weg wieder über die Shell. Dabei verwenden wir ein Wahnsinnstool rclone.

sudo -i

Wir wechseln zuerst in das Verzeichnis /tmp und legen dort ein Verzeichnis rclone an und wechseln dann dorthin:

cd /tmp
mkdir rclone
cd rclone

Wir laden uns rclone herunter, entpacken es, setzen die Rechte und wechseln in das Unterverzeichnis:

curl -o rclone.zip https://downloads.rclone.org/rclone-current-linux-amd64.zip
7z x rclone.zip
chmod +x rclone
cd rclone-v1.72.1-linux-amd64

Nun verschieben wir rclone in ein Verzeichnis, das im System auffindbar ist:

sudo mv rclone /usr/local/bin

Jetzt muss rclone konfiguriert werden. Das Tool ist so komplex, dass das Konfigurieren für mich das Schwierigste war.

rclone config

Im Folgenden stellt rclone diverse Fragen. Die Antworten werden hier dokumentiert:

>n (new remote)

name>mygoogledrive  (der Name wird nachher als Ziel verwendet, frei wählbar)

>22 (derzeit die Nummer für google drive, es können auch andere Services verwendet werden)

client_id>enter drücken

client_secret> enter drücken

scope>1

service_account_file>enter drücken

edit advanced config? N

Use webbrowser to automatically authenticate rclone remote? N

Gehe jetzt auf dein Windows-System, dort https://downloads.rclone.org/rclone-current-windows-amd64.zip herunterladen. Das zip in ein Verzeichnis deiner Wahl entpacken, dann per Powershell in das Verzeichnis wechseln. Dort dann den Befehl eingeben, der dir in der NAS-Shell angezeigt wird. Etwa so:

rclone authorize „drive“ „hdfuerndflwerfwdmf“

In der Powershell wird dann ein Text (Token) zurückgegen mit der Anleitung, was genau man kopieren muss. Das Token wird dann in der NAS-Shell eingefügt und es geht weiter:

config_token>hier den Token einfügen

Configure this as a Shared Drive? (y/n)>n

Yes this is OK: y

q

Nun legen wir in der NAS-GUI im Wurzelverzeichnis ein Verzeichnis „scripts“ an. Dort erstellen wir eine Datei emby_backup.sh.

Die Datei editieren wir und fügen folgenden Text ein:

#!/bin/bash
# Quelle und Ziel
SOURCE="/volume1/@appdata/EmbyServer/data/library.db"
DEST=" mygoogledrive:verzeichnis_auf_googledrive"
# Logfile
LOG="/var/log/rclone_emby_backup.log"
# Zeitstempel
DATE=$(date +"%Y-%m-%d_%H-%M")
# Temporäre Dateien
TMP="/tmp/library_${DATE}.db"
TMP_COMPRESSED="${TMP}.xz"
# 1. Kopie erstellen (falls Emby die Datei gerade nutzt)
cp "$SOURCE" "$TMP"
# 2. Maximale Kompression (xz -9e = höchste Kompression + extreme Optimierung)
xz -9e "$TMP"
# 3. Upload nach Google Drive
/usr/local/bin/rclone copy "$TMP_COMPRESSED" "$DEST" --progress >> "$LOG" 2>&1
# 4. Temporäre Datei löschen
rm "$TMP_COMPRESSED"
echo "Backup abgeschlossen am $DATE" >> "$LOG"

Tipp: lege einen Unterordner auf google drive an. Du ersetzt dann im Script „verzeichnis_auf_googledrive“ mit deinem Verzeichnis.

Jetzt geht’s in den Aufgabenplaner der NAS-GUI.

  1. Erstellen → Ausgelöste Aufgabe → Benutzerdefiniertes Skript
  2. Benutzer: root
  3. Zeitplan: z. B. täglich 03:00
  4. Unter „Aufgabeneinstellungen“:
sh /volume1/scripts/emby_backup.sh

Damit wird das angelegte Script wie definiert regelmäßig ausgeführt.

nano als Editor in der Shell einrichten

Ich mag den Linux-Editor vi nicht, als Alternative habe ich mir nano installiert. Das geht über die Einbindung einer neuen Quelle im Paket-Zentrum. Dort wechselt man zu Einstellungen und den Reiter „Paketquellen“. Hier fügt ihr nun https://packages.synocommunity.com hinzu. Dadurch erhält man einen neuen Eintrag ganz links in der Paketzentrum-Übersicht namens „Community“. Dort steht nun weitere Software zur Verfügung. Wir benötigen die SynoCLI File Tools.

ssh-Zugang für Synology-NAS einrichten

Wer noch keinen Shellzugriff hat, muss zuerst in den NAS-Einstellungen („Systemsteuerung“) den Eintrag „Terminal&SMTP“ wählen und den ssh-Dienst aktivieren. Ich empfehle, den Port auf 22 zu setzen.

ACHTUNG: aus Sicherheitsgründen empfehle ich außerdem, den SSH-Dienst nach Gebrauch wieder zu deaktivieren.

Die Shell erreicht man unter Windows zB. mit der Powershell: dort gibt man ein:

ssh user@nas

Dabei solltet ihr einen User nehmen, der Admin-Rechte hat. Anstelle des „nas“ müsst ihr eventuell die IP-Adresse angeben.

Root File Explorer einrichten

Dafür habe ich keinen anderen Weg gefunden als den nun beschriebenen. Root File Browser bekomme ich als Docker Image. Über den Containermanager habe ich das Programm nicht ans Laufen gebracht. Mein Weg  geht über die Shell und Docker Compose.

Zuerst muss ein SSH-Zugang eingerichtet werden. Das erkläre ich hier. Außerdem habe ich mir den Editor nano eingerichtet.

Dann geht’s jetzt ans Eingemachte:

Wir brauchen root-Rechte:

sudo -i

EIn Verzeichnis für die Softwareconfiguration dort anlegen, wo wir Zugriff haben, dann dahin wechseln und die korrekten Rechte setzen:

mkdir -p /volume1/docker/filebrowser
cd /volume1/docker/filebrowser
chmod -R 777 /volume1/docker/filebrowser

Nun legen wir mit einem Editor die Konfigurationsdatei für docker an:

nano docker-compose.yml

Macht euch kurz mit nano vertraut und dann fügt in die Datei folgenden Code ein:

services:
  filebrowser:
    image: filebrowser/filebrowser:latest
    container_name: filebrowser
    command: ["--port", "8080"]
    ports:
      - "8081:8080"
    volumes:
      - /volume1/docker/filebrowser:/config
      - /volume1:/srv
    restart: unless-stopped

Dann abspeichern und nano verlassen.

So wird der File Browser gestartet:

docker compose up -d

Und dann sollte es funktionieren. Startet in eurem Browser http://nas-ip:8081/files/

Damit der File Browser auch immer beim Neustart des NAS mitgestartet wird, erstellen wir noch eine Aufgabe im Aufgabenplaner vom Typ „ausgelöste Aufgabe“|benutzerdefiniertes Script. Dort stellen wir den Benutzer „root“ ein, den Trigger „Hochfahren“ und unter Aufgabeneinstellungen hinterlegen wir das Script:

sleep 30
cd /volume1/docker/filebrowser
docker compose up -d