Klien Dropbox Single Line saya untuk Linux

Saya ingin berbicara tentang upaya saya untuk membuat klien Dropbox single-line sederhana untuk Linux hanya menggunakan komponen open source gratis, termasuk rclone , entr dan systemd .

Konteks


Baru-baru ini, klien Dropbox yang dipatenkan untuk Linux telah menjatuhkan dukungan untuk semua sistem file Linux kecuali ext4 yang tidak dienkripsi . Dan direktori home saya, sayangnya, dienkripsi.

Pada awal Desember, klien berpemilik berhenti bekerja. Dia logout dan menyarankan untuk memilih folder sinkronisasi lain di "sistem file yang didukung".

Ngomong-ngomong, saya menjalankan Ubuntu Bionic pada Thinkpad t460s dua tahun.

Mengapa saya perlu Dropbox?


Saya aktif menggunakan mode Org : Saya membuat catatan dalam teks biasa, dan Dropbox terus menerus membuat salinan cadangan catatan saat mengetik.

Jika Anda juga bekerja di bidang infrastruktur penyimpanan, use case saya sangat mirip dengan "replikasi asinkron tunggal-master", yaitu, dengan satu master. Semua entri masuk ke Thinkpad saya, ini masternya. Folder jarak jauh Dropbox hanyalah replika hanya-baca, yang kadang-kadang saya "ajukan permintaan baca-saja" atau gunakan sebagai cadangan untuk membuat wisaya baru ketika yang sekarang gagal atau dicuri.

Namun, pengaturan replikasi ini menyelamatkan hidup saya beberapa kali. Saya masih memiliki di depan mata saya bagaimana Thinkpad menolak untuk boot selama sesi tahun kedua. Karena saya terus-menerus mereplikasi semua catatan di Dropbox, saya tidak kehilangan data apa pun dan dapat melihat catatan terbaru di Macbook ibuku. Terima kasih bu!

Usaha yang gagal


Ketika klien Dropbox berhenti bekerja, saya fokus mencari klien jarak jauh multifungsi serupa lainnya untuk Linux. Pada prinsipnya, saya tidak keberatan beralih ke layanan lain, seperti Google Drive atau AWS S3. Beberapa opsi adalah OverGrive dan insync .

Namun, saya sampai pada kesimpulan bahwa solusi ini terlalu fungsional dan tidak terlalu cocok untuk kasus saya .

Sebagai contoh, klien mencoba menghubungkan sistem file jarak jauh ke PC Anda . Mereka berusaha sangat keras untuk abstrak sistem file jarak jauh, membuatnya terlihat seperti yang lokal. Sebagai aturan, mereka menerapkan sinkronisasi dua arah, pemetaan otomatis tipe file jarak jauh ke tipe file Linux, dll.

Saya tidak membutuhkan tingkat abstraksi ini. Sesuatu yang sederhana diperlukan untuk terus-menerus mencadangkan catatan di cloud saat saya mengetik. Selain itu, abstraksi membuat penyetelan dan debug sulit. Belum lagi bahwa sebagian besar klien multi-fungsional adalah milik.

rclone


Saya rclone utilitas rclone , dan saya segera menyadari: inilah yang saya cari. Program sederhana namun kuat. Sangat mirip dengan alat rsync , hanya untuk penyimpanan cloud.

Misalnya, rclone menangani toleransi kesalahan (pengecekan integritas), memiliki algoritma sinkronisasi yang efisien, dan sebagainya, sambil menyediakan antarmuka CRUD sederhana untuk berinteraksi dengan layanan penyimpanan cloud populer, termasuk Amazon S3, Google Drive, dan Dropbox.

Perintah berikut menyinkronkan direktori org jauh dengan direktori lokal /home/lpan/org .

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

entr


Utilitas untuk menjalankan perintah entr menggunakan API inotify . Pada dasarnya, ini menjalankan perintah ketika mengubah file tanpa polling sistem file.

Satu kasus penggunaan umum adalah membangun kembali sebuah proyek jika salah satu file sumber telah berubah .

entr mengambil daftar path absolut dari stdin dan kemudian mengeksekusi perintah yang dilewati sebagai argumen jika ada file yang diamati telah berubah.

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

Skrip baris tunggal


Sekarang kita memiliki rclone dan entr . Script yang dihasilkan sangat sederhana. Biarkan saya mengingatkan Anda bahwa kasus penggunaan saya untuk Dropbox sangat sederhana: Anda hanya perlu terus-menerus mereplikasi file Org lokal ketika mereka berubah. Oleh karena itu, Anda dapat menggunakan entr untuk memantau file dan rclone untuk "menyinkronkan" dengan penyimpanan jarak jauh.

Script yang dihasilkan ( /home/lpan/sync_dropbox.sh ) adalah sebagai berikut:

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

Jalankan daemon


Daemon hanyalah sebuah program komputer yang berjalan di latar belakang. Kami menjadikan skrip kami sebagai proses latar belakang sehingga skrip ini secara konstan mensinkronkan perubahan file lokal di latar belakang dengan sistem file jarak jauh.

systemd menyediakan antarmuka untuk mengendalikan proses daemon.

Saya membuat Layanan Dropbox di ~/.config/systemd/user/dropbox.service .

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

Anda kemudian dapat mengontrol daemon menggunakan perintah berikut:

 # 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 

Kesimpulan


Dalam artikel ini, kami membahas cara menerapkan filosofi UNIX dan menggunakan seperangkat alat sumber terbuka gratis untuk menggantikan klien Dropbox yang eksklusif dan lama. Kami menggunakan rclone dan entr . Saya juga menunjukkan bagaimana membuat proses ini menjadi daemon dan mengelolanya dengan systemd .

Saya ingin mengingatkan Anda bahwa ide utamanya adalah kesederhanaan. Kami menginginkan solusi sederhana untuk tugas-tugas sederhana. Kasing kasus saya untuk Dropbox sangat sederhana. Dan itu sebabnya skrip satu baris lebih baik daripada menggunakan klien cloud yang terlalu fungsional dan eksklusif.

Terima kasih banyak sudah membaca! Saya sangat berharap Anda menikmati posting ini. Jika Anda tahu cara terbaik untuk melakukan hal yang sama atau memperluas skrip untuk kasus penggunaan lain - beri tahu saya di komentar!

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


All Articles