如何在RHEL/CentOS Linux上使用cpanspec构建Perl模块rpm文件

时间:2020-01-09 10:37:32  来源:igfitidea点击:

CentOS/RHEL 7.x,缺少许多所需的CPAN模块。
我想将Perl模块从CPAN分发到100台服务器。
但是不能运行cpanm Module :: Nameperl -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文件。