"the geoip2 module requires the maxminddb library" but the library is installed

5,423

Solution 1

I was missing the "devel" version of maxminddb, so I used:

yum install libmaxminddb-devel

Solution 2

To anyone having this problem, here is the solution:

  1. git clone --recursive https://github.com/maxmind/libmaxminddb
  2. cd libmaxminddb
  3. ./bootstrap
  4. ./configure
  5. make
  6. make install

I noticed that initially after cloning there was no configure executable, but after running ./bootstrap, it got created. Then i run ./configure, make, make install, and then i noticed that within the folder /usr/local/include maxminddb_config.h and maxminddb.h were created.

Then i run my installation nginx script and there were no errors anymore.

Share:
5,423
MLister
Author by

MLister

Updated on September 18, 2022

Comments

  • MLister
    MLister over 1 year

    I am trying to compile nginx with a module: https://github.com/leev/ngx_http_geoip2_module. Before the nginx compilation, this library: https://github.com/maxmind/libmaxminddb needs to be installed. I followed the instructions (https://github.com/maxmind/libmaxminddb/blob/master/README.md#installing-from-a-tarball), compiled and installed the library. After the installation, ldconfig -p | grep maxminddb gives:

    libmaxminddb.so.0 (libc6,x86-64) => /usr/local/lib/libmaxminddb.so.0
    libmaxminddb.so (libc6,x86-64) => /usr/local/lib/libmaxminddb.so
    

    However, when I configure nginx with ngx_http_geoip2_module, it complains during configure:

    adding module in /home/cilium/ngx_http_geoip2_module
    checking for MaxmindDB library ... not found
    ./configure: error: the geoip2 module requires the maxminddb library.
    

    which is exactly the library I've already installed. This error seems to come from the config file of ngx_http_geoip2_module:

    ngx_feature="MaxmindDB library"
    ngx_feature_name=
    ngx_feature_run=no
    ngx_feature_incs="#include <maxminddb.h>"
    ngx_feature_libs=-lmaxminddb
    . auto/feature
    
    if [ $ngx_found = yes ]; then
        ngx_addon_name=ngx_http_geoip2_module
        HTTP_MODULES="$HTTP_MODULES ngx_http_geoip2_module"
        NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_geoip2_module.c"
        CORE_LIBS="$CORE_LIBS -lmaxminddb"
    else   
        cat << END
    $0: error: the geoip2 module requires the maxminddb library.
    END
        exit 1
    fi
    

    Does anyone know what may have gone wrong here?

    UPDATE: some relevant output by sh -x ./configure ..:

    + echo adding module in /home/cilium/ngx_http_geoip2_module
    adding module in /home/cilium/ngx_http_geoip2_module
    + test -f /home/cilium/ngx_http_geoip2_module/config
    + . /home/cilium/ngx_http_geoip2_module/config
    + ngx_feature=MaxmindDB library
    + ngx_feature_name=
    + ngx_feature_run=no
    + ngx_feature_incs=#include <maxminddb.h>
    + ngx_feature_libs=-lmaxminddb
    + . auto/feature
    + echo checking for MaxmindDB library ...\c
    checking for MaxmindDB library ...+ cat
    + ngx_found=no
    + test -n
    
    ...
    
    + [ -x objs/autotest ]
    + echo  not found
     not found
    + echo ----------
    + cat objs/autotest.c
    + echo ----------
    + echo cc -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security -D_FORTIFY_SOURCE=2 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/chromium/src -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/google-sparsehash/src -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/google-sparsehash/gen/arch/linux/x64/include -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/protobuf/src -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/re2/src -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/out/Debug/obj/gen -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/out/Debug/obj/gen/protoc_out/instaweb -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/apr/src/include -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/aprutil/src/include -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/apr/gen/arch/linux/x64/include -I /home/cilium/ngx_pagespeed-release-1.9.32.1-beta/psol/include/third_party/aprutil/gen/arch/linux/x64/include -o objs/autotest objs/autotest.c -Wl,-Bsymbolic-functions -Wl,-z,relro -lmaxminddb
    + echo ----------
    + rm -rf objs/autotest.c
    + [ no = yes ]
    + cat
    ./configure: error: the geoip2 module requires the maxminddb library.
    + exit 1
    
    • Zhang Qi
      Zhang Qi over 9 years
      Did the header get installed?
    • MLister
      MLister over 9 years
      @o11c, missing headers sounds like a possibility. I just followed the installation guide. How do I find out if headers for a specific library exist?
    • Zhang Qi
      Zhang Qi over 9 years
      locate maxminddb.h if you have your file database up-to-date, or find /usr/local/include /usr/include -name maxminddb.h if you don't. Most likely it would be in /usr/local/include since the libs were in local.
    • MLister
      MLister over 9 years
      @o11c, thanks. The header file is installed, it is at: /usr/local/include/maxminddb.h. Strange, so what else could cause the problem?
    • MLister
      MLister over 9 years
      @o11c, is it possible that the script only looks in /usr/include but not in /usr/local/include?
    • vinc17
      vinc17 over 9 years
      The configure script says that the library is not found, not that the header is not found. Look at the config.log file for the real error.
    • vinc17
      vinc17 over 9 years
      And in case the configure script doesn't put enough information in the config.log file, you can also run it with sh -x ./configure to trace the shell commands (this will give you a lot of output). Note that GCC (actually cpp) looks at /usr/local/include by default (see with cpp -v /dev/null).
    • MLister
      MLister over 9 years
      @vinc17, I don't see config.log file anywhere. Is it the log file for the configure of nginx or something else? Can you elaborate?
    • MLister
      MLister over 9 years
      @vinc17, and sh -x ./configure ... throws sh: 0: Can't open ./configure
    • vinc17
      vinc17 over 9 years
      @MLister config.log is the usual log file for configure scripts: if there is any error, you can get useful information there. When you run sh -x ./configure ..., are you sure that you are in the right directory (where the configure script is)? This is similar to ./configure ... except that the shell is run with the -x flag.
    • MLister
      MLister over 9 years
      @vinc17, I've searched the whole system, but cannot find config.log anywhere. Perhaps nginx's configure does not produce such a log. On the other hand, I've managed to run the configure with sh -x, and I've added the relevant output to my original question above.
    • Prasanth
      Prasanth over 9 years
      Are you also installing the pagespeed module? if yes, move the pagespeed argument to after this module's argument in the configure arguments. more here.