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
Hi!
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
dbstat=/usr/bin/db45_stat
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.*
fi
fi
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?
Cheers,
--leo
--
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