我正在構建一個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條目,並且由於它們是二進制blob,我不能隨時添加它們,所以RPM取決於實際的文件名。所有的下游RPM都需要libexample.so,由於這個RPM沒有列出它的要求,所以他們拒絕安裝,因爲缺少依賴關係,即使這樣做確實有效(ldconfig可以找到libexample.so而沒有問題)。
有關如何提示rpmbuild將symlink解析爲提供的任何想法?
我找到了一個駭人的解決方法 - 如果我硬鏈接文件而不是符號鏈接,它的工作原理。儘管如此,我真的寧願不這樣做,因爲它包含了兩次完整的文件,而且它的目標是能夠更改鏈接指向的位置。 – matthock
您應該將/ usr/sbin/ldconfig放在spec文件的%post部分 –