コンテキスト
最近、Linux専用のDropboxクライアントは、 暗号化されていないext4を除くすべてのLinuxファイルシステムのサポートを終了しました。 そして残念ながら、私のホームディレクトリは暗号化されています。
12月上旬、プロプライエタリクライアントは動作しなくなりました。 彼はログアウトし、「サポートされているファイルシステム」で別の同期フォルダーを選択することを提案しました。
ちなみに、2年間のThinkpad t460でUbuntu Bionicを実行しています。
Dropboxが必要な理由
Orgモードを積極的に使用します 。プレーンテキストでメモを取り、Dropboxは入力中にメモのバックアップコピーを継続的に作成します。
ストレージインフラストラクチャの分野でも仕事をしている場合、私のユースケースは「単一マスター非同期レプリケーション」、つまり1つのマスターを使用する場合と非常に似ています。 すべてのエントリは私のThinkpadを通過します。これがマスターです。 Dropboxのリモートフォルダーは単なる読み取り専用のレプリカです。「読み取り専用の要求を発行する」こともあれば、現在のウィザードが失敗または盗難にあった場合にバックアップとして使用することもあります。
ただし、この複製セットアップは私の人生を数回救った。 Thinkpadが2年目のセッション中に起動を拒否した方法は、まだ目の前にあります。 Dropboxですべてのメモを常に複製しているため、データを失うことなく、お母さんのMacbookで最新のメモを表示することができました。 お母さんありがとう!
失敗した試行
Dropboxクライアントが機能しなくなったとき、Linux用の別の同様の多機能リモートクライアントを見つけることに集中しました。 原則として、GoogleドライブやAWS S3などの別のサービスに切り替えることは問題ありません。 一部のオプションはoverGriveとinsyncです。
しかし、これらのソリューションは機能的すぎて、私のケースにはあまり適していないという結論に達しました。
たとえば、クライアントはリモートファイルシステムをPCに接続しようとします 。 彼らはリモートファイルシステムを抽象化するために非常に懸命に努力し、ローカルファイルシステムのように見せます。 原則として、双方向の同期、リモートファイルタイプからLinuxファイルタイプへの自動マッピングなどを実装します。
このレベルの抽象化は必要ありません。 入力中にクラウド内のメモを常にバックアップできるシンプルなものが必要です。 さらに、抽象化により、チューニングとデバッグが困難になります。 これらの多機能クライアントのほとんどがプロプライエタリであることは言うまでもありません。
rclone
rclone
ユーティリティに
rclone
、すぐに気付きました。これがまさに私が探していたものです。 シンプルだが強力なプログラム。
rsync
ツールに非常に似ていますが、クラウドストレージ専用です。
たとえば、
rclone
はフォールトトレランス(整合性チェック)を処理し、効率的な同期アルゴリズムなどを備えていますが、Amazon S3、Googleドライブ、Dropboxなどの一般的なクラウドストレージサービスとやり取りするためのシンプルなCRUDインターフェイスを提供します 。
次のコマンドは、リモート
org
ディレクトリをローカルディレクトリ
/home/lpan/org
と同期します。
ORG_DIR=/home/lpan/org REMOTE=dropbox rclone sync $ORG_DIR $REMOTE:org
entr
entrコマンドを実行するユーティリティは、 inotify APIを使用します。 実際、ファイルシステムをポーリングせずにファイルを変更するときにコマンドを実行します。
一般的な使用例の1つは、ソースファイルのいずれかが変更された場合にプロジェクトを再構築することです。
entr
は
stdin
から絶対パスのリストを
stdin
、
stdin
ファイルのいずれかが変更された場合、引数として渡されたコマンドを実行します。
WORKDIR=/path/to/myproject find $WORKDIR | grep "\.cpp$" | entr make
単一行スクリプト
これで
rclone
と
rclone
が
rclone
。 結果のスクリプトは非常に簡単です。 Dropboxの私のユースケースは非常にシンプルであるということを思い出させてください。ローカルのOrgファイルが変更された場合、それらを常に複製するだけです。 したがって、
rclone
を使用してファイルを監視し、
rclone
を使用してリモートストレージと「同期」できます。
結果のスクリプト(
/home/lpan/sync_dropbox.sh
)は次のとおりです。
#!/bin/bash ORG_DIR=/home/lpan/org REMOTE=dropbox find $ORG_DIR | entr -r rclone sync -v $ORG_DIR $REMOTE:org
デーモンを実行する
デーモンは、バックグラウンドで実行される単なるコンピュータープログラムです。 スクリプトをバックグラウンドプロセスにして、バックグラウンドでのローカルファイルの変更をリモートファイルシステムと常に同期させるようにします。
systemdは、デーモンプロセスを制御するためのインターフェイスを提供します。
~/.config/systemd/user/dropbox.service
Dropboxサービスを作成しました。
[Unit] Description=Dropbox Daemon [Service] ExecStart=/home/lpan/sync_dropbox.sh Restart=always [Install] WantedBy=default.target
その後、次のコマンドを使用してデーモンを制御できます。
# 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
おわりに
この記事では、UNIXの哲学を適用し、無料のオープンソースツールのセットを使用して、プロプライエタリでレガシーなDropboxクライアントを置き換える方法について説明しました。
rclone
と
rclone
を使用し
rclone
。 このプロセスをデーモンにして
systemd
管理する方法も示しました。
重要なアイデアはシンプルであることを思い出させてください。 シンプルなタスクのためのシンプルなソリューションが必要です。 Dropboxの私の使用例は非常に簡単です。 そして、それが一行のスクリプトが過度に機能的で独自のクラウドクライアントを使用するよりも優れている理由です。
読んでくれてありがとう! この投稿をお楽しみください。 同じことを行う、または別のユースケースに合わせてスクリプトを拡張する最良の方法を知っている場合は、コメントでお知らせください!