web-dev-qa-db-ja.com

自己コンパイルされたOpenVPNがsystemdから起動しない

私はソースからopenvpnをコンパイルしました。openvpn --versionを実行すると、以下が返されます。

OpenVPN 2.4.4 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD] built on Nov 19 2017
library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08

そして、いくつかの基本設定を含む/etc/openvpn/server.confファイルを作成しました。ただし、Sudo systemctl start openvpn@serverで開始しようとすると、

Failed to start [email protected]: Unit [email protected] not found.

そしてSudo systemctl status openvpnは以下を返します:

● openvpn.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead) since Sun 2017-11-19 14:21:06 HKT; 4 days ago
 Main PID: 1502 (code=exited, status=0/SUCCESS)

そのため、openvpnサービスも登録されていないと思います。

/lib/systemd/system/を確認しましたが、openvpn.serviceファイルはありませんが、/etc/systemd/system/はあります。私が理解しているのは、apt-get install openvpnの代わりにコンパイルしたからです。

誰もが自分でコンパイルしたopenvpnをサービスとして追加する方法を提案できますか?

初めてソースからコンパイルするので、アドバイス/ヒントは大歓迎です!

編集1:

私はopenvpnサーバーを起動して、それにクライアントを接続できます(サービスのみが機能していないようです):

Sudo openvpn /etc/openvpn/server.conf
3
Ilya

/lib/systemd/systemに2つのファイルを手動で作成することで機能しました。

最初のものはopenvpn.serviceです:

[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

2番目は[email protected]です:

[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/local/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --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

それらを作成したら、Sudo systemctl daemon-reloadを実行して新しい変更を再ロードします。

一般に、ファイルは同じです。openvpnが公式リポジトリからインストールされたかのように、唯一の違いはExecStart=/usr/sbin/openvpnExecStart=/usr/local/sbin/openvpnでなければならず、コンパイルされたローカルopenVPNを指します。

編集:openvpn 2.4以降を使用している場合は、2番目のファイルからPIDFile=/run/openvpn/%i.pidおよび--writepid /run/openvpn/%i.pidを削除します。これにより、サーバーが起動時に起動しなくなります。見つけた ここ

2
Ilya

Ilyaの回答から更新しました(コメントする評判はありません)

提供されたサービスをテンプレートとして(つまり単一のサービスファイルとして)、次の2つの点を変更して、Ubuntu 16.04で動作させています。

Sudo cp ~/Downloads/openvpn-2.4.8/distro/systemd/[email protected] /lib/systemd/system/[email protected]

Sudo vi /lib/systemd/system/[email protected]

変化する:

  • @ sbindir @を/ usr/local/sbin /に
  • Type = notify to Type = simple

再読み込みして開始

Sudo systemctl daemon-reload
service [email protected] restart
service [email protected] status

これは、すでに/etc/openvpn/client/client.service.confに設定があることを前提としています。

0
River Rock