Dear CentOS hive mind,
I'm trying to package up a perl module into an RPM for easy deployment. I want it to be as self-contained as possible (to avoid version issues with perl modules in base or EPEL). So in my spec file, I'm doing:
curl -L http://cpanmin.us | perl - App::cpanminus -L %{buildroot}/opt/zonemaster Zonemaster
This way, cpanminus is installed first, and then it goes on to install the module and all its dependencies. In the %files section, if I do:
/opt/zonemaster
the RPM is also neatly packaged up. However, trying to install this on another system causes errors:
# yum install zonemaster-engine-1.0.13-1.el7.gii.x86_64.rpm ... ... elided ... ... Error: Package: zonemaster-engine-1.0.13-1.el7.gii.x86_64 (/zonemaster-engine-1.0.13-1.el7.gii.x86_64) Requires: perl(JSON::backportPP) Error: Package: zonemaster-engine-1.0.13-1.el7.gii.x86_64 (/zonemaster-engine-1.0.13-1.el7.gii.x86_64) Requires: perl(namespace::clean::_Util) Error: Package: zonemaster-engine-1.0.13-1.el7.gii.x86_64 (/zonemaster-engine-1.0.13-1.el7.gii.x86_64) Requires: perl(Moose::Conflicts)
Now, JSON::backportPP and Moose::Conflicts are part of JSON and Moose, respectively. However, those specific modules hide themselves from /usr/lib/rpm/perl.prov, by doing this:
package # hide from PAUSE Moose::Conflicts;
and
package # This is JSON::backportPP JSON::PP;
This is annoying. Does anyone have any idea on how to fix this? Can I get away with manually adding:
Provides: JSON::backportPP Moose::Conflicts
to the spec file? It looks like an ugly hack to me.
Regards, Anand