RPM Packager

たくさんのサーバを同じ環境に保つためには、マシン1台ずつcpan installは現実的じゃなく、RPMにしてyum installするのが吉。

CPANからRPMつくる方法は

  • cpan2rpm
  • flute

などがあるみたいだけど、どうやらcpan2rpmのほうがメジャーな様子。ということでローカルのVMWare環境で試してみることにする。

インストール

http://sourceforge.net/projects/cpan2rpm/files/を見ると、cpan2rpm-2.027-1.noarch.rpmがあるのでrpmでインストールすることに。

sudo su -
wget http://sourceforge.net/projects/cpan2rpm/files/cpan2rpm/2.027/cpan2rpm-2.027-1.noarch.rpm/download
rpm -ivh cpan2rpm-2.027-1.noarch.rpm
エラー: 依存性の欠如:
        rpm-build は cpan2rpm-2.027-1.noarch に必要とされています

ふむ。rpm-buildをyumからいれよう。yumリポジトリid:kotaroito2002:20100621のように設定されている。

yum install rpm-build

cpan2rpmを再度インストール

rpm -ivh cpan2rpm-2.027-1.noarch.rpm

CPANモジュールを入れてみる

試しにlibwww-perlをインストールしてみる。

cpan2rpm -i libwww-perl

(中略)

-- module: libwww-perl --
Using cached URL: http://search.cpan.org//CPAN/authors/id/G/GA/GAAS/libwww-perl-5.836.tar.gz
Tarball found - not fetching
Metadata retrieval
Tarball extraction: [/usr/src/redhat/SOURCES/libwww-perl-5.836.tar.gz]
Unable to build module, the following dependencies have failed:
  IO::Uncompress::Inflate >= 0
  IO::Uncompress::Gunzip >= 0
  URI >= 1.10
  IO::Compress::Gzip >= 0
  IO::Uncompress::RawInflate >= 0
  Compress::Raw::Zlib >= 0
  IO::Compress::Deflate >= 0
  HTML::Tagset >= 0
  HTML::Parser >= 3.33
Stopped at /usr/bin/cpan2rpm line 492.
-- Done --

/usr/src/redhat/SOURCESにtarボールがダウンロードされていること、依存関係があるためにRPMのbuildに失敗したことが分かる。

ということでもう少し簡単なものを、方法変えてやってみる。

cd /usr/src/redhat/SOURCES
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-1.54.tar.gz
cpan2rpm -no-sign -i URI-1.54.tar.gz

無事できた〜。もういっちょ。こんどは-iオプションなしで。

cpan2rpm --no-sign HTML::Tagset

Tarball extraction: [/usr/src/redhat/SOURCES/HTML-Tagset-3.20.tar.gz]
Generating spec file
SPEC: /usr/src/redhat/SPECS/HTML-Tagset.spec
RPM: /usr/src/redhat/RPMS/noarch/perl-HTML-Tagset-3.20-1.noarch.rpm
SRPM: /usr/src/redhat/SRPMS/perl-HTML-Tagset-3.20-1.src.rpm

SPEC, PRM, SRPMがこんな感じでつくられる。-iを入れるとさらにrpm -iされるってことですね。

yumレポジトリをつくる

ローカルにyumレポジトリをつくって、そこからyum groupinstallしたいので。まずはcreaterepoのインストール。

yum install createrepo

http経由で見えるように、/var/www/htmlにディレクトリ作成する。名前は適当。そしてperlモジュールをコピーする。

mkdir -p /var/www/html/centos/5/perl
cp /usr/src/redhat/RPMS/*/perl-*.rpm /var/www/html/centos/5/perl/
chown apache. /var/www/html/centos/5/perl/*

groupinstallしたいのでxml生成するyum-groups-managerが欲しい

yum install yum-utils
man yum-groups-manager

さっそくyum-groups-managerを使ってみる

yum-groups-manager -n perl-test --id perl-test --description perl modules --mandatory perl-URI --save /var/www/html/centos/5/perl/groups.xml

リポジトリを作成する

cd /var/www/html/centos/5/perl
createrepo -g groups.xml .
ls -l repodata/

yumのリポジトリ設定

cd /etc/yum.repos.d/
vi Perl-Test.repo

[perl-test]
name=perl-test - Test
baseurl=http://mdev1/centos/5/perl
enabled=1
gpgcheck=0

perl-testリポジトリのみ有効にして、yumからインストールしてみる

yum --disablerepo=* --enablerepo=perl-test search perl-List-MoreUtils
yum --disablerepo=* --enablerepo=perl-test install perl-List-MoreUtils

Installed:
  perl-List-MoreUtils.i386 0:0.25_02-1                                          
Complete!

やったー、成功!!
さらにごにょごにょgroup.xmlファイルに追加してから

yum -y --disablerepo=* --enablerepo=perl-test groupinstall perl-test

これも成功!!!念願のRPM作成 -> yum installができた!すごくレベルが上がった気分。