「Syncthing」の版間の差分
(→システムサービス: 同期) |
(→システムサービス: 同期) |
||
47行目: | 47行目: | ||
{{Note|サービスアカウントが同期用に明示的に作成された場合 (例: {{ic|useradd -r}} 経由)、ユーザーが有効なホームディレクトリを持っていることを確認してください。そうしないと、サービスは失敗します。Syncthing は、設定ファイルを {{ic|$XDG_STATE_HOME/syncthing}} または {{ic|$HOME/.local/state/syncthing}} に配置します。}} |
{{Note|サービスアカウントが同期用に明示的に作成された場合 (例: {{ic|useradd -r}} 経由)、ユーザーが有効なホームディレクトリを持っていることを確認してください。そうしないと、サービスは失敗します。Syncthing は、設定ファイルを {{ic|$XDG_STATE_HOME/syncthing}} または {{ic|$HOME/.local/state/syncthing}} に配置します。}} |
||
+ | |||
+ | ==== ユーザーサービス: ログイン時 ==== |
||
+ | |||
+ | Syncthing を ''systemd ユーザー'' サービスとして実行すると、ユーザーが (グラフィカルログイン画面や ssh 経由などで) システムにログインした後にのみ Syncthing が開始されるようになります。このメソッドは、(マルチユーザー) コンピューターで使用することを目的としています。ユーザーサービスを実行するには、[[ユーザーユニット]] {{ic|syncthing.service}} を [[起動/有効化]] します (つまり、{{ic|--user}} フラグを使用します) |
||
+ | |||
+ | ==== ユーザーサービス: 起動時 ==== |
||
+ | |||
+ | systemd-user サービスは、[[systemd/ユーザー# systemd のユーザーインスタンスを自動起動]] を使用して、ブート時に (つまり、ログインせずに) 開始できます。 |
||
+ | |||
+ | ==== ユーザーサービス: マウント時 ==== |
||
+ | |||
+ | Syncthing の ''systemd user'' サービスは、特定の (オプションで暗号化された) デバイスがマウントされた後に開始したり、デバイスがアンマウントされたときに停止できます。マウントポイントに依存するユーザーサービスを作成するには、デバイスがマウントされた後、{{ic|systemctl list-units -t mount}} を実行して ''systemd マウント名'' を見つけます。次に、以下のような新しいサービスを作成します。 |
||
+ | |||
+ | {{hc|/home/$USER/.config/systemd/user/syncthing.service|2= |
||
+ | [Unit] |
||
+ | Description=Syncthing |
||
+ | BindsTo=run-media-user-and-hash.mount |
||
+ | |||
+ | [Service] |
||
+ | ExecStart=/usr/bin/syncthing |
||
+ | |||
+ | [Install] |
||
+ | WantedBy=run-media-user-and-hash.mount}} |
||
==== ユーザーサービス ==== |
==== ユーザーサービス ==== |
2024年3月13日 (水) 15:15時点における版
関連記事
Syncthing はオープンソースのファイル同期クライアント・サーバーアプリケーションです。Go で書かれており、Block Exchange Protocol を実装しています。Syncthing ノード間のトランジットは TLS を使って全て暗号化され、全てのノードは暗号証明書によって一意に識別されます。
インストール
Syncthing は制御・監視用の #Web-GUI を提供します。GUI のラッパーを使う場合は #Syncthing-GTK を参照してください。
使用方法
Syncthing の起動
ターミナルから手動で syncthing
バイナリを実行して起動します。コマンドライン操作のドキュメント に使用可能なパラメータが説明されています。
Syncthing の自動起動
Syncthing を systemd のシステムサービスあるいはユーザーサービスとインストールすることで起動時に自動的に実行できます。
システムサービス
サーバーで Syncthing を使用する場合、システムサービスとして Syncthing を実行するよう設定することで、ユーザーがログインしていなくてもシステムのブート時に起動するようになります。
syncthing@myuser.service
を起動・有効化してください。myuser は実際のユーザー名に置き換えてください。
ユーザーサービス: ログイン時
Syncthing を systemd ユーザー サービスとして実行すると、ユーザーが (グラフィカルログイン画面や ssh 経由などで) システムにログインした後にのみ Syncthing が開始されるようになります。このメソッドは、(マルチユーザー) コンピューターで使用することを目的としています。ユーザーサービスを実行するには、ユーザーユニット syncthing.service
を 起動/有効化 します (つまり、--user
フラグを使用します)
ユーザーサービス: 起動時
systemd-user サービスは、systemd/ユーザー# systemd のユーザーインスタンスを自動起動 を使用して、ブート時に (つまり、ログインせずに) 開始できます。
ユーザーサービス: マウント時
Syncthing の systemd user サービスは、特定の (オプションで暗号化された) デバイスがマウントされた後に開始したり、デバイスがアンマウントされたときに停止できます。マウントポイントに依存するユーザーサービスを作成するには、デバイスがマウントされた後、systemctl list-units -t mount
を実行して systemd マウント名 を見つけます。次に、以下のような新しいサービスを作成します。
/home/$USER/.config/systemd/user/syncthing.service
[Unit] Description=Syncthing BindsTo=run-media-user-and-hash.mount [Service] ExecStart=/usr/bin/syncthing [Install] WantedBy=run-media-user-and-hash.mount
ユーザーサービス
ユーザーサービスとして 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 Tray
syncthingtrayAUR は、Qt ベースのシステムトレイアイコンとデスクトップ通知を提供することで Web-GUI を補完します。Plasma にはデスクトップ環境中立バージョンと Plasmoid が存在します。また、systemd および Dolphin ファイルマネージャーとの統合も提供します。
すでに Qt 6 を使用している syncthingtray-qt6AUR パッケージもあることに注意してください。KDE と Plasma 6 の統合を使用するには、このパッケージを使用する必要があります。
さらに詳しいコメントについては、AUR の固定コメントを参照してください。設定について不明な点がある場合は、アップストリームの README を読むことをお勧めします。
パッケージには、コマンドラインから Syncthing と対話できるようにする syncthingctl ユーティリティも付属しています。
設定
インストールしたら 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[リンク切れ: アーカイブ: aur-mirror] に依存しません)。
インフラに参加
グローバルディスカバリサーバーあるいはリレーサーバーを立ち上げて 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
を再起動してください。
Syncthing FUSE
SyncthingFUSE は、実際にローカルストレージに同期せずに syncthing 共有へのアクセスを提供する FUSE ドライバーです。ファイルを開くと、可能であればコンテンツはローカルキャッシュから提供されます。コンテンツがキャッシュにない場合、SyncthingFUSE はピアにコンテンツを要求し、キャッシュに追加します。ただし、ローカルキャッシュは固定サイズを超えることはありません。現在ファイルに使用できるピアがない場合、そのファイルを開くことは出来ません。
トラブルシューティング
データベースの問題
ある段階でデータベースの問題が発生する可能性があります。ファイルの再スキャンとデータベースの再同期を強制するには、次のコマンドを使用します:
$ syncthing -reset-database
root として実行した場合でも、読み取り専用のファイルシステムエラーが発生する
ユーザー (root など) に書き込み権限があるにもかかわらず、読み取り専用のファイルシステムがあると Syncthing が警告する場合は、テンプレートユニットの定義を確認してください:
$ systemctl cat syncthing@.service
[Service]
内に Hardening
部分があり、その下に、デフォルトで full
に設定される ProtectSystem
ディレクティブがあります。このディレクティブの詳細については、systemd.exec(5) § SANDBOXING を参照してください。
ドロップインファイル を作成して、ニーズに合った値に値をオーバーライドします。/etc
のサブフォルダーを同期しようとしている場合は、ProtectSystem=true
でうまくいくはずです。
その他
Debugging Syncthing を見てください。