Den Owncloud-Kommandozeilenclient (pyOwncloud) auf einem Uberspace nutzen

Ich zeige hier, wie der Owncloud-Kommandozeilenclient, pyOwncloud, auf einem Uberspace installiert wird. Wen meine Hintergründe dazu nicht interessieren, der liest einfach unten weiter, wo die Anleitung beginnt.

Ich betreibe seit Längerem eine Owncloud-Instanz auf meinem Uberspace. Vor ein paar Wochen bin ich auf das Konzept Todo.txt zur Pflege einer Aufgabenliste in Textdateiform gestoßen und habe meinen Todo-Listen-Workflow geräteübergreifend darauf umgestellt.

Das Commandline-Interface für Todo.txt ermöglicht es mir, auf meinen beiden eigenen Rechnern mit einem Tastendruck im Dropdown-Terminal mit meinen Todo-Listen zu interagieren. Auf meinem Android-Telefon kann ich auf die Listen mit den Apps Simpletask cloudless und Foldersync zugreifen. Die Textdateien an sich werden über meine Owncloud synchronisiert.

Nun kommt es vor, dass

  • ich an einem Rechner sitze, der nicht in meine Cloud eingebunden ist,
  • der vielleicht mit Windows läuft und PuTTY installiert hat,
  • ich in einem Terminal auf meinem Uberspace arbeite und nicht wechseln will

und dass ich gleichzeitig mein Smartphone nicht am Mann habe. Trotzdem will ich ja unbedingt diesen einen Gedanken, eine Aufgabe oder sonstwas festhalten, ohne meine Arbeit unterbrechen zu müssen.

Daher wollte ich meine Todolisten und vor allem das CLI auf meinem Uberspace haben, so dass ich auch dort schnell mal zugreifen kann. Nun, wie wird nun ein Owncloudverzeichnis auf einem Server ohne GUI synchronisiert? Da kann sicher ein WebDAV-Client eigener Wahl verwendet werden, wie das ja Foldersync auf Android auch macht. Allerdings präferiere ich -- alleine wegen der eingebauten Zweiwege-Synchronisation -- native Lösungen, wenn es sie denn gibt.

Und es existiert tatsächlich ein Kommandozeilenclient für ownCloud, pyOwncloud, der die Owncloud-Synchronisierungsbibliothek verwendet. Diesen auf einem Uberspace im Benutzerkontext zu nutzen, bedarf einiger Kniffe, die ich hier aufzeigen will.

Viel Spaß!

Anleitung

Versionsnummern und Links können sich natürlich ändern. Wenn mir sowas auffällt oder zugetragen wird, versuche ich, das anzupassen.

Step 1: libocsync installieren.

pyOwncloud hängt von einer installierten ocsync-Bibliothek ab, die leider auf den CentOS Servern von Uberspace nicht installiert ist und auch nicht in den offiziellen CentOS Paketquellen verfügbar ist, so dass die Jungs von Uberspace das schnell installieren hätten können. Also ist Handarbeit angesagt. Da die Konfiguration der Bibliothek mit cmake gemacht wird, welches nicht von toast -- dem Paketmanager für im Benutzerkontext installierte Programme -- unterstützt wird, müssen wir sie eben von Hand kompilieren.

Ocsync selbst hängt auch wieder von einigen Dingen ab, die wir zunächst händisch installieren:

  • Cmake:

    $ toast arm cmake
    
  • Neon, mit SSL-Unterstützung (Wichtig):

    $ toast arm neon --confappend=--with-ssl
    
  • Iniparser:
    Hier gibt das Makefile leider keine Installationsanweisungen her, so dass wir die Bibliothek nach dem Kompilieren einfach an einen beliebigen Ort verschieben, den wir uns merken können. Ich nehme dazu das Verzeichnis ~/.toast/selbstgebaut_ohne_toast/lib, so habe ich alle selbst installierten Programme an einem Ort. Die Includedateien schieben wir entsprechend in so ein Verzeichnis wie ~/.toast/selbstgebaut_ohne_toast/include/.

    $ wget http://ndevilla.free.fr/iniparser/iniparser-3.1.tar.gz
    $ tar xf iniparser-3.1.tar.gz 
    $ cd iniparser
    $ mkdir -p ~/.toast/selbstgebaut_ohne_toast/lib
    $ cp libiniparser.so.0 ~/.toast/selbstgebaut_ohne_toast/lib/
    $ mkdir -p ~/.toast/selbstgebaut_ohne_toast/include
    $ cp src/*.h ~/.toast/selbstgebaut_ohne_toast/include/
    

Nun machen wir uns daran, die libocsync zu kompilieren. Dabei müssen wir genau angeben, wo die Iniparser-Lib zu finden ist, damit wir keinen Kompilierabbruch bekommen.

$ wget http://download.owncloud.com/desktop/stable/ocsync-0.90.4.tar.bz2
$ tar xf ocsync-0.90.4.tar.bz2
$ cd ocsync-0.90.4/build

$ cmake -DCMAKE_BUILD_TYPE=Debug -DINIPARSER_INCLUDE_DIRS=~/.toast/selbstgebaut_ohne_toast/include -DINIPARSER_LIBRARIES=~/.toast/selbstgebaut_ohne_toast/lib/libiniparser.so.0 -DCMAKE_INSTALL_PREFIX:PATH=~/.toast/selbstgebaut_ohne_toast/ ..

$ make
$ make install

Step 2: pyOwncloud anpassen und installieren

Ich verwende hier im Beispiel als Quelle direkt das Github Repository, nehme mir daraus aber für die Anleitung den stabilen Zweig. Da der Client gerade rasend schnell entwickelt wird, ist es -- wenn Ihr wisst, was Ihr tut -- sicher vertretbar, den master-Zweig stattdessen zu nehmen.

$ git clone https://github.com/csawyerYumaed/pyOwnCloud.git
$ cd pyOwncloud
$ git checkout 0.3.x

Wir wechseln nun in das Unterverzeichnis csync und ändern dort in der Datei csynclib.py jedes Vorkommen von /usr/lib/libocsync.so.0 entsprechend unserer Verschiebung von vorher in /home/<$USER>/.toast/selbstgebaut_ohne_toast/lib/libocsync.so.0 um. In neueren Versionen ist die Datei eine andere: csync/csynclib/pre.py.

Wieder zurück im Git-Arbeitsverzeichnis installieren wir nun den Client:

python setup.py install

Damit der dadurch verfügbar gemachte Befehl oclient nachher funktioniert, müssen wir noch schnell ein Python-Modul nachinstallieren:

pip install argparse

Voilá, Ihr habt den Client erfolgreich installiert!

Step 3: Pfadanpassung und Konfiguration

Wenn der Client jetzt mit oclient aufgerufen wird, werdet Ihr feststellen, dass er sich über die fehlende Bibliothek iniparser.so.0 beschwert. Um dies zu vermeiden muss per Umgebungsvariable noch definiert werden, wo zusätzlich installierte gemeinsame Bibliotheken gefunden werden können. Am sinnvollsten wird diese Umgebungsvariable direkt in der Konfigurationsdatei eurer Uberspace-Shell (bspw. .zshrc oder .bashrc) exportiert:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/blank/.toast/selbstgebaut_ohne_toast/lib

Anschließend kann, wie in der Doku von pyOwncloud gezeigt, das Kommando oclient mit seinen Parametern benutzt werden.

Da zum Betrieb ein Klartextpasswort verwendet wird, sollte zur Sicherheit für den Serverclient ein eigenes Benutzerkonto bei Owncloud angelegt werden, das keine Rechte besonderer Art hat und nur auf die gewünschten Ordner Zugriff hat. Meine Beispielkonfiguration in ~/.local/share/data/ownCloud/owncloud.cfg sieht bspw. so ähnlich aus wie hier:

user=uberspace
pass=supersecretpassword
url=https://pfad.zu.eurer/owncloud
sslfingerprint=
src=~/ownCloud_servershare
dst=RandomDirectoryName

Step 4: Ausführung als Cronjob

Damit die Synchronisation regelmäßig stattfindet, kann ein Cronjob eingerichtet werden. Wie das geht, kann der Doku im Uberspace-Wiki entnommen werden. Zu beachten ist lediglich, dass die entsprechenden Umgebungsvariablen vor dem Cronjob angegeben werden, sonst wirft der Cron-Daemon direkt wieder Abbruchfehlermeldungen.

Meine Crontab für die Owncloud-Synchronisierung sieht daher so aus:

PATH=/home/<$USER>/bin
LD_LIBRARY_PATH=/home/<$USER>/.toast/selbstgebaut_ohne_toast/lib
MAILTO=""
*/5 * * * * /home/<$USER>/bin/oclient

Das soll es erstmal gewesen sein. Ich hoffe, dass ich dem ein oder anderen mit der Anleitung Freude machen konnte.

This article is my 3rd oldest. It is 875 words long