自分で作るRPMパッケージ

現在主流のディストリビューションがRed Hat系であることは異論の余地がありません。その特徴の1つに、RPMによるバイナリパッケージの提供があります。このおかげで、煩わしいコンパイル作業が省けます。ただ、いかにパッケージが増えても、自分の欲しいソフトウェアが見つからないことがあります。また、自分に必要なオプションを使うには、出来合いのパッケージでは不向きです。では、思い切って自分でパッケージを作ってみてはどうでしょうか。

関野史朗
2001/1/26

RPMによる管理のメリット

 出来合いのRPMパッケージを使ったインストールはとても楽です。RPMファイルを入手して、rpmコマンドを使うだけ。必要なソフトウェアが足りないと、その旨を表示してくれるので、先にそちらをインストールすればいいのです。欲をいえば、Debian GNU/Linuxのapt-getコマンドのように、足りないパッケージも自動的にゲットしてインストールしてくれるとさらに楽なのですが。

 もう1つの利点として、不要になったパッケージを簡単に削除できることがあります。新しいソフトウェアを試すときには、この特徴を大いに重宝します。自分でソースコードからコンパイルしてインストールすると、関連するファイルをきれいに削除するのがなかなか大変なのです。まあ、ちゃんとメモしておけばいいのですし、どのみちRPMパッケージにしてもファイルの一覧を作るわけですけれど。

 で、いっそのこと自分でRPMパッケージを作ったらどうでしょう。最近はセキュリティパッチも頻繁に出ますが、自分でRPMパッケージを作れれば最新のパッチも簡単に当てられます。オプションを使って、Pentium III用に最適化したバイナリなども作れます。ものによっては不要な機能を削除することで、よりコンパクトなバイナリになったりもします。

SRPMの利用

 さて、RPMを作るといっても、いきなり一から始めるのでは大変です。無難なプログラムで最適化のオプションを変えるあたりからやってみましょう。

作業用ディレクトリの作成

 まず準備として、ホームディレクトリに以下のような構成の作業用ディレクトリを作ります。作業はなるべく一般ユーザーで行い、スーパーユーザーになる時間は減らしましょう。それだけで、ミスによってシステムにダメージを与える可能性が減ります。

 
BUILD 作業用のディレクトリ
RPMS バイナリパッケージのできるディレクトリ
SOURCES ソースコードをおくディレクトリ
SPECS SPECファイルをおくディレクトリ
SRPMS ソースパッケージのできるディレクトリ
作業用ディレクトリの構成と各用途

 これらのディレクトリは、次のコマンドで作成できます。

$ cd
$ mkdir RPM
$ cd RPM
$ mkdir BUILD
$ mkdir -p RPMS/i386
$ mkdir -p RPMS/noarch
$ mkdir SOURCES
$ mkdir SPECS
$ mkdir SRPMS

 次に、作業用ディレクトリを指定する設定ファイルを作成します。

$ echo "%_topdir /home/isamu-n/RPM" > ~/.rpmmacros

■SRPMのリビルド

 以下、作業はLASER5 Linux 6.4で行いました。とりあえずのサンプルということで何でもよいのですが、簡単なものとしてctagsを使ってみます。まず、CD-ROMなり、Internetからなり、ctags-3.2-1..src.rpmというファイルを入手します。

 src.rpmファイルは、ソースコードや依存関係などを記述したspecファイルがまとまったものです。RPMのバイナリファイルを作る一番簡単な方法は、入手したsrc.rpmファイルをrpmコマンドでrebuildすることです。

$ rpm --rebuild ctags-3.2-1..src.rpm

ですが、入手したファイルでこれを実行したところ、途中でエラーが出てしまいました。具体的には、

ファイルが見つかりません:/var/tmp/ctags-root/usr/man/man1/ctags.1

というものです。そこで~/RPM/SPEC/ctags.specを調べてみると、47行目あたりに/usr/man/man1/ctags.1という記述があります。ところが作業ディレクトリである/var/tmp/ctags-root/usr/man/man1を見ると、そこにあるのはctags.1.gzでした。これはrpmのバージョンが変わり、マニュアルを自動的に圧縮するようになったためです。従って、ctags.specの方をctags.1.gzに書き換える必要があります。

 今度は、書き換えたspecファイルを引数にして、次のようにrpmコマンドを実行します。

$ rpm -bb ctags.spec

 こうすると、素直に~/RPM/RPMS/i386/ctags-3.2-1.i386.rpmが出来上がります。このままではオリジナルのパッケージと見分けがつきませんから、リリース番号を変えておきましょう。広く一般に流通させる場合は注意が必要ですが、個人や会社内で使うだけであればそれほど厳格に考えなくてもいいでしょう。

 ~/RPM/SPEC/ctags.specを開いて、冒頭付近にある“Release:”に続く番号を1から2に変えます。さらに、ファイルの最後にある“%Changelog”のセクションにも変更点を書いておくと、後から見直したときに分かりやすくなります。specファイルを書き換えたら、今度は次のオプションでrpmコマンドを実行します。

$ rpm -ba ctags.spec

 これで~/RPM/SRPMS/ctags-3.2-2.src.rpmと~/RPM/RPMS/i386/ctags-3.2-2.i386.rpmが出来上がります。あとはいつもどおり、スーパーユーザーになってctags-3.2-2.rpmをインストールすればOKです。

 このとき、作成した各ディレクトリを見ると、BUILDにはctags-3.2というディレクトリができていて、その下にソースコードが展開されています。コンパイルした結果のオブジェクトファイルや実行ファイルもあります。SOURCESディレクトリには、tarコマンドでまとめられたソースコード一式と、適用するパッチがあります。これはソースパッケージをインストールしたためです。

 コンパイルオプションを変更したいときは、“%build”セクションに書いてあるのがコンパイル時に実行されるスクリプトなので、ここを適当に変更します。ただし、見れば分かるようにマクロが定義されています。ここを直接書き換えるよりは、マクロの定義を変更した方がよさそうです。例えば~/.rpmrcに

optflags: i386 -O3 -m486 -fno-strength-reduce

と書いておくと、これが利用されます。

 
1/3

Index
自分で作るRPMパッケージ
RPMによる管理のメリット
  SRPMの利用
作業用ディレクトリの作成
SRPMのリビルド
  RPMパッケージの自作
パッケージ作成の下準備
specファイルの書き方
rpmコマンドの実行
  Appendix
パッケージ作成のrpmオプション
各種リスト

Linux Square全記事インデックス

@IT Special

- PR -

TechTargetジャパン

Linux & OSS フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Linux & OSS 記事ランキング

本日 月間
ソリューションFLASH