nordvpn がデーモンに到達できないと言う:ソケット、グループ、unit のどれ?
トンネル自体は正常かもしれません。CLI が nordvpnd へのソケットを失っただけです。コマンドから unit、次にソケットの権限へと進み、最初の失敗で止めてください。
nordvpn を実行してデーモンに到達できないというメッセージが出るのは、たいていもう手遅れになってから届く狭い苦情です。トンネルが動いているかどうかは何も語りません。CLI は前面部分にすぎず、Unix ソケット越しにバックグラウンドのプロセスと話しているので、このメッセージはその会話が起きなかったことを意味し、コマンドから外側へ辿って最初に誤りだと分かったところで止めてください。
エラーが現れる場所から始める
関与するプロセスは二つあり、それを混同することがこの話を不可解にしています。デーモンがトンネルを所有し、/run/nordvpn/ の下のソケットで待ち受けています。入力したコマンドは、自分でインターフェースに触れるのではなく、そのソケットに接続します。
ソケットが無い、または接続を拒否するとき、CLI には尋ねる相手がいないため、同じ苦情の「ユーザーデーモン」版または「システムデーモン」版を報告します。そのうちの一つはパスを直接名指ししており、これがやり取り全体で最も役立つ一文です。
何よりも先に unit を確認する
サービスマネージャーにデーモンが動いているか尋ね、動いていなければ一つの手順で起動と有効化を行います:
systemctl status nordvpnd
sudo systemctl enable --now nordvpnd
nordvpn version
unit が存在しても非アクティブなら、enable --now は起動と次回起動の設定を同時に行います。unit が存在しないなら、そのパッケージは想定しているものではなく、インストールされた名前がメモの名前より重要です。これは、そのラベルで一度もインストールされていないサービスを有効化するのに二十分費やすまで、些末な違いに見えます。存在するものを読み、それに従って行動してください。
unit ファイルを一覧すれば一つのコマンドで決着しますし、インストールについて何かを結論づける前にやっておく価値があります:
systemctl list-unit-files 'nordvpn*'
service --status-all
リリースはこのサービスを複数の unit 名で出荷してきたため、nordvpn ではなく nordvpnd を使うビルドは、すぐ隣で健全なサービスが動いているのにこのエラーの完璧な複製を生みます。
ソケットとそのグループがアクセスを決める
デーモンが動いていても、権限のために接続が拒否されることがあります。インストーラーは nordvpn グループを作り、ソケットはそれに従って所有されるため、そのグループ外のユーザーは、サービスが完全に健全であっても拒否されます。
sudo usermod -aG nordvpn "$USER"
newgrp nordvpn
グループの所属はセッション開始時に読まれるので、変更を加えた端末では効いていないように見えます。新しいログインシェルか newgrp が、動いているセッションに新しいグループが見える前に必要です。コマンドを実行したばかりのシェルではなく、新しいシェルで試してください。さもなければ、まだ適用されていないだけなのに修正が失敗したと結論づけてしまいます。
ソケット自体の所有がその確認の後半です。ソケットのグループと、CLI を動かしているシェルが報告するグループを比べれば、権限の疑問は再インストールではなく一つの手順で片づきます:
ls -l /run/nordvpn
id
動いているプロセスは正しいソケットの証拠ではありません。別のマネージャーが起動したデーモンや、別名のソケットを束縛した古いパッケージも同じように報告します。ディレクトリの一覧はその違いを一行で示すので、再インストールより優れています。
古いパッケージでのユーザーごとのプロセス
一部のパッケージはログインしたユーザーのコンテキストで二つ目のプロセスを動かし、デスクトップ統合はそれを見つけることを期待します。システムの init スクリプトがそのアカウントに降りずに起動すると、CLI はどのセッションも所有しないデーモンを探しに行きます。
systemd でない init では、文書化された配置が役割を分け、システムサービスは一つの名前で動き、ユーザー側のプロセスは対象アカウントで chpst -u <user> を使って動きます。もう一方を前提にした起動スクリプトを追加する前に、あなたのインストールが実際にどちらの配置を使っているか確認してください。
終わったことをどう知るか
通常の引き金はアップグレードです。新しいバイナリが、古いものが決して残さなかったサービス状態を期待するからで、停止、再有効化、起動をこの順で行えば片づきます:
sudo systemctl stop nordvpnd
sudo systemctl enable --now nordvpnd
sudo systemctl start nordvpnd
nordvpn version
その最後のコマンドが受け入れテストです。バージョンが表示されるならソケットが応答しており、残る不具合はすべてログイン、プラン、接続性の領域へ移り、この記事の外に出ます。応答するなら、ここで読むのをやめ、代わりにアカウントを見てください。
ソケットがまだ無いなら、終了した理由を unit のジャーナルで読み、次に /run/nordvpn が存在し、サービスアカウントがそこに書けることを確認してください。起動してすぐ死ぬプロセスは理由をそのジャーナルに残しますし、一行読むほうが再インストールより速いのです。