On 01/27/2009 09:34 AM, Panu Matilainen wrote: > On Mon, 26 Jan 2009, devzero2000 wrote: >> On Sat, Jan 24, 2009 at 2:45 PM, Alexander 'Leo' Bergolth >> <leo@xxxxxxxxxxxxxxxxxxxx> wrote: >> -------------------- 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: [...] >> Is there any workaround for this problem? >> >> IMHO, should be useful to patch RPM 4.6 (././lib/backend/db3.c db_init) >> for resolving this - old - issue. For RPM 4.4.2.x.x.x the patch is >> >> https://bugzilla.redhat.com/show_bug.cgi?id=464752 >> >> (not applied anyway in 4.4.2.3-9.el5). Not hard to do in RPM 4.6 also. >> Sorry if isn't the workround you have asked. > > Blindly blasting away the environment that provides the means for safe > concurrent access (including protects the db from being accessed with > incompatible DB version, ie the error message above) to the rpmdb when it > happens to prevent access is not a solution at all IMO. When the > underlying BDB gets upgraded, you have two versions of rpm, linked against > different, potentially incompatible versions of BDB, accessing the rpmdb > concurrently with all protection removed. Not good. > > The only thing that can safely and reliably access the rpmdb across DB > version upgrades, glibc futex implementation changes and the like, is the > single process performing the transaction. This also means there's > precisely one way scriptlets could reliably access the rpmdb, and that's > the embedded Lua interpreter. As of 4.4.2.x and 4.6.0 the embedded Lua > interpreter doesn't have access to rpmdb but there's work going on to > change that. But no, there's no good workaround at the moment. The purpose of all calls to rpm I found inside pre or post scriptlets is to obtain the version of the currently installed package or the upgrade. So I think it would be useful if RPM provided this information to the scriptlets via environment variables. All calls to rpm could be eliminated from the scriptlets this way. Cheers, --leo -- e-mail ::: Leo.Bergolth (at) wu-wien.ac.at fax ::: +43-1-31336-906050 location ::: IT-Services | Vienna University of Economics | Austria _______________________________________________ Rpm-list mailing list Rpm-list@xxxxxxxxxxxxx http://lists.rpm.org/mailman/listinfo/rpm-list