I am attempting to read and write the RPM database located in /var/lib/rpm under CentOS 5, and eventually other system types (CentOS 6, RHEL, etc.)

The problem is that I don't know what version of Berkeley DB is being used.

The file command on the database file reports "data".

I tried opening the database using Berkeley DB versions 3.3, 4.4 and 6.1, but that fails with "Invalid argument".

Here is the code I am using (this for 4.4/6.1)

int main()
    #define DATABASE "__db.001"

    DB *dbp;
    int ret;

    if ((ret = db_create(&dbp, NULL, 0)) != 0) {
        fprintf(stderr, "db_create: %s\n", db_strerror(ret));
        exit (1);

    if ((ret = dbp->open(
        dbp, NULL, DATABASE, NULL, DB_UNKNOWN, 0, 0664)) != 0) {
        dbp->err(dbp, ret, "%s", DATABASE);

Any hints about what is going wrong?

1 Answer 1


It turns out that the files in /var/lib/rpm with db in their names are not Berkeley database files. The files with no db in their names are Berkeley database files.

So trying to open a file named __db.001 is the wrong thing to do.

(Thought about just deleting the question, but other people may run into this).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.