RPMリビルド奮闘記


 redhat系のリナックスでは、よくソフトのインストールにRPMパッケージを使います。しかし、中には、
hogehoge.src.rpm
といったように、ソースパッケージという型式で配布されているソフトもあります。この場合、自分の環境に合うようにソフトをコンパイルしてRPMパッケージを作成する必要があります。
 今回、rltmさんの、DECAYING-MUSIC から、pc-9801エミュレーターの、Neko Project II for X (Xnp2)と言うソフトを使ってリビルドしてみました。

 まず、ソースパッケージ(xnp2-20020710-4.src.rpm)を落としてきます。
 ソースパッケージをコンパイルしてRPMパッケージを作成することをリビルドするといいますが、このためのコマンドは、ファイルがあるディレクトリで、
 
rpm -rebuild xnp2-20020710-4.src.rpm

とすればよい。
ここで、リビルドコマンドは、

rpm --rebuild xnp2-20020710-4.src.rpm

ではないかというご指摘がありました。うちの環境では「-rebuild」でも変わらないのですがよく分かりません。「-rebuild」でだめな人は、「--rebuild」をためしてみて下さい。

とりあえず、「簡単簡単」と思って、実行してみたが、なんかエラーが出た。
 
xnp2-20020710-4.src.rpm: そのようなファイルやディレクトリはありません

はぁ? ファイル今落としてきたばっかりなのに、「ありません」とはなんだ!?もう一回落とし直したりしたがやっぱり同じエラーが出る。なんじゃこれは?
 いろいろ調べた結果、このエラーは、rpm-buildと言うパッケージがインストールされてないために出るということが分かった。そりゃ、rpm-buildが入ってないのにリビルドなんて出来ないだろうが、
それだったらそう言ってくれよ!!ファイルやディレクトリはありません」とはなんだ!
 (ちなみに、リナックスのインストールをするとき、あまりハードディスクの容量が無いと、ワークステーションインストールとかを選択するが、結構重要なパッケージがインストールされてなくて、後で苦労することが多いので気をつけなければならない。)
 
 気を取り直して、rpm-buildをインストールし、先ほどのコマンドを入力。しかし、またエラーが出る。
 今度は、「許可がありません」とのこと。これはまぁ、リビルドするときに、
/usr/src/redhat/
以下のディレクトリを作業用として使うのだが、普通のユーザーは、これらのディレクトリに書き込み許可がなされていないので、rootになれば一応エラーが回避できる。
 ただ、リビルドするためだけに一々rootになるというのも、あまりよろしくない(?)ので、普通のユーザーでリビルドできるようにする。
 まず作業用のディレクトリを新たに作ります。
 
$ mkdir -p $HOME/redhat/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
$ mkdir -p $HOME/redhat/RPMS/{i386,noarch}

で、ホームに作業用ディレクトリを作ることが出来ます。次に、viなどのテキストエディタで、
 
%_topdir /home/username/redhat

と書いて、「.rpmmacros」と言うファイル名でホームディレクトリに保存します。(rpm-3.0.x以降の場合)
 これで、普通のユーザでも、リビルドできるようになります。

 さて、更に気を取り直して、先ほどのコマンドを実行します。今度はガヒガヒとコンパイルが進んで行きます。がんばれがんばれと心の中で応援しますが、そうは問屋がおろしません。
 
diskdrv.c:16:18: menu.h: そのようなファイルやディレクトリはありません
make: *** [diskdrv.o] エラー 1
エラー: Bad exit status from /var/tmp/rpm-tmp.10994 (%build)

RPM build errors:
    Bad exit status from /var/tmp/rpm-tmp.10994 (%build)

 なんじゃこりゃ!?エラーということは分かるが、何が悪いのかさっぱり分からん。「そのようなファイルやディレクトリはありません」なんて、どっかでみたようなメッセージもあるし。
 とまぁ、ビックリしたけど、今度は本当にmenu.hと言うファイルが無いために出ているエラーだった。Googleで、「linux menu.h rpm」あたりで検索すると、menu.hと言うファイルが、「ncurses-devel」と言うパッケージに入っていることが分かる。
 「とほほ。またパッケージがたりなかったのか・・・」と思いつつインストール。
 ちなみに、この、「menu.h」はxnp2に不要ということが後に分かり、現在配布されているパッケージにはふくまれておりません。よって、 「ncurses-devel」をインストールする必要もなくなりました。rltmさん多謝!

 またまた気を取り直してリビルドすると、今度は最後までエラーも出ずにおわった。やったーー。
 $HOME/redhat/RPMS/i386
 ディレクトリをみると、xnp2-20020710-4.i386.rpmと言うパッケージが出来てる。後はこれをインストールするだけ。
 うーー。長い道のりだったー。

戻る