3. Oktober 2022 | IT
QNAP Photo Station: Metadaten von Bildern bearbeiten
Meine Fotos genießen bei mir einen höheren Stellenwert als viele andere Dateien auf meinen Festplatten. Außerdem geht es um große Datenmengen, da wäre die SSD im Laptop schnell voll.
Es wundert also nicht, dass die Fotos extern gesichert werden, in meinem Fall auf einer QNAP (und darüber hinaus auf einer regelmäßig daran angeschlossenen USB-Festplatte).
Features
Die QNAP kommt mit einer PhotoStation, die es erlaubt, Bilder relativ komfortabel zu verwalten. Man kann die Bilder taggen, kategorisieren, betiteln, in Alben sortieren, für andere freigeben und vieles mehr. Außerdem werden automatisch Thumbnails generiert, so dass die Anzeige selbst über eine dünne Upload-Leitung relativ flüssig funktioniert.
Kurze Warnung
Anfang des Jahres gab es noch eine Sicherheitswarnung, dass QNAPs besser nicht dem Internet ausgesetzt werden sollten, da Angreifer ansonsten alle Daten verschlüsseln könnten [1]. In der aktuellen Version der Software ist das Problem wohl behoben [2].
Das Problem mit den Metadaten
Alle Metadaten, die man innerhalb der PhotoStation den Bildern gibt, werden in einer MySQL-Datenbank auf der QNAP gespeichert. Das beschleunigt ganz sicher den Zugriff auf diese Metadaten ungemein, bringt aber das Problem mit sich, dass die Daten außerhalb der PhotoStation – also z.B. nach einem Download – nicht verfügbar sind. Außerdem wird der Titel anhand des Dateinamens gesetzt und nicht aktualisiert, wenn die Datei umbenannt wird.
Lösungsansätze
Zunächst einmal wird Zugriff auf die MySQL-Datenbank benötigt. Auf meiner QNAP laufen tatsächlich zwei MariaDB-Instanzen, eine für das QNAP-System und eine für die PhotoStation.
Hier sollen keine Firmengeheimnisse verraten werden, aber die Datei
/usr/local/mariadb/start_mariadb.sh
ist sehr aufschlussreich im Bezug auf
Accounts und Passwörter. Der eigene Firmennamen – auch wenn man ihn zweimal
hintereinander schreibt – ist übrigens niemals ein sicheres Passwort.
Wer nur an den Daten interessiert ist, kann mit dem read-only Account einen Dump erzeugen:
/usr/local/mariadb/bin/mysqldump --lock-tables=false \
-S /tmp/mysql_mediadb.sock -u <read-only-user> -p s01
Will man dagegen Daten manipulieren, wird der root
Benutzer benötigt:
/usr/local/mariadb/bin/mysql -S /tmp/mysql_mediadb.sock \
-u root -p s01
In meinem Fall wurden Fotos nach dem Upload umbenannt, ich wollte also die Titel aktualisieren:
UPDATE pictureTable
SET cPictureTitle = SUBSTRING_INDEX(cFilename, '.', 1)
WHERE (
LOWER(cFilename) LIKE '%.jpg'
OR LOWER(cFilename) LIKE '%.arw'
) AND (
LOWER(cFilename) != CONCAT(LOWER(cPictureTitle), '.jpg')
AND LOWER(cFilename) != CONCAT(LOWER(cPictureTitle), '.arw')
);
Die komplette WHERE
-Bedingung könnte man auch weg lassen, ich war nur vor
der Änderung daran interessiert, wie viele Bilder überhaupt betroffen waren.
Natürlich ist jeder selbst dafür verantwortlich, was passiert, wenn man Code ungetestet aus dem Internet kopiert und benutzt. Eine offensichtliche Fehlerquelle wären hier aber Dateinamen mit mehr als einem Punkt.