From ec6e7d04446ed655ab50996bb7d0060fc6a98572 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Sun, 29 Dec 2013 18:57:03 +0100 Subject: [PATCH] - added systemd support via service generator - rel 2 --- openvpn-service-generator | 21 +++++++++++++++++++++ openvpn.spec | 32 +++++++++++++++++++++++++++++--- openvpn.sysconfig | 7 +++++++ openvpn.target | 7 +++++++ openvpn@.service | 16 ++++++++++++++++ 5 files changed, 80 insertions(+), 3 deletions(-) create mode 100644 openvpn-service-generator create mode 100644 openvpn.target create mode 100644 openvpn@.service diff --git a/openvpn-service-generator b/openvpn-service-generator new file mode 100644 index 0000000..5c05da1 --- /dev/null +++ b/openvpn-service-generator @@ -0,0 +1,21 @@ +#!/bin/sh + +destunitdir=${1:-/tmp} + +# Do nothing if target is disabled +[ -e /etc/systemd/system/multi-user.target.wants/openvpn.target ] || exit 0 + +[ -f /etc/sysconfig/openvpn ] && . /etc/sysconfig/openvpn + +if [ -d $destunitdir/openvpn.target.wants ]; then + rm -f $destunitdir/openvpn.target.wants/openvpn@*.service +else + mkdir -p $destunitdir/openvpn.target.wants +fi + +for tun in $TUNNELS; do + [ -L $destunitdir/openvpn.target.wants/openvpn@$tun.service ] && \ + continue + ln -s /lib/systemd/system/openvpn@.service \ + $destunitdir/openvpn.target.wants/openvpn@$tun.service +done diff --git a/openvpn.spec b/openvpn.spec index 32498be..a1e5018 100644 --- a/openvpn.spec +++ b/openvpn.spec @@ -6,7 +6,7 @@ Summary: VPN Daemon Summary(pl.UTF-8): Serwer VPN Name: openvpn Version: 2.3.2 -Release: 1 +Release: 2 License: GPL v2 Group: Networking/Daemons Source0: http://swupdate.openvpn.net/community/releases/%{name}-%{version}.tar.gz @@ -14,6 +14,9 @@ Source0: http://swupdate.openvpn.net/community/releases/%{name}-%{version}.tar.g Source1: %{name}.init Source2: %{name}.sysconfig Source3: %{name}.tmpfiles +Source4: openvpn-service-generator +Source5: openvpn.target +Source6: openvpn@.service Patch0: %{name}-pam.patch URL: http://www.openvpn.net/ BuildRequires: autoconf >= 2.59 @@ -84,14 +87,20 @@ sed -e 's,/''usr/lib/openvpn,%{_libdir}/%{name},' %{SOURCE3} > contrib/update-re rm -rf $RPM_BUILD_ROOT install -d $RPM_BUILD_ROOT{%{_sysconfdir}/openvpn,%{_sbindir},%{_mandir}/man8} \ $RPM_BUILD_ROOT{/etc/{rc.d/init.d,sysconfig},/var/run/openvpn,%{_includedir}} \ - $RPM_BUILD_ROOT{%{_libdir}/%{name}/plugins,/usr/lib/tmpfiles.d} + $RPM_BUILD_ROOT{%{_libdir}/%{name}/plugins,%{systemdtmpfilesdir},%{systemdunitdir}} \ + $RPM_BUILD_ROOT/lib/systemd/system-generators %{__make} install \ DESTDIR=$RPM_BUILD_ROOT install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/%{name} install %{SOURCE2} $RPM_BUILD_ROOT/etc/sysconfig/%{name} -install %{SOURCE3} $RPM_BUILD_ROOT/usr/lib/tmpfiles.d/%{name}.conf +install %{SOURCE3} $RPM_BUILD_ROOT%{systemdtmpfilesdir}/%{name}.conf + +install -p %{SOURCE4} $RPM_BUILD_ROOT/lib/systemd/system-generators/openvpn-service-generator +install -p %{SOURCE5} $RPM_BUILD_ROOT%{systemdunitdir}/openvpn.target +install -p %{SOURCE6} $RPM_BUILD_ROOT%{systemdunitdir}/openvpn@.service +ln -s /dev/null $RPM_BUILD_ROOT%{systemdunitdir}/openvpn.service %{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/plugins/*.la @@ -101,12 +110,25 @@ rm -rf $RPM_BUILD_ROOT %post /sbin/chkconfig --add openvpn %service openvpn restart "OpenVPN" +%systemd_post openvpn.target %preun if [ "$1" = "0" ]; then %service openvpn stop /sbin/chkconfig --del openvpn fi +%systemd_preun openvpn.target + +%postun +%systemd_reload + +%triggerpostun -- openvpn < 2.3.2-2 +[ -f /etc/sysconfig/rpm ] && . /etc/sysconfig/rpm +[ ${RPM_ENABLE_SYSTEMD_SERVICE:-yes} = no ] && exit 0 +[ "$(echo /etc/rc.d/rc[0-6].d/S[0-9][0-9]openvpn)" = "/etc/rc.d/rc[0-6].d/S[0-9][0-9]openvpn" ] && exit 0 +export SYSTEMD_LOG_LEVEL=warning SYSTEMD_LOG_TARGET=syslog +/bin/systemctl --quiet enable openvpn.target || : +exit 0 %files %defattr(644,root,root,755) @@ -116,6 +138,10 @@ fi %config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/%{name} %attr(755,root,root) %{_sbindir}/openvpn %attr(754,root,root) /etc/rc.d/init.d/%{name} +%attr(755,root,root) /lib/systemd/system-generators/%{name}-service-generator +%{systemdunitdir}/%{name}.service +%{systemdunitdir}/%{name}.target +%{systemdunitdir}/%{name}@.service %dir %{_libdir}/%{name} %dir %{_libdir}/%{name}/plugins %attr(755,root,root) %{_libdir}/%{name}/plugins/*.so diff --git a/openvpn.sysconfig b/openvpn.sysconfig index 42a4729..4fb33e6 100644 --- a/openvpn.sysconfig +++ b/openvpn.sysconfig @@ -7,5 +7,12 @@ SERVICE_RUN_NICE_LEVEL="+0" #OPENVPN_OPT="--script-security 2" # Tunnels to set up. For each tunnel name, there should be config file in /etc/openvpn +# +# On systems running systemd after updating the list below you have to +# restart systemd to regenerate openvpn@TUNNEL.service services +# (systemctl --system daemon-reload), stop and start openvpn.target when +# removing elements from list or restart openvpn.target when only adding +# elements (systemctl stop openvpn.target / systemctl restart openvpn.target). +# #TUNNELS="mytunnel" TUNNELS="" diff --git a/openvpn.target b/openvpn.target new file mode 100644 index 0000000..652626e --- /dev/null +++ b/openvpn.target @@ -0,0 +1,7 @@ +[Unit] +Description=Start openvpn tunnels +After=network.target +Wants=network.target + +[Install] +WantedBy=multi-user.target diff --git a/openvpn@.service b/openvpn@.service new file mode 100644 index 0000000..4a2db14 --- /dev/null +++ b/openvpn@.service @@ -0,0 +1,16 @@ +[Unit] +Description=OpenVPN tunnel on %I +Requires=openvpn.target +After=openvpn.target +PropagateReloadFrom=openvpn.target + +[Service] +Type=forking +PrivateTmp=true +EnvironmentFile=-/etc/sysconfig/openvpn +PIDFile=/var/run/openvpn/%i.pid +ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --config /etc/openvpn/%i.conf --cd /etc/openvpn $OPENVPN_OPT +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=openvpn.target -- 2.44.0