
- Arch Linux 2011.08.19 (Linux 3.4.2 i686)
- Apache 2.2.22 → 2.2.22(重新編譯和重新安裝)
- OpenSSL 1.0.1.c-1
這些細節可能無關緊要,但是:每次有可用升級時,我都會使用 yaourt 和 custompkg 從原始碼建立 Apache,這樣我就可以將 suexec docroot 更改為我想要的內容,而無需自行手動編輯 PKGBUILD。
在過去,這種方法完美無缺。然而,現在看來,無論出於何種原因,Apache 都無法編譯。我剛剛進行了完整的系統升級,因此可能與此有關。
以下是修改後的 PKGBUILD 中的設定行:
../configure --enable-layout=Arch \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-suexec \
--with-suexec-caller=http \
--with-suexec-docroot=/srv/www \
--with-suexec-logfile=/var/log/httpd/suexec.log \
--with-suexec-bin=/usr/sbin/suexec \
--with-suexec-uidmin=99 --with-suexec-gidmin=99 \
--enable-ldap --enable-authnz-ldap \
--enable-cache --enable-disk-cache --enable-mem-cache --enable-file-cache \
--enable-ssl --with-ssl \
--enable-deflate --enable-cgid \
--enable-proxy --enable-proxy-connect \
--enable-proxy-http --enable-proxy-ftp \
--enable-dbd \
--with-apr=/usr/bin/apr-1-config \
--with-apr-util=/usr/bin/apu-1-config \
--with-pcre=/usr \
--with-mpm=${mpm}
當我嘗試建置時,它似乎運作良好,直到它到達 OpenSSL 的東西:
mkdir modules/ssl
checking whether to enable mod_ssl... checking dependencies
checking for SSL/TLS toolkit base... none
checking for OpenSSL version... checking openssl/opensslv.h usability... yes
checking openssl/opensslv.h presence... yes
checking for openssl/opensslv.h... yes
checking openssl/ssl.h usability... yes
checking openssl/ssl.h presence... yes
checking for openssl/ssl.h... yes
OK
forcing SSL_LIBS to "-lssl -lcrypto "
adding "-lssl" to LIBS
adding "-lcrypto" to LIBS
checking openssl/engine.h usability... yes
checking openssl/engine.h presence... yes
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
checking for ENGINE_init... no
checking for ENGINE_load_builtin_engines... no
checking for SSL_set_cert_store... no
configure: error: ... Error, SSL/TLS libraries were missing or unusable
==> ERROR: A failure occurred in build().
Aborting...
==> ERROR: Makepkg was unable to build apache.
==> Restart building apache ? [y/N]
==> -------------------------------
==>
谷歌搜尋後,許多人報告解決方案是export LDFLAGS=-ldl
,但這對我沒有任何影響,無論是在建置腳本中還是在我的 bash 設定檔中設定。
答案1
我在將 openssl 從 0.9.8zb 升級到 1.0.1i 時遇到了同樣的問題。
$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl -fPIC
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install
$/tmp/src/httpd-2.2.27/ ./config --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl
...
$configure: error: ... Error, SSL/TLS libraries were missing or unusable
設定環境的解決方案都無法修復我收到的錯誤訊息。
我的解決方案是:
$/tmp/src/openssl-1.0.1i/ ./config --prefix=/usr/local/openssl-1.0.1 -shared -fPIC
$/tmp/src/openssl-1.0.1i/ make clean
$/tmp/src/openssl-1.0.1i/ make
$/tmp/src/openssl-1.0.1i/ make test
$/tmp/src/openssl-1.0.1i/ sudo make install
$sudo /sbin/ldconfig -v /usr/local/openssl-1.0.1/lib
$/tmp/src/httpd-2.2.27/ make clean && make distclean
$/tmp/src/httpd-2.2.27/ ./configure --enable-so --enable-ssl=shared --with-ssl=/usr/local/openssl-1.0.1
$/tmp/src/httpd-2.2.27/ make
$/tmp/src/httpd-2.2.27/ sudo make install
該問題已透過 openssl 配置中的 -shared 值修復。現在我面臨另一個問題,即 sslv2 方法無法存取。但這與這個問題無關,我還沒有答案。
我將繼續搜尋有關 sslv2 問題的答案,並在解決後將其發佈到相關的 stackexchange 主題。
答案2
其他Google搜尋可能會引導您設定一些環境變量,如下所示:
$ env LDFLAGS=-ldl
或者
$ export LIBS=-ldl
第一個對我來說失敗了,並給了我同樣的錯誤,但第二個有效。
如果第一個不適合您,因為您需要將命令作為單行運行。因為它需要 LDFLAGS 變數運行時並且不會保存。
例如: env LDFLAGS="-ldl" \ ./configure --prefix=/some/path ...
答案3
看起來 httpd 設定包含錯誤版本的 OpenSSL。
checking for openssl/engine.h... yes
checking for SSLeay_version... no
checking for SSL_CTX_new... no
如果您安裝了多個 OpenSSL,則可能會發生這種情況。嘗試設定該--with-ssl
選項以符合最新 OpenSSL 安裝的前綴。
--enable-ssl \
--with-ssl=/usr/local \
答案4
發生這種情況是因為 openssl 的 pkg-config 檔案不再指定對 libdl 的依賴關係。查看較新版本的 openssl.pc,您會發現不再包含 -ldl。
這就是設定LIBS=-ldl
起作用的原因(以及可能影響共享物件使用的其他方法)。
根據 CHANGES 日誌,從 0.9.6h 到 0.9.7 進行了修改,這樣 openssl 並不總是需要動態共享物件載入。我不相信 openssl.pc 檔案的更改是同時發生的。我沒查到這個改動是什麼時候發生的。
所以我認為這在技術上是 Apache 使用 pkg-config 來確定建置所需的函式庫的一個錯誤。我剛剛在嘗試建立 Apache 2.2.31 時遇到了同樣的問題,所以這個問題已經存在很長一段時間了。