如何在RHEL/CentOS Linux上使用cpanspec构建Perl模块rpm文件
CentOS/RHEL 7.x,缺少许多所需的CPAN模块。
我想将Perl模块从CPAN分发到100台服务器。
但是不能运行cpanm Module :: Name
或perl -MCPAN -e'install Module :: Name'
。
有什么方法可以在CentOS/RHEL 7.x服务器上使用rpmbuild为特定的Perl模块构建RPM软件包?
使用yum命令安装丢失的Perl模块的最简单方法是什么?
rpmbuild命令用于为基于CentOS/RHEL的系统构建二进制软件包和源软件包。
rpm软件包包括文件档案和用于安装和清除档案文件的元数据。
元数据包括帮助程序脚本,文件属性以及有关程序包的描述性信息。
您需要使用cpanspec命令,该命令将生成一个规范文件,以从CPAN风格的Perl模块发行版构建rpm。
如何安装cpanspec
键入以下cpanspec命令。
首先为RHEL/CentOS 7打开EPEL存储库(在此处查看如何为RHEL/CentOS 6打开EPEL存储库):
$ sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm $ sudo yum install cpanspec perl-ExtUtils-CBuilder perl-Module-Build perl-Test-Simpl
如何安装编译器以构建Perl模块
您需要在CentOS Enterprise Linux或Red Hat Enterprise Linux版本7上使用以下软件包设置基本的开发环境。
这是为Perl CPAN模块构建rpm文件所必需的。
$ sudo yum group install "Development Tools"
有关更多信息,请参见CentOS/RHEL 7:安装GCC(C和C ++编译器)和开发工具。
如何使用cpanspec
语法非常简单:
cpanspec moduleNameHere cpanspec [options] moduleNameHere
如何在RHEL/CentOS上使用cpanspec构建Perl模块rpm文件
假设我们需要一个支持lchown()系统调用的perl接口,在支持该平台的平台上。
出于演示目的,我将构建Lchown Perl CPAN模块rpm:
$ cpanspec --follow --packager 'Hyman Gite ' -v Lchown
其中:
- --follow将构建依赖项添加到要处理的模块列表中
- --packager打包程序的名称和电子邮件地址。覆盖~/.rpmmacros中的%packager宏。
-v
更详细Lchown
生成一个规范文件,以从CPAN风格的Lchown的Perl模块发行版本构建rpm
使用ls命令,您应该在当前目录中看到两个文件,如下所示:
$ ls *.tar.gz *.spec `Lchown-1.01.tar.gz perl-Lchown.spec`
perl-Lchown.spec文件描述了rpmbuild如何构建和打包Lchown Perl模块。
您可以使用文本编辑器或cat命令查看它:
$ cat perl-Lchown.spec
输出示例:
Name: perl-Lchown Version: 1.01 Release: 1%{?dist} Summary: Use the lchown(2) system call from Perl License: GPL+ or Artistic Group: Development/Libraries URL: http://search.cpan.org/dist/Lchown/ Source0: http://www.cpan.org/authors/id/N/NC/NCLEATON/Lchown-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: perl(ExtUtils::CBuilder) BuildRequires: perl(Module::Build) BuildRequires: perl(Test::More) Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) %description Provides a perl interface to the lchown() system call, on platforms that support it. %prep %setup -q -n Lchown-%{version} %build %{__perl} Build.PL installdirs=vendor optimize="$RPM_OPT_FLAGS" ./Build %install rm -rf $RPM_BUILD_ROOT ./Build install destdir=$RPM_BUILD_ROOT create_packlist=0 find $RPM_BUILD_ROOT -type f -name '*.bs' -size 0 -exec rm -f {} \; find $RPM_BUILD_ROOT -depth -type d -exec rmdir {} 2>/dev/null \; %{_fixperms} $RPM_BUILD_ROOT/* %check ./Build test %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc Changes README %{perl_vendorarch}/auto/* %{perl_vendorarch}/Lchown* %{_mandir}/man3/* %changelog * Thu Feb 01 2018 Hyman Gite <[email protected]> 1.01-1 - Specfile autogenerated by cpanspec 1.78.
准备源目录
使用mkdir命令创建~/rpmbuild/SOURCES /目录:
$ mkdir -pv ~/rpmbuild/SOURCES/
将Lchown-1.01.tar.gz源tar球复制到SOURCES目录中,以便rpmbuild命令可以使用cp命令找到它:
$ cp -v ~/Lchown-1.01.tar.gz ~/rpmbuild/SOURCES/
使用rpmbuild构建RPM
运行以下命令:
$ rpmbuild -ba perl-Lchown.spec
输出示例:
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.BMSMjM + umask 022 + cd /home/Hyman/rpmbuild/BUILD + cd /home/Hyman/rpmbuild/BUILD + rm -rf Lchown-1.01 + /usr/bin/gzip -dc /home/Hyman/rpmbuild/SOURCES/Lchown-1.01.tar.gz + /usr/bin/tar -xf + STATUS=0 + '[' 0 -ne 0 ']' + cd Lchown-1.01 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.Fwa6hu + umask 022 + cd /home/Hyman/rpmbuild/BUILD .... .. .... Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/Hyman/rpmbuild/BUILDROOT/perl-Lchown-1.01-1.el7.centos.x86_64 Wrote: /home/Hyman/rpmbuild/SRPMS/perl-Lchown-1.01-1.el7.centos.src.rpm Wrote: /home/Hyman/rpmbuild/RPMS/x86_64/perl-Lchown-1.01-1.el7.centos.x86_64.rpm Wrote: /home/Hyman/rpmbuild/RPMS/x86_64/perl-Lchown-debuginfo-1.01-1.el7.centos.x86_64.rpm Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tSg0XZ + umask 022 + cd /home/Hyman/rpmbuild/BUILD + cd Lchown-1.01 + rm -rf /home/Hyman/rpmbuild/BUILDROOT/perl-Lchown-1.01-1.el7.centos.x86_64 + exit 0
rpmbuild命令的-ba选项告诉从给定的.spec文件构建源代码和二进制包。
您应该看到很多输出。
在屏幕的底部,您应该列出创建的文件:
Wrote: /home/Hyman/rpmbuild/SRPMS/perl-Lchown-1.01-1.el7.centos.src.rpm Wrote: /home/Hyman/rpmbuild/RPMS/x86_64/perl-Lchown-1.01-1.el7.centos.x86_64.rpm Wrote: /home/Hyman/rpmbuild/RPMS/x86_64/perl-Lchown-debuginfo-1.01-1.el7.centos.x86_64.rpm
现在,您要做的就是安装perl-Lchown-1.01-1.el7.centos.x86_64.rpm文件:
$ sudo yum install ~/rpmbuild/RPMS/x86_64/perl-Lchown-1.01-1.el7.centos.x86_64.rpm
您可能需要使用gpg来唱RPM以获得安全性(前提是您已为GPG配置了密钥):
$ rpmsign --addsign ~/rpmbuild/RPMS/x86_64/perl-Lchown-1.01-1.el7.centos.x86_64.rpm
现在,您可以使用私有yum repo或自动化工具(例如Chef)或对任意数量的VM /云服务器可用的推送RPM文件。