apache mod_http2 先决条件失败
apache mod_http2 prerequisite failures
我正在尝试在 CentOS 7 上使用 mod_http2 以 RPM 构建 apache 2.4.18。但是,在构建时出现以下故障:
checking whether to enable mod_http2... checking dependencies
checking for nghttp2... checking for user-provided nghttp2 base directory... /usr/lib64
checking for pkg-config along :/usr/lib64/pkgconfig:/usr/share/pkgconfig... adding "-I/usr/lib64/include" to CPPFLAGS
setting MOD_CFLAGS to "-I/usr/lib64/include"
setting ab_CFLAGS to "-I/usr/lib64/include"
adding "-L/usr/lib64/lib" to LDFLAGS
setting MOD_LDFLAGS to "-L/usr/lib64/lib"
checking for nghttp2 version >= 1.2.1... FAILED
configure: WARNING: nghttp2 version is too old
no
checking whether to enable mod_http2... configure: error: mod_http2 has been requested but can not be built due to prerequisite failures
error: Bad exit status from /var/tmp/rpm-tmp.aOryWX (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.aOryWX (%build)
但是,我的nghttp2和libnghttp2版本都是1.7.1:
Installed Packages
Name : nghttp2
Arch : x86_64
Version : 1.7.1
Release : 1.el7.centos
Size : 1.3 M
Repo : installed
From repo : local
Summary : Experimental HTTP/2 client, server and proxy
URL : https://nghttp2.org/
Licence : MIT
Description : This package contains the HTTP/2 client, server and proxy programs.
Installed Packages
Name : libnghttp2
Arch : x86_64
Version : 1.7.1
Release : 1.el7.centos
Size : 139 k
Repo : installed
From repo : local
Summary : A library implementing the HTTP/2 protocol
URL : https://nghttp2.org/
Licence : MIT
Description : libnghttp2 is a library implementing the Hypertext Transfer Protocol
: version 2 (HTTP/2) protocol in C.
根据我的 httpd.spec
,我添加了以下配置选项:
%configure \
--enable-layout=RPM \
--libdir=%{_libdir} \
--sysconfdir=%{_sysconfdir}/httpd/conf \
--includedir=%{_includedir}/httpd \
--libexecdir=%{_libdir}/httpd/modules \
--datadir=%{contentdir} \
--with-installbuilddir=%{_libdir}/httpd/build \
--enable-mpms-shared=all \
--with-apr=%{_prefix} --with-apr-util=%{_prefix} \
--enable-suexec --with-suexec \
--with-suexec-caller=%{suexec_caller} \
--with-suexec-docroot=%{contentdir} \
--with-suexec-logfile=%{_localstatedir}/log/httpd/suexec.log \
--with-suexec-bin=%{_sbindir}/suexec \
--with-suexec-uidmin=500 --with-suexec-gidmin=100 \
--enable-pie \
--with-pcre \
--enable-mods-shared=all \
--enable-ssl --with-ssl --enable-socache-dc --enable-bucketeer \
--enable-case-filter --enable-case-filter-in \
--enable-http --enable-http2 --with-nghttp2=%{_libdir} \
--disable-imagemap
我的 libnghttp2 安装在 /usr/lib64:
sudo find / -iname "*nghttp2*"
[sudo] password for administrator:
/home/administrator/rpmbuild/RPMS/x86_64/nghttp2-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/libnghttp2-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/libnghttp2-devel-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/nghttp2-debuginfo-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/SRPMS/nghttp2-1.7.1-1.el7.src.rpm
/var/lib/yum/yumdb/l/56527c0ccd96b61605f75b8cb07ebee7b2901c17-libnghttp2-1.7.1-1.el7.centos-x86_64
/var/lib/yum/yumdb/n/4630c64bc127ec7ed9b842ee49923baa493c05b5-nghttp2-1.7.1-1.el7.centos-x86_64
/var/repos/centos/7/nghttp2-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/nghttp2-debuginfo-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/libnghttp2-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/libnghttp2-devel-1.7.1-1.el7.centos.x86_64.rpm
/usr/lib64/libnghttp2.so.14
/usr/lib64/libnghttp2.so.14.4.1
/usr/share/licenses/libnghttp2-1.7.1
/usr/share/nghttp2
/usr/share/nghttp2
中唯一的文件是 fetch-ocsp-response
。
希望我提供了足够的信息,但如果需要更多信息,请询问。有什么问题,我该如何解决?
对我来说,这似乎只是来自配置脚本的错误消息。
我已经检查了 EPEL 的基本配置,它使用的版本与您建议的略有不同。
您还应该为构建安装 libnghttp2-devel 软件包(也将其放入您的 BuildRequires 中),而您需要 libnghttp2 用于运行时(将其放入您的 Requires)。
建议(免责声明:我是作者):如果您想要一种简单但有效且可重现的方法来根据规范构建和重建 RPM,请查看此项目:
我正在尝试在 CentOS 7 上使用 mod_http2 以 RPM 构建 apache 2.4.18。但是,在构建时出现以下故障:
checking whether to enable mod_http2... checking dependencies
checking for nghttp2... checking for user-provided nghttp2 base directory... /usr/lib64
checking for pkg-config along :/usr/lib64/pkgconfig:/usr/share/pkgconfig... adding "-I/usr/lib64/include" to CPPFLAGS
setting MOD_CFLAGS to "-I/usr/lib64/include"
setting ab_CFLAGS to "-I/usr/lib64/include"
adding "-L/usr/lib64/lib" to LDFLAGS
setting MOD_LDFLAGS to "-L/usr/lib64/lib"
checking for nghttp2 version >= 1.2.1... FAILED
configure: WARNING: nghttp2 version is too old
no
checking whether to enable mod_http2... configure: error: mod_http2 has been requested but can not be built due to prerequisite failures
error: Bad exit status from /var/tmp/rpm-tmp.aOryWX (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.aOryWX (%build)
但是,我的nghttp2和libnghttp2版本都是1.7.1:
Installed Packages
Name : nghttp2
Arch : x86_64
Version : 1.7.1
Release : 1.el7.centos
Size : 1.3 M
Repo : installed
From repo : local
Summary : Experimental HTTP/2 client, server and proxy
URL : https://nghttp2.org/
Licence : MIT
Description : This package contains the HTTP/2 client, server and proxy programs.
Installed Packages
Name : libnghttp2
Arch : x86_64
Version : 1.7.1
Release : 1.el7.centos
Size : 139 k
Repo : installed
From repo : local
Summary : A library implementing the HTTP/2 protocol
URL : https://nghttp2.org/
Licence : MIT
Description : libnghttp2 is a library implementing the Hypertext Transfer Protocol
: version 2 (HTTP/2) protocol in C.
根据我的 httpd.spec
,我添加了以下配置选项:
%configure \
--enable-layout=RPM \
--libdir=%{_libdir} \
--sysconfdir=%{_sysconfdir}/httpd/conf \
--includedir=%{_includedir}/httpd \
--libexecdir=%{_libdir}/httpd/modules \
--datadir=%{contentdir} \
--with-installbuilddir=%{_libdir}/httpd/build \
--enable-mpms-shared=all \
--with-apr=%{_prefix} --with-apr-util=%{_prefix} \
--enable-suexec --with-suexec \
--with-suexec-caller=%{suexec_caller} \
--with-suexec-docroot=%{contentdir} \
--with-suexec-logfile=%{_localstatedir}/log/httpd/suexec.log \
--with-suexec-bin=%{_sbindir}/suexec \
--with-suexec-uidmin=500 --with-suexec-gidmin=100 \
--enable-pie \
--with-pcre \
--enable-mods-shared=all \
--enable-ssl --with-ssl --enable-socache-dc --enable-bucketeer \
--enable-case-filter --enable-case-filter-in \
--enable-http --enable-http2 --with-nghttp2=%{_libdir} \
--disable-imagemap
我的 libnghttp2 安装在 /usr/lib64:
sudo find / -iname "*nghttp2*"
[sudo] password for administrator:
/home/administrator/rpmbuild/RPMS/x86_64/nghttp2-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/libnghttp2-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/libnghttp2-devel-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/RPMS/x86_64/nghttp2-debuginfo-1.7.1-1.el7.centos.x86_64.rpm
/home/administrator/rpmbuild/SRPMS/nghttp2-1.7.1-1.el7.src.rpm
/var/lib/yum/yumdb/l/56527c0ccd96b61605f75b8cb07ebee7b2901c17-libnghttp2-1.7.1-1.el7.centos-x86_64
/var/lib/yum/yumdb/n/4630c64bc127ec7ed9b842ee49923baa493c05b5-nghttp2-1.7.1-1.el7.centos-x86_64
/var/repos/centos/7/nghttp2-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/nghttp2-debuginfo-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/libnghttp2-1.7.1-1.el7.centos.x86_64.rpm
/var/repos/centos/7/libnghttp2-devel-1.7.1-1.el7.centos.x86_64.rpm
/usr/lib64/libnghttp2.so.14
/usr/lib64/libnghttp2.so.14.4.1
/usr/share/licenses/libnghttp2-1.7.1
/usr/share/nghttp2
/usr/share/nghttp2
中唯一的文件是 fetch-ocsp-response
。
希望我提供了足够的信息,但如果需要更多信息,请询问。有什么问题,我该如何解决?
对我来说,这似乎只是来自配置脚本的错误消息。
我已经检查了 EPEL 的基本配置,它使用的版本与您建议的略有不同。
您还应该为构建安装 libnghttp2-devel 软件包(也将其放入您的 BuildRequires 中),而您需要 libnghttp2 用于运行时(将其放入您的 Requires)。
建议(免责声明:我是作者):如果您想要一种简单但有效且可重现的方法来根据规范构建和重建 RPM,请查看此项目: