1

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
  • Did the header get installed? – o11c Oct 6 '14 at 5:11
  • @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? – MLister Oct 6 '14 at 6:11
  • 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. – o11c Oct 6 '14 at 7:18
  • @o11c, thanks. The header file is installed, it is at: /usr/local/include/maxminddb.h. Strange, so what else could cause the problem? – MLister Oct 6 '14 at 7:22
  • @o11c, is it possible that the script only looks in /usr/include but not in /usr/local/include? – MLister Oct 6 '14 at 7:24
0

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.