我正在一台机器(“构建”机器)上构建和打包以下内容,并尝试在其他机器(“目标”机器)上安装和使用,其中一些机器具有不同的处理器。
- OpenSSL 0.9.8l
- Apache 2.2.14
- Tomcat 连接器 1.2.28
据我所知,问题在于构建机器的 CPU 能力比目标机器强,导致二进制文件无法在目标机器上执行。我尝试使用配置和编译器标志来禁用有问题的指令,但没有成功。
最终我收到此错误:
$ ./apachectl start
httpd: /usr/local/apache-2.2.14/conf/httpd.conf 第 58 行语法错误: 无法将 /usr/local/apache2/modules/mod_ssl.so 加载到服务器:ld.so.1:httpd: 致命:/usr/local/openssl/lib/libssl.so.0.9.8:硬件功能不受支持: 0x1000 [ SSE2 ]
以下是我的完整构建过程。可以查看每个命令的完整输出这里。由于我的 SF 声誉不足,我无法直接链接到他们每个人。
建造机器
$ echo $PATH
/usr/bin:/usr/ccs/bin:/usr/sfw/bin:/opt/sfw/bin:/usr/sbin
$ isainfo -v
32-bit i386 applications
pause sse2 sse fxsr mmx cmov sep cx8 tsc fpu
$ uname -a
SunOS bsiausstgdb02 5.10 Generic_120012-14 i86pc i386 i86pc
目标机器
$ isainfo -v
32-bit i386 applications
sse fxsr mmx cmov sep cx8 tsc fpu
$ uname -a
SunOS bsiausdevweb01 5.10 Generic_120012-14 i86pc i386 i86pc
编译 OpenSSL 0.9.8l
$ CC=/usr/bin/cc
$ export CC
$ CFLAGS="-xarch=sse"
$ export CFLAGS
$ ./Configure \
solaris-x86-cc \
shared \
no-asm \
no-sse2 \
-xarch=sse \
--openssldir=/usr/local/openssl-0.9.8l
查看完整输出: openssl-配置.txt
$ make && make test
查看完整输出: openssl-制作和测试.txt
$ sudo make install
查看完整输出: openssl-make-install.txt
编译Apache 2.2.14
$ CC=/usr/bin/cc
$ export CC
$ CFLAGS="-xarch=sse"
$ export CFLAGS
$ ./configure \
--prefix=/usr/local/apache-2.2.14 \
--with-mpm=prefork \
--enable-so \
--enable-unique-id=shared \
--enable-rewrite=shared \
--enable-spelling=shared \
--enable-info=shared \
--enable-headers=shared \
--enable-deflate=shared \
--enable-expires=shared \
--enable-unique-id=shared \
--enable-speling=shared \
--enable-ssl=shared \
--with-ssl=/usr/local/openssl
查看完整输出: apache-配置.txt
$ make
查看完整输出: apache-make.txt
$ sudo make install
查看完整输出: apache-make-install.txt
编译 Tomcat Connectors 1.2.28
$ CC=/usr/bin/cc
$ export CC
$ CFLAGS="-xarch=sse"
$ export CFLAGS
$ cd native
$ ./configure \
--with-apxs=/usr/local/apache2/bin/apxs
查看完整输出: tomcat-连接器配置.txt
$ make
查看完整输出: tomcat-连接器-make.txt
$ sudo make install
查看完整输出: tomcat-连接器-make-install.txt
测试
此时,构建机器上的一切都将正常工作。一旦我打包这些文件并将它们安装在目标机器上,在启用 mod_ssl 的情况下启动 Apache 时就会出现此错误。
$ ./apachectl start
httpd: /usr/local/apache-2.2.14/conf/httpd.conf 第 58 行语法错误: 无法将 /usr/local/apache2/modules/mod_ssl.so 加载到服务器:ld.so.1:httpd: 致命:/usr/local/openssl/lib/libssl.so.0.9.8:硬件功能不受支持: 0x1000 [ SSE2 ]
答案1
以下是我在 Solaris 10 上成功构建和安装 Apache httpd-2.4.10 和 OpenSSL openssl-1.0.1j 的步骤。
下载以下软件
openssl-1.0.1j.tar.gz
httpd-2.4.10.tar.gz
apr-1.5.1.tar.gz
apr-util-1.5.4.tar.gz
pcre-8.36.tar.gz验证 Make 和 CC
默认情况gcc
下为/usr/sfw/bin/gcc
且make
为/usr/ccs/bin/make
在 PATH 中包含以下内容
usr/local/ssl/bin:/usr/sfw/bin:/usr/local/bin:/usr/ccs/bin
在 LD_LIBRARY_PATH 中包含以下内容
/usr/local/lib:/usr/local/ssl/lib
构建并安装 openssl-1.0.1j
解压并解压 openssl-1.0.1j.tar.gz 并按/usr/local/openssl-1.0.1j
顺序执行以下命令。shared 参数非常重要,这样它才能与 httpd-2.4.10 构建链接以启用 SSL。$ cd /usr/local/openssl-1.0.1j $ ./config shared $ make $ make test $ make install
默认情况下,它将 openssl 安装在 /usr/local/ssl
安装 pcre-8.36 将 pcre-8.36.tar.gz 解压到 /usr/local/pcre-8.36
按顺序执行以下命令
$ cd /usr/local/ pcre-8.36 $ ./configure $ make $ make install
默认情况下,
make install
安装包的命令在 下/usr/local/bin
,包含文件在 下/usr/local/include
,等等。构建并安装httpd-2.4.10
解压并解压 httpd-2.4.10.tar.gz 到
/usr/local/httpd-2.4.10
解压并解压 apr-1.5.1.tar.gz 并将
/usr/local/httpd-2.4.10/srclib
/usr/local/apr-1.5.1 重命名为/usr/local/apr
解压并解压 apr-util-1.5.4.tar.gz 并将
/usr/local/httpd-2.4.10/srclib
/usr/local/apr-util 重命名为/usr/local/apr-util
按顺序执行以下命令
$ ./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so –enable-ssl=shared --with-ssl=/usr/local/ssl $ make $ make install
它安装在
/usr/local/apache2
安装已完成。要启用 SSL 和代理,请取消/usr/local/apache2/conf/httpd.conf
注释以下行
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_express_module modules/mod_proxy_express.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
现在您可以像平常一样处理 httpd-ssl.conf 来完成配置。
答案2
我通过在具有与目标机器相当的硬件的机器上构建软件包并使用 Sun Studio CC 编译器而不是 gcc 来解决此问题。