Development version of BIND 9 - 9.21.10 with meson build system

Havard Eidnes he at uninett.no
Thu Sep 25 18:04:24 UTC 2025


> you are the one who probably knows how to report this, so I am asking if
> you can make a magic to upgrade the userspace-rcu to something that's
> not five years old and outdated in the pkgin/pkgsrc?

You mean something like

https://mail-index.netbsd.org/pkgsrc-changes/2025/09/06/msg330001.html

Yes, that was me updating the package to 0.15.3. :)

> 2. Configure BIND 9
> LDFLAGS="$ORIGIN/../lib" PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH meson setup build --wipe -Dtracing=disabled -Dnamed-lto=off
>
>> Surely that RPATH is wrong, the first component should have been
>> "$ORIGIN/../lib/", no?

Some lost context here.  That "configure BIND 9" line wasn't the
one I specified.  Having to specify so many parameters indicates
to me that the defaults are wonky at best.

This is the relevant section of "readelf -a" for /usr/local/bin/dig:

Dynamic section at offset 0x408600 contains 33 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libdns.so]
 0x0000000000000001 (NEEDED)             Shared library: [libisc.so]
 0x0000000000000001 (NEEDED)             Shared library: [libisccfg.so]
 0x0000000000000001 (NEEDED)             Shared library: [libidn2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.12]
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/:/usr/pkg/lib]

Here I think the RPATH is wrong.

If I have understood correctly, just "$ORIGIN/" as component
means that dig will look for the shared libraries mentioned above
in /usr/local/bin/ since that's the binary's $ORIGIN.  Note:
*not* in /usr/local/lib/ where the shared libraries are installed.

As for the individual libraries::

$ ls -l /usr/pkg/lib/libdns.so
lrwxrwxr-x  1 root  wheel  17 Sep 11 17:05 /usr/pkg/lib/libdns.so -> libdns-9.20.13.so
$ ls -l /usr/pkg/lib/libisc.so
lrwxrwxr-x  1 root  wheel  17 Sep 11 17:05 /usr/pkg/lib/libisc.so -> libisc-9.20.13.so
$ ls -l /usr/pkg/lib/libisccfg.so
lrwxrwxr-x  1 root  wheel  20 Sep 11 17:05 /usr/pkg/lib/libisccfg.so -> libisccfg-9.20.13.so
$

and

$ ls -l /usr/local/lib/libdns.so
-rwxr-xr-x  1 root  wheel  10016512 Sep 11 23:12 /usr/local/lib/libdns.so
$ ls -l /usr/local/lib/libisc.so
-rwxr-xr-x  1 root  wheel  5266832 Sep 11 23:12 /usr/local/lib/libisc.so
$ ls -l /usr/local/lib/libisccfg.so
-rwxr-xr-x  1 root  wheel  4527832 Sep 11 23:12 /usr/local/lib/libisccfg.so
$

These are obviously not present in /usr/local/bin.

If we use patchelf to correct the RPATH:

# patchelf --set-rpath '$ORIGIN/../lib:/usr/pkg/lib' /usr/local/bin/dig

and "readelf -a" now says:

Dynamic section at offset 0x408600 contains 33 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libdns.so]
 0x0000000000000001 (NEEDED)             Shared library: [libisc.so]
 0x0000000000000001 (NEEDED)             Shared library: [libisccfg.so]
 0x0000000000000001 (NEEDED)             Shared library: [libidn2.so.0]
 0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.12]
 0x000000000000001d (RUNPATH)            Library runpath: [$ORIGIN/../lib:/usr/pkg/lib]

aand...

Gah!  No change:

$ type dig
dig is /usr/local/bin/dig
$ dig xxxxxx.no. ns
dig: Undefined PLT symbol "isc__lib_initialize" (symnum = 12)
$ ldd /usr/local/bin/dig
ldd: /usr/local/bin/dig: invalid ELF class 2; expected 1
$

> No, not really. This is just a weird NetBSD quirk that its dynamic linker
> can't be configured and requires RPATH for everything.

I think that "This" needs to be spelled out, but I will claim
that ld.elf_so on NetBSD isn't weirder than other such systems.
Granted, we tossed "ldconfig" and the associated functionality a
long time ago, I beleive at least partially for security reasons.

> The $ORIGIN/ is needed, so the built binaries can be executed from
> the build directory even without installing them.

Understood, but see above.  Some of the inter-library
dependencies may also require tweaking:

$ ktrace -i dig xxxxxx.no. ns
dig: Undefined PLT symbol "isc__lib_initialize" (symnum = 12)
$ kdump | grep NAMI
  7576   7576 ktrace   NAMI  "/home/he/bin/dig"
  7576   7576 ktrace   NAMI  "/usr/local/bin/dig"
  7576   7576 ktrace   NAMI  "/usr/libexec/ld.elf_so"
  7576   7576 dig      NAMI  "/etc/ld.so.conf"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libdns.so"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libdns.so"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libisc.so"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libisc.so"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libisccfg.so"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libisccfg.so"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libidn2.so.0"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libidn2.so.0"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libpthread.so.1"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libpthread.so.1"
  7576   7576 dig      NAMI  "/usr/lib/libpthread.so.1"
  7576   7576 dig      NAMI  "/usr/local/bin/../lib/libc.so.12"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libc.so.12"
  7576   7576 dig      NAMI  "/usr/lib/libc.so.12"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libnghttp2.so.14"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libuv.so.1"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libkvm.so.6"
  7576   7576 dig      NAMI  "/usr/lib/libkvm.so.6"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libssl.so.15"
  7576   7576 dig      NAMI  "/usr/lib/libssl.so.15"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libcrypto.so.15"
  7576   7576 dig      NAMI  "/usr/lib/libcrypto.so.15"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libxml2.so.16"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libz.so.1"
  7576   7576 dig      NAMI  "/usr/lib/libz.so.1"
  7576   7576 dig      NAMI  "/usr/pkg/lib/liblzma.so.2"
  7576   7576 dig      NAMI  "/usr/lib/liblzma.so.2"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libm.so.0"
  7576   7576 dig      NAMI  "/usr/lib/libm.so.0"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libfstrm.so.0"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libprotobuf-c.so.1"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libexecinfo.so.0"
  7576   7576 dig      NAMI  "/usr/lib/libexecinfo.so.0"
  7576   7576 dig      NAMI  "/usr/pkg/lib/liburcu.so.8"
  7576   7576 dig      NAMI  "/usr/pkg/lib/liburcu-cds.so.8"
  7576   7576 dig      NAMI  "/usr/pkg/lib/liburcu-common.so.8"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libgcc_s.so.1"
  7576   7576 dig      NAMI  "/usr/lib/libgcc_s.so.1"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libns-9.20.13.so"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libunistring.so.5"
  7576   7576 dig      NAMI  "/usr/pkg/lib/libintl.so.1"
  7576   7576 dig      NAMI  "/usr/lib/libintl.so.1"
  7576   7576 dig      NAMI  "/lib/libcrypt.so.1"
  7576   7576 dig      NAMI  "/usr/lib/libelf.so.2"
$

Still picking up some libraries from BIND 9.20 from
/usr/pkg/lib/, in particular /usr/pkg/lib/libns-9.20.13.so, and
that's not a direct dependency of 'dig'..

There's also some other strange RPATHs in the libraries:

$ cd /usr/local/lib
$ readelf -a libdns.so | less
...
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/:XXXXXX:/usr/pk
g/lib]
$ readelf -a libisc.so | less
...
 0x000000000000000f (RPATH)              Library rpath: [XXXXXXXXXXXXXX:/usr/pkg/lib]
$ readelf -a libisccfg.so | less
...
 0x000000000000000f (RPATH)              Library rpath: [$ORIGIN/:/usr/pkg/lib]
...

Hmm:

$ cd /usr/local/lib
$ grep -l libns-9.20.13 lib*.so
$ cd /usr/pkg/lib
$ grep -l libns-9.20.13 lib*.so
libisccfg-9.20.13.so
libisccfg.so
libns-9.20.13.so
libns.so
$

There is apparently some confusion here as well...  Yes, I've had
BIND 9.20 installed both in /usr/local before and have it in
/usr/pkg at the moment, the effect of this is partially:

$ cd /usr/local/lib
$ ls -ltr libisccfg*so
-rwxr-xr-x  1 root  wheel   529376 Feb 28  2021 libisccfg-9.16.12.so
-rwxr-xr-x  1 root  wheel   618424 Oct 31  2022 libisccfg-9.18.8.so
-rwxr-xr-x  1 root  wheel   618592 Jun  1  2023 libisccfg-9.18.15.so
-rwxr-xr-x  1 root  wheel   615560 Aug 17  2023 libisccfg-9.18.18.so
-rwxr-xr-x  1 root  wheel   616168 Apr 10  2024 libisccfg-9.18.25.so
-rwxr-xr-x  1 root  wheel   616728 Apr 17  2024 libisccfg-9.18.26.so
-rwxr-xr-x  1 root  wheel   618192 Jul 24  2024 libisccfg-9.18.28.so
-rwxr-xr-x  1 root  wheel   976504 Jul 30  2024 libisccfg-9.20.0.so
-rwxr-xr-x  1 root  wheel   986288 Oct 21  2024 libisccfg-9.20.3.so
-rwxr-xr-x  1 root  wheel  4527832 Sep 11 23:12 libisccfg.so
-rwxr-xr-x  1 root  wheel   991984 Sep 12 17:17 libisccfg-9.20.12.so
$

Will need to dig further into this.


Thanks for the hints about supplying the "-v" option to get more
details.  Before you know it you've written a "meson survival kit
for old farts" :)  I'll need to follow that up when I have more
idle time on my hands.


Best regards,

- Håvard


More information about the bind-users mailing list