зачем ldconfig создает символическую ссылку на libselinux.so.1 из libext2fs.so.2?

зачем ldconfig создает символическую ссылку на libselinux.so.1 из libext2fs.so.2?

используя straceЯ нашел поведение ldconfig(glibc), я не могу понять

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это общая библиотека для программного обеспечения, работающего с SELinux. Даже команды ls, cp, mv, psобычно связаны с ним (для соответствующей -Zопции).

Связанный контент