针对不同的目标硬件编译Apache mod_ssl(硬件能力不支持的SSE2错误)

我在一台机器(“机器”)上构build和打包以下内容,并尝试在其他机器(“目标”机器)上安装和使用,其中一些机器具有不同的处理器。

  • OpenSSL 0.9.8l
  • Apache 2.2.14
  • Tomcat连接器1.2.28

据我所知,问题是构build机具有比目标机器更多的CPUfunction,导致目标机器上不可执行的二进制文件。 我试图使用configuration和编译器标志禁用使用有问题的指令,没有运气。

最终我得到这个错误:

$ ./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:不支持的硬件function: 
 0x1000 [SSE2]

这是我完整的构build过程。 每个命令的完整输出可以在这里查看。 由于我没有足够的SF代表,我无法直接链接到他们。

build立机器

 $ 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-configure.txt

 $ make && make test 

查看完整的输出: openssl-make-and-test.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-configure.txt

 $ make 

查看完整的输出: apache-make.txt

 $ sudo make install 

查看完整的输出: apache-make-install.txt

编译Tomcat连接器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-connector-configure.txt

 $ make 

查看完整的输出: tomcat-connector-make.txt

 $ sudo make install 

查看完整的输出: tomcat-connector-make-install.txt

testing

在这一点上,一切将在构build机器上工作。 一旦我打包这些文件并将它们安装到目标机器上,当Apache启动mod_ssl时,出现这个错误。

 $ ./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:不支持的硬件function: 
 0x1000 [SSE2]

以下是我在Solaris 10上成功构build和安装Apache httpd-2.4.10和OpenSSL openssl-1.0.1j的步骤。

  1. 下载以下软件
    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

  2. validationMake和CC
    默认情况下, gcc位于/usr/sfw/bin/gccmake位于/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

  3. build立并安装openssl-1.0.1j
    将/ openrl-1.0.1j.tar.gz解压缩到/usr/local/openssl-1.0.1j
    按顺序执行以下命令。 共享参数是非常重要的,以便它可以链接到httpd-2.4.10构buildSSL启用。

     $ cd /usr/local/openssl-1.0.1j $ ./config shared $ make $ make test $ make install 

    默认情况下,它在/ usr / local / ssl上安装openssl

  4. 安装pcre-8.36解压缩并将un-tar 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等文件。

  5. 构build并安装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来完成configuration

我通过在具有与目标计算机等效的硬件的计算机上构build软件包,并使用Sun Studio CC编译器而不是gcc来解决此问题。