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: |
なんじゃこりゃ!?エラーということは分かるが、何が悪いのかさっぱり分からん。「そのようなファイルやディレクトリはありません」なんて、どっかでみたようなメッセージもあるし。
とまぁ、ビックリしたけど、今度は本当に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と言うパッケージが出来てる。後はこれをインストールするだけ。
うーー。長い道のりだったー。