Building knot-resolver from sources doesn't link libkres.so
When you build from sources on Ubuntu following the documentation, libkres.so isn't linked correctly. Trying kresd -h
gets error while loading shared libraries: libkres.so.3: cannot open shared object file: No such file or directory
. You have to explicitly set LD_LIBRARY_PATH
before you can run kresd
, which seems pretty non-optimal.
A fuller description of reproducing the problem is here. Note that in the output of make
, the LIBDIR is correctly reported.
Create a droplet on Digital Ocean (Ubuntu 16.04.2 x64, $5/mo, no IPv6) and ssh in as root.
LC_ALL=C.UTF-8 add-apt-repository -y ppa:cz.nic-labs/knot-dns
LC_ALL=C.UTF-8 add-apt-repository -y ppa:cz.nic-labs/knot-resolver
apt update
apt -y upgrade
apt install -y build-essential libssl-dev pkg-config libuv1-dev libcmocka-dev libluajit-5.1-dev autoconf libtool liburcu-dev libgnutls28-dev libedit-dev
apt install -y libknot-dev
wget https://secure.nic.cz/files/knot-resolver/knot-resolver-1.3.0.tar.xz
tar -xf knot-resolver-1.3.0.tar.xz
cd knot-resolver-1.3.0/
make PREFIX=/forknot
make install PREFIX=/forknot
ldconfig
/forknot/sbin/kresd -h # This fails
export LD_LIBRARY_PATH=/forknot/lib
/forknot/sbin/kresd -h # This works
The output of the first make:
fatal: Not a git repository (or any of the parent directories): .git
Target: Knot DNS Resolver 1.3.0-POSIX
Compiler: cc -std=c99 -D_GNU_SOURCE -Wno-unused -Wtype-limits -Wformat -Wformat-security -Wall -I/root/knot-resolver-1.3.0 -I/root/knot-resolver-1.3.0/lib/generic -I/root/knot-resolver-1.3.0/contrib -I/root/knot-resolver-1.3.0/contrib/lmdb -DPACKAGE_VERSION="\"1.3.0\"" -DPREFIX="\"/forknot\"" -DMODULEDIR="\"/forknot/lib/kdns_modules\"" -O2 -D_FORTIFY_SOURCE=2 -I/usr/include/p11-kit-1 -I/usr/include/luajit-2.1 -I/usr/include/p11-kit-1 -Icontrib/ccan/compiler -Icontrib/ccan/ilog -Icontrib/ccan/isaac -Icontrib/ccan/json -Icontrib/ccan/asprintf -Icontrib/murmurhash3 -DENABLE_COOKIES
Variables
---------
HARDENING: yes
BUILDMODE: dynamic
PREFIX: /forknot
PREFIX: /forknot
DESTDIR:
BINDIR: /forknot/bin
SBINDIR: /forknot/sbin
LIBDIR: /forknot/lib
ETCDIR: /forknot/etc/kresd
INCLUDEDIR: /forknot/include
MODULEDIR: /forknot/lib/kdns_modules
Core Dependencies
------------
[yes] libknot (lib)
[yes] embedded lmdb (lib)
[yes] luajit (daemon)
[yes] libuv (daemon)
[yes] libgnutls (daemon)
Optional
--------
[no] doxygen (doc)
[no] sphinx-build (doc)
[no] python-breathe (doc)
[no] go (modules/go, Go buildmode=c-shared support)
[no] libmemcached (modules/memcached)
[no] hiredis (modules/redis)
[yes] cmocka (tests/unit)
[no] systemd (daemon)
[yes] nettle (modules/cookies)
[no] Lua socket ltn12 (trust anchor bootstrapping)
[no] Lua ssl.https (trust anchor bootstrapping)
[yes] libedit (client)
[no] libfstrm (modules/dnstap)
[no] libprotobuf-c (modules/dnstap)
[no] proto-c (modules/dnstap)
CC lib/generic/lru.c
CC lib/generic/map.c
CC lib/layer/iterate.c
CC lib/layer/validate.c
CC lib/layer/rrcache.c
CC lib/layer/pktcache.c
CC lib/dnssec/nsec.c
CC lib/dnssec/nsec3.c
CC lib/dnssec/signature.c
CC lib/dnssec/ta.c
CC lib/dnssec.c
CC lib/utils.c
CC lib/nsrep.c
CC lib/module.c
CC lib/resolve.c
CC lib/zonecut.c
CC lib/rplan.c
CC lib/cache.c
CC lib/cdb_lmdb.c
CC lib/cookies/alg_containers.c
CC lib/cookies/alg_sha.c
CC lib/cookies/helper.c
CC lib/cookies/lru_cache.c
CC lib/cookies/nonce.c
CC contrib/ccan/asprintf/asprintf.c
CC contrib/ccan/ilog/ilog.c
CC contrib/ccan/isaac/isaac.c
CC contrib/ccan/json/json.c
CC contrib/ucw/mempool.c
CC contrib/murmurhash3/murmurhash3.c
CC contrib/base32hex.c
CC contrib/base64.c
CC contrib/lmdb/mdb.c
CC contrib/lmdb/midl.c
AR contrib/contrib.a
CCLD lib/libkres.so
ln -s -f libkres.so.3 lib/libkres.so
CC daemon/io.c
CC daemon/network.c
XXD_LUA daemon/lua/sandbox.lua
XXD_LUA daemon/lua/config.lua
CC daemon/engine.c
CC daemon/worker.c
CC daemon/bindings.c
CC daemon/ffimodule.c
CC daemon/tls.c
CC daemon/tls_ephemeral_credentials.c
CC daemon/main.c
CCLD daemon/kresd
SED daemon/lua/kres.lua.in
SED daemon/lua/trust_anchors.lua.in
SED daemon/lua/zonefile.lua.in
CC daemon/kresc.c
CCLD daemon/kresc
CC modules/hints/hints.c
CCLD modules/hints/hints.so
CC modules/stats/stats.c
CCLD modules/stats/stats.so
CC modules/cookies/cookiectl.c
CC modules/cookies/cookiemonster.c
CC modules/cookies/cookies.c
CCLD modules/cookies/cookies.so
SED modules/version/version.lua.in
The output of make install:
fatal: Not a git repository (or any of the parent directories): .git
install -d /forknot/lib
install lib/libkres.so.3 /forknot/lib/
ln -s -f libkres.so.3 /forknot/lib/libkres.so
install -d /forknot/include/libkres
install -m 644 lib/generic/array.h lib/generic/lru.h lib/generic/map.h lib/generic/set.h lib/layer.h lib/dnssec/nsec.h lib/dnssec/nsec3.h lib/dnssec/signature.h lib/dnssec/ta.h lib/dnssec.h lib/utils.h lib/nsrep.h lib/module.h lib/resolve.h lib/zonecut.h lib/rplan.h lib/cache.h lib/cdb.h lib/cdb_lmdb.h lib/cookies/alg_containers.h lib/cookies/alg_sha.h lib/cookies/control.h lib/cookies/helper.h lib/cookies/lru_cache.h lib/cookies/nonce.h /forknot/include/libkres
install -d -m 755 /forknot/lib/pkgconfig
install -m 644 libkres.pc /forknot/lib/pkgconfig
install -d /forknot/sbin
install daemon/kresd /forknot/sbin
install -d /forknot/lib/kdns_modules
install -m 0644 daemon/lua/kres.lua daemon/lua/kres-gen.lua daemon/lua/trust_anchors.lua daemon/lua/zonefile.lua /forknot/lib/kdns_modules
sed -e "s/@VERSION@/1.3.0/" -e "s/@DATE@/2017-06-13/" \
-e "s|@MODULEDIR@|/forknot/lib/kdns_modules|" \
doc/kresd.8.in > doc/kresd.8
install -d -m 0755 /forknot/share/man/man8/
install -m 0644 doc/kresd.8 /forknot/share/man/man8/
install -d /forknot/sbin
install daemon/kresc /forknot/sbin
install modules/hints/hints.so /forknot/lib/kdns_modules
install modules/stats/stats.so /forknot/lib/kdns_modules
install modules/cookies/cookies.so /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/ketcd/ketcd.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/graphite/graphite.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/policy/policy.lua modules/policy/aho-corasick.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/view/view.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/predict/predict.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/dns64/dns64.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/renumber/renumber.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules/http
install -m 0644 modules/http/static/glyphicons-halflings-regular.woff2 modules/http/static/epoch.css modules/http/static/jquery.js modules/http/static/bootstrap.min.css modules/http/static/selectize.bootstrap3.min.css modules/http/static/d3.js modules/http/static/bootstrap-theme.min.css modules/http/static/kresd.css modules/http/static/dygraph-combined.js modules/http/static/LICENSE modules/http/static/selectize.min.js modules/http/static/datamaps.world.min.js modules/http/static/epoch.js modules/http/static/favicon.ico modules/http/static/main.tpl modules/http/static/bootstrap.min.js modules/http/static/selectize.min.css modules/http/static/kresd.js modules/http/static/topojson.js /forknot/lib/kdns_modules/http
install -m 0644 modules/http/http.lua modules/http/prometheus.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules/daf
install -m 0644 modules/daf/daf.js /forknot/lib/kdns_modules/daf
install -m 0644 modules/daf/daf.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/workarounds/workarounds.lua /forknot/lib/kdns_modules
install -d /forknot/lib/kdns_modules
install -m 0644 modules/version/version.lua /forknot/lib/kdns_modules
install -m 0750 -d /forknot/etc/kresd
install -m 0640 etc/icann-ca.pem etc/config.cluster etc/config.isp etc/config.personal etc/config.splitview /forknot/etc/kresd