apache mod_http2 prerequisite failures

5.6k views Asked by At

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?

1

There are 1 answers

1
Alan Franzoni On BEST ANSWER

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/