[389-devel] Please review: auto upgrade during rpm posttrans

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It is a problem that upgrade is not run automatically during rpm installation. It causes problems for other packages that depend on 389. This fix allows rpm to run the upgrade script. Some notes: * had to write scriptlets in lua to allow data to be passed among different phases - %posttrans does not know if it is being run as a fresh install or an upgrade, so we have to get that information from %post to pass to %posttrans * upgrade must be run in posttrans - in %post, the old package that is being upgraded will still be around - this includes the old schema in the schema dir - the update script assumes the contents of the schema dir are correct and current - so we have to wait until %posttrans when the schema dir will contain only the new schema * the upgrade script can only run non-interactively if the servers are all shutdown first - so we have to shutdown the servers, run the upgrade, then start the servers back up - however, if the user did not want certain servers to be running, we first get a list of the running servers, and only start those back up after the upgrade

Index: 389-ds-base.spec
===================================================================
RCS file: /cvs/extras/rpms/389-ds-base/F-11/389-ds-base.spec,v
retrieving revision 1.5
diff -u -8 -r1.5 389-ds-base.spec
--- 389-ds-base.spec	8 Sep 2009 19:24:58 -0000	1.5
+++ 389-ds-base.spec	6 Oct 2009 02:37:03 -0000
@@ -1,15 +1,15 @@
 
 %define pkgname   dirsrv
 
 Summary:          389 Directory Server (base)
 Name:             389-ds-base
-Version:          1.2.2
-Release:          2%{?dist}
+Version:          1.2.3
+Release:          1%{?dist}
 License:          GPLv2 with exceptions
 URL:              http://port389.org/
 Group:            System Environment/Daemons
 BuildRoot:        %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 Provides:         fedora-ds-base = %{version}-%{release}
 Obsoletes:        fedora-ds-base < 1.2.1-1
 
 BuildRequires:    nspr-devel
@@ -141,29 +141,39 @@
 --                  print(fullname.." is linked to "..linked)
                     %{pkgname}_savelinks[fullname] = linked
                 end
             end
         end
     end
 end
 
-%post
-/sbin/chkconfig --add %{pkgname}
-/sbin/ldconfig
-# this has been problematic - if this directory
-# does not exist, the server will silently fail to
-# start - however, if the user has already created
-# it, we don't want to overwrite the permissions
-# on it - so we can't list it explicitly in the
-# files section - we list it as a ghost so that
-# it will be removed when the rpm is removed
-if [ ! -d %{_localstatedir}/run/%{pkgname} ] ; then
-    mkdir -p %{_localstatedir}/run/%{pkgname}
-fi
+%post -p <lua>
+os.execute('/sbin/chkconfig --add %{pkgname}')
+os.execute('/sbin/ldconfig')
+-- this has been problematic - if this directory
+-- does not exist, the server will silently fail to
+-- start - however, if the user has already created
+-- it, we don't want to overwrite the permissions
+-- on it - so we can't list it explicitly in the
+-- files section - we list it as a ghost so that
+-- it will be removed when the rpm is removed
+if not posix.access("%{_localstatedir}/run/%{pkgname}") then
+    posix.mkdir("%{_localstatedir}/run/%{pkgname}")
+end
+-- since posttrans is not passed the upgrade status, we get
+-- it here
+if (arg[2] > 1) or %{pkgname}_exists then
+--    print("in %{pkgname} post - upgrading")
+    %{pkgname}_upgrading = true
+else
+--    print("in %{pkgname} post - installing")
+    %{pkgname}_upgrading = false
+end
+
 
 %preun
 if [ $1 = 0 ]; then
         /sbin/service %{pkgname} stop >/dev/null 2>&1 || :
         /sbin/chkconfig --del %{pkgname}
 fi
 
 %postun -p /sbin/ldconfig
@@ -172,32 +182,71 @@
 -- if we saved the run level configuration in %pre, restore it now
 -- we can get rid of this code once Fedora 11 becomes obsolete
 if %{pkgname}_savelinks then
     for fullpath,link in pairs(%{pkgname}_savelinks) do
         posix.symlink(link,fullpath)
 --        print("posttrans - restored run level "..fullpath.." to "..link)
     end
 end
+if %{pkgname}_upgrading then
+    instbase = "%{_sysconfdir}/%{pkgname}"
+--    print("posttrans - upgrading - looking for instances in "..instbase)
+-- find all instances
+    instances = {} -- instances that require a restart after upgrade
+    for dir in posix.files(instbase) do
+--        print("dir="..dir)
+        if string.find(dir,"^slapd-") and not string.find(dir,"\.removed$") then
+            inst = string.gsub(dir,"^slapd[-]", "")
+--            print("found instance "..inst.." getting status")
+            rc = os.execute('/sbin/service %{pkgname} status '..inst..' >/dev/null 2>&1')
+-- if instance is running, we must restart it after upgrade
+            if rc == 0 then
+                instances[inst] = inst
+--                print("instance "..inst.." is running")
+--            else
+--                print("instance "..inst.." is shutdown")
+            end
+        end
+    end
+-- shutdown all instances
+--    print("shutting down all instances . . .")
+    os.execute('/sbin/service %{pkgname} stop > /dev/null 2>&1')
+-- do the upgrade
+--    print("upgrading instances . . .")
+    os.execute('%{_sbindir}/setup-ds.pl -l /dev/null -u -s General.UpdateMode=offline > /dev/null 2>&1')
+-- restart instances that require it
+    for inst,dummy in pairs(instances) do
+--        print("restarting instance "..inst)
+        os.execute('/sbin/service %{pkgname} start '..inst..' >/dev/null 2>&1')
+    end
+end
+-- if we upgraded from fedora to 389, the upgrade will shutdown
+-- all old running instances, so we have to start them here
 if %{pkgname}_exists then
+--    print("restarting all instances due to package rename")
     os.execute('/sbin/service %{pkgname} start >/dev/null 2>&1')
 end
+   
 
 %files
 %defattr(-,root,root,-)
 %doc LICENSE EXCEPTION LICENSE.GPLv2
 %dir %{_sysconfdir}/%{pkgname}
 %dir %{_sysconfdir}/%{pkgname}/schema
 %config(noreplace)%{_sysconfdir}/%{pkgname}/schema/*.ldif
 %dir %{_sysconfdir}/%{pkgname}/config
 %config(noreplace)%{_sysconfdir}/%{pkgname}/config/slapd-collations.conf
 %config(noreplace)%{_sysconfdir}/%{pkgname}/config/certmap.conf
+%config(noreplace)%{_sysconfdir}/%{pkgname}/config/ldap-agent.conf
+%config(noreplace)%{_sysconfdir}/%{pkgname}/config/template-initconfig
 %config(noreplace)%{_sysconfdir}/sysconfig/%{pkgname}
 %{_datadir}/%{pkgname}
 %{_sysconfdir}/rc.d/init.d/%{pkgname}
+%{_sysconfdir}/rc.d/init.d/%{pkgname}-snmp
 %{_bindir}/*
 %{_sbindir}/*
 %dir %{_libdir}/%{pkgname}
 %{_libdir}/%{pkgname}/*.so.*
 %{_libdir}/%{pkgname}/perl
 %dir %{_libdir}/%{pkgname}/plugins
 %{_libdir}/%{pkgname}/plugins/*.so
 %dir %{_localstatedir}/lib/%{pkgname}
@@ -208,16 +257,23 @@
 
 %files devel
 %defattr(-,root,root,-)
 %doc LICENSE EXCEPTION LICENSE.GPLv2 README.devel
 %{_includedir}/%{pkgname}
 %{_libdir}/%{pkgname}/*.so
 
 %changelog
+* Mon Sep 14 2009 Rich Megginson <rmeggins@xxxxxxxxxx> - 1.2.3-1
+- 1.2.3 release
+- added template-initconfig to %files
+- %posttrans now runs update to update the server instances
+- servers are shutdown, then restarted if running before install
+- scriptlets mostly use lua now to pass data among scriptlet phases
+
 * Tue Sep 08 2009 Nathan Kinder <nkinder@xxxxxxxxxx> - 1.2.2-2
 - removed BuildRequires for lm_sensors on s390 and s390x
 
 * Thu Aug 20 2009 Rich Megginson <rmeggins@xxxxxxxxxx> - 1.2.2-1
 - backed out - added template-initconfig to %files - this change is for the next major release
 - bump version to 1.2.2
 - fix reopened 509472 db2index all does not reindex all the db backends correctly
 - fix 518520 -  pre hashed salted passwords do not work

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

--
389-devel mailing list
389-devel@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/fedora-directory-devel

[Index of Archives]     [Fedora Directory Announce]     [Fedora Users]     [Older Fedora Users Mail]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Devel Java]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Review]     [Fedora Art]     [Fedora Music]     [Fedora Packaging]     [CentOS]     [Fedora SELinux]     [Big List of Linux Books]     [KDE Users]     [Fedora Art]     [Fedora Docs]

  Powered by Linux