Mein Single Line Dropbox Client für Linux

Ich möchte über meinen Versuch sprechen, einen einfachen einzeiligen Dropbox-Client für Linux zu erstellen, der nur kostenlose Open-Source-Komponenten wie rclone , entr und systemd verwendet .

Kontext


Vor kurzem hat der proprietäre Dropbox-Client für Linux die Unterstützung für alle Linux-Dateisysteme außer unverschlüsseltem ext4 eingestellt . Und mein Home-Verzeichnis ist leider verschlüsselt.

Anfang Dezember hörte der proprietäre Client auf zu arbeiten. Er loggte sich aus und schlug vor, einen anderen Synchronisationsordner im „unterstützten Dateisystem“ auszuwählen.

Ich verwende übrigens Ubuntu Bionic auf dem zweijährigen Thinkpad t460s.

Warum brauche ich Dropbox?


Ich verwende aktiv den Org-Modus : Ich mache Notizen im Klartext und Dropbox erstellt während der Eingabe kontinuierlich Sicherungskopien von Notizen.

Wenn Sie auch im Bereich der Speicherinfrastruktur arbeiten, ist mein Anwendungsfall der „asynchronen Single-Master-Replikation“ sehr ähnlich, dh mit einem Master. Alle Einträge gehen über mein Thinkpad, dies ist der Master. Der Dropbox-Remoteordner ist nur eine schreibgeschützte Replik, die ich manchmal schreibgeschützt ausstelle oder als Backup verwende, um einen neuen Assistenten zu erstellen, wenn der aktuelle fehlschlägt oder gestohlen wird.

Dieses Replikations-Setup hat mir jedoch mehrmals das Leben gerettet. Ich habe immer noch vor Augen, wie sich das Thinkpad während der Sitzung im zweiten Jahr geweigert hat, zu booten. Da ich ständig alle Notizen in Dropbox replizierte, verlor ich keine Daten und konnte die neuesten Notizen auf dem Macbook meiner Mutter anzeigen. Danke Mama!

Erfolglose Versuche


Als der Dropbox-Client nicht mehr funktionierte, konzentrierte ich mich darauf, nach einem anderen ähnlichen multifunktionalen Remote-Client für Linux zu suchen. Im Prinzip macht es mir nichts aus, zu einem anderen Dienst wie Google Drive oder AWS S3 zu wechseln. Einige der Optionen sind overGrive und Insync .

Ich bin jedoch zu dem Schluss gekommen, dass diese Lösungen zu funktional und für meinen Fall nicht sehr geeignet sind .

Clients versuchen beispielsweise, ein Remote-Dateisystem mit Ihrem PC zu verbinden . Sie sind sehr bemüht, entfernte Dateisysteme zu abstrahieren, sodass sie wie lokale aussehen. In der Regel implementieren sie eine bidirektionale Synchronisation, eine automatische Zuordnung von Remote-Dateitypen zu Linux-Dateitypen usw.

Ich brauche diese Abstraktionsebene nicht. Es ist etwas Einfaches erforderlich, um während des Tippens ständig Notizen in der Cloud zu sichern. Darüber hinaus erschweren Abstraktionen das Optimieren und Debuggen. Ganz zu schweigen davon, dass die meisten dieser multifunktionalen Clients proprietär sind.

rclone


Ich bin rclone Dienstprogramm rclone und habe sofort gemerkt: Genau das habe ich gesucht. Ein einfaches aber leistungsstarkes Programm. Sehr ähnlich dem rsync Tool, nur für Cloud-Speicher.

Beispielsweise kümmert sich rclone um Fehlertoleranz (Integritätsprüfung), verfügt über effiziente Synchronisationsalgorithmen usw. und bietet eine einfache CRUD-Schnittstelle für die Interaktion mit gängigen Cloud-Speicherdiensten wie Amazon S3, Google Drive und Dropbox.

Der folgende Befehl synchronisiert das Remote- /home/lpan/org mit dem lokalen Verzeichnis /home/lpan/org .

 ORG_DIR=/home/lpan/org REMOTE=dropbox rclone sync $ORG_DIR $REMOTE:org 

entr


Das Dienstprogramm zum Ausführen von entr- Befehlen verwendet die inotify- API. Im Wesentlichen werden Befehle ausgeführt, wenn Dateien geändert werden, ohne das Dateisystem abzufragen.

Ein häufiger Anwendungsfall ist das Neuerstellen eines Projekts, wenn sich eine der Quelldateien geändert hat .

entr nimmt eine Liste der absoluten Pfade von stdin und führt dann den als Argument übergebenen Befehl aus, wenn sich eine der beobachteten Dateien geändert hat.

 WORKDIR=/path/to/myproject find $WORKDIR | grep "\.cpp$" | entr make 

Einzeiliges Skript


Jetzt haben wir rclone und entr . Das resultierende Skript ist sehr einfach. Ich möchte Sie daran erinnern, dass mein Anwendungsfall für Dropbox sehr einfach ist: Sie müssen lokale Org-Dateien nur dann ständig replizieren, wenn sie sich ändern. Daher können Sie mit entr Dateien überwachen und mit rclone mit dem rclone synchronisieren.

Das resultierende Skript ( /home/lpan/sync_dropbox.sh ) lautet wie folgt:

 #!/bin/bash ORG_DIR=/home/lpan/org REMOTE=dropbox find $ORG_DIR | entr -r rclone sync -v $ORG_DIR $REMOTE:org 

Führen Sie den Daemon aus


Ein Daemon ist nur ein Computerprogramm, das im Hintergrund ausgeführt wird. Wir machen unser Skript zu einem Hintergrundprozess, damit es lokale Dateiänderungen im Hintergrund ständig mit dem Remote-Dateisystem synchronisiert.

systemd bietet eine Schnittstelle zur Steuerung von Daemon-Prozessen.

Ich habe den Dropbox-Dienst in ~/.config/systemd/user/dropbox.service .

 [Unit] Description=Dropbox Daemon [Service] ExecStart=/home/lpan/sync_dropbox.sh Restart=always [Install] WantedBy=default.target 

Sie können den Dämon dann mit den folgenden Befehlen steuern:

 # reload the service file systemctl --user daemon-reload # start the daemon systemctl --user start dropbox.service # start the daemon on login systemctl --user enable dropbox.service # inspect the status of the daemon systemctl --user status dropbox.service 

Fazit


In diesem Artikel haben wir erläutert, wie Sie die UNIX-Philosophie anwenden und eine Reihe kostenloser Open Source-Tools verwenden, um den proprietären und älteren Dropbox-Client zu ersetzen. Wir haben rclone und entr . Ich habe auch gezeigt, wie man diesen Prozess zu einem Daemon macht und ihn mit systemd .

Ich möchte Sie daran erinnern, dass die Schlüsselidee die Einfachheit ist. Wir wollen einfache Lösungen für einfache Aufgaben. Mein Anwendungsfall für Dropbox ist sehr einfach. Aus diesem Grund ist ein einzeiliges Skript besser als die Verwendung eines übermäßig funktionalen und proprietären Cloud-Clients.

Vielen Dank fürs Lesen! Ich hoffe wirklich, dass Ihnen dieser Beitrag gefällt. Wenn Sie wissen, wie Sie dasselbe am besten tun oder das Skript für einen anderen Anwendungsfall erweitern können, lassen Sie es mich in den Kommentaren wissen!

Source: https://habr.com/ru/post/de434460/


All Articles