Linuxでsyncthingを使用して異なるデバイス間でファイルとディレクトリを同期させる方法
Syncthingは、継続的なファイル同期プログラムとして定義されます。異なるデバイスや「ノード」間でファイルやディレクトリを同期させるために使用できます。このアプリケーションはTLSを暗号化手段として使用し、そのプロトコルとともに、自由かつオープンソースのソフトウェアです。Syncthingを使用する際、私たちのデータは私たちのデバイス上に残り、中央サーバーに中継されることなく、宛先に直接転送されます(ピアツーピア)。このチュートリアルでは、Linux上でSyncthingをインストール、設定、および使用する方法を見ていきます。
このチュートリアルでは、あなたが学ぶことができることは:
- 最も使用されているLinuxディストリビューションにSyncthingをインストールする方法
- Syncthingが正しく動作するためのファイアウォールの設定方法
- 2つのデバイス間でディレクトリを共有し、同期を保つ方法
- ユーザーログイン時にSyncthingデーモンを自動的に起動する方法
ソフトウェア要件
インストール
私たちのお気に入りのLinuxディストリビューションにSyncthingをインストールする方法は基本的に2つあります:ネイティブリポジトリにパッケージされたバージョンを使用するか、公式のSyncthingウェブサイトからtarボールをダウンロードするかのいずれかです。さらに、DebianまたはUbuntuを使用する場合のみ、公式のSyncthingリポジトリを追加のソフトウェアソースとして追加し、そこからパッケージをインストールすることもできます。
ネイティブ版のインストール
Syncthingは、Fedora、Debian/Ubuntu、Archlinuxなどの使用頻度の高いLinuxディストリビューションのネイティブリポジトリに利用可能であり、お気に入りのパッケージマネージャーを使って簡単にインストールできます。これは常にソフトウェアを取得するのに推奨される方法です。唯一の問題は、特にDebianの「stable」のようなディストリビューションでは、リポジトリがパッケージの古いバージョンを含む可能性があることです。FedoraにSyncthingをインストールするには、dnfパッケージマネージャーを使用し、次のコマンドを実行します:
sudo dnf install syncthing
Debianおよびその多くの派生ディストリビューションでは、代わりに以下を実行できます:
sudo apt install syncthing
Archlinuxでは、pacmanを使用して「Community」リポジトリの一部であるsyncthingパッケージをインストールできます。ソフトウェアを取得するには、ターミナルエミュレーターを起動して次のコマンドを実行するだけです:
sudo pacman -Sy syncthing
タールボールをダウンロードしています
Syncthingのインストールの第二の方法は、公式サイトのダウンロードセクションから専用のLinuxタールボールをダウンロードすることです。私たちは、システムのアーキテクチャと互換性のあるバージョンを含むアーカイブをダウンロードする必要があります。DebianまたはUbuntuを使用している場合は、公式リポジトリをソフトウェアソースに追加し、その後aptを使用してインストールすることもできます。
ファイアウォールの設定
Syncthingを実行する前に、正しく動作させるために、特定のポートを通る着信トラフィックを許可するためのファイアウォールルールを設定する必要があります。最近のFirewalldおよびUfwファイアウォールマネージャのバージョンには、Syncthingのために事前に構成されたサービスが付属しています(ここで「サービス」という言葉は、定義されたルールのセットを意味します)。Firewalldを使用している場合、サービスをアクティブにして必要なポートを通るトラフィックを有効にするために、次のコマンドを実行する必要があります:
sudo firewall-cmd --permanent --add-service=syncthing && sudo firewall-cmd --reload
上記のコマンドでは、ゾーンが指定されていないため、サービスは「デフォルト」に追加されることに注意してください。特定のゾーンにサービスを追加したい場合は、--zoneオプションを指定し、ゾーン名を引数として渡す必要があります。サービスに関する情報を収集し、どのポートが含まれているかを確認するには、次のコマンドを実行できます:
sudo firewall-cmd --info-service=custom
上記のコマンドの出力は次の通りです:
syncthing
ports: 22000/tcp 21027/udp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
ご覧の通り、サービスに「関与している」ポートは 22000/tcp と 21027/udp です。Ufw(簡単なファイアウォール)を使用している場合、サービスを有効にするには以下のコマンドを実行する必要があります:
sudo ufw allow syncthing
Syncthingを使用して
Syncthingデーモンを開始するには、ターミナルからSyncthingバイナリを呼び出すだけです:
syncthing
Syncthingには、アプリケーションを管理したり、共有ディレクトリやリモートデバイスを追加したりするために使用できるWebインターフェースが付属しています。上記のコマンドを実行すると、Syncthingデーモンが起動し、自動的にWebブラウザのタブが127.0.0.1:8384アドレスに開かれます。ここがインターフェースにアクセスできる場所です。
デフォルトのSyncthing共有ディレクトリは~/Syncです。それと、同期すべき他のディレクトリはすべてインターフェースの左側の列に表示されます。代わりに右側の列には、Syncthingが実行されているデバイスに関する情報と、関連するリモートデバイスのリストが表示されます。この場合、リストはまだ空です:
Syncthingのウェブインターフェース
リモートマシンを追加し、それとディレクトリを共有するためには、デバイスIDを交換する必要があります。デバイスIDを確認するには、ウェブインターフェースの右上にある「アクション」ボタンをクリックし、「IDを表示」をクリックします。現在のデバイスIDと対応するQRコードが表示されます:
アプリケーションが正しく機能するためには、2台(またはそれ以上)のデバイスがそれぞれのIDを知っている必要があります。次のセクションでは、リモートデバイスを追加する方法を見ていきます。
デバイスを追加する
ディレクトリの同期を開始するには、設定にリモートデバイスを追加する必要があります。このチュートリアルのために、同期の「ソース」としてSyncthingをインストールしたLinuxマシンを使用し、リモートシステムとしてAndroidデバイスを使用します(SyncthingはGoogle Playストアから簡単にインストールできます); 両方のデバイスは同じLANに接続されている必要があります。
ウェブインターフェースの右下にある「リモートデバイスを追加」ボタンをクリックします。開くポップアップウィンドウの最初のタブに、コンパニオンデバイスIDと任意の人間に優しい名前を入力する必要があります:
ご覧のように、自己発見が正常に機能すれば、LAN内の他のSyncthingデバイスが自動的に発見され、「近くのデバイス」リストに表示されるはずです。こうした場合、私たちがする必要があるのは、該当するリンクをクリックするだけで、ID入力フィールドが自動的に埋められます。
2番目のタブ「共有」では、コンパニオンデバイスと共有したいディレクトリを選択できます。この場合、デフォルトのものを選択しました:
便利なことの一つは、「自動受け入れ」チェックボックスをチェックすることです。これにより、システムはリモートシステムが提供するディレクトリの同期を受け入れるかどうか確認するプロンプトを表示せず、自動的に作成します。
第三のタブには「高度な設定」が含まれています。ここでは、リモートデバイスに静的アドレスを入力することを選択できます。動的発見が機能しない場合に使用します。また、デバイスの送受信レート制限や、圧縮すべきデータ(すべてのデータ対メタデータのみ - デフォルト)を選択することもできます。
完了したら、「保存」ボタンをクリックできます。リモートデバイスはメインページのリストに表示されるはずです。別のデバイスでも同じ操作を行います(Androidアプリでは、「ハンバーガー」メニューをクリックすることでウェブインターフェースを使用するオプションがあります)し、「ソース」デバイスIDを追加します。二つのデバイスが正しくペアリングされると、そのステータスが同期し始めるはずです。同期プロセスが完了すると、それらは「最新の状態」として報告されます。
この時点で、私たちの(双方向)同期は準備が整い、ディレクトリは2つのデバイスで同期された状態に保たれます。
Syncthing デーモンを自動起動する
Syncthingデーモンを自動的に起動するには、LinuxのinitマネージャであるSystemdを使用できます。この場合、ユーザーごとのサービスとして起動するため、管理者権限は必要ありません。このようにサービスが設定されている場合、ユーザーがログインしたときにのみ起動されます。
最初に行いたいのは、systemdサービスファイルを適切なディレクトリにコピーすることです。LinuxディストリビューションのネイティブリポジトリからSyncthingをインストールした場合、そのファイルは/usr/lib/systemd/user/syncthing.serviceにあるはずです。公式のSyncthingサイトからtarボールをダウンロードした場合、ファイルはetc/linux-systemd/userディレクトリ内にあります。
存在しない場合は ~/.config/systemd/user ディレクトリを作成し、その中にファイルをコピーします:
mkdir -p ~/.config/systemd/user && cp /usr/lib/systemd/user/syncthing.service ~/.config/systemd/user
ファイルが配置されたら、サービスを有効にするために次のコマンドを実行します:
systemctl --user enable syncthing.service
結論
このチュートリアルでは、中央サーバーを使用せずに複数のデバイス間で1つまたは複数のディレクトリを同期させることができる非常に便利なアプリケーションであるSyncthingのインストールと設定方法を学びました。アプリケーションのインストール方法、必要なポートを通すためにファイアウォールを設定する方法、2つのデバイス間でディレクトリを共有する方法、そしてユーザーがログインしたときにSyncthingデーモンを自動的に開始する方法を見ました。






