如何修改cpan2rpm生成RPM包的文件安装路径
问题根因
- 你之前设置的
PERL_INSTALL_ROOT变量作用是指定构建阶段的临时安装根目录,类似RPM打包中的%{buildroot}逻辑,仅用于临时存放构建出的文件,不会修改文件最终安装到系统的路径,因此配置后不生效。 - cpan2rpm默认调用ExtUtils::MakeMaker生成Makefile时,默认指定
INSTALLDIRS=site,对应EL8系统下的安装路径就是/usr/local/share/perl5和/usr/local/share/man。而系统官方RPM包使用的是INSTALLDIRS=vendor配置,对应路径才是你预期的/usr/share/perl5和/usr/share/man。
可行解决方案
单次打包临时生效
直接在原有cpan2rpm命令的末尾加上-- INSTALLDIRS=vendor即可,双横杠的作用是告诉cpan2rpm把后面的参数透传给perl Makefile.PL执行,强制指定安装到vendor路径。
修改后的完整命令:
cpan2rpm --version 0.27 --release 1000000000.el8 --debug=1 --packager=XXXXXXX --distribution=unknown --author "XXXXXXX (unknown)" --no-sign Catalyst-Plugin-Session-0.40.tar.gz -- INSTALLDIRS=vendor
长期默认生效
如果需要所有cpan2rpm打包操作默认都安装到/usr/share/perl5路径,可以修改cpan2rpm配置文件,添加如下配置项:
makepl_arg="INSTALLDIRS=vendor"
全局配置路径为/etc/cpan2rpm/cpan2rpm.conf,单用户配置路径为~/.cpan2rpmrc,修改后无需额外加参数,执行原有命令即可。
额外说明
你之前查询到的RPM文件列表里,/usr/share/doc/路径下的inc/Module/Install相关文件是模块作者打包时附带的构建依赖文件,不属于模块运行时需要安装的内容,如果不需要可以在cpan2rpm生成spec文件后,删除%doc段中的inc目录条目,再重新执行rpm构建即可去掉这部分冗余文件。
打包完成后重新执行rpm -qlp 包名.rpm验证,确认perl模块路径以/usr/share/perl5开头、man页路径以/usr/share/man/man3开头即为配置生效。
内容的提问来源于stack exchange,提问作者Anbarasan
相关产品推荐
相关产品推荐

