[openldap] specfile: handle upgrades with new maintainance scripts
jvcelak
jvcelak at fedoraproject.org
Tue Nov 1 14:39:56 UTC 2011
commit 05cb2507b090f1ea81857114073dd70421c73297
Author: Jan Vcelak <jvcelak at redhat.com>
Date: Tue Oct 25 19:42:14 2011 +0200
specfile: handle upgrades with new maintainance scripts
openldap.spec | 191 ++++++++++++++++-----------------------------------------
1 files changed, 53 insertions(+), 138 deletions(-)
---
diff --git a/openldap.spec b/openldap.spec
index 76a2dbd..b2a03c6 100644
--- a/openldap.spec
+++ b/openldap.spec
@@ -391,91 +391,24 @@ rm -rf %{buildroot}
%pre servers
# create ldap user and group
-getent group ldap >/dev/null || groupadd -r -g 55 ldap
-if ! getent passwd ldap >/dev/null; then
- useradd -r -g ldap -u 55 -d %{_sharedstatedir}/ldap -s /sbin/nologin -c "LDAP User" ldap
- # setup ownership of database files
- if [ -d /var/lib/ldap ] ; then
- for dbfile in /var/lib/ldap/* ; do
- if [ -f $dbfile ] ; then
- chown ldap:ldap $dbfile
- fi
- done
- fi
-fi
+getent group ldap &>/dev/null || groupadd -r -g 55 ldap
+getent passwd ldap &>/dev/null || \
+ useradd -r -g ldap -u 55 -d %{_sharedstatedir}/ldap -s /sbin/nologin -c "OpenLDAP server" ldap
-# upgrade
if [ $1 -eq 2 ]; then
- # safe way to migrate the database if version number changed
- # http://www.openldap.org/doc/admin24/maintenance.html
+ # package upgrade
old_version=$(rpm -q --qf=%%{version} openldap-servers)
new_version=%{version}
if [ "$old_version" != "$new_version" ]; then
- pushd %{_sharedstatedir}/ldap &>/dev/null
-
- # stop the service
- if /sbin/service slapd status &>/dev/null; then
- touch need_start
- /sbin/service slapd stop
- else
- rm -f need_start
- fi
-
- if ls *.bdb &>/dev/null; then
- # symlink to last backup
- rm -f upgrade.ldif
-
- # backup location
- backupdir=backup.$(date +%%s)
- backupfile=${backupdir}/backup.ldif
- backupcmd="cp -a"
-
- mkdir -p ${backupdir}
-
- # database recovery tool
- # (this is necessary to handle upgrade from old openldap, which had embedded db4)
- if [ -f /usr/sbin/slapd_db_recover ]; then
- db_recover=/usr/sbin/slapd_db_recover
- else
- db_recover=/usr/bin/db_recover
- fi
-
- # make sure the database is consistent
- runuser -m -s $db_recover -- "ldap" -h %{_sharedstatedir}/ldap &>/dev/null
-
- # export the database if possible
- if [ $? -eq 0 ]; then
- if [ -f %{_sysconfdir}/openldap/slapd.conf ]; then
- slapcat -f %{_sysconfdir}/openldap/slapd.conf -l $backupfile &>/dev/null
- else
- slapcat -F %{_sysconfdir}/openldap/slapd.d -l $backupfile &>/dev/null
- fi
-
- if [ $? -eq 0 ]; then
- chmod 0400 $backupfile
- ln -sf $backupfile upgrade.ldif
- backupcmd=mv
- fi
- fi
-
- # move or copy to backup directory
- find -maxdepth 1 -type f \( -name alock -o -name "*.bdb" -o -name "__db.*" -o -name "log.*" \) \
- | xargs -I '{}' $backupcmd '{}' $backupdir
- cp -af DB_CONFIG $backupdir &>/dev/null
-
- # fix permissions
- chown -R ldap: $backupdir
- chmod -R a-w $backupdir
- fi
-
- popd &>/dev/null
+ touch %{_sharedstatedir}/ldap/rpm_upgrade_openldap &>/dev/null
fi
fi
exit 0
+
%post servers
/sbin/ldconfig
@@ -503,43 +436,37 @@ chmod 640 slapd.pem
popd
fi
-# generate configuration in slapd.d
-if ! ls -d %{_sysconfdir}/openldap/slapd.d/* &>/dev/null; then
-
- # fresh installation
- [ ! -f %{_sysconfdir}/openldap/slapd.conf ]
- fresh_install=$?
-
- [ $fresh_install -eq 0 ] && \
- cp %{_datadir}/openldap-servers/slapd.conf.obsolete %{_sysconfdir}/openldap/slapd.conf
+# generate/upgrade configuration
+if [ ! -f %{_sysconfdir}/openldap/slapd.d/cn=config.ldif ]; then
+ if [ -f %{_sysconfdir}/openldap/slapd.conf ]; then
+ %{_libexecdir}/slapd/convert-config.sh &>/dev/null
+ mv %{_sysconfdir}/openldap/slapd.conf %{_sysconfdir}/openldap/slapd.conf.bak
+ else
+ %{_libexecdir}/slapd/convert-config.sh -f %{_datadir}/openldap-servers/slapd.conf.obsolete &>/dev/null
+ fi
+fi
- # convert from old style config slapd.conf
- mv %{_sysconfdir}/openldap/slapd.conf %{_sysconfdir}/openldap/slapd.conf.bak
- mkdir -p %{_sysconfdir}/openldap/slapd.d/
- slaptest -f %{_sysconfdir}/openldap/slapd.conf.bak -F %{_sysconfdir}/openldap/slapd.d &>/dev/null
- chown -R ldap:ldap %{_sysconfdir}/openldap/slapd.d
- chmod -R 000 %{_sysconfdir}/openldap/slapd.d
- chmod -R u+rwX %{_sysconfdir}/openldap/slapd.d
- rm -f %{_sysconfdir}/openldap/slapd.conf
- rm -f %{_sharedstatedir}/ldap/__db* %{_sharedstatedir}/ldap/alock
+# upgrade the database
+if [ -f %{_sharedstatedir}/ldap/rpm_upgrade_openldap ]; then
+ if /bin/systemctl --quiet is-active slapd.service; then
+ /bin/systemctl stop slapd.service
+ start=1
+ else
+ start=0
+ fi
- [ $fresh_install -eq 0 ] && rm -f %{_sysconfdir}/openldap/slapd.conf.bak
-fi
+ %{_libexecdir}/slapd/upgrade-db.sh &>/dev/null
+ rm -f %{_sharedstatedir}/ldap/rpm_upgrade_openldap
-# finish database migration (see %pre)
-if [ -f %{_sharedstatedir}/ldap/upgrade.ldif ]; then
- runuser -m -s /usr/sbin/slapadd -- ldap -q -l %{_sharedstatedir}/ldap/upgrade.ldif &>/dev/null
- rm -f %{_sharedstatedir}/ldap/upgrade.ldif
+ [ $start -eq 1 ] && /bin/systemctl start slapd.service &>/dev/null
+ skip_restart=1
+else
+ skip_restart=0
fi
# restart after upgrade
-if [ $1 -ge 1 ]; then
- if [ -f %{_sharedstatedir}/ldap/need_start ]; then
- /sbin/service slapd start
- rm -f %{_sharedstatedir}/ldap/need_start
- else
- /sbin/service slapd condrestart
- fi
+if [ $1 -ge 1 -a $skip_restart -ne 1 ]; then
+ /bin/systemctl condrestart slapd.service &>/dev/null || :
fi
exit 0
@@ -560,10 +487,15 @@ if [ $1 -ge 1 ]; then
/bin/systemctl try-restart slapd.service &>/dev/null || :
fi
+exit 0
+
+
%post devel -p /sbin/ldconfig
+
%postun devel -p /sbin/ldconfig
+
%triggerun servers -- openldap-servers < 2.4.26-6
# migration from SysV to systemd
@@ -572,58 +504,41 @@ fi
/bin/systemctl try-restart slapd.service &>/dev/null || :
-%triggerin servers -- db4
+%triggerin servers -- libdb
-# db4 upgrade (see %triggerun)
+# libdb upgrade (setup for %triggerun)
if [ $2 -eq 2 ]; then
- pushd %{_sharedstatedir}/ldap &>/dev/null
-
# we are interested in minor version changes (both versions of db4 are installed at this moment)
- if [ "$(rpm -q --qf="%%{version}\n" db4 | sed 's/\.[0-9]*$//' | sort -u | wc -l)" != "1" ]; then
- # stop the service
- if /sbin/service slapd status &>/dev/null; then
- touch need_start
- /sbin/service slapd stop
- fi
-
- # ensure the database is consistent
- runuser -m -s /usr/bin/db_recover -- "ldap" -h %{_sharedstatedir}/ldap &>/dev/null
-
- # upgrade will be performed after removing old db4
- touch upgrade_db4
+ if [ "$(rpm -q --qf="%%{version}\n" libdb | sed 's/\.[0-9]*$//' | sort -u | wc -l)" != "1" ]; then
+ touch %{_sharedstatedir}/ldap/rpm_upgrade_libdb
else
- rm -f upgrade_db4
+ rm -f %{_sharedstatedir}/ldap/rpm_upgrade_libdb
fi
-
- popd &>/dev/null
fi
exit 0
-%triggerun servers -- db4
-# db4 upgrade (see %triggerin)
-if [ -f %{_sharedstatedir}/ldap/upgrade_db4 ]; then
- pushd %{_sharedstatedir}/ldap &>/dev/null
+%triggerun servers -- libdb
- # perform the upgrade
- if ls *.bdb &>/dev/null; then
- runuser -m -s /usr/bin/db_upgrade -- "ldap" -h %{_sharedstatedir}/ldap %{_sharedstatedir}/ldap/*.bdb
- runuser -m -s /usr/bin/db_checkpoint -- "ldap" -h %{_sharedstatedir}/ldap -1
+# libdb upgrade (finish %triggerin)
+if [ -f %{_sharedstatedir}/ldap/rpm_upgrade_libdb ]; then
+ if /bin/systemctl --quiet is-active slapd.service; then
+ /bin/systemctl stop slapd.service
+ start=1
+ else
+ start=0
fi
- # start the service
- if [ -f need_start ]; then
- /sbin/service slapd start
- rm -f need_start
- fi
+ %{_libexecdir}/slapd/upgrade-db.sh &>/dev/null
+ rm -f %{_sharedstatedir}/ldap/rpm_upgrade_libdb
- rm -f upgrade_db4
- popd &>/dev/null
+ [ $start -eq 1 ] && /bin/systemctl start slapd.service &>/dev/null
fi
exit 0
+
%files
%defattr(-,root,root)
%doc openldap-%{version}/ANNOUNCEMENT
More information about the scm-commits
mailing list