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:
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:
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!