我正在尝试从源代码重建 apache,但遇到了以前没有遇到过的问题。
我过去多次从源代码构建了 apache 版本 2.4.57,并且在此make
阶段没有出现任何问题。
我抓住阿帕奇:
wget https://archive.apache.org/dist/httpd/httpd-2.4.57.tar.gz
配置它:
./configure --prefix=/path/to/server --with-ssl=/opt/openssl/bin
并尝试构建:
make
但后来我收到这个错误:
/usr/share/apr-1.0/build/libtool --silent --mode=link x86_64-linux-gnu-gcc -pthread \
-o ab ab.lo /usr/lib/x86_64-linux-gnu/libaprutil-1.la /usr/lib/x86_64-linux-gnu/libapr-1.la -lm -lssl -lcrypto
/usr/bin/ld: ab.o: in function `ssl_print_cert_info':
ab.c:(.text+0xa94): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.o: in function `ssl_print_info':
ab.c:(.text+0xc6c): undefined reference to `SSL_get1_peer_certificate'
/usr/bin/ld: ab.o: in function `ssl_proceed_handshake':
ab.c:(.text+0xe0c): undefined reference to `SSL_get1_peer_certificate'
/usr/bin/ld: ab.c:(.text+0xe2b): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.c:(.text+0xefc): undefined reference to `EVP_PKEY_get_id'
/usr/bin/ld: ab.c:(.text+0xf2d): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.c:(.text+0xf62): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.c:(.text+0xff5): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.c:(.text+0x102f): undefined reference to `EVP_PKEY_get_bits'
/usr/bin/ld: ab.c:(.text+0x103d): undefined reference to `EVP_PKEY_get_id'
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:73: ab] Error 1
make[2]: Leaving directory '/srv/apache/httpd-2.4.57/support'
make[1]: *** [/srv/apache/httpd-2.4.57/build/rules.mk:75: all-recursive] Error 1
make[1]: Leaving directory '/srv/apache/httpd-2.4.57/support'
make: *** [/srv/apache/httpd-2.4.57/build/rules.mk:75: all-recursive] Error 1
尝试解决方案
我最近一直在玩postfix
,并遇到了其中版本的问题openssl
。在尝试解决这个问题时,我似乎改变了我的系统openssl
库,现在 apache 无法构建。
在尝试修复时Openssl
,我怀疑问题可能是我的 openssl 版本对于 apache 版本 2.4.57 来说太现代(3.2.1),因此,按照这篇文章:
https://askubuntu.com/questions/1126893/how-to-install-openssl-1-1-1-and-libssl-package
我降级到1.1.1版本。我将 apache 配置为使用此版本进行构建。不幸的是,没有运气。
尽管在网上搜索,我找不到解决这个特定问题的任何方法。我也很难找到关于 apache 需要什么版本的 OpenSSL 的参考,或者是否可以配置 apache 来构建而不使用这些库。可能是一面./configure
旗帜?我不介意在没有 SSL 支持的情况下构建。
如果有人可以通过特定的解决方案或有关 httpd 所需版本的可能提示来阐明这种情况,我将不胜感激。
更新
我按照评论中的建议,重复了上面引用的 openssl 版本 3.0.2 的 stackoverflow 帖子中列出的 Openssl 说明。运行时make test
,一些测试失败:
Test Summary Report
-------------------
25-test_verify.t (Wstat: 512 Tests: 160 Failed: 2)
Failed tests: 157-158
Non-zero exit status: 2
80-test_cms.t (Wstat: 1792 Tests: 12 Failed: 7)
Failed tests: 2-6, 9, 12
Non-zero exit status: 7
80-test_ssl_new.t (Wstat: 256 Tests: 30 Failed: 1)
Failed test: 12
Non-zero exit status: 1
Files=242, Tests=3284, 433 wallclock secs ( 8.33 usr 0.51 sys + 391.95 cusr 46.46 csys = 447.25 CPU)
Result: FAIL
尽管出现这些测试错误,我还是继续安装 Openssl。当我配置 apache 时:
./configure --with-ssl=/opt/openssl
没有错误 - 问题已解决。
我不清楚这些make test
错误指的是什么 - 如果有人能阐明这一点,我将不胜感激。
感谢评论中的 @steeldriver 以及实践中的确认,我知道 httpd-2.4.57 可以与 openssl-3.0.2 一起使用 - 我不清楚如何找到 httpd 的依赖项要求。如果有人能再次指出我正确的方向,我将不胜感激。