「Syncthing」の版間の差分
Kusakata.bot (トーク | 投稿記録) (Pkg/AUR テンプレートの更新) |
(同期) |
||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:同期]] |
− | [[Category:セキュリティ]] |
||
[[en:Syncthing]] |
[[en:Syncthing]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
12行目: | 11行目: | ||
== インストール == |
== インストール == |
||
− | + | {{Pkg|syncthing}} パッケージを[[インストール]]してください。 |
|
+ | Syncthing は制御・監視用の [[#Web-GUI]] を提供します。GUI のラッパーを使う場合は [[#Syncthing-GTK]] を参照してください。 |
||
− | == Syncthing の起動 == |
||
− | {{Tip|syncthing を複数実行することもできますが、syncthing によってデータベースがロックされるため一人のユーザーが実行できるインスタンスはひとつだけです。データベースのロックに関するエラーがないかログを確認してください。}} |
||
− | + | == 使用方法 == |
|
− | ターミナルから手動で ''syncthing'' バイナリを実行してください。 |
||
− | === |
+ | === Syncthing の起動 === |
+ | ターミナルから手動で {{ic|syncthing}} バイナリを実行して起動します。[https://docs.syncthing.net/users/syncthing.html コマンドライン操作のドキュメント] に使用可能なパラメータが説明されています。 |
||
+ | |||
+ | {{Note|syncthing を複数実行することもできますが、syncthing によってデータベースがロックされるため一人のユーザーが実行できるインスタンスはひとつだけです。データベースのロックに関するエラーがないかログを確認してください。}} |
||
+ | |||
+ | === Syncthing の自動起動 === |
||
+ | Syncthing を [[systemd]] のシステムサービスあるいは[[systemd/ユーザー|ユーザーサービス]]とインストールすることで起動時に自動的に実行できます。 |
||
+ | |||
+ | ==== システムサービス ==== |
||
サーバーで Syncthing を使用する場合、システムサービスとして Syncthing を実行するよう設定することで、ユーザーがログインしていなくてもシステムのブート時に起動するようになります。 |
サーバーで Syncthing を使用する場合、システムサービスとして Syncthing を実行するよう設定することで、ユーザーがログインしていなくてもシステムのブート時に起動するようになります。 |
||
− | + | {{ic|syncthing@''myuser''.service}} を[[起動]]・[[有効化]]してください。''myuser'' は実際のユーザー名に置き換えてください。 |
|
+ | |||
− | # systemctl enable syncthing@myuser.service |
||
+ | ==== ユーザーサービス ==== |
||
− | # systemctl start syncthing@myuser.service |
||
+ | |||
+ | [[systemd/ユーザー|ユーザーサービス]]として Syncthing を起動するよう設定した場合、Syncthing はユーザーがシステムに (グラフィカルなログイン画面や [[SSH]] などで) ログインした後に起動するようになります。(マルチユーザーの) デスクトップコンピュータで使用する場合はユーザーサービスを使ってください。無駄に Syncthing のインスタンスを起動しなくなります。 |
||
+ | |||
+ | ユーザーサービスを使うときはユーザーユニット {{ic|syncthing.service}} を[[起動]]・[[有効化]]してください ({{ic|--user}} フラグが必要です、詳しくは [[systemd/ユーザー]]を参照)。 |
||
+ | |||
+ | === Syncthing-GTK === |
||
+ | {{Pkg|syncthing-gtk}} は [[GTK+]] によるグラフィカルユーザーインターフェースです。[[デスクトップ通知]]、[[Nautilus]] や [[Nemo]]、Caja との統合などの機能が追加されています。 |
||
+ | Syncthing は Syncthing-GTK から起動できます。インターフェイスの設定から起動時に syncthing-gtk を実行させて、syncthing デーモンを起動するように設定してください。 |
||
− | === ユーザーサービス === |
||
− | [[systemd/ユーザー|ユーザーサービス]]として Syncthing を起動するよう設定した場合、Syncthing はユーザーがシステムに (グラフィカルなログイン画面や [[SSH]] などで) ログインした後に起動するようになります。(マルチユーザーの) デスクトップコンピュータで使用する場合はユーザーサービスを使ってください。無駄に Syncthing のインスタンスを起動しなくなります。以下のコマンドでパッケージに含まれている {{ic|syncthing.service}} を起動・有効化してください: |
||
− | $ systemctl --user enable syncthing.service |
||
− | $ systemctl --user start syncthing.service |
||
+ | {{Warning|systemd と syncthing-gtk の両方で syncthing デーモンを起動すると、インスタンスが2つ起動して CPU を無駄に消費する可能性があります。systemd で syncthing を起動しないようにするか、syncthing デーモンの起動を待機するように syncthing-gtk を設定してください。}} |
||
− | systemd サービスは特定のユーザーで起動する必要があります。サービスに関する詳細は [http://docs.syncthing.net/users/autostart.html#using-systemd Autostart-syncthing with systemd] を見て下さい。 |
||
+ | === Web-GUI === |
||
− | == ウェブインターフェイスを使う == |
||
+ | Syncthing を起動したら、デフォルトで [http://localhost:8384 localhost のポート 8384] からウェブインターフェイスを使うことができます。 |
||
− | {{Tip|デフォルトでは Syncthing にアクセスできるのは Syncthing を動かしているコンピュータだけです。{{ic|~/.config/syncthing/config.xml}} の {{ic|1=<address>127.0.0.1:8384</address>}} を {{ic|1=<address>0.0.0.0:8384</address>}} に変更して [[systemd]] サービスを再起動することで他のコンピュータからもアクセスできるようになります。}} |
||
− | Syncthing を起動したら、デフォルトで [http://localhost:8384 localhost のポート 8384] からウェブインターフェイスを使うことができます。syncthing を手動で起動したときは、ブラウザで管理ページを開いてください。 |
||
+ | {{Tip|リモートから GUI にアクセスする場合、[https://docs.syncthing.net/users/faq.html#how-do-i-access-the-web-gui-from-another-computer FAQ] を見てください。}} |
||
− | {{Note|syncthing のリリース 0.11 以前では (もしくは 0.10 からアップデートした場合)、ウェブインターフェイスにアクセスする際に使用するポートは 8080 でした。ポート 8080 はウェブ開発のユーティリティがよく使っているため、デフォルトポートはポート 8384 に変更されました [https://github.com/syncthing/syncthing/commit/960c0cbddf8802ae440f2f9ae33bced4e2d72e44] ('ST' in ASCII)。"GUI Listen Addresses" から設定を変更することで使用するポート番号を変えることができます。0.11 以前の設定が勝手に変えられることはありません。}} |
||
== 設定 == |
== 設定 == |
||
− | インストールしたら Syncthing はすぐに使うことができます。ウェブインターフェイスから新しいサーバーやフォルダを追加できます。シンプルなネットワークをセットアップする方法は [http://docs.syncthing.net/intro/getting-started.html Syncthing |
+ | インストールしたら Syncthing はすぐに使うことができます。ウェブインターフェイスから新しいサーバーやフォルダを追加できます。シンプルなネットワークをセットアップする方法は [http://docs.syncthing.net/intro/getting-started.html Syncthing のはじめに] を読んで下さい。 |
最初の起動時に、{{ic|~/Sync}} にデフォルトリポジトリが作成されます。ウェブ管理インターフェイスで確認できます。右側が追加したノードのリストで、左側がリポジトリ(他のノードと共有するフォルダ)のリストになります。 |
最初の起動時に、{{ic|~/Sync}} にデフォルトリポジトリが作成されます。ウェブ管理インターフェイスで確認できます。右側が追加したノードのリストで、左側がリポジトリ(他のノードと共有するフォルダ)のリストになります。 |
||
− | 新しくノードを追加するには、ノードのリストの下方にある "Add Node" をクリックして下さい。ノードの Node ID (他のマシンで {{ic|Edit > Show ID}} をクリックすることで確認できます) と名前、アドレスの入力を求められます。アドレスに "dynamic" と指定すると、syncthing アナウンスサーバーによって自動的にノード間でアドレスが交換されます。Node ID についてもっとよく知りたい場合は、 |
+ | 新しくノードを追加するには、ノードのリストの下方にある "Add Node" をクリックして下さい。ノードの Node ID (他のマシンで {{ic|Edit > Show ID}} をクリックすることで確認できます) と名前、アドレスの入力を求められます。アドレスに "dynamic" と指定すると、syncthing アナウンスサーバーによって自動的にノード間でアドレスが交換されます。Node ID についてもっとよく知りたい場合は、[http://docs.syncthing.net/dev/device-ids.html Syncthing のドキュメント] を読んで下さい。 |
設定を保存すると、syncthing サーバーを再起動するように表示されます。再起動することで変更が適用されます。 |
設定を保存すると、syncthing サーバーを再起動するように表示されます。再起動することで変更が適用されます。 |
||
53行目: | 61行目: | ||
次に、デフォルトノードの設定を変更するか (名前をクリックして {{ic|Edit}})、データを共有する新しいノードを作成します。データを共有したいノードにチェックを入れれば、アクセスできるようになります。 |
次に、デフォルトノードの設定を変更するか (名前をクリックして {{ic|Edit}})、データを共有する新しいノードを作成します。データを共有したいノードにチェックを入れれば、アクセスできるようになります。 |
||
− | == |
+ | === ローカルネットワークの設定 === |
+ | 大抵の場合、ノートパソコンや Android はネットワークアドレス変換 (NAT) ルーターを通してローカルエリアネットワーク (LAN) を共通しているため、以下のように設定することが推奨されます: |
||
− | === Inotify を使う === |
||
+ | * それぞれのノードでローカルおよびグローバルディスカバリを有効化して、携帯端末が LAN を離れて外からインターネットに接続しているときでも探索できるようにする。 |
||
− | Inotify (inode notify) はファイルシステムの変更を検出してアプリケーションに変更を報告する Linux カーネルのサブシステムです。Syncthing は Inotify をサポートしていませんが、Syncthing REST API と対話する公式の拡張モジュールが存在します。Inotify を利用することで毎分ごとに再スキャンすることがなくなります。フォルダの再スキャン間隔は自動的に増えていき再スキャンを出来るだけしないようになります。Syncthing-inotify は {{Pkg|syncthing-inotify}} パッケージでインストールできます。Syncthing を systemd で管理している場合、{{ic|syncthing-inotify.service}} は自動的に起動・停止します。 |
||
+ | * それぞれのマシンで [https://docs.syncthing.net/users/config.html#listen-addresses listen ポート] を {{ic|tcp://:22010}}, {{ic|tcp://:22011}}, {{ic|tcp://:22012}} のように異なるものに変える。グローバルディスカバリサーバーから違って見えるようになり、NAT を離脱したときに他のローカルデバイスに ''"Connected to myself - should not happen"'' メッセージが表示されなくなります。 |
||
− | {{ic|syncthing-inotify}} サービスが正しく機能しているか確認すると良いでしょう: |
||
− | {{hc|# systemctl status syncthing-inotify@'''user'''.service|2= |
||
− | Jan 12 16:37:33 <host> systemd[1]: Started Syncthing Inotify File Watcher for <user>. |
||
− | Jan 12 16:37:33 <host> syncthing-inotify[16916]: [OK] Watching <folder>: <status> |
||
− | .. |
||
− | }} |
||
+ | * 可能であれば [[Wikipedia:ja:Universal Plug and Play|UPnP]] ポートフォワーディングを有効化する、あるいは手動でポートを転送する。新しいノードが探知されたとき、Syncthing は listen ポートを使用しようとします。ポートが閉じられていた場合、ローカルで開いているポートを検索します。Syncthing で ''NAT traversal'' が有効になっているときは、UPnP を使ってランダムな外部ポートを内部の listen ポート (例: 22010) にマッピングします。この挙動が好ましくない場合、各ポートを手動で LAN 内の適切なマシンに転送してください。両側で開いているポートが見つからなかった場合、[https://docs.syncthing.net/users/relaying.html リレー] が使われます。 |
||
− | ==== カスタム設定 ==== |
||
− | {{ic|$ syncthing-inotify -help}} で API キーの設定など利用可能なオプションを確認できます。 |
||
+ | === inotify を使う === |
||
− | syncthing-inotify サービスのオプションを設定したい場合、{{ic|/etc/systemd/user/syncthing-inotify.service.d/}} に {{ic|.conf}} ファイルを作成するか ([[#ユーザーサービス|ユーザーサービス]]として実行している場合) あるいは {{ic|/etc/systemd/system/syncthing-inotify@'''user'''.service.d/}} を作成してください ([[#システムサービス|システムサービス]]として実行している場合)。例: |
||
− | {{hc|/etc/systemd/user/syncthing-inotify.service.d/start.conf|2= |
||
− | [Unit] |
||
− | ExecStart= |
||
− | ExecStart=/usr/bin/syncthing-inotify -logflags=0 -api="0M6ubcgtcy7KBLucu0jeXrgqB8U7YKp9" |
||
− | RuntimeDirectory=syncthing-inotify |
||
− | }} |
||
+ | [[Wikipedia:ja:inotify|inotify]] ''(inode notify)'' はファイルシステムの変更を検出してアプリケーションに変更を報告する Linux カーネルのサブシステムです。inotify の機能は Syncthing と統合されており、高度な設定のメニューからフォルダごとに有効化できます。将来的にはフォルダの設定 UI から設定できるようになります。 |
||
− | === リレーの実行 === |
||
+ | また、inotify のサポートは {{Pkg|syncthing-gtk}} によっても提供されていますが、その場合 GUI が実行されているときだけ inotify が機能します (メンテナンスが止まっている {{Pkg|syncthing-inotify}} に依存しません)。 |
||
− | バージョン 0.12 から Syncthing は2つのデバイスを直接接続できない場合に、リレーを使って接続することができるようになりました。リレーのデフォルトセットが存在するため何も設定しなくても実行できます。リレー接続は基本的に、エンドツーエンドで暗号化されるため、接続の中身を盗聴することは不可能になっています [https://forum.syncthing.net/t/syncthing-v0-12-beryllium-bedbug-release-notes-v0-12-0-beta1/5480?u=rumpelsepp]。リレーを実行するには {{Pkg|syncthing-relaysrv}} をインストールして、{{ic|syncthing-relaysrv.service}} サービスを[[起動]]・[[有効化]]してください。 |
||
+ | {{Tip|''Too many open files'' というエラーが表示される場合、以下のように設定してデフォルトの {{ic|fs.inotify.max_user_watches}} の値を増やしてください: |
||
− | [[AUR]] には git 版の {{aur|syncthing-relaysrv-git}}{{Broken package link|パッケージが存在しません}} が存在しています。詳細は [https://forum.syncthing.net/t/syncthing-relaysrv-for-arch-linux/5862 Syncthing のフォーラム] を見てください。 |
||
+ | {{hc|1=/etc/sysctl.d/40-max-user-watches.conf|2=fs.inotify.max_user_watches=524288}}}} |
||
+ | == インフラに参加 == |
||
− | デフォルトではリレーは [https://relays.syncthing.net/ Syncthing のリレープール] に参加して誰でも利用できる状態になります。コマンドラインフラグを使うことでレートの制限などのオプションが設定できます ({{ic|syncthing-relaysrv -help}} を確認してください)。コマンドラインフラグを編集するには {{ic|syncthing-relaysrv.service}} の[[Systemd#ドロップインファイル|ドロップインファイル]]を作成して {{ic|ExecStart}} ディレクティブを置き換えて下さい: |
||
+ | グローバルディスカバリサーバーあるいはリレーサーバーを立ち上げて [https://docs.syncthing.net/dev/infrastructure.html Syncthing のインフラストラクチャ] に参加することが可能です。 |
||
+ | === リレーの実行 === |
||
− | {{hc|/etc/systemd/system/syncthing-relaysrv.service.d/override.conf|<nowiki> |
||
+ | Syncthing はデバイスに直接接続できないときに [https://docs.syncthing.net/users/relaying.html リレー] を使ってデバイスに接続する機能があります。リレーされた接続はエンドツーエンドで暗号化されるため、リレーサーバーは IP アドレスとデバイス ID に以外に接続情報を知ることがありません。 |
||
+ | |||
+ | [https://docs.syncthing.net/users/strelaysrv.html リレーサーバー] は誰でも立ち上げることができ、自動的に [https://relays.syncthing.net/ Syncthing のリレープール] に参加して全ての Syncthing ユーザーから使えるようになります。リレーを実行するには {{Pkg|syncthing-relaysrv}} をインストールして {{ic|syncthing-relaysrv.service}} を[[起動]]・[[有効化]]してください。転送速度などのオプションはコマンドラインから設定できます。以下のようにサービスの[[systemd#ドロップインファイル|ドロップインファイル]]を使って {{ic|ExecStart}} ディレクティブで設定します: |
||
+ | |||
+ | {{hc|/etc/systemd/system/syncthing-relaysrv.service.d/override.conf|2= |
||
[Service] |
[Service] |
||
ExecStart= |
ExecStart= |
||
− | ExecStart=/usr/bin/syncthing-relaysrv |
+ | ExecStart=/usr/bin/syncthing-relaysrv -global-rate 500000 -provided-by ''relayprovidername''}} |
+ | {{Note|リレーはデフォルトで ''22067'' ポート (データ用) と ''22070'' ポート (サービスの状態用) を使います。TCP 接続を許可してください。必要であれば {{ic|-listen}} と {{ic|-status-srv}} オプションでデフォルトのポートを上書きできます。}} |
||
− | トラフィックの統計はポート 22070 で閲覧できます。例: http://78.47.248.86:22070/status 。 |
||
+ | {{Tip|特定のリレーの統計情報はデフォルトでポート 22070 からアクセスできます。例: http://108.28.183.249:22070/status 。}} |
||
− | === Discovery Server === |
||
+ | === ディスカバリサーバーの実行 === |
||
− | Syncthing Discovery Server は {{aur|syncthing-discosrv}} パッケージでインストールできます。ドキュメントは [https://docs.syncthing.net/users/discosrv.html こちら] にあります。 |
||
+ | Syncthing は [https://docs.syncthing.net/specs/globaldisco-v3.html グローバルディスカバリ] を使ってインターネット上のピアを検索します。全てのデバイスは起動時にディスカバリサーバーにデバイス ID と IP アドレス、ポートと現在時刻を通知します。ディスカバリサーバーに特定のデバイス ID のリクエストがあると、JSON 形式で保存された情報が返されます。 |
||
+ | 例えば {{ic|1=https://discovery-v4-2.syncthing.net/v2/?device=ITZRNXE-YNROGBZ-HXTH5P7-VK5NYE5-QHRQGE2-7JQ6VNJ-KZUEDIU-5PPR5AM}} というリクエストで {{ic|{"seen":"2017-12-06T14:04:39.005929Z","addresses":["tcp://212.129.18.55:22000"]}}} という情報が返ってきます。 |
||
− | ディスカバリサーバーを動かすには証明書が必要であり、できるだけ {{ic|/var/discosrv}} に保存してください。そして {{ic|syncthing}} ユーザーやグループは証明書ファイルを読み込めるようにパーミッションを設定してください。いまのところ、systemd ユニットファイルを編集して証明書を手動で指定する必要があります (他の変更したい設定も同じく記述してください。詳しくは [https://docs.syncthing.net/users/discosrv.html#configuring] を参照): |
||
+ | |||
+ | [https://docs.syncthing.net/users/stdiscosrv.html ディスカバリサーバー] は誰でも立ち上げることができます。{{aur|syncthing-discosrv}} パッケージをインストールしてください。 |
||
+ | |||
+ | ディスカバリサーバーを動かすには証明書が必要であり、できるだけ {{ic|/var/discosrv}} に保存してください。そして {{ic|syncthing}} ユーザーやグループが証明書ファイルを読み込めるようにパーミッションを設定してください。いまのところ、systemd ユニットファイルを編集して証明書を手動で指定する必要があります (他の変更したい設定も同じく記述してください。詳しくは [https://docs.syncthing.net/users/discosrv.html#configuring] を参照): |
||
{{hc|/usr/lib/systemd/system/syncthing-discosrv.service|<nowiki> |
{{hc|/usr/lib/systemd/system/syncthing-discosrv.service|<nowiki> |
||
122行目: | 130行目: | ||
自己署名証明書を使う場合、ドメインにディスカバリサーバー ID を追加しないとクライアントは接続を拒否します。ID はディスカバリサーバーの起動時に標準出力に出力されます。Global Discovery Servers のエントリを修正して ID を追加してください: {{ic|<nowiki>https://yourserver.com:8443/?id=AAAAAAA-BBBBBBB-CCCCCCC-DDDDDDD-EEEEEEE-FFFFFFF-GGGGGGG-HHHHHHH</nowiki>}}。 |
自己署名証明書を使う場合、ドメインにディスカバリサーバー ID を追加しないとクライアントは接続を拒否します。ID はディスカバリサーバーの起動時に標準出力に出力されます。Global Discovery Servers のエントリを修正して ID を追加してください: {{ic|<nowiki>https://yourserver.com:8443/?id=AAAAAAA-BBBBBBB-CCCCCCC-DDDDDDD-EEEEEEE-FFFFFFF-GGGGGGG-HHHHHHH</nowiki>}}。 |
||
− | == ト |
+ | == ヒントとテクニック == |
− | |||
− | [http://docs.syncthing.net/dev/debugging.html Debugging syncthing] を見てください。 |
||
=== 無駄なログ出力を止める === |
=== 無駄なログ出力を止める === |
||
133行目: | 139行目: | ||
ExecStart= |
ExecStart= |
||
ExecStart=/bin/bash -c 'set -o pipefail; /usr/bin/syncthing -no-browser -no-restart -logflags=0 | grep -v "INFO: "'</nowiki>}} |
ExecStart=/bin/bash -c 'set -o pipefail; /usr/bin/syncthing -no-browser -no-restart -logflags=0 | grep -v "INFO: "'</nowiki>}} |
||
+ | |||
+ | === VirtualBox で実行 === |
||
+ | |||
+ | Syncthing は [[VirtualBox]] の仮想マシン (VM) の中でローカル・グローバルに接続することができます。ネットワークアダプタは [https://www.virtualbox.org/manual/ch06.html#network_nat 標準の NAT] モードを使います。 |
||
+ | |||
+ | Syncthing が VM の中で listen するポートは既にホストが使用しているポートを避ける必要があります。例えば、ホストでデフォルトの 22000 ポートを使っている場合は、VM では 22001 を使います。VM の中で listen ポートを変更するには GUI の設定から [https://docs.syncthing.net/users/config.html#listen-addresses Sync Protocol Listen Addresses] を {{ic|tcp://:22001}} などとします。 |
||
+ | |||
+ | それから設定でホストの 22001/TCP ポートをゲストに転送する必要があります。以下のコマンドで転送できます: |
||
+ | $ VBoxManage modifyvm ''myvmname'' --natpf1 "syncthing,tcp,,22001,,22001" |
||
+ | 上記の設定ではリレーは必要ありません。ローカルデバイスはポート 22001 で VM に接続でき、グローバルデバイスには開いているポートからアクセスできます。 |
||
+ | |||
+ | {{Note|local discovery in this setup is limited because the discovery listening port 21027 is already used by the host. The guest is therefore not able to build a table of local announcements though it can still broadcast to the local network via the VM NAT and announce itself. The steps described above allow to run a functioning server in the default NAT configuration but bridged networking is recommended for an optimal setup.}} |
||
+ | |||
+ | === プロキシ経由で実行 === |
||
+ | |||
+ | Syncthing はプロキシ経由で実行してファイアウォールを超えたり SSH でトンネリングして使うことができます。[https://docs.syncthing.net/users/proxying.html プロキシの使用に関するドキュメント] によれば、{{ic|all_proxy}} 環境変数を設定して ''socks5'' プロキシタイプを使うことを指定する必要があります。 |
||
+ | |||
+ | * サービスをスクリプトやコマンドラインから起動している場合、以下のように変数を設定してください: |
||
+ | |||
+ | export all_proxy="socks5://''proxy_address'':''proxy_port''" |
||
+ | export no_proxy="127.0.0.1" |
||
+ | |||
+ | * サービスとして起動している場合、サービスファイルで以下のように変数を設定してください: |
||
+ | |||
+ | {{hc|/etc/systemd/system/multi-user.target.wants/syncthing@''myuser''.service|2= |
||
+ | [Service] |
||
+ | Environment="all_proxy=socks5://''proxy_address'':''proxy_port''" |
||
+ | Environment="no_proxy=127.0.0.1"}} |
||
+ | |||
+ | 設定したら systemd デーモンをリロードしてください: |
||
+ | |||
+ | # systemctl daemon-reload |
||
+ | |||
+ | そして {{ic|syncthing@''myuser''.service}} を[[再起動]]してください。 |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | |||
+ | [http://docs.syncthing.net/dev/debugging.html Debugging Syncthing] を見てください。 |
2018年1月3日 (水) 02:05時点における版
Syncthing はオープンソースのファイル同期クライアント・サーバーアプリケーションです。Go で書かれており、Block Exchange Protocol を実装しています。Syncthing ノード間のトランジットは全て暗号化され、全てのノードは暗号証明書によって一意に識別されます。
目次
インストール
Syncthing は制御・監視用の #Web-GUI を提供します。GUI のラッパーを使う場合は #Syncthing-GTK を参照してください。
使用方法
Syncthing の起動
ターミナルから手動で syncthing
バイナリを実行して起動します。コマンドライン操作のドキュメント に使用可能なパラメータが説明されています。
Syncthing の自動起動
Syncthing を systemd のシステムサービスあるいはユーザーサービスとインストールすることで起動時に自動的に実行できます。
システムサービス
サーバーで Syncthing を使用する場合、システムサービスとして Syncthing を実行するよう設定することで、ユーザーがログインしていなくてもシステムのブート時に起動するようになります。
syncthing@myuser.service
を起動・有効化してください。myuser は実際のユーザー名に置き換えてください。
ユーザーサービス
ユーザーサービスとして Syncthing を起動するよう設定した場合、Syncthing はユーザーがシステムに (グラフィカルなログイン画面や SSH などで) ログインした後に起動するようになります。(マルチユーザーの) デスクトップコンピュータで使用する場合はユーザーサービスを使ってください。無駄に Syncthing のインスタンスを起動しなくなります。
ユーザーサービスを使うときはユーザーユニット syncthing.service
を起動・有効化してください (--user
フラグが必要です、詳しくは systemd/ユーザーを参照)。
Syncthing-GTK
syncthing-gtk は GTK+ によるグラフィカルユーザーインターフェースです。デスクトップ通知、Nautilus や Nemo、Caja との統合などの機能が追加されています。
Syncthing は Syncthing-GTK から起動できます。インターフェイスの設定から起動時に syncthing-gtk を実行させて、syncthing デーモンを起動するように設定してください。
Web-GUI
Syncthing を起動したら、デフォルトで localhost のポート 8384 からウェブインターフェイスを使うことができます。
設定
インストールしたら Syncthing はすぐに使うことができます。ウェブインターフェイスから新しいサーバーやフォルダを追加できます。シンプルなネットワークをセットアップする方法は Syncthing のはじめに を読んで下さい。
最初の起動時に、~/Sync
にデフォルトリポジトリが作成されます。ウェブ管理インターフェイスで確認できます。右側が追加したノードのリストで、左側がリポジトリ(他のノードと共有するフォルダ)のリストになります。
新しくノードを追加するには、ノードのリストの下方にある "Add Node" をクリックして下さい。ノードの Node ID (他のマシンで Edit > Show ID
をクリックすることで確認できます) と名前、アドレスの入力を求められます。アドレスに "dynamic" と指定すると、syncthing アナウンスサーバーによって自動的にノード間でアドレスが交換されます。Node ID についてもっとよく知りたい場合は、Syncthing のドキュメント を読んで下さい。
設定を保存すると、syncthing サーバーを再起動するように表示されます。再起動することで変更が適用されます。
次に、デフォルトノードの設定を変更するか (名前をクリックして Edit
)、データを共有する新しいノードを作成します。データを共有したいノードにチェックを入れれば、アクセスできるようになります。
ローカルネットワークの設定
大抵の場合、ノートパソコンや Android はネットワークアドレス変換 (NAT) ルーターを通してローカルエリアネットワーク (LAN) を共通しているため、以下のように設定することが推奨されます:
- それぞれのノードでローカルおよびグローバルディスカバリを有効化して、携帯端末が LAN を離れて外からインターネットに接続しているときでも探索できるようにする。
- それぞれのマシンで listen ポート を
tcp://:22010
,tcp://:22011
,tcp://:22012
のように異なるものに変える。グローバルディスカバリサーバーから違って見えるようになり、NAT を離脱したときに他のローカルデバイスに "Connected to myself - should not happen" メッセージが表示されなくなります。
- 可能であれば UPnP ポートフォワーディングを有効化する、あるいは手動でポートを転送する。新しいノードが探知されたとき、Syncthing は listen ポートを使用しようとします。ポートが閉じられていた場合、ローカルで開いているポートを検索します。Syncthing で NAT traversal が有効になっているときは、UPnP を使ってランダムな外部ポートを内部の listen ポート (例: 22010) にマッピングします。この挙動が好ましくない場合、各ポートを手動で LAN 内の適切なマシンに転送してください。両側で開いているポートが見つからなかった場合、リレー が使われます。
inotify を使う
inotify (inode notify) はファイルシステムの変更を検出してアプリケーションに変更を報告する Linux カーネルのサブシステムです。inotify の機能は Syncthing と統合されており、高度な設定のメニューからフォルダごとに有効化できます。将来的にはフォルダの設定 UI から設定できるようになります。
また、inotify のサポートは syncthing-gtk によっても提供されていますが、その場合 GUI が実行されているときだけ inotify が機能します (メンテナンスが止まっている syncthing-inotify に依存しません)。
インフラに参加
グローバルディスカバリサーバーあるいはリレーサーバーを立ち上げて Syncthing のインフラストラクチャ に参加することが可能です。
リレーの実行
Syncthing はデバイスに直接接続できないときに リレー を使ってデバイスに接続する機能があります。リレーされた接続はエンドツーエンドで暗号化されるため、リレーサーバーは IP アドレスとデバイス ID に以外に接続情報を知ることがありません。
リレーサーバー は誰でも立ち上げることができ、自動的に Syncthing のリレープール に参加して全ての Syncthing ユーザーから使えるようになります。リレーを実行するには syncthing-relaysrv をインストールして syncthing-relaysrv.service
を起動・有効化してください。転送速度などのオプションはコマンドラインから設定できます。以下のようにサービスのドロップインファイルを使って ExecStart
ディレクティブで設定します:
/etc/systemd/system/syncthing-relaysrv.service.d/override.conf
[Service] ExecStart= ExecStart=/usr/bin/syncthing-relaysrv -global-rate 500000 -provided-by relayprovidername
ディスカバリサーバーの実行
Syncthing は グローバルディスカバリ を使ってインターネット上のピアを検索します。全てのデバイスは起動時にディスカバリサーバーにデバイス ID と IP アドレス、ポートと現在時刻を通知します。ディスカバリサーバーに特定のデバイス ID のリクエストがあると、JSON 形式で保存された情報が返されます。
例えば https://discovery-v4-2.syncthing.net/v2/?device=ITZRNXE-YNROGBZ-HXTH5P7-VK5NYE5-QHRQGE2-7JQ6VNJ-KZUEDIU-5PPR5AM
というリクエストで {"seen":"2017-12-06T14:04:39.005929Z","addresses":["tcp://212.129.18.55:22000"]
} という情報が返ってきます。
ディスカバリサーバー は誰でも立ち上げることができます。syncthing-discosrvAUR パッケージをインストールしてください。
ディスカバリサーバーを動かすには証明書が必要であり、できるだけ /var/discosrv
に保存してください。そして syncthing
ユーザーやグループが証明書ファイルを読み込めるようにパーミッションを設定してください。いまのところ、systemd ユニットファイルを編集して証明書を手動で指定する必要があります (他の変更したい設定も同じく記述してください。詳しくは [1] を参照):
/usr/lib/systemd/system/syncthing-discosrv.service
[Unit] Description=Syncthing discovery server After=network.target [Service] User=syncthing Group=syncthing ExecStart=/bin/sh -c "/usr/bin/syncthing-discosrv -db-dsn='file:///var/discosrv/discosrv.db' -cert /var/discosrv/chain.pem -key /var/discosrv/key.pem" Restart=on-failure SuccessExitStatus=2 PrivateDevices=true ProtectSystem=full ProtectHome=true NoNewPrivileges=true [Install] WantedBy=multi-user.target
クライアントからディスカバリサーバーを使えるようにするには、設定から Global Discovery Servers
変数に https://yourserver:8443/
(デフォルトポートの場合) などと記述してください。カンマで区切ることで複数のディスカバリサーバーを指定することができます。
自己署名証明書を使う場合、ドメインにディスカバリサーバー ID を追加しないとクライアントは接続を拒否します。ID はディスカバリサーバーの起動時に標準出力に出力されます。Global Discovery Servers のエントリを修正して ID を追加してください: https://yourserver.com:8443/?id=AAAAAAA-BBBBBBB-CCCCCCC-DDDDDDD-EEEEEEE-FFFFFFF-GGGGGGG-HHHHHHH
。
ヒントとテクニック
無駄なログ出力を止める
何もしていないときでも Syncthing は大量のログを出力することがあります。サービスの ExecStart を以下のように上書きすることで出力を直接フィルタリングすることができます ("grep" は必要に応じて調整してください):
/etc/systemd/system/syncthing@.service.d/nospam.conf
[Service] ExecStart= ExecStart=/bin/bash -c 'set -o pipefail; /usr/bin/syncthing -no-browser -no-restart -logflags=0 | grep -v "INFO: "'
VirtualBox で実行
Syncthing は VirtualBox の仮想マシン (VM) の中でローカル・グローバルに接続することができます。ネットワークアダプタは 標準の NAT モードを使います。
Syncthing が VM の中で listen するポートは既にホストが使用しているポートを避ける必要があります。例えば、ホストでデフォルトの 22000 ポートを使っている場合は、VM では 22001 を使います。VM の中で listen ポートを変更するには GUI の設定から Sync Protocol Listen Addresses を tcp://:22001
などとします。
それから設定でホストの 22001/TCP ポートをゲストに転送する必要があります。以下のコマンドで転送できます:
$ VBoxManage modifyvm myvmname --natpf1 "syncthing,tcp,,22001,,22001"
上記の設定ではリレーは必要ありません。ローカルデバイスはポート 22001 で VM に接続でき、グローバルデバイスには開いているポートからアクセスできます。
プロキシ経由で実行
Syncthing はプロキシ経由で実行してファイアウォールを超えたり SSH でトンネリングして使うことができます。プロキシの使用に関するドキュメント によれば、all_proxy
環境変数を設定して socks5 プロキシタイプを使うことを指定する必要があります。
- サービスをスクリプトやコマンドラインから起動している場合、以下のように変数を設定してください:
export all_proxy="socks5://proxy_address:proxy_port" export no_proxy="127.0.0.1"
- サービスとして起動している場合、サービスファイルで以下のように変数を設定してください:
/etc/systemd/system/multi-user.target.wants/syncthing@myuser.service
[Service] Environment="all_proxy=socks5://proxy_address:proxy_port" Environment="no_proxy=127.0.0.1"
設定したら systemd デーモンをリロードしてください:
# systemctl daemon-reload
そして syncthing@myuser.service
を再起動してください。
トラブルシューティング
Debugging Syncthing を見てください。