Dependencies 为什么构建定制的nginx/ModSecurity RPM会导致Perl依赖关系中断?
我想提供一个定制的nginx/ModSecurity/3rd party module RPM,它可以通过自己的RPM存储库安装在内部服务器(没有互联网)上 为了实现这一点,我创建了一个RPM规范文件(以下是原始规范的片段): 此处提供了完整的RPM规范和其他rpmbuild文件: 问题是,当我尝试安装RPM时,我将面临断开的依赖项错误:Dependencies 为什么构建定制的nginx/ModSecurity RPM会导致Perl依赖关系中断?,dependencies,centos7,rpm,rpmbuild,rpm-spec,Dependencies,Centos7,Rpm,Rpmbuild,Rpm Spec,我想提供一个定制的nginx/ModSecurity/3rd party module RPM,它可以通过自己的RPM存储库安装在内部服务器(没有互联网)上 为了实现这一点,我创建了一个RPM规范文件(以下是原始规范的片段): 此处提供了完整的RPM规范和其他rpmbuild文件: 问题是,当我尝试安装RPM时,我将面临断开的依赖项错误: Error: Package: nginx-1.14.0-1.x86_64 (/nginx-1.14.0-1.x86_64) Requi
Error: Package: nginx-1.14.0-1.x86_64 (/nginx-1.14.0-1.x86_64)
Requires: perl(Data::Types)
Error: Package: nginx-1.14.0-1.x86_64 (/nginx-1.14.0-1.x86_64)
Requires: /opt/local/bin/perl
Error: Package: nginx-1.14.0-1.x86_64 (/nginx-1.14.0-1.x86_64)
Requires: perl(Acme::Comment)
Error: Package: nginx-1.14.0-1.x86_64 (/nginx-1.14.0-1.x86_64)
Requires: perl(Data::Validate::URI)
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
我知道,nginx有一个Perl模块,但我没有将其包含在编译参数中(请参阅完整规范和要点)
我没有使用BuildRequires
或Requires
的Perl模块
我的期望是,没有第三方模块使用Perl。这可能是一个错误的假设,但我没有检查这一点,因为所需的模块没有安装在构建系统上,并且二进制文件可以在其上工作(没有涉及RPM安装,只是执行了nginx二进制文件)
RPM适用于CentOS 7,它没有perl数据类型(举一个例子)。旧的CentOS 6(EPEL)有perl数据类型,但CentOS 7及以上版本不再提供该数据类型(如所示)
由于nginx二进制软件工作正常,只有RPM安装程序拒绝安装:
如何解决这个问题?requires包来自何处?rpmbuild查找%文件中的文件,如果其中包含use Data::Types
,则rpmbuild将自动添加requires:perl(Data::Types)
提取您的rpm文件:
rpmdev-extract nginx.rpm
然后查找模块负载:
grep -r 'Data::Types' .
我想这行代码会有一些文件。准确地说,rpmbuild
正在查看shebangs(例如,#!/usr/bin/perl
),如果它找到的是一个perl脚本,如果您的构建系统带有perl生成器
,然后,它将自动为包中安装的Perl文件生成Requires
和Provides
例如,如果您的软件包正在安装一个Perl文件,其中包含类似于use Data::Validate::URI
的语句,那么您的RPM文件中会出现Requires:Perl(Data::Validate::URI)
使用cpanspec
实用程序很容易打包缺少的Perl模块
除此之外,您的要求:libmodsecurity
是不正确的-您必须让RPM找到正确的库依赖项,而不是“硬记录”它
有关最新的ModSecurity nginx模块以及库依赖项和Perl模块,请参阅(如:不需要打包任何东西,已经完成)
grep -r 'Data::Types' .