告诉 yum 本地共享库依赖项在哪里

告诉 yum 本地共享库依赖项在哪里

我们正在安装一个使用 构建的自定义 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 中

在这种特殊情况下,依赖项不是文件,而是共享库。应该可以手动添加库。

  1. 确保已配置添加库的路径ldconfig

    grep -R /usr/lib64 /etc/ld.so.*
    

    如果没有,请选择已配置的路径,或将路径添加到配置中。

  2. 运行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/

相关内容