Syncthing
Syncthing はオープンソースのファイル同期クライアント・サーバーアプリケーションです。Go で書かれており、Block Exchange Protocol を実装しています。Syncthing ノード間のトランジットは全て暗号化され、全てのノードは暗号証明書によって一意に識別されます。
目次
インストール
Syncthing は syncthing または syncthing-gtk パッケージでインストールできます。後者のパッケージには inotify による同期、デスクトップ通知、Nautilus や Nemo、Caja との統合などの機能が追加されています。
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 を起動したら、デフォルトで localhost のポート 8384 からウェブインターフェイスを使うことができます。syncthing を手動で起動したときは、ブラウザで管理ページを開いてください。
設定
インストールしたら 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: "'