BitPocket: DIY Dropbox auf rsync-basis

So. Damals bin ich von Dropbox zu ownCloud gewechselt weil ich einfach ne selfhosted Lösung wollte. Heute mache ich ownCloud komplett platt, weil die dazugehörige Android-App und der Desktop Client nen schlechter Witz sind. Die App synchronisiert Files die sie selbstständig aktuell halten soll - wenn überhaupt - erst wenn sie geöffnet wird und der csync-basierte Desktop Client liebt es einfach conflict Files anzulegen und somit meinen Speicherplatz zu verschwenden. Wenn er denn überhaupt mal arbeitet und sich nich mit ner Fehlermeldung in den Urlaub verabschiedet..

Vergangenen November habe ich zwar einen eigenen git-basierten Ansatz verfolgt, diesen wegen seinem Speicherverbrauch allerdings schnell wieder verworfen. 3,8GB Repo-Größe bei 1,9GB Daten is einfach zu viel.

Gestern stieß ich dann auf BitPocket. BitPocket basiert komplett auf rsync, legt selbstständig Revisionen an und bietet zudem die Möglichkeit, die angelegten Revisionen in ein Git-Repository zu packen. Dropbox ohne Oberfläche quasi, dafür Open Source :)

Die Einrichtung ist kinderleicht. Serverseitig muss lediglich ein Verzeichnis angelegt werden (mkdir ~/BitPocketMaster). Clientseitig benötigt man lediglich das Script bitpocket und muss ein paar Befehle ausführen.

curl https://raw.github.com/sickill/bitpocket/master/bin/bitpocket > ~/bin/bitpocket
chmod +x ~/bin/bitpocket
# (für ArchLinux User würde sich alternativ <em>yaourt -S <a href="https://aur.archlinux.org/packages/bitpocket-git/"  >bitpocket-git</a></em> anbieten)
<!--more-->$ mkdir ~/BitPocket
$ cd ~/BitPocket
$ bitpocket init user@example.org ~/BitPocketMaster

Anschließend sollte man sich noch um die Synchronisierung kümmern. Entweder startet man sie jedes Mal manuell mittels bitpocket, oder man richtet einen Cronjob ein, der bitpocket cron regelmäßig ausführt.

Ich habe mich für eine Synchronisierung im Fünfminutentakt (*/5 * * * * cd ~/BitPocket && nice -n19 bitpocket cron) entschieden. Nachteil hier: Meinen Passwort-geschützten SSH-Key kann ich dafür nicht verwenden. Also musste ich eigens für BitPocket einen eigenen, passwortlosen SSH-Key einrichten.

$ cd ~/BitPocket/.bitpocket
$ ssh-keygen -t rsa -C bitpocket@`hostname` -N '' -f id_rsa
$ ssh-copy-id -i id_rsa user@example.org

Anschließend in der config noch die Zeile RSYNC_SSH von der voranstehenden Raute (#) befreien und BitPocket nutzt seinen eigenen SSH-Key.

Kleiner Tipp: SSH-Keys lassen sich auf Befehle beschränken. Sieht bei mir in etwa so aus:

command="rsync --server --sender ....." ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAB...
Den genauen Inhalt für command liefert euch ein _ps ux grep rsync_ auf dem Server, während der Sync läuft. Wenn alles korrekt eingetragen ist, kann der SSH-Key nur noch für rsync verwendet werden und das is auch gut so

Wenn ich was vergessen haben sollte oder noch Fragen offen sind, einfach melden :)