為不同的目標硬體編譯 Apache mod_ssl(硬體能力不支持 SSE2 錯誤)
我正在一台機器(“建構”機器)上建構和打包以下內容,並嘗試在其他機器(“目標”機器)上安裝和使用,其中一些具有不同的處理器。
- 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 的步驟。
- 下載以下軟體
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
預設為
gcc
at/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
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 來完成配置