今天是2014-05-27,今天遇到一個lib問題,再次記錄一下。這是一個案例,更是一種解決該問題的方法過程。
當我們在使用sqlplus 登陸unix數據庫的時候,有可能出現類似:xxxxxx bad ELF interpreter: No such file or directory的問題。該問題的原因也是lib的問題。正常情況如下:
[root@dg1 ~]# su - oracle [oracle@dg1 ~]$ ldd `which sqlplus` linux-vdso.so.1 => (0x00007fff2e5ff000) libsqlplus.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libsqlplus.so (0x00007fba1fef6000) libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1 (0x00007fba1d48b000) libnnz11.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib/libnnz11.so (0x00007fba1d0be000) libdl.so.2 => /lib64/libdl.so.2 (0x0000003c93800000) libm.so.6 => /lib64/libm.so.6 (0x0000003c94400000) libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003c94000000) libnsl.so.1 => /lib64/libnsl.so.1 (0x0000003ca3000000) libc.so.6 => /lib64/libc.so.6 (0x0000003c93c00000) libaio.so.1 => /lib64/libaio.so.1 (0x00007fba1cea4000) /lib64/ld-linux-x86-64.so.2 (0x0000003c93400000) [oracle@dg1 ~]$
但有時候可能會缺失相應的lib文件。
那麼對於該問題的解決思路是:
1、查看程序缺少的lib文件是那些
2、判斷對應的lib文件時缺少還是環境變量問題。
3、如果是lib文件缺少那麼需要安裝對應的軟件包或是復制對應的lib文件。如果是環境變量問題,那就需要更具不同系統設置不同的環境變量了。
另外對於oracle我們安裝的32位的是lib32,是64位的那麼是lib目錄。
如下是我今天遇到的一個啟動RealSync的例子,其他程序類似:
啟動Realsync提示如下錯誤:
dsg@dg2 scripts]$ ./start ./start: /dsg/bin/archivelog: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory ./start: /dsg/bin/archivelog: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory [dsg@dg2 scripts]$ ./stop INFO: Stop realsync normally... INFO: Stopping Vagentd ... INFO: Stopping Loader -s for fullsync loader ... INFO: Stopping Loader -r for realsync loader ... [dsg@dg2 scripts]$ [dsg@dg2 scripts]$ exit
那麼對於ld-linux.so.2是對應的glibc.i686這個包。因此進行安裝:如下:
[root@dg2 ~]# cd /media/OL6.4\ x86_64\ Disc\ 1\ 20130225/Packages/ [root@dg2 Packages]# yum install glibc.i686 Loaded plugins: refresh-packagekit, security oel6 | 3.7 kB 00:00 ... Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package glibc.i686 0:2.12-1.107.el6 will be installed --> Processing Dependency: libfreebl3.so(NSSRAWHASH_3.12.3) for package: glibc-2.12-1.107.el6.i686 --> Processing Dependency: libfreebl3.so for package: glibc-2.12-1.107.el6.i686 --> Running transaction check ---> Package nss-softokn-freebl.i686 0:3.12.9-11.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================= Package Arch Version Repository Size ======================================================================================================================= Installing: glibc i686 2.12-1.107.el6 oel6 4.3 M Installing for dependencies: nss-softokn-freebl i686 3.12.9-11.el6 oel6 116 k Transaction Summary ======================================================================================================================= Install 2 Package(s) Total download size: 4.4 M Installed size: 13 M Is this ok [y/N]: y Downloading Packages: ----------------------------------------------------------------------------------------------------------------------- Total 60 MB/s | 4.4 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : nss-softokn-freebl-3.12.9-11.el6.i686 1/2 Installing : glibc-2.12-1.107.el6.i686 2/2 Verifying : glibc-2.12-1.107.el6.i686 1/2 Verifying : nss-softokn-freebl-3.12.9-11.el6.i686 2/2 Installed: glibc.i686 0:2.12-1.107.el6 Dependency Installed: nss-softokn-freebl.i686 0:3.12.9-11.el6 Complete! [root@dg2 Packages]# su - dsg [dsg@dg2 bin]$ cd ../ ;cd scripts/;./start dsg 4416 4391 0 11:48 pts/0 00:00:00 /dsg/bin/archivelog /dsg/log/log.vagentd /dsg/log/archivelog/log.vagentd_archlog 43200 5G dsg 4426 4391 0 11:48 pts/0 00:00:00 /dsg/bin/archivelog /dsg/log/log.r0 /dsg/log/archivelog/log.r0_archlog 43200 5G [dsg@dg2 scripts]$
這是沒有錯誤提示,查看日志如下:
[dsg@dg2 log]$ tail -f log.vagentd /dsg/bin/vagentd: error while loading shared libraries: libclntsh.so.11.1: wrong ELF class: ELFCLASS64 tail: log.vagentd: file truncated
查看該程序的使用lib信息:
[dsg@dg2 scripts]$ cd ../bin [dsg@dg2 bin]$ ldd vagentd linux-gate.so.1 => (0xf77a6000) libclntsh.so.11.1 => not found libnnz.so => not found libpthread.so.0 => /lib/libpthread.so.0 (0xf7773000) libcrypt.so.1 => /lib/libcrypt.so.1 (0xf7743000) libdl.so.2 => /lib/libdl.so.2 (0xf773d000) libm.so.6 => /lib/libm.so.6 (0xf7713000) librt.so.1 => /lib/librt.so.1 (0xf770a000) libc.so.6 => /lib/libc.so.6 (0x48cb8000) /lib/ld-linux.so.2 (0x48c96000) libfreebl3.so => /lib/libfreebl3.so (0xf76bb000) [dsg@dg2 bin]$
可以知道目前有兩個問題,一個是libnnz.so沒有,另一個是libclntsh.so.11.1沒有。需要做的是安裝相應的軟件包或是直接復制相應的lib文件到相應目錄。
現在需要做的事是修改環境變量
[dsg@dg2 ~]$ more .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH ####ORACLE#######3333 export TMP=/tmp export TMPDIR=/tmp export ORACLE_BASE=/u01/app/oracle export ORACLE_SID=dg2 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 stty erase ^H [dsg@dg2 ~]$ vi .bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin export PATH ####ORACLE#######3333 export TMP=/tmp export TMPDIR=/tmp export ORACLE_BASE=/u01/app/oracle export ORACLE_SID=dg2 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 stty erase ^H export LD_LIBRARY_PATH=$ORACLE_HOME/lib32:/u01/app/oracle/product/11.2.0/dbhome_1/lib32
再次查看該所需程序lib文件信息:
[dsg@dg2 bin]$ ldd vagentd linux-gate.so.1 => (0xf77ef000) libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libclntsh.so.11.1 (0xf5af0000) libnnz.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libnnz.so (0xf58a3000) libpthread.so.0 => /lib/libpthread.so.0 (0xf5871000) libcrypt.so.1 => /lib/libcrypt.so.1 (0xf5840000) libdl.so.2 => /lib/libdl.so.2 (0xf583b000) libm.so.6 => /lib/libm.so.6 (0xf5811000) librt.so.1 => /lib/librt.so.1 (0xf5808000) libc.so.6 => /lib/libc.so.6 (0x48cb8000) libnnz11.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libnnz11.so (0xf55ba000) libnsl.so.1 => /lib/libnsl.so.1 (0xf559f000) /lib/ld-linux.so.2 (0x48c96000) libaio.so.1 => not found libfreebl3.so => /lib/libfreebl3.so (0xf5550000) [dsg@dg2 bin]$
那麼需要安裝libaio.so.1對應的軟件包:
[root@dg2 Packages]# yum install libaio- libaio-0.3.107-10.el6.i686.rpm libaio-0.3.107-10.el6.x86_64.rpm libaio-devel-0.3.107-10.el6.i686.rpm libaio-devel-0.3.107-10.el6.x86_64.rpm [root@dg2 Packages]# yum install libaio-0.3.107-10.el6.i686.rpm Loaded plugins: refresh-packagekit, security Setting up Install Process Examining libaio-0.3.107-10.el6.i686.rpm: libaio-0.3.107-10.el6.i686 Marking libaio-0.3.107-10.el6.i686.rpm to be installed Resolving Dependencies --> Running transaction check ---> Package libaio.i686 0:0.3.107-10.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ======================================================================================================================================================================= Package Arch Version Repository Size ======================================================================================================================================================================= Installing: libaio i686 0.3.107-10.el6 /libaio-0.3.107-10.el6.i686 31 k Transaction Summary ======================================================================================================================================================================= Install 1 Package(s) Total size: 31 k Installed size: 31 k Is this ok [y/N]: Y Downloading Packages: Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : libaio-0.3.107-10.el6.i686 1/1 Verifying : libaio-0.3.107-10.el6.i686 1/1 Installed: libaio.i686 0:0.3.107-10.el6 Complete! [root@dg2 Packages]#
再次查看:
[dsg@dg2 bin]$ ldd vagentd linux-gate.so.1 => (0xf772c000) libclntsh.so.11.1 => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libclntsh.so.11.1 (0xf5a2d000) libnnz.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libnnz.so (0xf57e0000) libpthread.so.0 => /lib/libpthread.so.0 (0xf57ae000) libcrypt.so.1 => /lib/libcrypt.so.1 (0xf577d000) libdl.so.2 => /lib/libdl.so.2 (0xf5778000) libm.so.6 => /lib/libm.so.6 (0xf574e000) librt.so.1 => /lib/librt.so.1 (0xf5745000) libc.so.6 => /lib/libc.so.6 (0x48cb8000) libnnz11.so => /u01/app/oracle/product/11.2.0/dbhome_1/lib32/libnnz11.so (0xf54f7000) libnsl.so.1 => /lib/libnsl.so.1 (0xf54dc000) libaio.so.1 => /lib/libaio.so.1 (0xf54da000) /lib/ld-linux.so.2 (0x48c96000) libfreebl3.so => /lib/libfreebl3.so (0xf548b000) [dsg@dg2 bin]$
啟動RealSync:
[dsg@dg2 scripts]$ ./start dsg 5203 1 0 12:04 pts/1 00:00:00 /dsg/bin/vagentd 50001 dsg 5204 5203 0 12:04 pts/1 00:00:00 /dsg/bin/vagentd 50001 dsg 5214 1 0 12:04 pts/1 00:00:00 /dsg/bin/loader -r -qno 0 1 dsg 5216 5214 0 12:04 pts/1 00:00:00 /dsg/bin/loader -r -qno 0 1 dsg 5213 1 0 12:04 pts/1 00:00:00 /dsg/bin/loader -s -qno 0 1 dsg 5215 5213 0 12:04 pts/1 00:00:00 /dsg/bin/loader -s -qno 0 1 dsg 5199 5174 0 12:04 pts/1 00:00:00 /dsg/bin/archivelog /dsg/log/log.vagentd /dsg/log/archivelog/log.vagentd_archlog 43200 5G dsg 5208 5174 0 12:04 pts/1 00:00:00 /dsg/bin/archivelog /dsg/log/log.r0 /dsg/log/archivelog/log.r0_archlog 43200 5G [dsg@dg2 scripts]$
至此問題得到解決: