I am trying to RPM build apache 2.4.18 with mod_http2 on CentOS 7. However, when building I get the following failure:
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)
However, my nghttp2 and libnghttp2 versions are both 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.
From my httpd.spec
, I have added the following configuration options:
%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
And my libnghttp2 is installed in /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
The only file in /usr/share/nghttp2
is fetch-ocsp-response
.
Hopefully I have provided sufficient information, but if more is needed please ask. What is the problem and how do I fix it?
To me it seems just a bad message from the configure script.
I've checked with a basic configuration from EPEL, which uses slightly different versions than the ones you propose.
You should install the libnghttp2-devel package as well for the build (put it in your BuildRequires as well), while you need libnghttp2 for runtime (put it in your Requires).
Suggestion (disclaimer: I'm the author): if you want an easy yet effective and reproducible way to build and rebuild RPMs from a spec, check out this project:
https://github.com/alanfranz/docker-rpm-builder/