4

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?

Ashley Bye
  • 1,752
  • 2
  • 23
  • 40
  • Can't help with rpmbuild as don't use it myself but can point you to my blog page here which shows you the manual steps to install it if that helps at all?: https://www.tunetheweb.com/performance/http2/ – Barry Pollard Feb 15 '16 at 21:10

1 Answers1

4

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/

Alan Franzoni
  • 3,041
  • 1
  • 23
  • 35
  • 1
    I stumbled upon the lack of libnghttp2-devel a couple of days ago and forgot to update here, but thanks for getting back to me. I'll take a look at the rpm builder linked. – Ashley Bye Feb 20 '16 at 12:15