Cliente Dropbox de linha única para Linux

Quero falar sobre minha tentativa de criar um cliente Dropbox simples de linha única para Linux usando apenas componentes de código aberto gratuitos, incluindo rclone , entr e systemd .

Contexto


Recentemente, o cliente proprietário do Dropbox para Linux reduziu o suporte a todos os sistemas de arquivos Linux, exceto ext4 não criptografado . E meu diretório pessoal, infelizmente, está criptografado.

No início de dezembro, o cliente proprietário parou de funcionar. Ele fez logout e sugeriu a escolha de uma pasta de sincronização diferente no "sistema de arquivos suportado".

A propósito, estou executando o Ubuntu Bionic no Thinkpad t460s de dois anos.

Por que preciso do Dropbox


Uso ativamente o modo Org : tomo notas em texto sem formatação e o Dropbox cria continuamente cópias de backup das notas enquanto digito.

Se você também trabalha no campo da infraestrutura de armazenamento, meu caso de uso é muito semelhante à "replicação assíncrona de mestre único", ou seja, com um mestre. Todas as entradas passam pelo meu Thinkpad, este é o mestre. A pasta remota do Dropbox é apenas uma réplica somente leitura, que às vezes “emito solicitações somente leitura” ou uso como backup para criar um novo assistente quando o atual falha ou é roubado.

No entanto, essa configuração de replicação salvou minha vida várias vezes. Ainda tenho diante de meus olhos como o Thinkpad se recusou a inicializar durante o segundo ano de sessão. Como eu constantemente repliquei todas as notas no Dropbox, não perdi nenhum dado e pude ver as últimas notas no Macbook da minha mãe. Obrigado mãe!

Tentativas malsucedidas


Quando o cliente Dropbox parou de funcionar, eu me concentrei em procurar outro cliente remoto multifuncional semelhante para Linux. Em princípio, não me importo de mudar para outro serviço, como o Google Drive ou o AWS S3. Algumas das opções são overGrive e insync .

No entanto, cheguei à conclusão de que essas soluções são funcionais demais e não muito adequadas para o meu caso .

Por exemplo, os clientes tentam conectar um sistema de arquivos remoto ao seu PC . Eles tentam muito abstrair os sistemas de arquivos remotos, fazendo com que pareçam os locais. Como regra, eles implementam sincronização bidirecional, mapeamento automático de tipos de arquivos remotos para tipos de arquivos Linux, etc.

Eu não preciso desse nível de abstração. É necessário algo simples para fazer backup constante das anotações na nuvem enquanto digito. Além disso, as abstrações dificultam o ajuste e a depuração. Sem mencionar que a maioria desses clientes multifuncionais é proprietária.

rclone


Encontrei rclone utilitário rclone e percebi imediatamente: era exatamente isso que estava procurando. Um programa simples, mas poderoso. Muito semelhante à ferramenta rsync , apenas para armazenamento em nuvem.

Por exemplo, o rclone cuida da tolerância a falhas (verificação de integridade), possui algoritmos de sincronização eficientes e assim por diante, fornecendo uma interface CRUD simples para interagir com os serviços populares de armazenamento em nuvem, incluindo Amazon S3, Google Drive e Dropbox.

O comando a seguir sincroniza o diretório org remoto com o diretório local /home/lpan/org .

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

entr


O utilitário para executar comandos entr usa a API inotify . Essencialmente, ele executa comandos ao alterar arquivos sem consultar o sistema de arquivos.

Um caso de uso comum é reconstruir um projeto se um dos arquivos de origem tiver sido alterado .

entr pega uma lista de caminhos absolutos do stdin e executa o comando passado como argumento se algum dos arquivos observados foi alterado.

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

Script de linha única


Agora temos rclone e entr . O script resultante é muito simples. Deixe-me lembrá-lo de que meu caso de uso do Dropbox é muito simples: você só precisa replicar constantemente os arquivos locais da organização quando eles mudam. Portanto, você pode usar entr para monitorar arquivos e rclone para “sincronizar” com o armazenamento remoto.

O script resultante ( /home/lpan/sync_dropbox.sh ) é o seguinte:

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

Execute o daemon


Um daemon é apenas um programa de computador executado em segundo plano. Tornamos nosso script um processo em segundo plano, para que ele sincronize constantemente as alterações de arquivos locais em segundo plano com o sistema de arquivos remoto.

O systemd fornece uma interface para controlar os processos do daemon.

Criei o Serviço Dropbox em ~/.config/systemd/user/dropbox.service .

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

Você pode controlar o daemon usando os seguintes 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 

Conclusão


Neste artigo, discutimos como aplicar a filosofia UNIX e usar um conjunto de ferramentas gratuitas de código aberto para substituir o cliente Dropbox proprietário e legado. Usamos rclone e entr . Também mostrei como tornar esse processo um daemon e gerenciá-lo com o systemd .

Quero lembrá-lo de que a idéia principal é a simplicidade. Queremos soluções simples para tarefas simples. Meu caso de uso para o Dropbox é muito simples. E é por isso que um script de uma linha é melhor do que usar um cliente em nuvem excessivamente funcional e proprietário.

Muito obrigado pela leitura! Eu realmente espero que você goste deste post. Se você souber a melhor maneira de fazer o mesmo ou estender o script para outro caso de uso, informe-me nos comentários!

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


All Articles