Commander One

Wenn ich ein neues System nutze, suche ich relativ schnell nach einem passenden Dateimanager für das System. Infrage kommen hierbei nur 2-Panel-Dateimanager, aka Norton Commander-Clones. Unter Windows nutze ich den Altap Salamander, welcher vor kurzem Freeware geworden ist. Unter macOS habe ich ein paar Jahre den muCommander genutzt. Mittlerweile nutze ich unter macOS den Dateimanager Commander One von Eltima Software.

Der Dateimanager Commander One

Die Grundfunktionen des Dateimanagers sind kostenlos und reichen für die meisten Anwender wahrscheinlich aus. Daneben existiert eine Pro-Version, welche per In-App-Kauf freigeschaltet werden kann. In dieser Version ist die Unterstützung für FTP, SFTP, MTP, WebDAV, die erweiterte Unterstützung für Archive und vieles andere enthalten.

Commander One wurde komplett in Swift geschrieben und nativ für macOS entwickelt; er kann über den Appstore bezogen werden.

Maven-Repository in Eigenregie hosten

Wenn mittels Maven eine Abhängigkeit zur pom.xml-Datei, wie in folgendem Beispiel, hinzugefügt wird:

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.7.26</version>
</dependency>

versucht Maven diese Abhängigkeit von Maven Central, dem zentralen Repository, zu beziehen. Es ist allerdings möglich Abhängigkeiten aus anderen Repositories zu beziehen. Dazu muss der repositories-Block zur pom.xml hinzugefügt werden.

<repositories>
	<repository>
		<id>example</id>
		<url>https://repository.example.org</url>
	</repository>
</repositories>

Aus Nutzersicht ist die Konfiguration von Maven damit erledigt. Soll ein solches Maven-Reposity aufgesetzt werden, ist dies relativ einfach möglich. Dazu wird ein Verzeichnis per HTTP über den Webserver Nginx ausgeliefert. Innerhalb dieses Verzeichnisses wird ein gesicherter Ordner erstellt, welcher über WebDAV erreicht werden kann. Die entsprechende Nginx-Konfiguration sieht für diesen Fall wie folgt aus:

server {
        listen   443 ssl;
        listen [::]:443 ssl;

        ssl_certificate /etc/letsencrypt/live/repository.example.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/repository.example.org/privkey.pem;

        root /var/www/example/repository;

        server_name repository.example.org;

        location / {
                autoindex     on;
        }

        location /upload {
                dav_methods     PUT DELETE MKCOL COPY MOVE;
                dav_ext_methods   PROPFIND OPTIONS;

                dav_access    user:rw group:rw all:rw;

                create_full_put_path  on;

                autoindex     on;

                auth_basic "restricted";
                auth_basic_user_file /var/www/example/repository/upload/.htpasswd;
        }
}

Die .htpasswd-Datei, welche für die Authentifizierung benötigt wird, kann mit dem Tool htpasswd erstellt werden:

htpasswd -c .htpasswd nutzer1

Bei der Nutzung wird das gewünschte Passwort erfragt. Soll ein weiterer Nutzer hinzugefügt werden, so muss der Parameter -c entfernt werden:

htpasswd .htpasswd nutzer2

Anschließend wird die Konfiguration von Nginx mittels:

service nginx reload

aktualisiert. Danach kann WebDAV für die Ressource verwendet werden. In der pom.xml-Datei für das Projekt, welches ein Artefakt für das Repository erzeugt, wird der build-Bereich erweitert und der distributionManagment-Bereich hinzugefügt:

            </plugin>
        </plugins>
        <extensions>
            <extension>
                <groupId>org.apache.maven.wagon</groupId>
                <artifactId>wagon-webdav-jackrabbit</artifactId>
                <version>3.2.0</version>
            </extension>
        </extensions>
    </build>
    <distributionManagement>
        <repository>
            <id>example</id>
            <url>dav:https://repository.example.org/upload/</url>
            <layout>default</layout>
        </repository>
    </distributionManagement>
</project>

Im Extension-Bereich wird das Wagon-Plugin für WebDAV aktiviert. Dieses sorgt dafür das die Artefakte per WebDAV zum Repository hochgeladen werden. In dem distributionManagment-Bereich wird die WebDAV-URL definiert. Wenn nun ein:

mvn deploy

durchgeführt wird, wird dies allerdings nicht funktionieren. Hintergrund ist das der upload-Ordner per Basic authentication geschützt ist. Die Zugangsdaten für diese Authentifikation müssen noch hinterlegt werden. Natürlich werden diese nicht in der pom.xml hinterlegt, da dies aus Gründen der Sicherheit keine gute Idee wäre. Stattdessen werden die Daten in der settings.xml hinterlegt. Diese befindet sich im Pfad:

~/.m2/settings.xml

In dieser Datei wird eine server-Sektion mit den Zugangsdaten hinzugefügt:

<settings>
	<servers>
		<server>
			<id>example</id>
			<username>example</username>
			<password>password</password>
		</server>
	</servers>
</settings>

Anschließend kann das Artefakt erfolgreich mittels:

mvn deploy

in das Repository hochgeladen werden. Problematisch ist das sich die Daten nur im upload-Verzeichnis und nicht im eigentlichen Verzeichnis des Repository liegen. Zur Lösung hierfür wird ein Cronjob, im Kontext des Nutzers www-data, angelegt:

sudo -u www-data crontab -e

Ziel des Cronjobs ist es die Daten aus dem upload-Verzeichnis regelmäßig in das eigentliche Verzeichnis des Repository zu kopieren:

*/5  *    * * *   cp /var/www/example/repository/upload/* /var/www/example/repository/ -r

Damit wird alle 5 Minuten der Inhalt des uploadVerzeichnisses in das Repository kopiert. Ein Verschieben kann leider nicht durchgeführt werden, da die Metadaten beim jeden Deployment von Maven eingelesen werden und erweitert werden. Hier könnten Optimierungen durchgeführt werden, so das alle Dateien bis auf die Metadaten verschoben werden. Soll ein nicht öffentliches Repository erstellt werden, kann auf den zusätzlichen upload-Ordner verzeichnet werden und das Hauptverzeichnis selber per WebDAV befüllt werden. So lange die Zugangsdaten für den Server in der settings.xml-Datei hinterlegt sind, können seitens Maven die entsprechenden Artefakte bezogen werden.

WebDAV unter Nginx einrichten

Der freie Webserver Nginx beherrscht nicht nur das gewöhnliche Ausliefern von Daten über HTTP und HTTPS, sondern verfügt daneben über weitere Module. Mit einem dieser Module kann WebDAV für eine Ressource bereitgestellt werden. Dazu muss die Konfiguration der jeweiligen Seite unter /etc/nginx/sites-available/ angepasst werden. In diesem Beispiel wäre dies:

nano /etc/nginx/sites-available/example

Zur dieser Konfigurationsdatei wird folgende Konfiguration hinzugefügt:

server {
        listen   443 ssl;
        listen [::]:443 ssl;

        ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;

        root /var/www/example;

        server_name example.org;

        location / {
                dav_methods     PUT DELETE MKCOL COPY MOVE;
                dav_ext_methods   PROPFIND OPTIONS;
                dav_access    user:rw group:rw all:rw;

                autoindex     on;
        }
}

In diesem Fall wird für die Domain example.org die WebDAV-Unterstützung aktiviert. Dateien können hierbei ohne weitere Authentifizierung herunter- und hochgeladen werden. Soll WebDAV abgesichert werden, so geschieht das über den Basic authentication. Dazu wird dem location-Part folgendes hinzugefügt:

auth_basic "restricted";
auth_basic_user_file /var/www/example/.htpasswd;

Die .htpasswd-Datei kann mit dem Tool htpasswd erstellt werden:

htpasswd -c .htpasswd nutzer1

Bei der Nutzung wird das gewünschte Passwort erfragt. Soll ein weiterer Nutzer hinzugefügt werden, so muss der Parameter -c entfernt werden:

htpasswd .htpasswd nutzer2

Anschließend wird die Konfiguration von Nginx mittels:

service nginx reload

aktualisiert. Danach kann WebDAV für die Ressource verwendet werden.

Probleme mit der Synchronisation unter Enpass 6

Vor knapp einem halben Jahr bin ich vom Passwort-Manager 1Passwort in Richtung Enpass umgestiegen. Vor ein paar Tagen ist die neue Version Enpass 6 erschienen, welche eine neue Oberfläche, die Unterstützung für mehrere Tresore und einige andere Dinge mitbringt. Bedingt durch die Änderungen funktioniert die Synchronisation leider nicht mehr; so das diese neu konfiguriert werden muss.

Einige Neuerungen führen zu Problemen bei der Synchronisation

Hintergrund hierfür ist das Zurücksetzen der Einstellungen nach dem Upgrade auf Enpass 6. Unter Enpass nutzte ich WebDAV (in diesem Fall eine Nextcloud-Instanz) zur Synchronisation mit einer URL nach dem Schema:

https://example.com/remote.php/webdav/Apps/Enpass

Wird die bestehende URL genutzt führt dies zu einem Fehler in der Synchronisation. Bedingt ist durch die Änderung des Formates, welches von Enpass im WebDAV-Ordner abgelegt wird. Dieser muss vor einer erneuten Synchronisation gelöscht werden. Daneben muss die URL angepasst werden:

https://example.com/remote.php/webdav/Apps

Der Ordner Enpass muss nicht mehr explizit angegeben werden, da dieser unter Enpass 6 automatisch angelegt wird. Mit diesen Änderungen synchronisiert Enpass wieder ohne Probleme mit einem WebDAV-Ziel.

WebDAV-Unterstützung in Ulysses

Seit einigen Jahren nutze ich zum Schreiben von längeren Texten die Software Ulysses. Die App synchronisiert wahlweise in die iCloud oder in externe Ordner. Durch die Synchronisierung in externe Ordner kann man die entsprechenden Dateien in eine eigene Cloud wie z.B. Nextcloud legen. Problematisch wird dies, wenn man neben der macOS-App auch mit der iOS-App arbeiten möchte. Dieses unterstützt im Moment nur iCloud und Dropbox als Gegenstellen für die Synchronisierung. Somit entfällt die Möglichkeit, Dienste wie Nextcloud für die Synchronisation zwischen iOS und macOS zu nutzen. Behoben werden könnte dies durch eine Nextcloud- oder eine allgemeine WebDAV-Integration.

‎Ulysses
Preis: Kostenlos+

‎Ulysses
Preis: Kostenlos+

Während die WebDAV-Unterstützung 2014 noch ausgeschlossen wurde, mehrten sich in letzter Zeit Hinweise das WebDAV in Zukunft eventuell den Weg in Ulysses findet. Auf Twitter finden sich einige Kommentare welche sich um dieses Thema drehen.

Schon 2016 wurde WebDAV immerhin nicht ausgeschlossen

Das nutzte ich als Anlass, einfach mal beim Ulysses-Support nachzufragen:

Ist es vorgesehen in Zukunft eine Nextcloud bzw. allgemeine WebDAV Unterstützung zur Synchronisation hinzuzufügen? Wenn ja, wann wäre mit der Umsetzung zu rechnen?

Einen Tag später war schließlich die Antwort da:

Wir hoffen, in einer zukünftigen Version allgemeine WebDAV Unterstützung zur Synchronisation anbieten zu können. Wann genau das kommen wird, kann ich leider nicht sagen, aber der Plan besteht.

Leider ließt man aus der Antwort heraus das eine zeitnahe Umsetzung wohl im Moment nicht auf dem Plan steht. Spätestens jetzt, wo Ulysses mit einem Abomodell arbeitet, kann man nur hoffen das den Wünschen der Nutzerschaft Gehör geschenkt wird und nicht ewig auf eine WebDAV-Unterstützung gewartet werden muss.