RPM은 기본적으로 제공된 .so 바이너리 집합을 패키징하여 RPM을 통해 설치되는 내부 애플리케이션에서 사용할 수 있도록합니다.rpmbuild는 심볼릭 링크 공유 객체를 포함하지 않습니다.
라이브러리 중 하나에는 libexample_base.so 및 libexample_debug.so와 같은 여러 버전이 있습니다. 현재 RPM에 포함되어 있으므로 (개발자가 필요에 따라 서로 전환 할 수 있도록) 패키지를 만들려고합니다. 그러나 % install 중에 심볼릭 링크를 만들어 libexample_base.so를 기본 버전으로 선택하면 다음과 같이 패키지됩니다. RPM에있는 파일.
%install
[... Copy the files from the tarball to the buildroot ...]
pushd %{buildroot}%{_libdir}
ln -sf libexample_base.so libexample.so
popd
하나의 문제를 제외하고이 기능은 훌륭합니다. 그것은 자동 종속성 생성을 사용하고 있으며 실제 파일이있는 모든 공유 객체를 제공하지만 심볼릭 링크가 % 파일에 있고 제대로 설치되었지만 libexample.so를 제공하지 않습니다. 불행하게도, 벤더 라이브러리는 SONAME 엔트리를 제공하지 않으며, 바이너리 블롭이기 때문에 쉽게 추가 할 수 없기 때문에 RPM은 실제 파일 이름에 의존합니다. 모든 다운 스트림 RPM에는 libexample.so가 필요하며,이 RPM은 요구 사항으로 나열되어 있지 않으므로 실제로 작동하더라도 (ldconfig는 libexample.so를 문제없이 찾을 수 있음) 누락 된 종속성으로 인해 설치를 거부합니다.
rpmbuild가 심볼릭 링크를 구문 분석하도록 프롬프트하는 방법에 대한 아이디어가 있습니까?
하나의 해킹 된 해결 방법을 찾았습니다. symlink 대신 파일을 하드 링크하면 작동합니다. 나는 정말로 그렇게하지 않을 것이다. 왜냐하면 그것은 전체 파일을 두 번 포함하고 링크가 가리키는 곳을 변경할 수 있도록 의도 되었기 때문이다. – matthock
명시 적으로'ln -s'를 호출하는 대신, spec 파일의 % post 섹션에/usr/sbin/ldconfig를 넣어야합니다. –