ldconfig が libext2fs.so.2 から libselinux.so.1 へのシンボリックリンクを作成するのはなぜでしょうか?

ldconfig が libext2fs.so.2 から libselinux.so.1 へのシンボリックリンクを作成するのはなぜでしょうか?

使用して(glibc)straceの動作を発見しましたがldconfig、意味がわかりません

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

ext2fs( libext2fs.so.2) の共有オブジェクト ライブラリを へのシンボリック リンクにする必要はありますかlibselinux.so.1

ldconfig はどのようにして何をすべきかを知るのでしょうか? この静的バイナリに/usr/bin/ldconfigそのような動作がハードコードされているというのは、私には論理的ではないように思えます。ただし、その構成ファイルは、/etc/ld.so.confその謎を解くのにあまり役立ちません。

私のディストリビューション ツール (Arch Linux) では、ファイルが属するパッケージが見つからないため、さらに混乱/疑わしい状況になっています。

$ pkgfile /usr/lib/libselinux.so.1

パッケージは表示されませんが、$ pkgfile /usr/lib/libext2fs.so

出力core/e2fsprogs

私の質問は具体的には次の通りです:

  1. ここでのlibselinux.so.1の役割は何でしょうか
  2. ldconfig がどのようにしてそのシンボリックリンク (ちなみに壊れるe2fsck)を作成するか

答え1

ライブラリの名前は、おそらく から の間に誤って変更された可能性があります/usr/lib/libselinux.1/usr/lib/libext2fs.so.2これにより、ldconfigライブラリのコンテンツから期待される名前(ライブラリのファイル名ではなく)を見つけ、「正しい」名前をリンクします。これは、任意のライブラリを任意のディレクトリにコピーして、ldconfigこのディレクトリのみを更新します。

以下は 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

ところでlibselinuxは、ソフトウェアを扱うための共通ライブラリです。 カーネルls、、、コマンドも通常cpはこれにリンクされています (それぞれのオプションに対して)。mvps-Z

関連情報