Apache-2.2

為不同的目標硬體編譯 Apache mod_ssl(硬體能力不支持 SSE2 錯誤)

  • October 2, 2015

我正在一台機器(“建構”機器)上建構和打包以下內容,並嘗試在其他機器(“目標”機器)上安裝和使用,其中一些具有不同的處理器。

  • OpenSSL 0.9.8l
  • 阿帕奇 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-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

測試

此時一切都將在建構機器上執行。一旦我打包這些文件並將它們安裝在目標機器上,當 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:不支持硬體功能:
0x1000 [ SSE2 ]

我通過在具有與目標機器等效的硬體的機器上建構包並使用 Sun Studio CC 編譯器而不是 gcc 來解決這個問題。

以下是我在 Solaris 10 上成功建構和安裝 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. 驗證 Make 和 CC

預設為gccat/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. 編譯安裝 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

預設情況下,它會在 /usr/local/ssl 安裝 openssl 4. 安裝 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,等等。 5. 建構並安裝 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 來完成配置

引用自:https://serverfault.com/questions/88243