2

我正在尝试在 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/nghttp2fetch-ocsp-response.

希望我提供了足够的信息,但如果需要更多信息,请询问。有什么问题,我该如何解决?

4

1 回答 1

3

对我来说,这似乎只是来自配置脚本的一个坏消息。

我检查了 EPEL 的基本配置,它使用的版本与您建议的版本略有不同。

您还应该为构建安装libnghttp2-devel包(也将其放入 BuildRequires 中),而运行时需要libnghttp2(将其放入您的 Requires 中)。

建议(免责声明:我是作者):如果您想要一种简单而有效且可重现的方式来从规范构建和重建 RPM,请查看此项目:

https://github.com/alanfranz/docker-rpm-builder/

于 2016-02-19T13:47:10.820 回答