diff --git a/cyr_systemd_helper b/cyr_systemd_helper new file mode 100755 index 0000000..2d9ad56 --- /dev/null +++ b/cyr_systemd_helper @@ -0,0 +1,38 @@ +#!/bin/sh +# get_config [config default] +# extracts config option from config file +get_config() { + if conf=$(grep "^$1" /etc/imapd.conf); then + echo $conf | cut -d: -f2 + else + echo $2 + fi +} + +CONFIGDIRECTORY=$(get_config configdirectory /var/lib/imap) +RETVAL=0 + +start() { + cd $CONFIGDIRECTORY + runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all > ${CONFIGDIRECTORY}/rpm/db_import.log 2>&1" < /dev/null + RETVAL=$? +} + +stop() { + cd $CONFIGDIRECTORY + runuser - cyrus -s /bin/sh -c "umask 166 ; /usr/lib/cyrus-imapd/cvt_cyrusdb_all export > ${CONFIGDIRECTORY}/rpm/db_export.log 2>&1" < /dev/null + RETVAL=$? +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + *) + ;; +esac + +exit $RETVAL diff --git a/cyrus-imapd.service b/cyrus-imapd.service new file mode 100644 index 0000000..4675ec1 --- /dev/null +++ b/cyrus-imapd.service @@ -0,0 +1,13 @@ +[Unit] +Description=Cyrus-imapd IMAP/POP3 email server +After=local-fs.target network.target + +[Service] +Type=simple +EnvironmentFile=/etc/sysconfig/cyrus-imapd +ExecStartPre=/usr/lib/cyrus-imapd/cyr_systemd_helper start +ExecStart=/usr/lib/cyrus-imapd/cyrus-master $CYRUSOPTIONS +ExecStopPost=/usr/lib/cyrus-imapd/cyr_systemd_helper stop + +[Install] +WantedBy=multi-user.target diff --git a/cyrus-imapd.spec b/cyrus-imapd.spec index ea092e9..37cf687 100644 --- a/cyrus-imapd.spec +++ b/cyrus-imapd.spec @@ -1,6 +1,6 @@ Name: cyrus-imapd Version: 2.4.7 -Release: 1%{?dist} +Release: 2%{?dist} %define ssl_pem_file %{_sysconfdir}/pki/%{name}/%{name}.pem @@ -22,13 +22,16 @@ Source2: cyrus-imapd.imap-2.3.x-conf Source3: cyrus-imapd.pam-config Source4: http://email.uoa.gr/projects/cyrus/autocreate/README.autocreate-cyrus-2.3 Source5: http://email.uoa.gr/projects/cyrus/autosievefolder/README.autosievefolder -Source6: cyrus-imapd.init Source7: cyrus-imapd.sysconfig Source8: cyrus-imapd.cvt_cyrusdb_all Source9: cyrus-imapd.magic Source10: cyrus-imapd.cron-daily Source11: README.rpm +#systemd support +Source12: cyrus-imapd.service +Source13: cyr_systemd_helper + # inclusion requested: # http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3182 # http://bugzilla.cyrusimap.org/bugzilla3/show_bug.cgi?id=3212 @@ -59,9 +62,9 @@ BuildRequires: krb5-devel BuildRequires: net-snmp-devel BuildRequires: transfig -Requires(post): e2fsprogs, chkconfig, initscripts, perl, grep, coreutils, findutils -Requires(preun): chkconfig, initscripts, coreutils -Requires(postun): initscripts +Requires(post): e2fsprogs, perl, grep, coreutils, findutils, systemd-units +Requires(preun): systemd-units, coreutils +Requires(postun): systemd-units Requires: %{name}-utils = %{version}-%{release} Requires: file, db4-utils @@ -229,10 +232,12 @@ install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/pam.d/lmtp install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/pam.d/nntp install -p -m 644 %{SOURCE3} %{buildroot}%{_sysconfdir}/pam.d/csync install -p -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} -install -p -m 755 %{SOURCE6} %{buildroot}%{_sysconfdir}/rc.d/init.d/%{name} install -p -m 644 %{SOURCE7} %{buildroot}%{_sysconfdir}/sysconfig/%{name} install -p -m 755 %{SOURCE10} %{buildroot}%{_sysconfdir}/cron.daily/%{name} +install -p -D -m 644 %{SOURCE12} %{buildroot}/lib/systemd/system/cyrus-imapd.service +install -p -D -m 755 %{SOURCE13} %{buildroot}%{_cyrexecdir}/cyr_systemd_helper + # Cleanup of doc dir find doc perl -name CVS -type d -prune -exec rm -rf {} \; find doc perl -name .cvsignore -type f -exec rm -f {} \; @@ -296,7 +301,10 @@ rm -rf %{buildroot} -G saslauth -s /sbin/nologin -u %{uid} -r %{_cyrususer} 2> /dev/null || : %post -/sbin/chkconfig --add %{name} +/sbin/service cyrus-imapd condrestart >/dev/null 2>&1 ||: +if [ $1 -eq 1 ]; then + /bin/systemctl enable cyrus-imapd.service >/dev/null 2>&1 || : +fi # Force synchronous updates, usually only on ext2 filesystems for i in %{_var}/lib/imap/{user,quota} %{_var}/spool/imap @@ -328,23 +336,28 @@ popd fi %preun -if [ $1 = 0 ]; then - /sbin/service %{name} stop >/dev/null 2>&1 || : - /sbin/chkconfig --del %{name} +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl disable cyrus-imapd.service >/dev/null 2>&1 || : + /bin/systemctl stop cyrus-imapd.service > /dev/null 2>&1 || : fi %postun -if [ $1 != 0 ]; then - /sbin/service %{name} condrestart >/dev/null 2>&1 || : +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + # Package upgrade, not uninstall + /bin/systemctl try-restart cyrus-imapd.service >/dev/null 2>&1 || : fi +%triggerun -- smartmontools < 2.4.7-2 +/sbin/chkconfig smartd && /bin/systemctl enable smartd.service >/dev/null 2>&1 || : + %files %defattr(-,root,root,-) %doc COPYRIGHT README %doc doc/* %config(noreplace) %{_sysconfdir}/cyrus.conf %config(noreplace) %{_sysconfdir}/imapd.conf -%{_sysconfdir}/rc.d/init.d/%{name} %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %config(noreplace) %{_sysconfdir}/sysconfig/%{name} %config(noreplace) %{_sysconfdir}/pam.d/pop @@ -355,7 +368,9 @@ fi %config(noreplace) %{_sysconfdir}/pam.d/csync %config(noreplace) %{_sysconfdir}/pam.d/nntp %{_sysconfdir}/cron.daily/%{name} +/lib/systemd/system/cyrus-imapd.service %dir %{_cyrexecdir} +%{_cyrexecdir}/cyr_systemd_helper %{_cyrexecdir}/arbitron %{_cyrexecdir}/arbitronsort.pl %{_cyrexecdir}/chk_cyrus @@ -474,6 +489,9 @@ fi %{_mandir}/man1/* %changelog +* Mon Apr 04 2011 Michal Hlaivnka - 2.4.7-2 +- now using systemd + * Thu Mar 31 2011 Michal Hlavinka - 2.4.7-1 - updated to 2.4.7