diff --git a/convert-bdb-to-lmdb.sh b/convert-bdb-to-lmdb.sh deleted file mode 100644 index 48c2dcc..0000000 --- a/convert-bdb-to-lmdb.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -systemctl stop postfix -if grep -q "hash:" /etc/postfix/{main.cf,master.cf}; then - sed -i 's/hash:/lmdb:/g' /etc/postfix/{main.cf,master.cf} -fi -if grep -q "btree:" /etc/postfix/{main.cf,master.cf}; then - sed -i 's/btree:/lmdb:/g' /etc/postfix/{main.cf,master.cf} -fi -for i in $( find /etc/postfix/ -name "*.db" ) -do - mv $i $i-back - postmap ${i%.db} -done -for i in $( find /etc/aliases.d/ -name "*.db" ) -do - mv $i $i-back - postalias ${i%.db} -done -if [ -e /etc/aliases.db ]; then - mv /etc/aliases.db /etc/aliases.db-back - postalias /etc/aliases -fi -systemctl start postfix diff --git a/postfix.changes b/postfix.changes index eaa640a..6f26aa4 100644 --- a/postfix.changes +++ b/postfix.changes @@ -1,3 +1,20 @@ +------------------------------------------------------------------- +Thu Jan 7 12:26:08 UTC 2021 - Arjen de Korte + +- Only do the conversion from the hash/btree databases to lmdb when + the default database type changes from hash to lmdb and do not + stop and start the service (the old compiled databases can live + together with the new ones) + - convert-bdb-to-lmdb.sh +- Clean up the specfile + * Remove < 1330 conditional builds + * Use generated postfix-files instead of the obsolete one from + postfix-SUSE.tar.gz + * Use dynamicmaps.cf.d instead of modifying dynamicmaps.cf upon + (de)installation of optional mysql, pgsql and ldap subpackages + * Use default location for post-install, postfix-tls-script, + postfix-wrapper and postmulti-script + ------------------------------------------------------------------- Mon Jan 4 12:17:03 UTC 2021 - Peter Varkoly diff --git a/postfix.spec b/postfix.spec index 18339d9..bf799dc 100644 --- a/postfix.spec +++ b/postfix.spec @@ -31,15 +31,7 @@ %define pf_html_directory %{_docdir}/%{name}-doc/html %define pf_sample_directory %{_docdir}/%{name}-doc/samples %define pf_data_directory %{_localstatedir}/lib/%{name} -%if 0%{?suse_version} < 1330 -%define pf_uid 51 -%define pf_gid 51 -%define maildrop_gid 59 -%define vmusr vmail -%define vmgid 303 -%define vmid 303 -%define vmdir /srv/maildirs -%endif +%define pf_database_convert %{_rundir}/%{name}-needs-convert %define mail_group mail %define conf_backup_dir %{_localstatedir}/adm/backup/%{name} %define unitdir %{_prefix}/lib/systemd @@ -47,11 +39,7 @@ %if ! %{defined _fillupdir} %define _fillupdir %{_localstatedir}/adm/fillup-templates %endif -%if 0%{?suse_version} >= 1320 || ( 0%{?suse_version} == 1315 && 0%{?is_opensuse} ) %bcond_without libnsl -%else -%bcond_with libnsl -%endif %bcond_without ldap Name: postfix Version: 3.5.8 @@ -66,7 +54,6 @@ Source2: %{name}-SUSE.tar.gz Source3: %{name}-mysql.tar.bz2 #Source4: http://cdn.postfix.johnriley.me/mirrors/postfix-release/wietse.pgp#/postfix.keyring Source4: postfix.keyring -Source5: convert-bdb-to-lmdb.sh Source10: %{name}-rpmlintrc Source11: check_mail_queue Source12: postfix-user.conf @@ -115,15 +102,11 @@ Provides: smtp_daemon %if %{with libnsl} BuildRequires: libnsl-devel %endif -%if 0%{?suse_version} >= 1330 BuildRequires: sysuser-tools Requires: system-user-nobody Requires: group(%{mail_group}) Requires(pre): group(%{mail_group}) %sysusers_requires -%else -Requires(pre): shadow -%endif %description Postfix aims to be an alternative to the widely-used sendmail program. @@ -149,11 +132,7 @@ This package contains the documentation for %{name} Summary: Postfix plugin to support MySQL maps Group: Productivity/Networking/Email/Servers Requires(pre): %{name} = %{version} -%if 0%{?suse_version} >= 1330 %sysusers_requires -%else -Requires(pre): shadow -%endif %description mysql Postfix plugin to support MySQL maps. This library will be loaded by @@ -258,17 +237,14 @@ make makefiles pie=yes shared=yes dynamicmaps=yes \ config_directory=%{_sysconfdir}/%{name} \ SHLIB_RPATH="-Wl,-rpath,%{pf_shlib_directory} -Wl,-z,relro,-z,now" make %{?_smp_mflags} -%if 0%{?suse_version} >= 1330 # Create postfix user %sysusers_generate_pre %{SOURCE12} postfix %sysusers_generate_pre %{SOURCE13} vmail -%endif # --------------------------------------------------------------------------- %install mkdir -p %{buildroot}/%{_libdir} mkdir -p %{buildroot}%{_sysconfdir}/%{name} -cp conf/* %{buildroot}%{_sysconfdir}/%{name} # create our default postfix ssl DIR (/etc/postfix/ssl) mkdir -p %{buildroot}%{_sysconfdir}/%{name}/ssl/certs # link cacerts to /etc/ssl/certs @@ -317,7 +293,6 @@ sed -e 's;@lib@;%{_lib};g' \ -e 's;@sample_directory@;%{pf_sample_directory};' \ -e 's;@mailq_path@;%{pf_mailq_path};' %{name}-SUSE/config.%{name} > %{buildroot}%{_sbindir}/config.%{name} chmod 755 %{buildroot}%{_sbindir}/config.%{name} -install -m 644 %{name}-SUSE/dynamicmaps.cf %{buildroot}%{_sysconfdir}/%{name}/dynamicmaps.cf install -m 644 %{name}-SUSE/ldap_aliases.cf %{buildroot}%{_sysconfdir}/%{name}/ldap_aliases.cf install -m 644 %{name}-SUSE/helo_access %{buildroot}%{_sysconfdir}/%{name}/helo_access install -m 644 %{name}-SUSE/permissions %{buildroot}%{_sysconfdir}/permissions.d/%{name} @@ -357,7 +332,15 @@ cat conf/main.cf "disable_vrfy_command = yes" \ 'smtpd_banner = $myhostname ESMTP' #Set Permissions -install -m 644 %{name}-SUSE/%{name}-files %{buildroot}%{pf_shlib_directory}/%{name}-files +sed -i -e 's/\(.*ldap.*\)/#\1/g' \ + -e 's/\(.*mysql.*\)/#\1/g' \ + -e 's/\(.*pgsql.*\)/#\1/g' \ + -e 's/\(.*LICENSE.*\)/#\1/g' \ + -e '/html_directory/d' \ + -e '/manpage_directory/d' \ + -e '/readme_directory/d' \ + %{buildroot}%{pf_shlib_directory}/postfix-files +mkdir -p %{buildroot}%{pf_shlib_directory}/postfix-files.d # postfix-mysql install -m 644 %{name}-mysql/main.cf-mysql %{buildroot}%{_sysconfdir}/%{name}/main.cf-mysql install -m 640 %{name}-mysql/*_maps.cf %{buildroot}%{_sysconfdir}/%{name}/ @@ -395,119 +378,77 @@ do rm -vf $path ln -sf %{_libdir}/$name $path done -# --------------------------------------------------------------------------- + +# create dynamicmaps.cf.d entries for optional modules +sed -n -e '/^#/p' -e '/mysql/p' %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf > %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-mysql.cf +sed -i -e '/mysql/d' %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf +sed -n -e '/^#/p' -e '/pgsql/p' %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf > %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-pgsql.cf +sed -i -e '/pgsql/d' %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf +%if %{with ldap} +sed -n -e '/^#/p' -e "/ldap/p" %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf > %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-ldap.cf +sed -i -e '/ldap/d' %{buildroot}%{pf_shlib_directory}/dynamicmaps.cf +%endif + install -m 755 %{SOURCE11} %{buildroot}%{_sbindir}/ -%if 0%{?suse_version} >= 1330 mkdir -p %{buildroot}%{_sysusersdir} install -m 644 %{SOURCE12} %{buildroot}%{_sysusersdir}/ install -m 644 %{SOURCE13} %{buildroot}%{_sysusersdir}/ -%endif -install -m 0755 %{SOURCE5} %{buildroot}%{pf_daemon_directory} -%if 0%{?suse_version} >= 1330 +# --------------------------------------------------------------------------- + %pre -f postfix.pre -%else -%pre -getent group %{name} >/dev/null || groupadd -g %{pf_gid} -o -r %{name} -getent group maildrop >/dev/null || groupadd -g %{maildrop_gid} -o -r maildrop -getent passwd %{name} >/dev/null || useradd -r -o -g %{name} -u %{pf_uid} -s /bin/false -c "Postfix Daemon" -d /%{pf_queue_directory} %{name} -usermod -a -G %{maildrop_gid},%{mail_group} %{name} -%endif - +# If existing default database type is hash, we need to convert the +# databases because hash (and btree) is no longer supported after +# the upgrade +if [ -x %{_sbindir}/postconf ]; then + DEF_DB_TYPE=$(postconf default_database_type) + case $DEF_DB_TYPE in *hash) + touch %{pf_database_convert} + esac +fi %service_add_pre %{name}.service -VERSIONTEST=$(test -x usr/sbin/postconf && usr/sbin/postconf proxy_read_maps 2>/dev/null || :) -if [ -z "$VERSIONTEST" -a -f %{pf_queue_directory}/pid/master.pid ]; then - if checkproc -p %{pf_queue_directory}/pid/master.pid usr/lib/%{name}/master; then - echo "%{name} is still running. You have to stop %{name} in order to" - echo "install a newer version." - exit 1 - fi -fi -# --------------------------------------------------------------------------- - -%if 0%{?suse_version} >= 1330 -%pre mysql -f vmail.pre -%else -%pre mysql -#echo "PARAM_pre: "$1 -# on `rpm -ivh` PARAM is 1 -# on `rpm -Uvh` PARAM is 2 -if [ "$1" = "1" ]; then - echo "Adding %{vmusr} user" - if [ -z "`getent group %{vmusr} 2>/dev/null`" ]; then - groupadd -r -g %{vmgid} %{vmusr} - fi - if [ -z "`getent passwd %{vmusr} 2>/dev/null`" ]; then - useradd -c "maildirs chef" -d %{vmdir} -g %{vmusr} -u %{vmid} -r -s /bin/false %{vmusr} - fi -fi -%endif -# --------------------------------------------------------------------------- - %preun -%stop_on_removal %{name} %service_del_preun %{name}.service -# --------------------------------------------------------------------------- - -%preun mysql -#echo "PARAM_preun: "$1 -# on `rpm -e` PARAM is 0 -if [ "$1" = "0" ]; then - FILE=etc/%{name}/dynamicmaps.cf - if [ -e "$FILE" ] ; then - if grep -q "^mysql[[:space:]]" ${FILE}; then - echo "Removing mysql map entry from ${FILE}" - sed "/^mysql[[:space:]]/d" ${FILE} > ${FILE}.$$ && \ - cp --remove-destination ${FILE}.$$ ${FILE} && \ - rm ${FILE}.$$ - fi - else - echo "Can not find \"$FILE\". Not updating the file." >&2 - fi -fi -# --------------------------------------------------------------------------- - -%preun postgresql -if [ "$1" = 0 ] ; then - FILE=etc/%{name}/dynamicmaps.cf - if [ -e "$FILE" ] ; then - if grep -q "^pgsql[[:space:]]" ${FILE}; then - echo "Removing pgsql map entry from ${FILE}" - sed "/^pgsql[[:space:]]/d" ${FILE} > ${FILE}.$$ && \ - cp --remove-destination ${FILE}.$$ ${FILE} && \ - rm ${FILE}.$$ - fi - else - echo "Can not find \"$FILE\". Not updating the file." >&2 - fi -fi -# --------------------------------------------------------------------------- %post # We never have to run suseconfig for postfix after installation # We only start postfix own upgrade-configuration by update +# +# If the default database type of the previous installation was +# hash, we also need to rebuild the databases in the new lmdb +# format if [ ${1:-0} -gt 1 ]; then touch %{_localstatedir}/adm/%{name}.configured - echo "Executing upgrade-configuration." - %{_sbindir}/%{name} set-permissions upgrade-configuration setgid_group=%{pf_setgid_group} || : - if [ "$(%{_sbindir}/postconf -h daemon_directory)" != "%{pf_daemon_directory}" ]; then - %{_sbindir}/postconf daemon_directory=%{pf_daemon_directory} - fi - #Replace berkely db - /usr/lib/postfix/bin/convert-bdb-to-lmdb.sh + echo "Executing upgrade-configuration." + %{_sbindir}/%{name} set-permissions upgrade-configuration setgid_group=%{pf_setgid_group} || : + if [ "$(%{_sbindir}/postconf -h daemon_directory)" != "%{pf_daemon_directory}" ]; then + %{_sbindir}/postconf daemon_directory=%{pf_daemon_directory} + fi + if [ -e %{pf_database_convert} ]; then + sed -i -E "s/(btree|hash):/lmdb:/g" %{pf_config_directory}/{main.cf,master.cf} + for i in $(find %{pf_config_directory} -name "*.db"); do + postmap ${i%.db} + done + for i in $(find %{_sysconfdir}/aliases.d/ -name "*.db"); do + postalias ${i%.db} + done + if [ -e %{_sysconfdir}/aliases.db ]; then + postalias %{_sysconfdir}/aliases + fi + rm %{pf_database_convert} + fi fi - -%service_add_post %{name}.service - %set_permissions %{_sbindir}/postqueue %set_permissions %{_sbindir}/postdrop %set_permissions %{_sysconfdir}/%{name}/sasl_passwd %set_permissions %{_sbindir}/sendmail - %{fillup_only postfix} %{fillup_only -an mail} -/sbin/ldconfig +%service_add_post %{name}.service + +%postun +%service_del_postun %{name}.service %verifyscript %verify_permissions -e %{_sbindir}/postqueue @@ -515,30 +456,23 @@ fi %verify_permissions -e %{_sysconfdir}/%{name}/sasl_passwd %verify_permissions -e %{_sbindir}/sendmail -%postun -%service_del_postun %{name}.service -/sbin/ldconfig - # --------------------------------------------------------------------------- -%post postgresql -FILE=etc/%{name}/dynamicmaps.cf -if ! grep -q "^pgsql[[:space:]]" ${FILE}; then - echo "Adding pgsql map entry to ${FILE}" - echo "pgsql %{pf_shlib_directory}/dict_pgsql.so dict_pgsql_open" >> ${FILE} -fi -# --------------------------------------------------------------------------- +%pre mysql -f vmail.pre -%post mysql -FILE=etc/%{name}/dynamicmaps.cf -if ! grep -q "^mysql[[:space:]]" ${FILE}; then - echo "Adding mysql map entry to ${FILE}" - echo "mysql %{pf_shlib_directory}/dict_mysql.so dict_mysql_open" >> ${FILE} -fi -# --------------------------------------------------------------------------- +%post mysql -p /sbin/ldconfig +%postun mysql -p /sbin/ldconfig + +%post postgresql -p /sbin/ldconfig +%postun postgresql -p /sbin/ldconfig + +%if %{with ldap} +%post ldap -p /sbin/ldconfig +%postun ldap -p /sbin/ldconfig +%endif %files -%license LICENSE +%license LICENSE TLS_LICENSE %config %{_sysconfdir}/pam.d/* %{_fillupdir}/sysconfig.%{name} %{_fillupdir}/sysconfig.mail-%{name} @@ -553,24 +487,19 @@ fi %config(noreplace) %{_sysconfdir}/%{name}/helo_access %config(noreplace) %{_sysconfdir}/%{name}/main.cf %config(noreplace) %{_sysconfdir}/%{name}/master.cf -%attr(0750,root,root) %config %{_sysconfdir}/%{name}/post-install -%attr(0750,root,root) %config %{_sysconfdir}/%{name}/%{name}-tls-script -%attr(0750,root,root) %config %{_sysconfdir}/%{name}/%{name}-wrapper -%attr(0750,root,root) %config %{_sysconfdir}/%{name}/postmulti-script -%config(noreplace) %{_sysconfdir}/%{name}/%{name}-files %config(noreplace) %{_sysconfdir}/%{name}/relay %config(noreplace) %{_sysconfdir}/%{name}/relay_ccerts %config(noreplace) %{_sysconfdir}/%{name}/sasl_passwd %config(noreplace) %{_sysconfdir}/%{name}/sender_canonical %config(noreplace) %{_sysconfdir}/%{name}/virtual - +%ghost %{_sysconfdir}/%{name}/*.lmdb +%ghost %{_sysconfdir}/aliases.lmdb %dir %{_sysconfdir}/sasl2 %config(noreplace) %{_sysconfdir}/sasl2/smtpd.conf -%config %{_sysconfdir}/%{name}/LICENSE -%config %{_sysconfdir}/%{name}/TLS_LICENSE +%exclude %{_sysconfdir}/%{name}/LICENSE +%exclude %{_sysconfdir}/%{name}/TLS_LICENSE %config %{_sysconfdir}/permissions.d/%{name} %config %{_sysconfdir}/permissions.d/%{name}.paranoid -%attr(0644, root, root) %config %{_sysconfdir}/%{name}/makedefs.out %{pf_shlib_directory}/%{name}-files # create our default postfix ssl DIR (/etc/postfix/ssl) %dir %{_sysconfdir}/%{name}/ssl @@ -604,7 +533,6 @@ fi %{_libdir}/lib* %{_libexecdir}/sendmail %dir %{pf_shlib_directory} -%{pf_shlib_directory}/*[^.so] %{pf_shlib_directory}/%{name}-pcre.so %{pf_shlib_directory}/%{name}-lmdb.so %{pf_shlib_directory}/lib%{name}-dns.so @@ -612,8 +540,14 @@ fi %{pf_shlib_directory}/lib%{name}-master.so %{pf_shlib_directory}/lib%{name}-tls.so %{pf_shlib_directory}/lib%{name}-util.so +%{pf_shlib_directory}/dynamicmaps.cf %{pf_shlib_directory}/main.cf.proto +%{pf_shlib_directory}/makedefs.out %{pf_shlib_directory}/master.cf.proto +%dir %{pf_daemon_directory} +%{pf_daemon_directory}/* +%dir %{pf_shlib_directory}/dynamicmaps.cf.d +%dir %{pf_shlib_directory}/postfix-files.d %{conf_backup_dir} %dir %attr(0700,%{name},root) %{pf_data_directory} @@ -635,9 +569,7 @@ fi %dir %attr(0700,%{name},root) /%{pf_queue_directory}/trace %dir %attr(0730,%{name},maildrop) /%{pf_queue_directory}/maildrop %dir %attr(0710,%{name},maildrop) /%{pf_queue_directory}/public -%if 0%{?suse_version} >= 1330 %{_sysusersdir}/postfix-user.conf -%endif %files devel %{_includedir}/%{name}/ @@ -651,19 +583,20 @@ fi %config(noreplace) %attr(640, root, %{name}) %{_sysconfdir}/%{name}/*_maps.cf %config(noreplace) %{_sysconfdir}/%{name}/main.cf-mysql %{pf_shlib_directory}/%{name}-mysql.so +%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-mysql.cf %{_mandir}/man5/mysql_table.5%{?ext_man} -%if 0%{?suse_version} >= 1330 %{_sysusersdir}/postfix-vmail-user.conf -%endif %files postgresql %{pf_shlib_directory}/%{name}-pgsql.so +%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-pgsql.cf %{_mandir}/man5/pgsql_table.5%{?ext_man} %if %{with ldap} %files ldap %config(noreplace) %{_sysconfdir}/%{name}/ldap_aliases.cf %{pf_shlib_directory}/%{name}-ldap.so +%{pf_shlib_directory}/dynamicmaps.cf.d/%{name}-ldap.cf %{_mandir}/man5/ldap_table.5%{?ext_man} %endif