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