Syncthing

提供: ArchWiki
移動先: 案内検索

Syncthing はオープンソースのファイル同期クライアント・サーバーアプリケーションです。Go で書かれており、Block Exchange Protocol を実装しています。Syncthing ノード間のトランジットは全て暗号化され、全てのノードは暗号証明書によって一意に識別されます。

インストール

Syncthing は syncthing または syncthing-gtk パッケージでインストールできます。後者のパッケージには inotify による同期、デスクトップ通知NautilusNemo、Caja との統合などの機能が追加されています。

Syncthing の起動

ヒント: syncthing を複数実行することもできますが、syncthing によってデータベースがロックされるため一人のユーザーが実行できるインスタンスはひとつだけです。データベースのロックに関するエラーがないかログを確認してください。

バイナリの実行

ターミナルから手動で syncthing バイナリを実行してください。

システムサービス

サーバーで Syncthing を使用する場合、システムサービスとして Syncthing を実行するよう設定することで、ユーザーがログインしていなくてもシステムのブート時に起動するようになります。

以下のコマンドでサービスを起動・有効化してください (@ の後の 'myuser は実際に使っている Syncthing のユーザーに置き換えてください):

# systemctl enable syncthing@myuser.service
# systemctl start syncthing@myuser.service 

ユーザーサービス

ユーザーサービスとして Syncthing を起動するよう設定した場合、Syncthing はユーザーがシステムに (グラフィカルなログイン画面や SSH などで) ログインした後に起動するようになります。(マルチユーザーの) デスクトップコンピュータで使用する場合はユーザーサービスを使ってください。無駄に Syncthing のインスタンスを起動しなくなります。以下のコマンドでパッケージに含まれている syncthing.service を起動・有効化してください:

$ systemctl --user enable syncthing.service
$ systemctl --user start syncthing.service

systemd サービスは特定のユーザーで起動する必要があります。サービスに関する詳細は Autostart-syncthing with systemd を見て下さい。

ウェブインターフェイスを使う

ヒント: デフォルトでは Syncthing にアクセスできるのは Syncthing を動かしているコンピュータだけです。~/.config/syncthing/config.xml<address>127.0.0.1:8384</address><address>0.0.0.0:8384</address> に変更して systemd サービスを再起動することで他のコンピュータからもアクセスできるようになります。

Syncthing を起動したら、デフォルトで localhost のポート 8384 からウェブインターフェイスを使うことができます。syncthing を手動で起動したときは、ブラウザで管理ページを開いてください。

ノート: syncthing のリリース 0.11 以前では (もしくは 0.10 からアップデートした場合)、ウェブインターフェイスにアクセスする際に使用するポートは 8080 でした。ポート 8080 はウェブ開発のユーティリティがよく使っているため、デフォルトポートはポート 8384 に変更されました [1] ('ST' in ASCII)。"GUI Listen Addresses" から設定を変更することで使用するポート番号を変えることができます。0.11 以前の設定が勝手に変えられることはありません。

設定

インストールしたら Syncthing はすぐに使うことができます。ウェブインターフェイスから新しいサーバーやフォルダを追加できます。シンプルなネットワークをセットアップする方法は Syncthing's getting started を読んで下さい。

最初の起動時に、~/Sync にデフォルトリポジトリが作成されます。ウェブ管理インターフェイスで確認できます。右側が追加したノードのリストで、左側がリポジトリ(他のノードと共有するフォルダ)のリストになります。

新しくノードを追加するには、ノードのリストの下方にある "Add Node" をクリックして下さい。ノードの Node ID (他のマシンで Edit > Show ID をクリックすることで確認できます) と名前、アドレスの入力を求められます。アドレスに "dynamic" と指定すると、syncthing アナウンスサーバーによって自動的にノード間でアドレスが交換されます。Node ID についてもっとよく知りたい場合は、適当な syncthing documentation page を読んで下さい。

設定を保存すると、syncthing サーバーを再起動するように表示されます。再起動することで変更が適用されます。

次に、デフォルトノードの設定を変更するか (名前をクリックして Edit)、データを共有する新しいノードを作成します。データを共有したいノードにチェックを入れれば、アクセスできるようになります。

ヒントとテクニック

Inotify を使う

Inotify (inode notify) はファイルシステムの変更を検出してアプリケーションに変更を報告する Linux カーネルのサブシステムです。Syncthing は Inotify をサポートしていませんが、Syncthing REST API と対話する公式の拡張モジュールが存在します。Inotify を利用することで毎分ごとに再スキャンすることがなくなります。フォルダの再スキャン間隔は自動的に増えていき再スキャンを出来るだけしないようになります。Syncthing-inotify は syncthing-inotify パッケージでインストールできます。Syncthing を systemd で管理している場合、syncthing-inotify.service は自動的に起動・停止します。

syncthing-inotify サービスが正しく機能しているか確認すると良いでしょう:

# systemctl status syncthing-inotify@user.service
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>
..

カスタム設定

$ syncthing-inotify -help で API キーの設定など利用可能なオプションを確認できます。

syncthing-inotify サービスのオプションを設定したい場合、/etc/systemd/user/syncthing-inotify.service.d/.conf ファイルを作成するか (ユーザーサービスとして実行している場合) あるいは /etc/systemd/system/syncthing-inotify@user.service.d/ を作成してください (システムサービスとして実行している場合)。例:

/etc/systemd/user/syncthing-inotify.service.d/start.conf
[Unit]
ExecStart=
ExecStart=/usr/bin/syncthing-inotify -logflags=0 -api="0M6ubcgtcy7KBLucu0jeXrgqB8U7YKp9"
RuntimeDirectory=syncthing-inotify

リレーの実行

バージョン 0.12 から Syncthing は2つのデバイスを直接接続できない場合に、リレーを使って接続することができるようになりました。リレーのデフォルトセットが存在するため何も設定しなくても実行できます。リレー接続は基本的に、エンドツーエンドで暗号化されるため、接続の中身を盗聴することは不可能になっています [2]。リレーを実行するには syncthing-relaysrv をインストールして、syncthing-relaysrv.service サービスを起動有効化してください。

AUR には git 版の syncthing-relaysrv-gitAUR[リンク切れ: パッケージが存在しません] が存在しています。詳細は Syncthing のフォーラム を見てください。

デフォルトではリレーは Syncthing のリレープール に参加して誰でも利用できる状態になります。コマンドラインフラグを使うことでレートの制限などのオプションが設定できます (syncthing-relaysrv -help を確認してください)。コマンドラインフラグを編集するには syncthing-relaysrv.serviceドロップインファイルを作成して ExecStart ディレクティブを置き換えて下さい:

/etc/systemd/system/syncthing-relaysrv.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/syncthing-relaysrv FLAGS

トラフィックの統計はポート 22070 で閲覧できます。例: http://78.47.248.86:22070/status

Discovery Server

Syncthing Discovery Server は syncthing-discosrvAUR パッケージでインストールできます。ドキュメントは こちら にあります。

ディスカバリサーバーを動かすには証明書が必要であり、できるだけ /var/discosrv に保存してください。そして syncthing ユーザーやグループは証明書ファイルを読み込めるようにパーミッションを設定してください。いまのところ、systemd ユニットファイルを編集して証明書を手動で指定する必要があります (他の変更したい設定も同じく記述してください。詳しくは [3] を参照):

/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

トラブルシューティング

Debugging syncthing を見てください。

無駄なログ出力を止める

何もしていないときでも 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: "'