Mon client Dropbox à ligne unique pour Linux

Je veux parler de ma tentative de créer un client Dropbox simple ligne pour Linux en utilisant uniquement des composants open source gratuits, y compris rclone , entr et systemd .

Contexte


Récemment, le client propriétaire Dropbox pour Linux a supprimé la prise en charge de tous les systèmes de fichiers Linux sauf ext4 non chiffré . Et mon répertoire personnel est malheureusement crypté.

Début décembre, le client propriétaire a cessé de fonctionner. Il s'est déconnecté et a suggéré de choisir un autre dossier de synchronisation dans le «système de fichiers pris en charge».

Soit dit en passant, j'utilise Ubuntu Bionic sur le Thinkpad t460s de deux ans.

Pourquoi ai-je besoin de Dropbox


J'utilise activement le mode Org : je prends des notes en texte brut et Dropbox crée continuellement des copies de sauvegarde des notes tout en tapant.

Si vous travaillez également dans le domaine des infrastructures de stockage, mon cas d'utilisation est très similaire à la «réplication asynchrone à maître unique», c'est-à-dire avec un maître. Toutes les entrées passent par mon Thinkpad, c'est le maître. Le dossier distant Dropbox n'est qu'une réplique en lecture seule, que j'émets parfois des demandes en lecture seule ou que j'utilise comme sauvegarde pour créer un nouvel assistant lorsque l'actuel échoue ou est volé.

Cependant, cette configuration de réplication m'a sauvé la vie plusieurs fois. J'ai encore sous les yeux comment le Thinkpad a refusé de démarrer lors de la session de deuxième année. Comme j'ai constamment répliqué toutes les notes dans Dropbox, je n'ai perdu aucune donnée et j'ai pu voir les dernières notes sur le Macbook de ma mère. Merci maman!

Tentatives infructueuses


Lorsque le client Dropbox a cessé de fonctionner, je me suis concentré sur la recherche d'un autre client distant multifonctionnel similaire pour Linux. En principe, cela ne me dérange pas de passer à un autre service, tel que Google Drive ou AWS S3. Certaines des options sont overGrive et insync .

Cependant, je suis arrivé à la conclusion que ces solutions sont trop fonctionnelles et peu adaptées à mon cas .

Par exemple, les clients essaient de connecter un système de fichiers distant à votre PC . Ils essaient très fort d'abstraire les systèmes de fichiers distants, les faisant ressembler à des systèmes locaux. En règle générale, ils implémentent la synchronisation bidirectionnelle, le mappage automatique des types de fichiers distants vers les types de fichiers Linux, etc.

Je n'ai pas besoin de ce niveau d'abstraction. Quelque chose de simple est nécessaire pour sauvegarder constamment des notes dans le cloud pendant que je tape. De plus, les abstractions rendent difficile le réglage et le débogage. Sans oublier que la plupart de ces clients multifonctionnels sont propriétaires.

rclone


Je suis tombé rclone utilitaire rclone , et j'ai immédiatement réalisé: c'est exactement ce que je cherchais. Un programme simple mais puissant. Très similaire à l'outil rsync , uniquement pour le stockage dans le cloud.

Par exemple, rclone prend en charge la tolérance aux pannes (vérification d'intégrité), dispose d'algorithmes de synchronisation efficaces, etc., tout en fournissant une interface CRUD simple pour interagir avec les services de stockage cloud populaires, notamment Amazon S3, Google Drive et Dropbox.

La commande suivante synchronise le répertoire de l' org distante avec le répertoire local /home/lpan/org .

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

entr


L'utilitaire pour exécuter les commandes entr utilise l'API inotify . Essentiellement, il exécute des commandes lors de la modification de fichiers sans interroger le système de fichiers.

Un cas d'utilisation courant consiste à reconstruire un projet si l'un des fichiers source a changé .

entr prend une liste de chemins absolus depuis stdin puis exécute la commande passée en argument si l'un des fichiers observés a changé.

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

Script sur une seule ligne


Maintenant, nous avons rclone et entr . Le script résultant est très simple. Permettez-moi de vous rappeler que mon cas d'utilisation pour Dropbox est très simple: il vous suffit de répliquer en permanence les fichiers Org locaux lorsqu'ils changent. Par conséquent, vous pouvez utiliser entr pour surveiller les fichiers et rclone pour «synchroniser» avec le stockage distant.

Le script résultant ( /home/lpan/sync_dropbox.sh ) est le suivant:

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

Exécutez le démon


Un démon n'est qu'un programme informatique qui s'exécute en arrière-plan. Nous faisons de notre script un processus d'arrière-plan afin qu'il synchronise constamment les changements de fichiers locaux en arrière-plan avec le système de fichiers distant.

systemd fournit une interface pour contrôler les processus démon.

J'ai créé le service Dropbox dans ~/.config/systemd/user/dropbox.service .

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

Vous pouvez ensuite contrôler le démon à l'aide des commandes suivantes:

 # 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 

Conclusion


Dans cet article, nous avons expliqué comment appliquer la philosophie UNIX et utiliser un ensemble d'outils open source gratuits pour remplacer le client Dropbox propriétaire et hérité. Nous avons utilisé rclone et entr . J'ai également montré comment faire de ce processus un démon et le gérer avec systemd .

Je veux vous rappeler que l'idée clé est la simplicité. Nous voulons des solutions simples pour des tâches simples. Mon cas d'utilisation pour Dropbox est très simple. Et c'est pourquoi un script sur une ligne est préférable à l'utilisation d'un client cloud trop fonctionnel et propriétaire.

Merci beaucoup d'avoir lu! J'espère vraiment que vous apprécierez ce post. Si vous connaissez la meilleure façon de faire de même ou d'étendre le script pour un autre cas d'utilisation - faites le moi savoir dans les commentaires!

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


All Articles