Jediblog

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.