今天在做一个环境迁移的时候,遇到了weblogic的 Not able to load mod_wl_20.so问题,解决后,总结一下,是以为记。
通常做apache和WebLogic集成时碰到最多的问题是Not able to load mod_wl_20.so,如:
$
${PREFIX}/
httpd -t
Syntax error on line 1083 of /home/test/apache2/conf/httpd.conf:
Cannot load /home/test/apache2/modules/mod_wl_20.so into server: /home/test/apache2/modules/mod_wl_20.so: cannot open shared object file: No such file or directory
总结该问题,可能的原因有如下几种:
1、apache编译安装时未指定动态加载DSO模块,故无法动态加载mod_wl_20.so模块
解决办法:编译安装时指定即可,如--enable-shared=max --enable-module=rewrite --enable-module=so
2、mod_wl_20.so文件不存在于${PREFIX}/modules下
解决办法:从对应的WebLogic服务所在机器上找到对应操作系统和位数的mod_wl_20.so至
${PREFIX}
/modules下
3、mod_wl_20.so有问题,如mod_wl_20.so文件与apache所在机器系统、位数不一致
以上2种可能比较不容易犯,因此最常见的原因是这种可能。
本例中以apache2.0.59+redhatAS4_X86_64集成WebLogic815为例说明
WebLogic815下的mod_wl_20.so对应的Linux下的so如下:
weblogic81/server/lib/linux/i686/mod_wl_20.so
weblogic81/server/lib/linux/s390/mod_wl_20.so
weblogic81/server/lib/linux/ia64/mod_wl_20.so
查看对应的ia64下的mod_wl_20.so如下:
$file weblogic81/server/lib/linux/ia64/mod_wl_20.so
weblogic81/server/lib/linux/ia64/mod_wl_20.so: ELF 64-bit LSB shared object, IA-64, version 1 (SYSV), not stripped
注意“IA-64”就是“64位的英特尔架构” 的CPU, IA-64微处理器最大的缺陷是它们缺乏与x86的兼容,所以他是不能用于x86_64的服务器上的。
也就是说,在类似如下的机器中:
$uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
是用不了64位的mod_wl_20.so的。因此,解决的方法之一是,使用32位的apache加载32位的mod_wl_20.so(网上未找到WebLogic815版本x86_64下的mod_wl_20.so)
解决办法:使用32位的apache加载32位的mod_wl_20.so
使用以上方法测试通过的各环境说明如下:
1、apache所在机器系统:
$ uname -a
Linux localhost.localdomain 2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
2、httpd:
$file ./httpd
./httpd: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped
3、httpd库依赖
$ ldd ./httpd
linux-gate.so.1 => (0xffffe000)
libexpat.so.0 => /usr/lib/libexpat.so.0 (0x00d03000)
librt.so.1 => /lib/tls/librt.so.1 (0xf7fb9000)
libm.so.6 => /lib/tls/libm.so.6 (0x00a70000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0xf7f8b000)
libnsl.so.1 => /lib/libnsl.so.1 (0xf7f75000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00aa5000)
libdl.so.2 => /lib/libdl.so.2 (0x00a95000)
libc.so.6 => /lib/tls/libc.so.6 (0x00943000)
/lib/ld-linux.so.2 (0x0092a000)
4、mod_wl_20.so位数:
weblogic81/server/lib/linux/i686/mod_wl_20.so
$ file mod_wl_20.so
mod_wl_20.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
5、mod_wl_20.so库依赖
$ ldd mod_wl_20.so
linux-gate.so.1 => (0xffffe000)
libc.so.6 => /lib/tls/libc.so.6 (0xf7dec000)
/lib/ld-linux.so.2 (0x56555000)
PS:
google上找了一下没有找到weblogic815下的x86_64的mod_wl_20.so。猜测原因是:
1999年,英特尔推出IA-64架构的第一颗处理器;
检查weblogic81/common/help/doc/en/cfgwizhelp/intro.html发现日期:
<meta name="LASTUPDATED" content="08/29/05 12:08:55" />
因此估计是815发布时x86_64架构的CPU还没有问世的缘故。
看到一个帖子中是这样说的:
****************************帖子说开始****************************************************
目前的weblogic8或9下的,只有支持apahce2.0.x的。所以liunx自带的apahce2.2.x不能用。要重装
apahce2.0.x
mod_wl_20.so分为两种,一种是64位和32位。
32位可以在wbelogic下的/weblogic81/server/lib/linux/i686/mod_wl_20.so下边找到。
也存在32位
只可以从weblogic920下的weblogic92/server/plugin/linux/x86_64/mod_wl_20.so
weblogic安装的时间一定要选上plugin插件:才会有mod_wl_20.so这模块
64位,只能从weblogic920下的weblogic92/server/plugin/linux/x86_64/mod_wl_20.so
注意,目前weblogic8或9只支持apahce 2.0.X ,这个mod_wl_20.so不管是weblogic8还weblogic9都
可以通用。
已验证,apahce2.0.X可以跟webloigc8或9结合,是32位或64位都可以。
****************************帖子说结束****************************************************
由于本地测试环境只有weblogic815和weblogic10.3,都没有找到x86_64的mod_wl_20.so,故以上帖子的说法未验证。