baffled by a slightly broken systemd and /lib/systemd/libsystemd-shared-235.so
It seems that I have annoyed the runtime loader in that something as
simple as a shutdown now issues these concerns :
nix ppc64# shutdown -r "now"
shutdown: /usr/local/lib/libblkid.so.1: no version information available
(required by /lib/systemd/libsystemd-shared-235.so)
shutdown: /usr/local/lib/libblkid.so.1: no version information available
(required by /lib/systemd/libsystemd-shared-235.so)
shutdown: /usr/local/lib/libblkid.so.1: no version information available
(required by /lib/systemd/libsystemd-shared-235.so)
shutdown: /usr/local/lib/libuuid.so.1: no version information available
(required by /lib/powerpc64-linux-gnu/libcryptsetup.so.4)
shutdown: relocation error: /lib/systemd/libsystemd-shared-235.so:
symbol blkid_free_probe version BLKID_2.15 not defined in file
libblkid.so.1 with link time reference
nix ppc64#
For reasons yet unknown the runtime loader is looking *first* into my
local /usr/local/lib area and finding a newly built e2fsprogs shared
object /usr/local/lib/libblkid.so.1 and also /usr/local/lib/libuuid.so.1
which are both just fine as they are. Both are the result of
e2fsprogs-1.44.1 which was released 25-Mar-2018.
I see why the problem is happening in that the systemd shared object
at /lib/systemd/libsystemd-shared-235.so has a ghastly huge 3070 entries
in its '.gnu.version' elf section as well as some version needed into in
the section '.gnu.version_r'. This is interesting :
0x00c0: Version: 1 File: libblkid.so.1 Cnt: 3
0x00d0: Name: BLKID_2.18 Flags: none Version: 20
0x00e0: Name: BLKID_2.17 Flags: none Version: 9
0x00f0: Name: BLKID_2.15 Flags: none Version: 6
What baffles me is why look in /usr/local/lib to satisfy these verneed
symbol requirements?
If I do something obscure and set :
LD_LIBRARY_PATH=/lib/powerpc64-linux-gnu
Then ldd is happy and finds everything needed in the system lib area.
Just watch :
root@nix:~# LD_LIBRARY_PATH=/lib/powerpc64-linux-gnu ldd
/lib/systemd/libsystemd-shared-235.so
linux-vdso64.so.1 (0x00007fffadd40000)
libpthread.so.0 => /lib/powerpc64-linux-gnu/libpthread.so.0
(0x00007fffada20000)
libc.so.6 => /lib/powerpc64-linux-gnu/libc.so.6
(0x00007fffad810000)
librt.so.1 => /lib/powerpc64-linux-gnu/librt.so.1
(0x00007fffad7e0000)
libcap.so.2 => /lib/powerpc64-linux-gnu/libcap.so.2
(0x00007fffad7b0000)
libacl.so.1 => /lib/powerpc64-linux-gnu/libacl.so.1
(0x00007fffad780000)
libcryptsetup.so.4 =>
/lib/powerpc64-linux-gnu/libcryptsetup.so.4 (0x00007fffad720000)
libgcrypt.so.20 => /lib/powerpc64-linux-gnu/libgcrypt.so.20
(0x00007fffad620000)
libip4tc.so.0 => /usr/lib/powerpc64-linux-gnu/libip4tc.so.0
(0x00007fffad5e0000)
libseccomp.so.2 => /lib/powerpc64-linux-gnu/libseccomp.so.2
(0x00007fffad570000)
libselinux.so.1 => /lib/powerpc64-linux-gnu/libselinux.so.1
(0x00007fffad510000)
libidn.so.11 => /lib/powerpc64-linux-gnu/libidn.so.11
(0x00007fffad4b0000)
liblzma.so.5 => /lib/powerpc64-linux-gnu/liblzma.so.5
(0x00007fffad460000)
liblz4.so.1 => /usr/lib/powerpc64-linux-gnu/liblz4.so.1
(0x00007fffad420000)
libblkid.so.1 => /lib/powerpc64-linux-gnu/libblkid.so.1
(0x00007fffad390000)
/lib64/ld64.so.1 (0x00007fffadd60000)
libattr.so.1 => /lib/powerpc64-linux-gnu/libattr.so.1
(0x00007fffad360000)
libuuid.so.1 => /lib/powerpc64-linux-gnu/libuuid.so.1
(0x00007fffad330000)
libdevmapper.so.1.02.1 =>
/lib/powerpc64-linux-gnu/libdevmapper.so.1.02.1 (0x00007fffad280000)
libgpg-error.so.0 => /lib/powerpc64-linux-gnu/libgpg-error.so.0
(0x00007fffad230000)
libpcre.so.3 => /lib/powerpc64-linux-gnu/libpcre.so.3
(0x00007fffad190000)
libdl.so.2 => /lib/powerpc64-linux-gnu/libdl.so.2
(0x00007fffad160000)
libudev.so.1 => /lib/powerpc64-linux-gnu/libudev.so.1
(0x00007fffad110000)
libm.so.6 => /lib/powerpc64-linux-gnu/libm.so.6
(0x00007fffad010000)
Happy happy joy joy everywhere.
Take away LD_LIBRARY_PATH and we see this :
root@nix:~# unset LD_LIBRARY_PATH
root@nix:~# ldd /lib/systemd/libsystemd-shared-235.so
/lib/systemd/libsystemd-shared-235.so: /usr/local/lib/libblkid.so.1: no
version information available (required by
/lib/systemd/libsystemd-shared-235.so)
/lib/systemd/libsystemd-shared-235.so: /usr/local/lib/libblkid.so.1: no
version information available (required by
/lib/systemd/libsystemd-shared-235.so)
/lib/systemd/libsystemd-shared-235.so: /usr/local/lib/libblkid.so.1: no
version information available (required by
/lib/systemd/libsystemd-shared-235.so)
/lib/systemd/libsystemd-shared-235.so: /usr/local/lib/libuuid.so.1: no
version information available (required by
/lib/powerpc64-linux-gnu/libcryptsetup.so.4)
linux-vdso64.so.1 (0x00007fffa85a0000)
libpthread.so.0 => /lib/powerpc64-linux-gnu/libpthread.so.0
(0x00007fffa8270000)
libc.so.6 => /lib/powerpc64-linux-gnu/libc.so.6
(0x00007fffa8060000)
librt.so.1 => /lib/powerpc64-linux-gnu/librt.so.1
(0x00007fffa8030000)
libcap.so.2 => /lib/powerpc64-linux-gnu/libcap.so.2
(0x00007fffa8000000)
libacl.so.1 => /lib/powerpc64-linux-gnu/libacl.so.1
(0x00007fffa7fd0000)
libcryptsetup.so.4 =>
/lib/powerpc64-linux-gnu/libcryptsetup.so.4 (0x00007fffa7f70000)
libgcrypt.so.20 => /lib/powerpc64-linux-gnu/libgcrypt.so.20
(0x00007fffa7e70000)
libip4tc.so.0 => /usr/lib/powerpc64-linux-gnu/libip4tc.so.0
(0x00007fffa7e40000)
libseccomp.so.2 => /lib/powerpc64-linux-gnu/libseccomp.so.2
(0x00007fffa7dd0000)
libselinux.so.1 => /lib/powerpc64-linux-gnu/libselinux.so.1
(0x00007fffa7d70000)
libidn.so.11 => /lib/powerpc64-linux-gnu/libidn.so.11
(0x00007fffa7d10000)
liblzma.so.5 => /usr/local/lib/liblzma.so.5 (0x00007fffa7cb0000)
liblz4.so.1 => /usr/lib/powerpc64-linux-gnu/liblz4.so.1
(0x00007fffa7c70000)
libblkid.so.1 => /usr/local/lib/libblkid.so.1 (0x00007fffa7c30000)
/lib64/ld64.so.1 (0x00007fffa85c0000)
libattr.so.1 => /lib/powerpc64-linux-gnu/libattr.so.1
(0x00007fffa7c00000)
libuuid.so.1 => /usr/local/lib/libuuid.so.1 (0x00007fffa7bd0000)
libdevmapper.so.1.02.1 =>
/lib/powerpc64-linux-gnu/libdevmapper.so.1.02.1 (0x00007fffa7b20000)
libgpg-error.so.0 => /lib/powerpc64-linux-gnu/libgpg-error.so.0
(0x00007fffa7ad0000)
libpcre.so.3 => /lib/powerpc64-linux-gnu/libpcre.so.3
(0x00007fffa7a30000)
libdl.so.2 => /lib/powerpc64-linux-gnu/libdl.so.2
(0x00007fffa7a00000)
libudev.so.1 => /lib/powerpc64-linux-gnu/libudev.so.1
(0x00007fffa79b0000)
libm.so.6 => /lib/powerpc64-linux-gnu/libm.so.6
(0x00007fffa78b0000)
root@nix:~#
Does this mean I need to hack /etc/ld.so.conf.d/libc.conf and remove the
line "/usr/local/lib" ? That would leave /etc/ld.so.conf.d/libc.conf as
an empty file.
Really baffled why system libs and system packages are hunting into my
own experimental /usr/local for anything .. ever.
For the moment this works :
root@nix:~# LD_LIBRARY_PATH=/lib/powerpc64-linux-gnu shutdown -r "now"
Connection to 172.16.35.5 closed by remote host.
Connection to 172.16.35.5 closed.
Dennis
ps: ref "ELF Symbol Versioning" by Ulrich Drepper
https://www.akkadia.org/drepper/symbol-versioning
Reply to: