Linux上にHudson独自ビルドの開発環境を準備する

私は以前もHudsonの本体やプラグインに対して、独自ビルドをしたり一部をオープンソースにコントリビュートしたりしていたのですが、いままではWindows上でEclipseを使っていました。
今回はいろいろな環境で開発を少しづつ進める可能性があるので、レンタルサーバ上にvimベースで利用できる開発環境を整えようと思います。

まずは、Hudsonのサイトにある開発者リファレンスを見てみると、

JDK6とmaven2のインストールが必要とのこと。Hudsonを動かすにもJDK(JRE)は必要です。

JDKのインストールは、少し面倒ですが、

ここからJDK6のダウンロードを選び、いくつかの画面を経て jdk-6uxx-linux-i586-rpm.binwget等でダウンロードしてきます。(ここでは6u14)

$ sh jdk-6u14-linux-i586-rpm.bin

とすると展開できるので、展開してできた jdk-6uxx-linux-i586.rpm をインストールします。

$ sudo rpm -ivh jdk-6u14-linux-i586.rpm

つぎに、mavenのインストールです。mavenjavaなので、落としてきて展開すればおしまいです。

から、最新のmavenを取得して展開します。

$ cd /usr/java
$ sudo tar xfvj ~/work/build/java/apache-maven-2.2.0-bin.tar.bz2

ついでに、今回HudsonのプラグインHadoopを使うものを作る予定なので、クライアント用にHadoopもインストールしておきます。

から、必要なHadoopを探してダウンロードしてきます。

$ cd /usr/java
$ sudo tar xvfz ~/work/build/hadoop-0.19.2.tar.gz

最後に.bashrcなどに環境変数としてJAVA_HOMEとMAVEN_HOMEおよびそのコマンドに対するPATHを設定すればOKです。

export JAVA_HOME=/usr/java/jdk1.6.0_14
export MAVEN_HOME=/usr/java/apache-maven-2.2.0
export HADOOP_HOME=/usr/java/hadoop-0.19.2
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$HADOOP_HOME/bin:$PATH

インストールチェック。

$ java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
$ mvn -v
Apache Maven 2.2.0 (r788681; 2009-06-26 22:04:01+0900)
Java version: 1.6.0_14
Java home: /usr/java/jdk1.6.0_14/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux" version: "2.6.18-8.el5pae" arch: "i386" Family: "unix"
$ hadoop
Usage: hadoop [--config confdir] COMMAND
where COMMAND is one of:
  namenode -format     format the DFS filesystem
  secondarynamenode    run the DFS secondary namenode
  namenode             run the DFS namenode
  datanode             run a DFS datanode

...

ということで、インストールできました。
次は、Hudson開発環境ということでSubversionをgitを通して使う方法をやってみたいと思います。

2009年上期未踏本体に採択されました

ここのところ、未踏の報告会に参加したり、いままで扱わなかったような技術のエントリが増えた理由です。

未踏本体というのは、独立行政法人情報処理機構(IPA)が半年ごとに公募しているもので、未踏に採択されるとそのプロジェクトは業界の先達(PM)の指導を受けながら、提案したソフトウェアを開発することでそのなかでも一握りのスーパークリエータを目指すことになります。

では何を開発するかというと、もうすでに未踏の公式ページで公開されているのですが、「MapReduce汎用化のためのDSL基盤・実行基盤の開発」というテーマになっています。これだけだと何かわからないですが、簡単に説明すると、

MapReduceをみんなが簡単に使えるために、Hudson & Hadoopによる実行管理基盤とJRuby & Ruby DSLによるプログラムフレームワークを開発します

ということです。
これからは、このブログでは主にこれらのテーマを扱っていきます。

Eucalyptusをyumでインストールする

1台の割と強力なサーバの上に、VMを使って複数のマシンをインストールしようと思います。最初はVMWare Serverを使おうと思ったのですが、将来的にAmazon EC2に展開するかもしれないので、今流行のEucalyptusを使ってみます。

それで、これを参考にインストールしているのですが、ぼそっと「yumで管理したら便利だよ」とだけ書いてあるので、実際にやってみました。

まず、EucalyptusRPM一式をダウンロードします。

ここから、CentOS-5.3のものをダウンロード。

eucalyptus-1.5.2-centos-i386/
eucalyptus-1.5.2-centos-i386/eucalyptus-cc-1.5.2-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-cloud-1.5.2-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/euca-libvirt-1.5-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/aoetools-21-1.el4.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/euca-rampartc-1.2.0-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/euca-axis2c-1.5.0-2.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-1.5.2-rpm-deps-i586/vblade-14-1mdv2008.1.i586.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-nc-1.5.2-1.i386.rpm
eucalyptus-1.5.2-centos-i386/eucalyptus-gl-1.5.2-1.i386.rpm

それで、yumのローカルリポジトリを作ってこのRPMたちを入れることになります。

今までローカルリポジトリを作成したことがないので、ここを参考にしました。

ローカルリポジトリを作成するには、createrepoというパッケージが必要です。これはデフォルトのリポジトリでも入手できます。

$ sudo yum install createrepo

ローカルリポジトリのためのディレクトリを作成。

$ sudo mkdir -p /var/yum/repos/centos5/i386
$ sudo mkdir -p /var/yum/repos/centos5/SRPMS
$ sudo mkdir -p /var/yum/repos/centos5/x86_64

作成した、i386用のディレクトリにすべてのRPMをコピー。
すると、さきほどのcreaterepoでメタデータを作成できます。

$ sudo createrepo /var/yum/repos/centos5/i386
$ ls /var/yum/repos/centos5/i386/repodata/
filelists.xml.gz  other.xml.gz  primary.xml.gz  repomd.xml

あとは、yumの設定ファイルの作成です。

$ sudo vi /etc/yum.repos.d/my.repo

として、以下のファイルを作成。

[my]
name=CentOS5 $releasever - $basearch - My Repository
baseurl=file:///var/yum/repos/centos$releasever/$basearch/
enabled=1
gpgcheck=0

上記の参考サイトでは[my repo]とかしてあったんですが、この名前と設定ファイルの名前は一致する必要があるようです。。

それでは、yumでインストール。

$ sudo yum install eucalyptus-cloud
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: centos.yubis.org
 * updates: centos.yubis.org
 * addons: centos.yubis.org
 * extras: centos.yubis.org
my                                                                                                                                                                               |  951 B     00:00
primary.xml.gz                                                                                                                                                                   | 3.7 kB     00:00
my                                                             10/10
Excluding Packages in global exclude list
Finished
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package eucalyptus-cloud.i386 0:1.5.2-1 set to be updated
--> Processing Dependency: eucalyptus >= 1.5.2 for package: eucalyptus-cloud
()
Installed: eucalyptus-cloud.i386 0:1.5.2-1
Dependency Installed: ant.i386 0:1.6.5-2jpp.2 ant-nodeps.i386 0:1.6.5-2jpp.2 aoetools.i386 0:21-1.el4 euca-axis2c.i386 0:1.5.0-2 euca-rampartc.i386 0:1.2.0-1 eucalyptus.i386 0:1.5.2-1 giflib.i386 0:4.
1.3-7.1.el5_3.1 java-1.6.0-openjdk.i386 1:1.6.0.0-0.30.b09.el5 java-1.6.0-openjdk-devel.i386 1:1.6.0.0-0.30.b09.el5 vblade.i586 0:14-1mdv2008.1
Complete!

うまくいきました!yumリポジトリ構築は意外と簡単でした。

sshのNo Passログインができなかった理由

sshでNo Passログインをするためには、キーペア(秘密鍵・公開鍵)を作成して相手先のサーバの~/.ssh/authorized_keysに公開鍵を追加すればOKのはずです。

host1$ ssh-keygen -t rsa -P ""
host1$ ls ~/.ssh
id_rsa  id_rsa.pub

host2$ mkdir ~/.ssh
host2$ cat id_rsa.pub >> ~/.ssh/authorized_keys

なのに、どうしてもうまくいかず。。

Permission denied (publickey,gssapi-with-mic,password).

とでるので、このエラーメッセージでググると、

なるほど、このつくり方だと.sshと.ssh/authorized_keysのpermissionがデフォルト設定だと755, 644になりますね。。
なので、それぞれ以下のようにするとうまくいきました。

host2$ chmod 700 ~/.ssh
host2$ chmod 600 ~/.ssh/authorized_keys 

また忘れそうなので書いておきます。

2008年下期 未踏IT 人材発掘・育成事業の加藤PM・竹田PM合同成果報告会に参加しました(後半)

前回の続きです。

街角ネット世界コミルバの開発(足立博さん・竹田PM)

Webページにアバターを表示する技術のようでした。「コミュニケーションする場」の略でコミルバとのこと。
どこかで聞いたことあるなぁと思っていたら、やはり先行したサービスがあって、それとどうやって差別化をしているかというと、検索して興味がある人をマッチングさせるような仕組みを作っているとのことでした。
システム的な仕組みは、コミルバはWebに対するプロクシとして働いて、コミルバを通して同じサイトにアクセスしている同士をページ上でアバター表示をして結びつけるとのこと。技術的にはIM(インスタントメッセージ)に近いと思います。
サーバをGoogle App Engineとしているところに、「おっ」と思わせるところがありました。そこらへんの詳細は発表されませんでしたが。この発表会では、みなさんあまり実装の詳細には立ち入らないですね。

リバースプロクシーを用いた消費電力自動最適化サーバシステム(生田昇さん・加藤PM)

この発表はクラウドシステムのプロトタイプのように感じました。1台のリバースプロクシによって、ロードバランサのように負荷分散し、負荷が上がったらプールしているサーバを起こし、負荷が下がったらサーバを自動で落とすというものです。
apacheのモジュールとして書かれていて、その詳細はちょっと気になりました。(もちろん詳細には語られませんでしたが。。)
リバースプロクシ自体も落ちるとまずい(シングルポイントクリティカリティ)なので、それが落ちたら代替のサーバが成り代わる、という仕組みのようです。これを逆ヘルスチェックの仕組みと言ってました。

頭部/視線方向を用いた音声メモの配置/ブラウジングによるウェアラブル思考空間支援(米澤朋子さん、山添大丈さん、寺澤洋子さん・竹田PM)

今回一番プレゼンにも、プロジェクトにも感銘を受けたのがこれです。簡単に言えば、iPhoneを使って空間に音声付箋(メモ)を貼り付けることができるアプリ、ですが、音声認識の専門家だなぁというのが端々に感じられました。
音声付箋ですが、自分が向いている方向に貼り付けることができて、実際に再生するときはその方向から聞こえるように3D音響という技術を使っています。知らなかったのですがこれを実現するためにOpenALというOpenGLのようなモジュールがあるようです。
最新のiPhone 3GSに搭載されている地磁気センサで頭の方向を取得していたり、音声アイコンというものを独自に考案して付箋が張ってあることを認識できたりします。
付箋をはがすときは「Fu」という音で吹き飛ばすイメージにしたかったらしいですが、「Fu」は音声スペクトラムが弱いらしく、「Su」というように吹き飛ばすようになったとのこと。
また、今後の展開としても海外の教授から引き合いが来ていたりと、商用、アカデミック両方で展開が見込めそうなようです。
あと、プレゼンの途中に今までの苦労の日々をつづったスナップ(音つき)などがあってとても面白かったです。(なんか結婚式のビデオみたいとも思いましたが。笑)
現在このアプリはAppleの審査中らしいですが、いろいろ普通の人が使わない機能を使っているらしく、若干難航中とのこと。早く公開されたら使ってみたいです。
私も質問してみたのですが、付箋を貼り付けられるのが水平方向だけで、上下を使わなかった理由を聞いたら、人間は上下からの音を識別するのが苦手だから、とのこと。なるほどと思いました。ただ、上下は座標としては取っているとのこと。

このあと、懇親会でも昔の未踏スーパークリエータの方たちなどから面白いお話を聞いて、やる気を出して帰ってきました。

2008年下期 未踏IT 人材発掘・育成事業の加藤PM・竹田PM合同成果報告会に参加しました(前半)

久しぶりのエントリーになります。この2ヶ月間いろいろなことがあったのですが、それはおいおい書いていくことにします。
それで突然未踏の発表会に参加なのですが、その理由はまた別のエントリーで・・

今回の未踏成果発表会は加藤PMと竹田PMというお二人のPMによる合同成果報告会です。計6人の方がそれぞれの成果発表を行われました。

ウェブ閲覧による消費電力を測定するためのソリューションの提案(時田正彦さん・加藤PM)

加藤PMの研究テーマがグリーンITなので、そのテーマに沿ったプロジェクトです。グリーンITというテーマだとサーバ側の電力削減が多いのですが、このプロジェクトはクライアント側にプラグインを入れて、サイトごとに消費電力を測れる、というもののようです。
やはり動画系のサイトは電力をよく消費するようで、ニコ動はかなり消費するようです。。
サイトを作成する企業側に、結果をフィードバックしてコンサルティングなどができるんじゃないか、とのことでした。

機械学習システムを用いたWeb 空間からの知識発見(渡部浩昭さん・竹田PM)

Webの情報を元に、それを拡張する仮説空間を作ってそこから知識を得よう、というプロジェクトで、個人的にはとても面白い概念だと思いました。Prologを用いて、既存の自然言語処理モジュールを利用しているとのことで、Prologを使えば簡単にそういうことができるのかと思ったんですが、Prolog触ったことない。。
どうやって処理しているかというのは、結局知識がついていかずあまりわからなかったのですが、Web上にある既存の情報(中国は政策オプションがある)から、抽象化や特化を行って条件を作成し、概念辞書や他のWeb上の情報から仮説を生成する、というエンジンのようです。やっぱりよくわからなかったのですが、なんらかの意味のある知識(仮説)が生成できるとすれば、とても興味深いですね。

グリーンOS onix OS の開発(大山裕泰さん・加藤PM)

OSの開発、というタイトルのプロジェクトでどんな大作、と思ったんですがそこまで大きなプロジェクトではなく(他に独自OS開発もやられているようですが)GNU/Linuxカーネルを拡張してハードディスクの電力消費量を削減するものでした。
HDDの電力消費は大きいので、カーネルレベルでバーチャルデバイスドライバ層を設け、ディスクのキャッシュをSSDに持たせてできるだけディスクを回さないようにするということで、電力を節約するということですね。
カーネルの中身がよくわかっていないので実装レベルではよくわからなかったのですが、検証結果で50%も電力削減できていたのにはびっくりしました。ただその代わりパフォーマンスが少し劣化してしまって、それが課題のようですが。
でも、これを大学4年生のクリエータがやり遂げた、というのにさらにびっくりです。実際、大規模な電力削減をしたい大手SIerなどと組んでビジネスにすれば、すぐに割りと大きなビジネスになりそうだと感じました。

ちょっと長くなってきたので、後半に続きます。

GAE/JでRailsを動かすのは難しかった・・

前回までいろいろやってきましたが、どうも既存JRuby on RailsアプリをGAE/Jで動かすのはかなり難しいことがわかってきました・・

しりとりアプリではnet/httpサポートされてないと動かないです。
あと、やっぱりBumbleではソース読むと、has_many :throughがサポートされてないので、これを何とかするのがつらい。。

ということで、次回からは一からなんちゃってしりとりアプリを作って、動かしてみることにします。