Island Life

< 少し前から右手親指の付け根が痛んでて、 | 主観で何が悪いのだろう >

2010/07/15

JRE hassle

Hudsonをちょっと手元 (Ubuntu 10.04) で試そうと思った。 オフィシャルページを見るとhudson.warをダウンロードして java -jar hudson.war とだけすれば良いらしい。おお、簡単ではないか。

簡単ではなかった。

  • アップデートしたばかりでまずjavaを入れてなかった。とりあえずapt-getでgcj入れとく。
  • hudson走らせると何かクラスが見つからないというエラーで初期化時にこける。
  • ぐぐるとどうもgcjでは動かないらしい。
  • apt-cache searchで探して次に目についたopenjdkで試す
  • 今度はjava.io.IOException: Operation not permittedなどのwarningが出て、httpでつなぐと「ちょっと待ってくれ」という画面から進まない。
  • さらにぐぐるとどうもsun-java6を使うのが無難らしい。
  • https://help.ubuntu.com/community/Java を参考にするが、 universeを探してもsun-java6なんて無いぞ。
  • Bug trackerの議論を追っかけて このブログに到達。partner repoを見なくてはいけないらしい。
    add-apt-repository "deb http://archive.canonical.com/ lucid partner"
    apt-get update
    apt-get install sun-java6-jre sun-java6-plugin
    update-java-alternatives -s java-6-sun
    
  • 再び走らせる。あれ、またjava.io.IOException: Operation not permittedだ。
  • ぐぐる。今度はfirewall絡みらしい。
  • こちらを参考に firestarterの設定をいじって再起動。
  • 今度こそ成功。

こんなことは珍しくはないので、特定のソフトウェアに責を帰するつもりは ない (多分GaucheやCLで何か動かそうとする人も似たような苦労をしてるはず) けど、 いくつか考えのネタは得られると思う。

ランタイムの配布の問題

時々、処理系の機能として「単独の実行ファイルが作れるか」ということを問題にする人が いるのだけれど、そういう人が本当に欲しいのは大抵「ファイルひとつコピーすれば 動く」という話だったりする (Cf. WiLiKi:Gauche:StandAloneProgram)。

んで教科書的回答は「ターゲットにランタイムが入ってればいいんですよ」ってことに なるだけど、十分に主流になったJavaでさえ未だにランタイムではまることがあるって ことは、もっと深いところでの解決が必要なのかもしれない。

というか、ランタイムのことを気にしないでもアプリを配布できる言語って 今でも事実上Cくらいしかないのかなあ? それって、OSの主要コンポーネントも そのランタイムを必要としているから、という理由が大きいよね。 まああとAPIが十分に枯れてるって要素もあるけれど。

とすれば、ランタイムを気にしなくても良くなるにはその言語がOSの主要コンポーネントにも 使われて、かつAPIが十分に枯れることが必要になる。でも発展途上の言語にとっては ちょっと無理な要求だ。javaでさえ苦労してるのに。

複合した問題の切り分け

今回、firewallとの干渉があったわけだけど、 ランタイムの問題があったせいでちょっと遠回りした感がある。

複数の問題が同時に起きていることはよくあることで、 問題を切り分けてひとつづつ解決するしかないのだけれど、 そのメタ手順自体はなんだか昔から全然変わってない。 もう少し、なにか賢いサポートがあっても良いんではなかろうか。

git bisectの発想に良い筋を感じる。あれは問題そのものを解決してはくれないけれど、 問題がどこで生じるかを調べる決まりきった手順を自動化してサポートしてくれる。

複合問題の切り分けでは、関係する要素をひとつづつ変えて試す作業を 最悪で全てのパターンについて行う必要がある。ただ、ある組み合わせで うまくいったら/いかなかったら他のいくつかの組み合わせは試す必要がない、 というケースはあるので、うまくテスト方法を選べば大幅に 枝刈りできる可能性もある。

システムレベルの問題なら、変更要素は「何をインストールしたか/しなかったか」と あとは各々の設定の切り替えが主なものなので、そのへんをカバーしてくれる テストサポートツールというのはあり得るんじゃなかろうか。

Tag: System

Past comment(s)

koguro (2010/07/17 03:11:41):

ランタイム配布って、究極的には「仮想マシンの配布」になっていくのかな、と思ったりしています。HudsonみたいなWebアプリだと、特にOSから全部含めた環境込みで配布するのが一番簡単なんじゃないかなと。Javaみたいにライセンスの縛りがあったりすると、ちょっとややこしいですが。

shiro (2010/07/17 06:09:03):

サーバ系はそうですね。逆にそれで困る場合を考えると、ホストシステムのローカルファイルシステムやデバイスに直接アクセスしたいってのがありますが、全部ネットワーク透過になってれば(性能はともかく、理屈の上では)障害ではなくなるかな? もしそうなったら、最初からネットワークOSとして設計されたOS (Plan9とか?) が復権するかも。

あるいはGoogleがChromeの中に完全な仮想OS環境を提供しちゃってブラウザさえあればOKだぜ、とか :-)

Post a comment

Name: