web-dev-qa-db-ja.com

このsystemdユニットファイルの始まりがわからない

そのため、Debian 9ベースのサーバーでopenvpn構成を調べていたところ、openvpnデーモンのsystemdユニットファイルでは説明できないことがわかりました。デーモン自体は問題なく起動して動作していますが、理由がわかりません...説明させてください:)

だから私はopenvpnをインストールし、/ etc/openvpn/server.confファイルに適切な設定をしています。これまでのところ何も問題はありません。

ただし、明らかに2つのsystemdユニットがopenvpnに対して実行されています。つまり、openvpn.service[email protected]です。後者は実際に着信VPN接続などを受け入れるもののようであり、前者はまったく何もしていないようです。どうやら後者を開始するために実行されているようです、私は推測します...

/ etc/systemd/system/multi-user.target.wants /ディレクトリでopenvpn関連ファイルを確認すると、openvpn.serviceファイルのみが表示されます。このファイルは、/内の同様の名前のファイルへのシンボリックリンクです。 lib/systemd/system。このファイルの内容は次のとおりです。

# This service is actually a systemd target,
# but we are using a service since targets cannot be reloaded.

[Unit]
Description=OpenVPN service
After=network.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecReload=/bin/true
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target

うんいいね。したがって、これは/ bin/trueのみを実行します。では、openvpn @ serverデーモンを正確に開始するものは何ですか?このユニットファイルが/ lib/systemd/openvpn @ .serviceであることは知っていますが、このユニットファイルを正確に実行するための手がかりがシステム上に見つかりません。 (私は/ etc/systemd/system somwhereの下にこれのシンボリックリンクを見つけることを期待していましたが、ありません。)このファイルの内容は次のとおりです。

[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP_AUDIT_WRITE
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target

したがって、このユニットファイルにはopenvpn.serviceファイルよりもはるかに多くの内容が含まれています。しかし、何がそれを開始しますか?上記のファイルのPartOf = openvpn.serviceの部分に気づきましたが、manページでこれの意味を調べてもそれほど賢くはありません。

何が原因なのか知りたいだけなので、検索を続けます!

この特定のユニットファイルがどのように実行されるか、または何がそれを開始するかについて何か手がかりがあれば、私に知らせてください:)

4
Gildor

あなたは2つのことを知る必要があります:

  • Systemdがユニットファイルを保持する undocumented ディレクトリがさらにいくつかあります。
  • DebianとUbuntuは generator を_/lib/systemd/system-generators/openvpn-generator_に提供し、_*.conf_の_/etc/openvpn_ファイルごとに1つずつ、ドキュメント化されていないディレクトリの1つに「欲しい」シンボリックリンクを配置します。 )__。

シンボリックリンクにより、_openvpn.service_はターゲットのように動作し、さまざまなテンプレートのインスタンス化をすべて「必要」とします。サービスユニットの開始時の解説が説明するように。

DebianとUbuntuは、OpenVPNの人々が自分たちがsystemdに提供するものと一致していないことに注意してください。これは、Arch、CentOS、Fedoraなどで使用されています。 DebianとUbuntuは、これらすべてのためにOpenVPN自体で提供されているものに完全に取って代わり、systemd用の独自のものを備えています。したがって、少なくともdocoを読むときは、docoが想定しているオペレーティングシステムに注意してください。

OpenVPNの人々は以前は _[email protected]_テンプレートユニットを提供していましたが、ジェネレーターも_openvpn.service_ target-as-a-serviceも提供していませんでした。そのためには、通常のsystemdメカニズムを使用して_openvpn@name_を明示的に有効または無効にする必要があり、直接によってではなく_multi-user.target_によって「必要」でした。中間のサービスとしてのターゲット。

OpenVPNの人々今日は別個の_[email protected]_および_[email protected]_テンプレートを提供し、ジェネレーターまたは_openvpn.service_ target-as-a-serviceを提供しません、および_openvpn-service@name_および_openvpn-client@name_を、通常のsystemdメカニズムを使用して明示的に有効または無効にすることを期待します。 _*.conf_ファイルも_/etc/openvpn_から_/etc/openvpn/client_および_/etc/openvpn/server_に移動しました。

参考文献

6
JdeBP