2000-06-28(水) [長年日記]
■ Ruby 1.4.5
うっかりしていたらKondaraのsnapshotにRuby 1.4.5のパッケージが入っていたので、GETしてくる。とるものもとりあえず、突っ込みましょーっ♪
# rpm -Uvh ruby-1.4.5-2k.i586.rpm error: failed dependencies: libreadline.so.4.1 is needed by ruby-1.4.5-2k
■ おおぅ。なんでreadlineが。まぁいいや、これも新しいのを取ってきましょう。
# rpm -Uvh ruby-1.4.5-2k.i586.rpm readline-4.1-k4.i586.rpm error: failed dependencies: libhistory.so.3 is needed by postgresql-6.5.2-1k2 libhistory.so.3 is needed by postgresql-devel-6.5.2-1k2 libhistory.so.3 is needed by postgresql-server-6.5.2-1k2 libhistory.so.3 is needed by postgresql-tcl-6.5.2-1k2 libreadline.so.3 is needed by cdecl-2.5-9 libreadline.so.3 is needed by ftp-0.15-1k4 libreadline.so.3 is needed by git-4.3.17-5 libreadline.so.3 is needed by guile-1.3.2a-1 libreadline.so.3 is needed by postgresql-6.5.2-1k2 libreadline.so.3 is needed by postgresql-devel-6.5.2-1k2 libreadline.so.3 is needed by postgresql-server-6.5.2-1k2 libreadline.so.3 is needed by postgresql-tcl-6.5.2-1k2 libreadline.so.3 is needed by samba-client-2.0.6-5 libreadline.so.3 is needed by samba-common-2.0.6-5 libreadline.so.3 is needed by fvwm2-2.2.2-3k3 libreadline.so.3 is needed by librep-0.11-1k2 libreadline.so.3 is needed by samba-2.0.6-5 libreadline.so.3 is needed by sawmill-0.25.1-1k2 libreadline.so.3 is needed by bc-1.05a-4 libreadline.so.3 is needed by python-1.5.2-7k
■ うぎゃー。まぁ、readlineにいろいろ依存してるのはわかるけど、なんでGUIのfvwmとかsawfishまで。sambaなんてdaemonやないか。どうもダメな気がしてきたけど、念のためこいつらも持ってきて一緒に入れてみると、最後にはgnome-coreまで依存してるとか言ってくる。なんでRubyを入れ替えるためにGNOMEまで入れ替えなあかんねんっ。
……とここまで毒づいてから、「ひょっとして、自分でパッケージを作り直したらいいんじゃないか」と思いつく。なんたって、Kondaraの基本はnosrc.rpm
なんだから。もしそのSPECファイルにreadlineの特定のバージョンに依存する記述があったら、そこを直せばいいんじゃないの? そうだよ、それだ。Rubyのソースはすでに(用もないのに)入手済みだったので、ruby-1.4.5-2k.nosrc.rpm
を持ってきて、rpm -ivh
で展開。
■ ~/src/rpm/SPECS/ruby.spec
を見てみるが(KondaraのSPECファイルがこんなに複雑だとは知らなかった……)、別にreadlineのバージョンなんて書いてない。試しにビルドしてみるか。
$ rpm -bb ruby.spec (略) File not found: /var/tmp/ruby-1.4.5-root/usr/lib/ruby/1.4/i386-linux/curses.so File not found: /var/tmp/ruby-1.4.5-root/usr/lib/ruby/1.4/i386-linux/dbm.so File not found: /var/tmp/ruby-1.4.5-root/usr/lib/ruby/1.4/i386-linux/etc.so (略)
■ ありゃ。これは最後のインストールテストのフェーズかな? 確かにこんなディレクトリ(というかシンボリックリンク)はない。そもそもなんでi386なのか。Kondaraはi586なんじゃないのか。いや、もしかするとどっかで明示してやらないとi586にならないのかも……と思ってrpm
のman
を見てみると、--target
ってオプションがあった。これかな。ひょっとすると~/.rpmmacros
に指定できるのかも知れないけどよくわからん。これでリトライしてみよう。
$ rpm --target i586 -bb ruby.spec
■ すると、何も指定しなかった時には-O2 -m486
だったgcc
のオプションが、-O6 -mpentium
になってる。おお、これぞKondara神速の秘密か!?(笑) Warningもやたらと出るけど、これはたぶん、RubyのソースがANSIじゃないからなのかな。で、無事にビルドが終わり、ruby-1.4.5-k2.i586.rpm
が完成。ドキドキしながらアップデート。成功♪ readlineへの依存などなし。
つまりこういうことか。バイナリパッケージを作った人の環境がすでにreadline-4.*
を使っていたので、readlineを使っているRubyのパッケージはそれに依存してしまった(SPECファイルには無関係)。が、自分の環境でパッケージを作り直したことで、自分が使っているreadline-2.*
に依存したバイナリになった、と。なるほど、「ソースパッケージを持ってきて【自分の環境に合わせて】ビルドしなおしましょう」というのは、まさにこういう意味だったのだな。バイナリパッケージが公開されてない場合に自前ビルドをしたことはあったけど、本来の意味がやっとわかったぜ。src.rpm
万歳っ(笑)。