Ich strace
habe ein Verhalten von ldconfig
(glibc) gefunden, ich kann keinen Sinn darin erkennen
lstat("/usr/lib/libext2fs.so.2", {st_mode=S_IFLNK|0777, st_size=16, ...}) = 0
unlink("/usr/lib/libext2fs.so.2") = 0
symlink("libselinux.so.1", "/usr/lib/libext2fs.so.2") = 0
Ist es notwendig, dass die gemeinsam genutzte Objektbibliothek ext2fs
( libext2fs.so.2
) ein symbolischer Link zu ist libselinux.so.1
?
Woher weiß ldconfig, was zu tun ist? Es erscheint mir nicht logisch, dass diese statische Binärdatei /usr/bin/ldconfig
ein solches Verhalten fest codiert haben sollte, oder? Die Konfigurationsdatei /etc/ld.so.conf
hilft mir jedoch nicht viel, dieses Rätsel zu lösen.
Was das Ganze noch verwirrender/verdächtiger macht: Ich kann mit den Tools meiner Distribution (Arch Linux) kein Paket finden, zu dem die Datei gehört.
$ pkgfile /usr/lib/libselinux.so.1
zeigt kein Paket an, während $ pkgfile /usr/lib/libext2fs.so
Ausgängecore/e2fsprogs
Meine Frage lautet also konkret:
- welche Rolle diese libselinux.so.1 hier spielt
- wie ldconfig zu der Entscheidung kommt, diesen symbolischen Link zu erstellen (der übrigens nicht funktioniert
e2fsck
)
Antwort1
Ihre Bibliothek wurde wahrscheinlich irgendwann versehentlich von /usr/lib/libselinux.1
in umbenannt /usr/lib/libext2fs.so.2
. Dies verhindert jedoch nichtldconfigum den erwarteten Namen aus dem Inhalt der Bibliothek zu finden (anstatt dem Dateinamen der Bibliothek) und so den "richtigen" Namen zu verknüpfen. Dies kann überprüft werden, indem man eine beliebige Bibliothek in ein Verzeichnis kopiert und fragtldconfigum (nur) dieses Verzeichnis zu aktualisieren.
Hier das Äquivalent unter Debian 9:
$ mkdir /tmp/foo
$ cp -aL /lib/x86_64-linux-gnu/libselinux.so.1 /tmp/foo/libmytest.so.2
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
$ /sbin/ldconfig -v -n /tmp/foo
/tmp/foo:
libselinux.so.1 -> libmytest.so.2 (changed)
$ ls -l /tmp/foo/*
-rw-r--r-- 1 test test 155400 Sep 24 2017 /tmp/foo/libmytest.so.2
lrwxrwxrwx 1 test test 14 Jun 5 23:33 /tmp/foo/libselinux.so.1 -> libmytest.so.2
Übrigenslibselinuxist eine gemeinsame Bibliothek für Software zur SELinux. Sogar die Befehle ls
, cp
, mv
, ps
sind normalerweise damit verknüpft (für ihre jeweilige -Z
Option).