warum sollte ldconfig einen symbolischen Link von libselinux.so.1 zu libselinux.so.1 erstellen?

warum sollte ldconfig einen symbolischen Link von libselinux.so.1 zu libselinux.so.1 erstellen?

Ich stracehabe 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/ldconfigein solches Verhalten fest codiert haben sollte, oder? Die Konfigurationsdatei /etc/ld.so.confhilft 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:

  1. welche Rolle diese libselinux.so.1 hier spielt
  2. 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.1in 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, pssind normalerweise damit verknüpft (für ihre jeweilige -ZOption).

verwandte Informationen