トップ «前日 最新 翌日» 編集
RSS feed

ただのにっき


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にならないのかも……と思ってrpmmanを見てみると、--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万歳っ(笑)。


トップ «前日 最新 翌日» 編集
RSS feed