UNIXwork

Tags

c dav unix shell linux xattr solaris links x11 java rant fun webdav sync gnome apple benchmark network ldap oracle analytics xnedit macos windows graalvm bsd curl mac apache wtf virtualbox microsoft zfs sparc tomcat rhel freebsd arm

dav-sync Versioning

17. Dezember 2019

Ich habe in dav-sync von Anfang an die Datensicherheit an erste Stelle gestellt. Geprägt von Horrorgeschichten über Synchronisations-Programme, die massenweise Daten niedergemetzelt haben, wollte ich mir und allen dav-sync Usern dies ersparen. Daher gab es schon von Anfang an als zusätzliche Sicherung das Trash-Verzeichnis, in das Dateien verschoben wurden, statt sie zu löschen.

Neu ist jetzt das Versioning-Feature, womit auf dem Server mehrere Versionen von Dateien gespeichert werden können. Dies ist in zwei Varianten implementiert. Einmal über einfache Kopien von den Dateien, die in einer versteckten Collection abgelegt werden. Die andere Variante nutzt die WebDAV-Erweiterung DeltaV, wofür es jedoch praktisch keine Server-Implementierungen gibt. Noch nicht ;-)

Im Folgenden möchte ich die Konfiguration und die Benutzung der dav-sync Versionierung erläutern.

Zunächst benötigt man natürlich erst einmal eine Konfiguration für ein Verzeichnis, welches synchronisiert werden soll. In diesem Artikel habe ich die Einrichtung und grundlengende Benutzung von dav-sync erklärt. Für die Versionierung muss nur noch die Konfiguration (sync.xml) etwas angepasst werden. Hierfür muss nur innerhalb des <directory>-Elements folgendes ergänzt werden:

<versioning type="simple" always="true" />

Das type="simple" steht für die Versionierung über einfache Kopien der Dateien. Alternativ könnte hier statt simple auch deltav stehen. Hierfür benötigt man natürlich einen DeltaV-kompatiblen Server. Apache, Nextcloud oder praktisch alle anderen WebDAV-Server unterstützten dies jedoch nicht.

Das Attribut always="true" gibt an, dass bei jedem Hochladen einer Datei eine neue Version angelegt werden soll. Hier könnte natürlich auch false angegeben werden, dann wird nur eine neue Version gespeichert, wenn dies manuell angefordert wird. Hierfür gibt es für die dav-sync Kommandos push und archive die Option -S. Wird diese angegeben, wird für jede hochgeladene Datei die vorherige Version gespeichert.

Damit ist die Konfiguration auch schon abgeschlossen. Alte Versionen von Dateien werden standardmäßig in der Collection .dav-version-history (unterhalb des Sync-Directory) abgelegt. Wer will könnte noch den Speicherort der Versions-History mit dem <history>-Element anpassen.

<versioning type="simple" always="true">
	<history>/.backup/</history>
</versioning>

Jetzt werden immer alte Versionen von Dateien gespeichert. Wer hingegen always="false" benutzt, kann beim Uploaden von Dateien folgendermaßen die Version speichern:

$ dav push -S mydir

Um jetzt alte Versionen von Dateien wiederherzustellen, benötigt man zwei dav-sync Befehle: list-versions und restore. Beide Befehle arbeiten mit lokalen Dateipfaden, man kann daher einen absoluten oder relativen Pfad zu der Datei angeben und dav-sync bestimmt dann automatisch das passende Sync-Directory dazu (wenn es eindeutig ist, ansonsten muss man es mit der Option -s angeben). Als Beispiel gehen wir davon aus, dass wir uns in der Shell im Verzeichnis befinden, in dem die Datei liegt.

$ dav-sync list-versions test.txt
name: 1576420562-69ba29c77659c2db
lastmodified: Sun, 15 Dec 2019 10:39:30 GMT
url: https://example.com/webdav/.history/157/1576420562-69ba29c77659c2db

name: 1576420572-b6a1862b0b1c04e6
lastmodified: Sun, 15 Dec 2019 11:12:28 GMT
url: https://example.com/webdav/.history/157/1576420572-b6a1862b0b1c04e6

name: 1576420613-8b1260a7a6943580
lastmodified: Sun, 15 Dec 2019 15:33:06 GMT
url: https://example.com/webdav/.history/157/1576420613-8b1260a7a6943580

list-versions zeigt alle verfügbaren vorherigen Versionen einer Datei an. Was wir aus der Ausgabe benötigen ist das Feld name. Den Namen können wir bei dem Befehl restore benutzen, um diese Version wiederherzustellen.

$ dav-sync restore -V 576420572-b6a1862b0b1c04e6 test.txt
get: /test.txt
Result: 1 file pulled, 0 errors

Dies downloaded die angegebene Version und ersetzt damit die lokale Datei.

Eine Einschränkung ist noch, dass es keine einfache Möglichkeit gibt, gelöschte Dateien wiederherzustellen. Wenn man versehentlich eine Datei löscht, kann man unmittelbar danach zwar mit dav-sync restore -s <syncdir> alle gelöschten Dateien wiederherstellen. Dies funktioniert jedoch nicht mehr, sobald man nach dem Löschen den Befehl push ausführt und somit auf dem Server die Datei gelöscht wird. Dann ist die Datei zwar noch in der History vorhanden, es gibt jedoch keinen Befehl, der die Datei wiederherstellen kann. Da bleibt einem nur übrig, die gesamte History zu durchsuchen.

dav secret store

16. Dezember 2019

Eines der neuen Features in dav 1.3 ist der Secret-Store. Dieser bietet eine alternative Methode um Authentifizierungsdaten zu speichern. Bisher war es nur möglich, in der config.xml optional Benutzer und Passwort abzulegen. Dies hat natürlich den Nachteil, dass das Passwort damit im Klartext abgespeichert ist.

Der Secret-Store ist eine passwortgeschützte Ablage für Credentials, die durch eine eindeutige ID identifiziert werden. Credentials enthalten dann einen Benutzernamen, ein Passwort und optional zugehörige URLs. Die Credential-IDs und URLs werden unverschlüsselt gespeichert. Damit kann dav überprüfen, ob für eine angefragte URL Zugangadaten im Secret Store vorhanden sind. Wenn dies der Fall ist, wird nach dem Master-Passwort gefragt. Mit diesem wird der Secret-Store dann entschlüsselt und die gespeicherten Zugangsdaten passend zur URL verwendet.

Für die Verwaltung des Secret Store gibt es mehrere Befehle. Neue Credentials können mit dav add-user angelegt werden. Dies fragt zunächst das Master-Passwort ab, um entweder einen bestehenden Secret Store zu entschlüsseln oder um einen neuen anzulegen. Danach muss ein Credentials Identifier angegeben werden, der eindeutig sein muss. Es folgen die eigentlichen Authentifizierungsinformationen, nämlich Benutzername und Passwort. Optional können dazu noch mehrere Locations gespeichert werden.

$ dav add-user
Master password: 
Credentials identifier: user1
User: myuser
Password: 
Location (optional): http://example.com/
Location (optional):

Wenn danach nun eine der angegebenen URLs aufgerufen wird, werden die im Secret Store gespeicherten Authentifizierungsinformationen genutzt. Hierfür fragt dav nach dem Secret Store Passwort:

dav list http://example.com/
Master password:
...

Dies funktioniert auch, wenn man nicht direkt über eine URL, sondern einen Repository-Namen zugreift. Wenn für die Repository-URL im Secret-Store Credentials hinterlegt sind, werden diese genutzt. Es kann auch im Secret-Store als Location ein Repository-Name oder ein Repository-Name mit zugehörigen Pfad gespeichert werden.

Location (optional): myrepo/path/

Eine weitere Möglichkeit um Repositories mit Credentials zu verknüpfen ist, in der config.xml die Credentials-ID anzugeben. Hierfür gibt es das Element <stored-user>.

<repository>
	<name>myrepo</name>
	<url>http://example.com/webdav/</url>
	<stored-user>user1</stored-user>
</repository>

Weitere Befehle Administrations-Befehle für den Secret-Store sind remove-user, edit-user und list-users. Diese sind interaktive Befehle (bis auf list-users) und dürften einfach zu benutzen sein, wenn man das Konzept des Secret-Stores verstanden hat.

dav 1.3 veröffentlicht

15. Dezember 2019

Bestimmt über ein Jahr später als geplant kann ich nun endlich eine neue Version von dav veröffentlichen. Dabei handelt es sich um einen WebDAV-Client für die Kommandozeile. Ebenfalls dabei ist das Programm dav-sync, welches Dateien per WebDAV synchronisieren kann.

Die Ursache der Verzögerung ist eine Geschichte für sich, die Kurzfassung ist, dass ich versucht habe, zu viele Features in das Release zu packen. Diese alle zu stabilisieren hat eine Ewigkeit gedauert.

Doch die positive Folge ist, dass vor allem dav-sync jetzt vermutlich eine der featurereichsten Dateisynchronisierungslösungen ist. War bisher vermutlich das einzige Killerfeature die integrierte Dateiverschlüsselung, hat dav-sync jetzt eine ganze Reihe an Alleinstellungsmerkmalen und dürfte vor allem das Nextcloud-Synctool deutlich in den Schatten stellen.

Die Highlights des neuen Releases sind:

Datei-Versionierung in dav-sync

Ich hatte in dav-sync schon immer Wert auf Datensicherheit gelegt. So gab es schon immer die Möglichkeit, lokale Sicherheitskopien von Dateien automatisch anlegen zu lassen, bevor diese durch einen Synchronisationsvorgang gelöscht oder überschrieben werden. Jetzt gibt es das ganze auch auf Serverseite, denn dav-sync kann nun automatisch auf dem Server alte Datei-Versionen speichern. Dazu gibt es auch einen einfach zu benutzenden Befehl, der lokale Dateien wiederherstellen kann. Versehentlich Dateien löschen oder überschreiben, und dies erst nach diversen Synchronisationsvorgängen merken, ist somit kein Problem mehr.

Datei-Aufteilung in Blöcke für eine partielle Dateisynchronisation

Mir ist aufgefallen, dass praktisch zu jedem Artikel zu Dateisynchronisierungslösungen bei heise jemand im Forum nachfragte, ob auch nur einzelne Dateibestandteile synchronisiert werden können. Bei mehreren Gigabyte großen Dateien möchte man schließlich nicht immer die vollständige Datei uploaden müssen. Dies wird nun von dav-sync unterstützt, in dem Dateien in mehrere Blöcke mit fester Blockgröße aufgeteilt werden können. Synchronisiert werden dann nur die Blöcke, die geändert wurden.

Metadaten- und Symlink-Synchronisation

Neu ist die Möglichkeit, das Dateiänderungsdatum oder Dateiberechtigungen zu synchronisieren. Dies ist vermutlich nicht so ungewöhnlich. Darüber hinaus kann dav-sync jedoch auch Extended Attributes synchronisieren, was vermutlich die wenigsten Tools können. Ebenfalls neu ist die Möglichkeit, Symlinks zu synchronisieren. Bisher wurden sie als normale Dateien behandelt, jetzt können sie von dav-sync selber angelegt werden. Das besondere daran ist auch der Windows-Support, denn Windows hat praktisch keine brauchbaren Symlinks, zumindestens nicht für normale Benutzer. Verbreiteter sind dort Verknüpfungen (.lnk-Dateien), die von dav-sync zu Symlinks übersetzt werden können.

Copy/Move in dav-sync

In dieser Hinsicht hinkte dav-sync etwas hinterher, denn andere Tools konnten schon länger erkennen, wenn Dateien nur umbenannt oder verschoben wurden.

Neue dav-Features

Auch das Tool dav hat ein paar Verbesserungen erhalten. So gibt es jetzt einen Secret-Store, in dem passwortgeschützt Zugangsdaten gespeichert werden können. Neu sind auch ein paar Befehle für WebDAV-Server, die die Versionierungserweiterung DeltaV unterstützen.

Den Quellcode kann man hier downloaden. Auf SourceForge stehen auch Windows-Binaries bereit.

dav Projektseite SourceForge Projektseite

Linkdump

14. Dezember 2019

xdg-utils

13. Dezember 2019

Unter der Leitung von freedesktop.org wurden einige Teile von Unix-Desktop-Umgebungen vereinheitlicht, unter anderem das Handling von Mime-Typen. Hierfür gibt es die XDG MIME Application specification.

Außerdem gibt es die offiziellen xdg-utils für den Umgang mit Mime-Typen. Mit diesen können unter anderem neue Mime-Typen installiert, Standard-Anwendungen konfiguriert oder Informationen abgefragt werden.

Praktisch im alltäglichen Gebrauch ist xdg-open. Dies öffnet eine Datei mit der dazugehörigen Standard-Anwendung. Dies ist nicht nur hilfreich, wenn man vom Terminal aus deine Datei mit dem passenden grafischen Programm öffnen möchte, sondern kann auch gut in eigenen Programmen verwendet werden, wenn diese externe Programme wie z.B. den Standard-Browser öffnen sollen.

Die xdg-utils dürften bei allen (Unix-)Desktop-Umgebungen dabei sein.

Zurück Weiter