My Single Line Dropbox Client para Linux

Quiero hablar sobre mi intento de crear un cliente simple de Dropbox de una sola línea para Linux usando solo componentes gratuitos de código abierto, incluidos rclone , entr y systemd .

Contexto


Recientemente, el cliente propietario de Dropbox para Linux ha dejado de admitir todos los sistemas de archivos de Linux, excepto ext4 sin cifrar . Y mi directorio personal, desafortunadamente, está encriptado.

A principios de diciembre, el cliente propietario dejó de funcionar. Se desconectó y sugirió elegir una carpeta de sincronización diferente en el "sistema de archivos compatible".

Por cierto, estoy ejecutando Ubuntu Bionic en el Thinkpad t460s de dos años.

¿Por qué necesito Dropbox?


Uso activamente el modo Org : tomo notas en texto plano y Dropbox crea continuamente copias de seguridad de las notas mientras escribo.

Si también trabaja en el campo de la infraestructura de almacenamiento, mi caso de uso es muy similar a la "replicación asincrónica de maestro único", es decir, con un maestro. Todas las entradas pasan por mi Thinkpad, este es el maestro. La carpeta remota de Dropbox es solo una réplica de solo lectura, que a veces “emito solicitudes de solo lectura” o la uso como respaldo para crear un nuevo asistente cuando el actual falla o es robado.

Sin embargo, esta configuración de replicación me salvó la vida varias veces. Todavía tengo ante mis ojos cómo el Thinkpad se negó a arrancar durante la sesión del segundo año. Como constantemente replicaba todas las notas en Dropbox, no perdí ningún dato y pude ver las últimas notas en el Macbook de mi madre. Gracias mamá!

Intentos fallidos


Cuando el cliente de Dropbox dejó de funcionar, me concentré en buscar otro cliente remoto multifuncional similar para Linux. En principio, no me importa cambiar a otro servicio, como Google Drive o AWS S3. Algunas de las opciones son overGrive e insync .

Sin embargo, llegué a la conclusión de que estas soluciones son demasiado funcionales y no muy adecuadas para mi caso .

Por ejemplo, los clientes intentan conectar un sistema de archivos remoto a su PC . Se esfuerzan mucho por abstraer los sistemas de archivos remotos, haciéndolos parecer locales. Como regla, implementan sincronización bidireccional, asignación automática de tipos de archivos remotos a tipos de archivos de Linux, etc.

No necesito este nivel de abstracción. Se necesita algo simple para realizar copias de seguridad constantemente en la nube mientras escribo. Además, las abstracciones dificultan el ajuste y la depuración. Sin mencionar que la mayoría de estos clientes multifuncionales son propietarios.

rclone


Encontré rclone utilidad rclone e inmediatamente me di cuenta: esto es exactamente lo que estaba buscando. Un programa simple pero poderoso. Muy similar a la herramienta rsync , solo para almacenamiento en la nube.

Por ejemplo, rclone se encarga de la tolerancia a fallas (verificación de integridad), tiene algoritmos de sincronización eficientes, y así sucesivamente, al tiempo que proporciona una interfaz CRUD simple para interactuar con los servicios populares de almacenamiento en la nube, incluidos Amazon S3, Google Drive y Dropbox.

El siguiente comando sincroniza el directorio de org remota con el directorio local /home/lpan/org .

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

entr


La utilidad para ejecutar comandos entr usa la API inotify . Esencialmente, ejecuta comandos al cambiar archivos sin sondear el sistema de archivos.

Un caso de uso común es reconstruir un proyecto si uno de los archivos de origen ha cambiado .

entr toma una lista de rutas absolutas desde stdin y luego ejecuta el comando pasado como argumento si alguno de los archivos observados ha cambiado.

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

Guión de línea única


Ahora tenemos rclone y rclone . El guión resultante es muy simple. Permítame recordarle que mi caso de uso para Dropbox es muy simple: solo necesita replicar constantemente los archivos Org locales cuando cambian. Por lo tanto, puede usar entr para monitorear archivos y rclone para "sincronizar" con el almacenamiento remoto.

El script resultante ( /home/lpan/sync_dropbox.sh ) es el siguiente:

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

Ejecuta el demonio


Un demonio es solo un programa de computadora que se ejecuta en segundo plano. Hacemos que nuestro script sea un proceso en segundo plano para que sincronice constantemente los cambios de archivos locales en segundo plano con el sistema de archivos remoto.

systemd proporciona una interfaz para controlar los procesos de daemon.

~/.config/systemd/user/dropbox.service servicio de Dropbox en ~/.config/systemd/user/dropbox.service .

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

Luego puedes controlar el demonio usando los siguientes comandos:

 # 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 

Conclusión


En este artículo, discutimos cómo aplicar la filosofía UNIX y utilizar un conjunto de herramientas gratuitas de código abierto para reemplazar el cliente de Dropbox propietario y heredado. Utilizamos rclone y rclone . También mostré cómo hacer que este proceso sea un demonio y administrarlo con systemd .

Quiero recordarles que la idea clave es la simplicidad. Queremos soluciones simples para tareas simples. Mi caso de uso para Dropbox es muy simple. Y es por eso que un script de una línea es mejor que usar un cliente en la nube excesivamente funcional y patentado.

Muchas gracias por leer! Realmente espero que disfrutes esta publicación. Si conoce la mejor manera de hacer lo mismo o extender el script para otro caso de uso, ¡hágamelo saber en los comentarios!

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


All Articles