왜 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가 해당 심볼릭 링크를 생성하기로 결정한 방법 (btw.break 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옵션에 대해 연결됩니다.

관련 정보