strace
내가 발견한 동작(glibc)을 사용하면 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는 해당 심볼릭 링크를 생성하기로 어떻게 결정합니까? (btw. broken
e2fsck
)
답변1
/usr/lib/libselinux.1
라이브러리 이름이 실수로 로 변경되었을 수 있습니다 /usr/lib/libext2fs.so.2
. 이건 멈추지 않아LD 구성예상되는 이름은 라이브러리의 파일 이름이 아닌 라이브러리의 내용에서 발견되므로 "올바른" 이름을 연결합니다. 이는 라이브러리를 일부 디렉토리에 복사하고 요청하여 확인할 수 있습니다.LD 구성이 디렉토리만 업데이트하십시오.
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