CPAN rpm packages
takes 0 minutes to read
I went crazy from perl and the installation of their modules. For some icinga checks we need to install a few base perl packages using cpanminus. It's taking a long time before the installation succeeds depending on the internet connection or server specifications.
Using a puppet exec to automate this installation is frustrating because the timeout is unpredictable and could take hours from time to time!
So I started to look for a way to package it into an rpm which I can distribute over our own yum repository.
The first software I got reviewed is cpan2rpm, it looked promising. You could give a text file containing the names of the modules to package.
That way I could use a git repo containing this file which triggers an automated jenkins job which creates the packages and uploads them to the repo.
Unfortunately it doesn't package the cpanminus module. So I had to look further.
Last week I got the solution by cpanspec, a piece of software I read about on nailingjelly 's blogpost. And yes, I achieved to package it.
Installation & configuration of the required tools:
$ sudo yum install rpmdevtools perl perl-devel perl-Test-Base $ sudo curl -L http://cpanmin.us | perl - --sudo App::cpanminus $ sudo /usr/local/bin/cpanm CPAN::DistnameInfo $ sudo yum install cpanspec $ cd ~ $ rpmdev-setuptree
Create spec file and source rpm from a cpan module:
$ cpanspec --follow --srpm CPAN::Module --packager YOURNAME
Install the source rpm to create a package from it using the new generated spec file:
$ rpm -i name-of-module.src.rpm
You should see there is a SPEC file generated in the rpmbuild tree:
$ cd ~/rpmbuild/SPECS $ vim cpan-module-name.spec
Finally give it a shot and build a fresh rpm package:
$ rpmbuild -ba cpan-module-name.spec
The first time trying to build App::cpanminus I had to add some missing file declarations to the spec file. Spawning the error:
RPM build errors: Installed (but unpackaged) file(s) found: /usr/bin/cpanm /usr/share/man/man1/cpanm.1.gz
So I added the 2 unpacked files to the %files section:
%files %defattr(-,root,root,-) %doc Changes cpanfile LICENSE META.json README %{perl_vendorlib}/* %{_mandir}/man3/* /usr/bin/cpanm /usr/share/man/man1/cpanm.1.gz
Running the rpmbuild now resulted in a fresh rpm:
$ ls ../RPMS/noarch/ perl-App-cpanminus-1.7001-1.el6.noarch.rpm
I installed the rpm on a development system and successfully installed a perl module with the cpanm command afterwards:
$ yum localinstall name-of-the-module.rpm
So from now on our servers are hooked up with those create packages distributed by our own yum repository.
And the whole initialization process of a fresh server gained in time and therefore in efficiency in our environment this way!
Resources:
- nailingjelly
- man cpanspec
- Centos.org wiki