rubyのRPMパッケージをつくる(to CentOS 5.2)

CentOS 5.2を用いた実験環境で、バージョン1.8.6以上のrubyをインストールする必要に迫られた。

現時点で、CentOS 5.2に提供されているrubyは1.8.5。よい機会なのでパッケージを作ることにした。初挑戦。

はじめにtarボール(ruby-1.8.6.tar.gz)を入手

Ruby 1.8.6 リリース

http://www.ruby-lang.org/ja/news/2007/03/12/ruby-1-8-6-release/

このソースファイルからパッケージを生成する。

まずは展開してmake。

$ gtar xvzf ./ruby-1.8.6.tar.gz  
  :  
$ cd ruby-1.8.6  
$ ./configure –prefix=/usr  
  :  
$ make  
  :

SRPMファイルのないtarボールからパッケージを生成する場合はcheckinstallを用いるのが楽であるよう。

ソースファイルからRPMファイルを作成するには

http://www.atmarkit.co.jp/flinux/rensai/linuxtips/530mkrpmfs.html

!!!checkinstallがインストールされていない。

じゃあ、と、yumでインストールしようとしたらNothing to doだ。

CentOS4.5にRPM作成ツール(checkinstall)のインストール

http://blog.livedoor.jp/glantank/archives/50935741.html

記述によれば、yumに–enablerepo=rpmforgeオプションを与えているけど、これは?

CentOS 5 で DAG(rpmforge) の yum repository 追加

http://blog.enjoitech.jp/article/96

DAG(rpmforge) は redhat 及び fedora 向けの追加パッケージ群です。

わかった。

手引きどおりに、DAGからRedhat5のrpmforge(rpmforge-release-0.3.6-1.el5.rf.i386.rpm)を入手してインストール。

DAG

http://dag.wieers.com/rpm/packages/rpmforge-release/

$ wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm  
$ su  
# rpm -hiv rpmforge-release-0.3.6-1.el5.rf.i386.rpm

インストール完了したら設定ファイルの書き換えを行う。

# vi /etc/yum.repos.d/rpmforge.repo

enabled を 0 に設定(初期値1)。
 こうすることで、yumコマンドに–enablerepo=rpmforgeオプションを付けたときだけ、rpmforgeを見に行くようになる。
 現時点の差分は以下。だいぶ違う。

# yum list | wc -l  
5876  
# yum list –enablerepo=rpmforge | wc -l  
9239

で、checkinstallをインストール。

# yum –enablerepo=rpmforge install checkinstall  
  :  
Installed: checkinstall.i386 0:1.6.0-3.el5.rf  
Complete!

よし。

いよいよパッケージ生成。

Ruby1.8.7のインストール

http://blog.absolute-zero.info/?cat=30

checkinstallを使ってRPM化していきます。rubyのようなインストールしながら

ファイルをチェックして進んでいくタイプの場合には”-fstrans=no”をつけてあげる必要があります。

なるほど。

$ su  
# checkinstall –fstrans=no  
checkinstall 1.6.0, Copyright 2002 Felipe Eduardo Sanchez Diaz Duran  
           This software is released under the GNU GPL.  
  
The package documentation directory ./doc-pak does not exist.  
Should I create a default set of package docs?  [y]:  
  
Preparing package documentation…OK  
  
Please choose the packaging method you want to use.  
Slackware [S], RPM [R] or Debian [D]? R  
  
**************************************  
**** RPM package creation selected ***  
**************************************  
  
This package will be built according to these values:  
  
1 –  Summary: [ Package created with checkinstall 1.6.0 ]  
2 –  Name:    [ ruby ]  
3 –  Version: [ 1.8.6 ]  
4 –  Release: [ 1 ]  
5 –  License: [ GPL ]  
6 –  Group:   [ Applications/System ]  
7 –  Architecture: [ i386 ]  
8 –  Source location: [ ruby-1.8.6 ]  
9 –  Alternate source location: [  ]  
10 – Requires: [  ]  
11 – Provides: [ ruby ]  
  
Enter a number to change any of them or press ENTER to continue:  
  
Installing with make install…  
  
========================= Installation results ===========================  
./miniruby  ./instruby.rb –dest-dir=”” –extout=”.ext” –make=”make” –mflags=”” –make-flags=”” –installed-list .installed.list –mantype=”doc”  
installing binary commands  
installing command scripts  
installing library scripts  
installing headers  
installing manpages  
installing extension objects  
installing extension scripts  
  
======================== Installation successful ==========================  
  
Copying documentation directory…  
./  
./doc/  
./doc/irb/  
./doc/irb/irb.rd.ja  
./doc/irb/irb-tools.rd.ja  
./doc/irb/irb.rd  
./doc/NEWS-1.8.0  
./doc/shell.rd.ja  
./doc/forwardable.rd.ja  
./doc/forwardable.rd  
./doc/ChangeLog-1.8.0  
./doc/shell.rd  
./COPYING.ja  
./GPL  
./README.EXT  
./NEWS  
./README  
./README.EXT.ja  
./ChangeLog  
./COPYING  
./README.ja  
  
Some of the files created by the installation are inside the build  
directory: /home/hoge/rpm/ruby-1.8.6  
  
You probably don’t want them to be included in the package,  
especially if they are inside your home directory.  
Do you want me to list them?  [n]:  
Should I exclude them from the package? (Saying yes is a good idea)  [y]:  
  
Copying files to the temporary directory…OK  
  
Striping ELF binaries and libraries…OK  
  
Compressing man pages…OK  
  
Building file list…OK  
  
Building RPM package…OK  
  
NOTE: The package will not be installed  
  
Erasing temporary files…OK  
  
Writing backup package…OK  
  
Deleting temp dir…  
OK  
  
**********************************************************************  
  
 Done. The new package has been saved to  
  
 /usr/src/redhat/RPMS/i386/ruby-1.8.6-1.i386.rpm  
 You can install it in your system anytime using:  
  
      rpm -i ruby-1.8.6-1.i386.rpm  
  
**********************************************************************

できた。

今回は初めての事だったので、準備作業に手間取ったがパッケージ生成事態はそれほど難しくはなかった。次回はもっとうまくできそうだ。

なお今回、色々と調べている中で以下設定を行った。結果として本題に関与しないが備忘録として残しておく。一般ユーザでcheckinstall出来ると思ったのだ(出来る?)。

オレオレrpmパッケージの作り方(基本編)

http://openlab.dino.co.jp/2007/11/16/13162254.html

$ mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}  
$ echo “%_topdir   /home/hoge/rpm” > ~/.rpmmacros