DNF安装MongoDB Perl驱动RPM时找不到BSON依赖的排查求助
解决自定义Perl MongoDB驱动RPM的DNF依赖检测问题
问题根源
DNF的依赖检查不直接读取Perl的@INC,而是通过RPM包的Provides字段判断Perl模块是否已安装。你遇到的问题核心原因通常是以下两点:
- BSON RPM未生成正确的Perl模块Provides信息:fpm打包时若未启用Perl模块依赖检测,生成的RPM不会包含
perl(BSON)、perl(BSON::XXX)这类关键条目,导致DNF无法识别已安装的模块。 - 模块安装路径不符合系统RPM规范:如果BSON模块被安装到Perl的非标准路径(比如自定义
site_perl子目录,或不在系统RPM约定的Perl路径内),即便Perl能加载模块,DNF也不会认可该路径下的模块作为依赖满足条件。
解决步骤
1. 验证BSON RPM的Provides字段
先确认你的BSON RPM是否包含正确的依赖识别信息:
rpm -q --provides perl-BSON
如果输出中没有perl(BSON)、perl(BSON::ObjectId)等子模块的条目,说明打包过程未生成这些关键信息,需要重新打包。
2. 用fpm正确重新打包BSON模块
打包Perl模块时必须启用Perl依赖检测,并确保模块安装到系统RPM约定的Perl路径(通常是vendor_perl):
# 方式1:从CPAN直接打包,启用perl-provides参数 fpm -s perl -t rpm --name perl-BSON --perl-provides BSON # 方式2:从源码包打包,指定安装路径为vendor perl Makefile.PL INSTALLDIRS=vendor make && make install DESTDIR=./tmp_install fpm -s dir -t rpm \ --name perl-BSON \ --version 1.12.2 \ # 替换为你的BSON实际版本 --perl-provides \ --prefix / \ ./tmp_install/usr
3. 确认Perl模块安装路径符合规范
查看系统Perl的标准vendor路径:
perl -V:vendorlib
输出示例:vendorlib='/usr/share/perl5/vendor_perl';
确保BSON模块被安装到该路径下,RPM才会被DNF识别为合法的Perl模块包。
4. 临时应急方案(不推荐长期使用)
如果暂时无法重新打包,可强制跳过依赖检查安装MongoDB RPM,但可能引发后续依赖问题:
dnf install --nodeps perl-MongoDB
5. 清理DNF缓存重试
若DNF缓存的依赖信息过期,执行以下命令后重新尝试安装:
dnf clean all dnf makecache
内容的提问来源于stack exchange,提问作者josegts
相关产品推荐
相关产品推荐

