Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependencies 为什么构建定制的nginx/ModSecurity RPM会导致Perl依赖关系中断?_Dependencies_Centos7_Rpm_Rpmbuild_Rpm Spec - Fatal编程技术网

Dependencies 为什么构建定制的nginx/ModSecurity RPM会导致Perl依赖关系中断?

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

我想提供一个定制的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)
           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' .