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