使用して(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
私の質問は具体的には次の通りです:
- ここでのlibselinux.so.1の役割は何でしょうか
- 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
はこれにリンクされています (それぞれのオプションに対して)。mv
ps
-Z