ablog

不器用で落着きのない技術者のメモ

Solaris10 x86 (32bit) に PSR10.2.0.4 を適用すると、"wrong ELF machine type: EM_SPARC"

PSR10.2.0.4 を適用した後にインストール・ログをチェックすると何やらエラーが。。。

$ less /export/home/oracle/oraInventory/logs/installActions2009-01-01_02-03-35AM.log
INFO: ld: 
INFO: warning: 
INFO: file 
INFO: /export/home/oracle/product/10.2.0/db_1/lib//libnavhoa.a(hoaapi.o)
INFO: : wrong ELF machine type: 
INFO: EM_SPARC
...
INFO: ld: 
INFO: fatal: 
INFO: File processing errors. No output written to 
INFO: /export/home/oracle/product/10.2.0/db_1/rdbms/lib/hsodbc

make.log にも同様のエラーが。。。

$ /export/home/oracle/product/10.2.0/db_1/install/make.log
/usr/ccs/bin/make -f /export/home/oracle/product/10.2.0/db_1/rdbms/lib/ins_rdbms.mk ihsodbc_int 
...
ld: warning: file /export/home/oracle/product/10.2.0/db_1/lib//libnavhoa.a(hoaapi.o): wrong ELF machine type: EM_SPARC
ld: fatal: file /export/home/oracle/product/10.2.0/db_1/lib//libhsnav.so: wrong ELF machine type: EM_SPARC
ld: fatal: file /export/home/oracle/product/10.2.0/db_1/lib//libhsbase.so: wrong ELF machine type: EM_SPARC
ld: fatal: File processing errors. No output written to /export/home/oracle/product/10.2.0/db_1/rdbms/lib/hsodbc
*** Error code 1
make: Fatal error: Command failed for target `/export/home/oracle/product/10.2.0/db_1/rdbms/lib/hsodbc'
Current working directory /export/home/oracle/product/10.2.0/db_1/rdbms/lib
*** Error code 1
make: Fatal error: Command failed for target `ihsodbc32'

エラーが出ているオブジェクトファイルをチェックすると "SPARC" になっている。

$ cd /export/home/oracle/product/10.2.0/db_1/lib/
$ file * | grep SPARC
hsdb_odbc.so:   ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
hsdb_ora.so:    ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libhsbase.so:   ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
libhsnav.so:    ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped

インストーラの中身を調べてみる。

$ cd /export/home/oracle/setup/oracle10201/database
$ find . -type f -name "*.jar" -depth -print | 
while read LINE; do 
  echo $LINE ': ' `jar tf $LINE`; 
done | egrep "hsdb|libhs"
./stage/Components/oracle.rdbms.hs_common/10.2.0.2.0/1/DataFiles/filegroup4.jar :  lib/libnavhoa.a lib/libhsnav.so lib/libhsbase.so lib/hsdb_ora.so lib/hsdb_odbc.so
$ jar -xf filegroup4.jar
$ file lib/*
lib/hsdb_odbc.so:       ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
lib/hsdb_ora.so:        ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
lib/libhsbase.so:       ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
lib/libhsnav.so:        ELF 32-bit MSB dynamic lib SPARC Version 1, dynamically linked, not stripped
lib/libnavhoa.a:        current ar archive, not a dynamic executable or shared object

ん〜、インストーラに入っているダイナミックリンクライブラリの問題な気がする。。。

追記(2010/01/29):
while 使わなくても xargs でいけるな。

$ find . -type f -name '*.jar' -print0|xargs -0 -n1 jar tf