libdb2.so.1: cannot open shared object file

I got this error starting a ruby application:

/usr/local/rvm/gems/ruby-1.9.3-p547/gems/bundler-1.7.3/lib/bundler/runtime.rb:76:in `require': 
libdb2.so.1: cannot open shared object file: 
No such file or directory - 
/usr/local/rvm/gems/ruby-1.9.3-p547/extensions/x86_64-linux/1.9.1/ibm_db-2.5.11/ibm_db.so (LoadError)

An .so is a Linux library, equivalent to a .dll on Windows or a .dylib on Mac. Note that there are two different libraries mentioned. ibm_db.so is present, while libdb2.so.1 is missing.

You can verify the dependencies using the ldd command:

$ ldd /usr/local/rvm/gems/ruby-1.9.3-p547/extensions/x86_64-linux/1.9.1/ibm_db-2.5.11/ibm_db.so
    linux-vdso.so.1 =>  (0x00007fff93545000)
    libruby.so.1.9 => /usr/local/rvm/rubies/ruby-1.9.3-p547/lib/libruby.so.1.9 (0x00007fb8ba5a5000)
    libdb2.so.1 => not found
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fb8ba37f000)
    librt.so.1 => /lib64/librt.so.1 (0x00007fb8ba177000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007fb8b9f72000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fb8b9d3b000)
    libm.so.6 => /lib64/libm.so.6 (0x00007fb8b9ab7000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fb8b9722000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003730400000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00007fb8b94ab000)

For me, the issue was caused by a missing IBM Data Server Driver directory. IBM_DB_LIB was pointing to a non-existent directory:

$ set | grep IBM
IBM_DB_DIR=/tmp/dsdriver/.
IBM_DB_HOME=/tmp/dsdriver/.
IBM_DB_INCLUDE=/tmp/dsdriver/./include
IBM_DB_LIB=/tmp/dsdriver/./lib

Reinstalling the Data Server Driver restored the libdb2.so.1 and eliminated the error.

(If you run into this issue with different libraries, you will likely need to examine your LD_LIBRARY_PATH environment variable and use the ldconfig command to reload any changes.)

Published by

Leons Petrazickis

I'm a full-stack developer at IBM Digital Business Group. I do Ruby, Node, Python, Hadoop, Spark, as well as web scale devops with Docker and Terraform. My opinions are my own.