dist-upgrade: usage of rpm in pre-/postinstall scripts

Alexander 'Leo' Bergolth leo at strike.wu-wien.ac.at
Sat Jan 24 13:45:22 UTC 2009


When upgrading to Fedora 10, the newer Berkeley-DB version used in F10
causes the following error messages after RPM itself has been upgraded:

-------------------- 8< --------------------
rpmdb: Program version 4.5 doesn't match environment version 0.128
error: db4 error(-30972) from dbenv->open: DB_VERSION_MISMATCH: Database
environment version mismatch
error: cannot open Packages index using db3 -  (-30972)
error: cannot open Packages database in /var/lib/rpm
-------------------- 8< --------------------

This is because some environment files (__db.00*) of the rpm-database
remain from the previous version. To work around this error, rpm has a
posttrans scriptlet that deletes those environment files:

-------------------- 8< --------------------
posttrans scriptlet (using /bin/sh):
# XXX this is klunky and ugly, rpm itself should handle this
if [ -x "$dbstat" ]; then
    if "$dbstat" -e -h /var/lib/rpm 2>&1 | grep -q "doesn't match
environment version \| Invalid argument"; then
        rm -f /var/lib/rpm/__db.*
exit 0
-------------------- 8< --------------------

However, this scriptlet is called after the rpm transaction has
finished, so any other rpm that follows the rpm-upgrade in the same
transaction and that calls rpm inside one of its scriptlets will produce
the error and the corresponding script will fail.

When doing a dist-upgrade, even when only upgrading rpm as a first step,
the packages needed to satisfy the dependencies will cause the above
error. (E.g. openldap-servers contains a call to "rpm -q" in order to
check if the ldap-database needs to be migrated.)

Is there any workaround for this problem?

e-mail   ::: Leo.Bergolth (at) wu-wien.ac.at
fax      ::: +43-1-31336-906050
location ::: Computer Center | Vienna University of Economics | Austria

More information about the Rpm-list mailing list