Linux用の私の単一行Dropboxクライアント

rcloneentrsystemdなどの無料のオープンソースコンポーネントのみを使用して、Linux用のシンプルな単一行Dropboxクライアントを作成する試みについてお話したいと思います。



コンテキスト



最近、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などの別のサービスに切り替えることは問題ありません。 一部のオプションはoverGriveinsyncです。



しかし、これらのソリューションは機能的すぎて、私のケースにはあまり適していないという結論に達しました。



たとえば、クライアントはリモートファイルシステムを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の私の使用例は非常に簡単です。 そして、それが一行のスクリプトが過度に機能的で独自のクラウドクライアントを使用するよりも優れている理由です。



読んでくれてありがとう! この投稿をお楽しみください。 同じことを行う、または別のユースケースに合わせてスクリプトを拡張する最良の方法を知っている場合は、コメントでお知らせください!



All Articles