[postfix] Introduce systemd unit file, thanks to Jóhann B. Guðmundsson <johannbg at hi.is> Resolves: rhbz#71879

Jaroslav Škarvada jskarvad at fedoraproject.org
Tue Nov 8 16:23:58 UTC 2011


commit c581f4f085cd410d2edac970bae0772a74361b8f
Author: Jaroslav Škarvada <jskarvad at redhat.com>
Date:   Tue Nov 8 17:23:51 2011 +0100

    Introduce systemd unit file, thanks to Jóhann B. Guðmundsson <johannbg at hi.is>
    Resolves: rhbz#718793

 postfix.aliasesdb |   20 +++++++++++++
 postfix.service   |   17 +++++++++++
 postfix.spec      |   80 +++++++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 100 insertions(+), 17 deletions(-)
---
diff --git a/postfix.aliasesdb b/postfix.aliasesdb
new file mode 100644
index 0000000..8c0156e
--- /dev/null
+++ b/postfix.aliasesdb
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+ALIASESDB_STAMP=/var/lib/misc/postfix.aliasesdb-stamp
+
+make_aliasesdb() {
+        if [ "$(/usr/sbin/postconf -h alias_database)" == "hash:/etc/aliases" ]
+        then
+                # /etc/aliases.db may be used by other MTA, make sure nothing
+                # has touched it since our last newaliases call
+                [ /etc/aliases -nt /etc/aliases.db ] ||
+                        [ "$ALIASESDB_STAMP" -nt /etc/aliases.db ] ||
+                        [ "$ALIASESDB_STAMP" -ot /etc/aliases.db ] || return 0
+                /usr/bin/newaliases
+                touch -r /etc/aliases.db "$ALIASESDB_STAMP"
+        else
+                /usr/bin/newaliases
+        fi
+}
+
+make_aliasesdb
diff --git a/postfix.service b/postfix.service
new file mode 100644
index 0000000..a27ef2e
--- /dev/null
+++ b/postfix.service
@@ -0,0 +1,17 @@
+[Unit]
+Description=Postfix Mail Transport Agent
+After=syslog.target network.target
+Conflicts=sendmail.service exim.service
+
+[Service]
+Type=forking
+PIDFile=/var/spool/postfix/pid/master.pid
+EnvironmentFile=-/etc/sysconfig/network
+ExecStartPre=-/usr/libexec/postfix/aliasesdb
+ExecStartPre=-/etc/postfix/chroot-update
+ExecStart=/usr/sbin/postfix start
+ExecReload=/usr/sbin/postfix reload
+ExecStop=/usr/sbin/postfix stop
+
+[Install]
+WantedBy=multi-user.target
diff --git a/postfix.spec b/postfix.spec
index 6dee93c..99c3c35 100644
--- a/postfix.spec
+++ b/postfix.spec
@@ -7,6 +7,8 @@
 %bcond_without ipv6
 %bcond_without pflogsumm
 
+%global sysv2systemdnvr 2.8.7-2
+
 # hardened build if not overrided
 %{!?_hardened_build:%global _hardened_build 1}
 
@@ -36,25 +38,25 @@
 Name: postfix
 Summary: Postfix Mail Transport Agent
 Version: 2.8.7
-Release: 1%{?dist}
+Release: 2%{?dist}
 Epoch: 2
 Group: System Environment/Daemons
 URL: http://www.postfix.org
 License: IBM
-Requires(post): /sbin/chkconfig
+Requires(post): systemd-units systemd-sysv 
 Requires(post): %{_sbindir}/alternatives
 Requires(pre): %{_sbindir}/groupadd
 Requires(pre): %{_sbindir}/useradd
-Requires(preun): /sbin/chkconfig
-Requires(preun): /sbin/service
 Requires(preun): %{_sbindir}/alternatives
-Requires(postun): /sbin/service
-
+Requires(preun): systemd-units
+Requires(postun): systemd-units
 Provides: MTA smtpd smtpdaemon server(smtp)
 
 Source0: ftp://ftp.porcupine.org/mirrors/postfix-release/official/%{name}-%{version}.tar.gz
 Source1: postfix-etc-init.d-postfix
+Source2: postfix.service
 Source3: README-Postfix-SASL-RedHat.txt
+Source4: postfix.aliasesdb
 
 # Sources 50-99 are upstream [patch] contributions
 
@@ -85,6 +87,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
 # Determine the different packages required for building postfix
 BuildRequires: libdb-devel, pkgconfig, zlib-devel
+BuildRequires: systemd-units
 
 %{?with_ldap:BuildRequires: openldap-devel}
 %{?with_sasl:BuildRequires: cyrus-sasl-devel}
@@ -97,6 +100,17 @@ BuildRequires: libdb-devel, pkgconfig, zlib-devel
 Postfix is a Mail Transport Agent (MTA), supporting LDAP, SMTP AUTH (SASL),
 TLS
 
+%package sysvinit
+Summary: SysV initscript for postfix
+Group: System Environment/Daemons
+BuildArch: noarch
+Requires: %{name} = %{version}-%{release}
+Requires(preun): chkconfig
+Requires(post): chkconfig
+
+%description sysvinit
+This package contains the SysV initscript.
+
 %package perl-scripts
 Summary: Postfix utilities written in perl
 Group: Applications/System
@@ -224,6 +238,11 @@ sh postfix-install -non-interactive \
 mkdir -p $RPM_BUILD_ROOT%{_initrddir}
 install -c %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/postfix
 
+# Systemd
+mkdir -p %{buildroot}%{_unitdir}
+install -m 644 %{SOURCE2} %{buildroot}%{_unitdir}
+install -m 755 %{SOURCE4} %{buildroot}%{postfix_daemon_dir}/aliasesdb
+
 install -c auxiliary/rmail/rmail $RPM_BUILD_ROOT%{_bindir}/rmail.postfix
 
 for i in active bounce corrupt defer deferred flush incoming private saved maildrop public pid saved trace; do
@@ -298,7 +317,7 @@ do
 done
 
 %post
-/sbin/chkconfig --add postfix
+[ $1 -eq 1 ] && bin/systemctl daemon-reload >/dev/null 2>&1 || :
 
 # upgrade configuration files if necessary
 %{_sbindir}/postfix set-permissions upgrade-configuration \
@@ -342,19 +361,38 @@ exit 0
 
 %preun
 if [ "$1" = 0 ]; then
-    # stop postfix silently, but only if it's running
-    /sbin/service postfix stop &>/dev/null
-    /sbin/chkconfig --del postfix
+    /bin/systemctl --no-reload disable postfix.service > /dev/null 2>&1 || :
+    /bin/systemctl stop postfix.service > /dev/null 2>&1 || :
     %{_sbindir}/alternatives --remove mta %{postfix_command_dir}/sendmail.postfix
 fi
-
 exit 0
 
 %postun
-if [ "$1" != 0 ]; then
-	/sbin/service postfix condrestart 2>&1 > /dev/null
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ "$1" -ge 1 ]; then
+    /bin/systemctl try-restart postfix.service >/dev/null 2>&1 || :
 fi
-exit 0
+
+%post sysvinit
+/sbin/chkconfig --add postfix >/dev/null 2>&1 ||:
+
+%preun sysvinit
+if [ "$1" = 0 ]; then
+    %{_initrddir}/postfix stop >/dev/null 2>&1 ||:
+    /sbin/chkconfig --del postfix >/dev/null 2>&1 ||:
+
+%postun sysvinit
+[ "$1" -ge 1 ] && %{_initrddir}/postfix condrestart >/dev/null 2>&1 ||:
+
+%triggerun -- postfix < %{sysv2systemdnvr}
+%{_bindir}/systemd-sysv-convert --save postfix >/dev/null 2>&1 ||:
+/bin/systemctl enable postfix.service >/dev/null 2>&1
+/sbin/chkconfig --del postfix >/dev/null 2>&1 || :
+/bin/systemctl try-restart postfix.service >/dev/null 2>&1 || :
+
+%triggerpostun -n postfix-sysvinit -- postfix < %{sysv2systemdnvr}
+/sbin/chkconfig --add postfix >/dev/null 2>&1 || :
+
 
 %clean
 rm -rf $RPM_BUILD_ROOT
@@ -366,7 +404,7 @@ rm -rf $RPM_BUILD_ROOT
 # It reads the file postfix-files which defines the ownership
 # and permissions for all files postfix installs.
 
-%defattr(-, root, root)
+%defattr(-, root, root, -)
 
 # Config files not part of upstream
 
@@ -374,7 +412,7 @@ rm -rf $RPM_BUILD_ROOT
 %config(noreplace) %{sasl_config_dir}/smtpd.conf
 %endif
 %config(noreplace) %{_sysconfdir}/pam.d/smtp.postfix
-%attr(0755, root, root) %{_initrddir}/postfix
+%{_unitdir}/postfix.service
 
 # Documentation
 
@@ -471,8 +509,12 @@ rm -rf $RPM_BUILD_ROOT
 
 %ghost %attr(0644, root, root) %{_var}/lib/misc/postfix.aliasesdb-stamp
 
+%files sysvinit
+%defattr(-, root, root, -)
+%{_initrddir}/postfix
+
 %files perl-scripts
-%defattr(-, root, root)
+%defattr(-, root, root, -)
 %attr(0755, root, root) %{postfix_command_dir}/qshape
 %attr(0644, root, root) %{_mandir}/man1/qshape*
 %if %{with pflogsumm}
@@ -482,6 +524,10 @@ rm -rf $RPM_BUILD_ROOT
 %endif
 
 %changelog
+* Tue Nov  8 2011 Jaroslav Škarvada <jskarvad at redhat.com> - 2:2.8.7-2
+- Introduce systemd unit file, thanks to Jóhann B. Guðmundsson <johannbg at hi.is>
+  Resolves: rhbz#718793
+
 * Mon Nov  7 2011 Jaroslav Škarvada <jskarvad at redhat.com> - 2:2.8.7-1
 - Update to 2.8.7
   Resolves: rhbz#751622


More information about the scm-commits mailing list