我们正在安装一个使用 构建的自定义 rpm rpmbuild
。在安装过程中,它因依赖于特定文件而失败,在我们的例子中具体为libnvidia-ml.so.1
:
Requires: libnvidia-ml.so.1()(64bit)
这是在包管理器上安装的,/usr/lib64
但不是通过包管理器安装的,包管理器无法更改。有没有办法告诉yum
在哪里可以找到这个文件?
我在手册中没有发现任何明显的内容,并且LD_LIBRARY_PATH
没有效果。
答案1
有没有办法告诉 yum 在哪里可以找到这个文件?
yum/dnf
专门咨询您的 RPM 数据库 - 无法告诉它考虑外部文件。
要么将此库打包为 RPM 并安装它,要么使用以下命令安装您需要安装的任何内容rpm --nodeps [packages]
答案2
更新
.so
您最好的选择是通过自定义构建包本身提供-File 或添加另一个提供共享库的自定义包。
以下不起作用,因为可用的库似乎也存储在 rpmdb 中
在这种特殊情况下,依赖项不是文件,而是共享库。应该可以手动添加库。
确保已配置添加库的路径
ldconfig
grep -R /usr/lib64 /etc/ld.so.*
如果没有,请选择已配置的路径,或将路径添加到配置中。
运行
ldconfig
以重新创建链接和缓存ldconfig -v
您应该在输出中看到您的共享库。
最后您应该能够安装该软件包。
答案3
编辑和重建我尝试安装的 RPM 文件对我有用。我知道 DNF 中不可用的过时依赖项在我的计算机上可用,并且将保留在那里。无需花时间让 DNF 也了解这一点,通过创建一个假的(或真实的)RPM 来告诉它所有这些事情。
我跟着:
ldconfig
允许from选取新的库文件/usr/local
。
sudo bash -c 'echo -e "/usr/local/lib64\n/usr/local/lib" > /etc/ld.so.conf.d/local.conf'
从源代码构建并安装旧库,/usr/local
而不是/usr
将其与系统包区分开来。这会因程序而异,但这里有一个示例:
./configure --prefix=/usr/local
make -j $(nproc)
sudo make install
sudo ldconfig
验证是否找到共享库文件(在我的例子中是 libtcl 和 libtk)。
sudo ldconfig -p | grep -i "libnvidia"
通过重新配置规范文件来重新构建所需安装的 RPM,以不需要 DNF 未知的依赖项(即注释掉)。您可能首先需要安装rpmrebuild
.
rpmrebuild --edit-spec --package original_x86_64.rpm
对我来说,它是注释掉这样的行:
#Requires: libtcl8.5.so()(64bit) #Requires: tcl-devel
重建完成后,它会告诉您新构建的 RPM 的位置。对我来说它在里面~/rpmbuild/RPMS/x86_64
。将其移动到您想要的任何位置,然后安装它。例子:
mv ~/rpmbuild/RPMS/x86_64/original-1.x86_64.rpm rebuilt_x86_64.rpm
sudo dnf install rebuilt_x86_64.rpm
用于发现 RPM 规范文件的存在rpmrebuild
及其即时编辑 RPM 规范文件的能力的来源:https://lists.fedoraproject.org/archives/list/[电子邮件受保护]/消息/V2ZJORVHTA34UOJVRA2SEVNTJCM4ETXM/