前提と注意事項
この記事では以下を前提としています。
- Ubuntu22.04
この記事のゴール
Ubuntu に Syncthing をインストールし、他の Syncthing をインストール済みの端末と、指定したディレクトリの同期を行うところまでをゴールとします。
Syncthing について
Syncthing は、オープンソースのファイル同期ソフトウェアです。主に個人間でデータを安全に同期するために使用され、異なるデバイス間でファイルを自動的に同期させることができます。このソフトウェアはプライバシーを重視しており、データをサードパーティのクラウドサーバーを通さずに直接デバイス間で転送します。 以下が Syncthing の公式サイトと公式リポジトリになります。
事前準備
Syncthing をapt経由でインストールできるよう、以下をインストールしておきます。jqは Syncthing が出力する内容を整形するために使用します。
$ sudo apt install curl apt-transport-https ca-certificates jqSyncthing を Ubuntu にインストールする
本記事では、Syncthing の公式ドキュメントに従って、aptを使って Syncthing をインストールする方法を解説します。
まず PGP キーを追加するために以下を実行します。
$ sudo mkdir -p /etc/apt/keyrings
$ sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg続いて以下を実行してaptのソースリストに syncthing を追加します。stableとcandidateの両方を追加します。
$ echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list$ echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing candidate" | sudo tee /etc/apt/sources.list.d/syncthing.listあとは以下によって Syncthing をインストールします。
$ sudo apt update
$ sudo apt install syncthing上記を実行後、以下のようにバージョンを確認できれば Syncthing のインストールが完了です。
$ syncthing --version
syncthing v1.27.7-rc.1 "Gold Grasshopper" (go1.22.2 linux-amd64) debian@github.syncthing.net 2024-04-22 03:45:18 UTC [noupgrade]Syncthing の ID を生成する
Syncthing を使って端末間で同期を取るには、同期を取りたい端末間で ID を共有する必要があります。Syncthing の ID は、Syncthing をインストールした端末ごとに異なります。以下のsyncthing generateコマンドを実行して、Syncthing の ID を生成します。
$ syncthing generate以下が実行結果です。
$ syncthing generate
2024/04/24 01:32:30 INFO: Generating ECDSA key and certificate for syncthing...
2024/04/24 01:32:30 INFO: Device ID: 2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH
2024/04/24 01:32:30 INFO: Default folder created and/or linked to new config上記に表示されている2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQHが ID になります。
次に Syncthing を起動し、ステータスを確認する。
Syncthing を起動、ステータスを確認する
以下を実行して Syncthing を起動します。なお、--no-browserオプションをつけることでブラウザを開かずに Syncthing を起動できます。CUI のみの環境で Syncthing を使う場合に便利です。
$ syncthing start --no-browser上記を実行すると、色々とログが出力されます。別のターミナルで以下を実行すると Syncthing のステータスを確認できます。
$ syncthing cli show system以下が実行結果です。
$ syncthing cli show system
{
"alloc": 20980288,
"connectionServiceStatus": {
"dynamic+https://relays.syncthing.net/endpoint": {
"error": null,
"lanAddresses": [
"relay://172.100.111.122:22067/?globalLimitBps=204800\u0026id=2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH\u0026networkTimeout=2m0s\u0026pingInterval=1m0s\u0026providedBy=delroth+%28eden%29\u0026
sessionLimitBps=102400\u0026statusAddr=%3A22070"
],
[
40/153
]
"wanAddresses": [
"relay://172.100.111.122:22067/?globalLimitBps=204800\u0026id=2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH\u0026networkTimeout=2m0s\u0026pingInterval=1m0s\u0026providedBy=delroth+%28eden%29\u0026
sessionLimitBps=102400\u0026statusAddr=%3A22070"
]
},
"quic://0.0.0.0:22000": {
"error": null,
"lanAddresses": [
"quic://0.0.0.0:22000",
"quic://10.146.0.3:22000",
"quic://[f12t:22sa:321d::7a9x:mb12]:22000"
],
"wanAddresses": [
"quic://0.0.0.0:22000",
"quic://34.84.173.252:22000"
]
},
"tcp://0.0.0.0:22000": {
"error": null,
"lanAddresses": [
"tcp://0.0.0.0:22000",
"tcp://10.146.0.3:22000",
"tcp://[f12t:22sa:321d::7a9x:mb12]:22000"
],
"wanAddresses": [
"tcp://0.0.0.0:0",
"tcp://0.0.0.0:22000"
]
}
},
"cpuPercent": 0,
"discoveryEnabled": true,
"discoveryErrors": {
"global@https://discovery-v6.syncthing.net/v2/": "Post \"https://discovery-v6.syncthing.net/v2/\": dial tcp[
2604:a880: 400:d0: : 185c:f001
]: 443: connect: network is unreachable"
},
"discoveryMethods": 5,
"discoveryStatus": {
"IPv4 local": {
"error": null
},
"IPv6 local": {
"error": null
},
"global@https://discovery-v4.syncthing.net/v2/": {
"error": null
},
"global@https://discovery-v6.syncthing.net/v2/": {
"error": "Post \"https://discovery-v6.syncthing.net/v2/\": dial tcp [1928:a110:311:d0::109c:f111]:443: co
nnect: network is unreachable"
},
"global@https://discovery.syncthing.net/v2/": {
"error": null
}
},
"goroutines": 92,
"guiAddressOverridden": false,
"guiAddressUsed": "127.0.0.1:8384",
"lastDialStatus": {
"tcp://153.246.232.95:22000": {
"error": null,
"when": "2024-04-24T01:37:39Z"
},
"tcp://[1211:1266:s340:ad00:2918:347f:936a:13e1]:22000": {
"error": "dial tcp [1211:1266:s340:ad00:2918:347f:936a:13e1]:22000: connect: network is unreachable",
"when": "2024-04-24T01:37:39Z"
},
"tcp://[f12t:22sa:321d::7a9x:mb12]:22000": {
"error": null,
"when": "2024-04-24T01:37:39Z"
}
},
"myID": "2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH",
"pathSeparator": "/",
"startTime": "2024-04-24T01:37:30Z",
"sys": 32183560,
"tilde": "/home/username",
"uptime": 344,
"urVersionMax": 3
}以上のように Syncthing のステータスが表示されれば、Syncthing が正常に起動しています。また、myIDとして先ほど生成した ID が表示されていることを確認してください。
なお、以下のように表示される場合は Syncthing が起動していない可能性が高いため、syncthing startで起動してみてください。
$ syncthing cli show system
syncthing: error: Get "http://127.0.0.1:8384/rest/system/status": dial tcp 127.0.0.1:8384: connect: connection refused同期したい端末を指定する
上記までを同期したい端末で行い、その端末の ID を取得しておきます。 例えば、ここでは以下のような状況を想定します。
端末A:Syncthing の ID が2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH端末B:Syncthing の ID が3AO29Pd-LS201KA-KTIBMAK-D11AYMC-UTOISQJ-AURGN81-CXLW1XI-AL19JSU
上記の場合、端末Aにて以下を実行して端末Bを同期対象として指定します。
$ syncthing cli config devices add --device-id 3AO29Pd-LS201KA-KTIBMAK-D11AYMC-UTOISQJ-AURGN81-CXLW1XI-AL19JSUまた、端末Bでも以下を実行して端末Aを指定します。
$ syncthing cli config devices add --device-id 2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH以上で同期するための準備が完了です。
同期するフォルダを指定する
まず確認のために現在同期対象となっているディレクトリを以下で確認します。
$ syncthing cli config folders list
default上記からdefaultという名前のディレクトリが同期対象となっていることがわかります。ただし、注意が必要なのは、defaultという名前そのもののディレクトリが端末Aにあるわけではありません。defaultは Syncthing 上のラベル名であり、実際に端末Aのどのディレクトリを指しているかは以下で確認できます。
$ syncthing cli config folders default dump-json | jq .path
"/home/username/Sync"上記のように/home/username/Syncがdefaultとして指定されていることがわかります。/home/username/Syncが現時点で端末Aの同期対象となっているディレクトリです。
次に実際に同期対象としたいディレクトリを指定します。以下のようにして/home/username/video-contentを同期対象とします。
$ syncthing cli config folders add --id "ejnes-fjwna" --label "video" --path "/home/username/video-content"上記によって、ラベル名がvideoでパスが/home/username/video-contentのディレクトリが同期対象となります。また、ejnes-fjwnaという文字列は、私が適当に設定したディレクトリの ID です。この ID は Syncthing が自動的に生成するものではなく、ユーザーが設定するものです。この ID は他の端末と同期する際に使用します。そのため、ユニークである必要があります。
これで端末Aでの作業は完了しました。あとは端末Bで同期を許可するために以下のコマンドを実行します。
$ syncthing cli config devices 2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH auto-accept-folders set true上記を実行すると、端末Bでは端末Aからの同期要求を自動的に許可するようになります。もし手動で許可したい場合は、以下のようにして設定を変更します。
$ syncthing cli config devices 2AL49P8-AKSS6NQ-TIJBNLA-E88CSQS-ANPIJMS-KPMLQ9O-CKID4WZ-MM29QQH auto-accept-folders set falseもし同期したい端末が Windows である場合や Web 管理画面を使える場合は、Syncthing の Web 管理画面で以下のように表示されます。
上記で「追加」をクリックすると、以下のように、ローカルでどこのフォルダに追加するかなどの設定ダイアログがき、「保存」ボタンをクリックすることで同期を開始できます。
あとは同期対象としたディレクトリに新しくファイルやディレクトリを追加すれば、端末間で同期されます。
まとめ
以上で Ubuntu に Syncthing をインストールし、他の Syncthing をインストール済みの端末と、指定したディレクトリの同期を行う手順を解説しました。Syncthing を活用すると、サーバ間でのファイル同期やバックアップを簡単に行うことができます。