10月 09

なんと 2010/10/09 現在、Google で “OpenGrok” のキーワードで検索すると私のブログのエントリが1ページ目に来るようです。OpenGrok の情報って以外と少ないんですね。そこで今一度 OpenGrok での環境の構築法についてのエントリをまとめてみました。

(10/12 更新)
更新直後に 10.10がリリースされたので試してみました。OK です。同じ手順でいけます。ただ、私の環境の場合、VMware Tools が上手く適用できませんでした。また、ここでは Ubuntu の Desktop版前提で記述していましたが、あわせて 10.10 server (64 bit) 版 でも試してみました。こちらも結果は OK です。ただし標準では入っていないパッケージがありましたし、もちろんブラウザが入っていませんので 127.0.0.1 で確認はできません。その辺りは分かる人は読み替えてやってみてください。

(注意)
前回のブログでは Ubuntu のバージョンは 9.04 を使用していましたが、今回は 10.04 です。そのせいで一部手順が変更になっています。tomcat6 は apt-get で入手できますし、ポート番号も 8080 のまま使用できました。この方が自然ですね。

0. 準備

環境

私の環境は以下の通りです。VM上に作成していますが必須用件ではありません。

  • Macbook Pro (snow leopard)
  • VMware v2.0.7
  • Ubuntu-10.04
使用するモジュール

本件で使用するモジュールは以下の通りです。

事前に入手しておくもの

以下のファイルは事前にダウンロードして置くと良いでしょう。

Exuberant ctags ctags-5.8.tar.gz
OpenGrok opengrok-0.9-src.tar.gz
JFlex jflex-1.4.3.tar.gz

また、解析対象のソースファイルも事前に準備しておく。ここでは Android のソースを用意しました。(容量が厳しくなったり負荷があまりに高い場合は予告なく削除します。)

Donut mydroid-donut.tar.gz (約550MB)
Eclair mydroid-eclair.tar.gz (約700MB)
Froyo mydroid-froyo.tar.gz (約800MB)

1. Ubuntu のインストール

Ubuntu-10.04 をインストールする。解析する際にメモリは最低 1 GB 以上ないとつらい。ハードディスク容量は解析するソースファイル次第だが最低 20 GB は用意しておいたほうが良いでしょう。

2. apt-get でインストール

jdk6, ant, tomcat6 の3つは apt-get で取得できるので apt-get install する。

$ sudo apt-get install openjdk-6-jdk
$ sudo apt-get install ant
$ sudo apt-get install tomcat6

3. Exuberant ctags のインストール

Exuberant ctags は後で使用するため事前にビルドしインストールする。
作業場所は任意で構わない。

$ cd (作業フォルダ)
$ tar zxvf ctags-5.8.tar.gz
$ cd ctags-5.8
$ ./configure
$ make
$ sudo make install

4. OpenGrok のインストール

OpenGrok をインストールする。OpenGrok のビルドには JFlex が必要になるので lib 以下に jar ファイルを配置しておく。なお、スクリプトファイル(OpenGrok)は2カ所修正が必要になるので注意すること。

解凍

$ cd (作業フォルダ)
$ tar zxvf opengrok-0.9-src.tar.gz
$ tar zxvf jflex-1.4.3.tar.gz

ファイル編集

OpenGrok ファイルに一部修正が必要です。

$ cd (作業フォルダ)/opengrok-0.9-src
$ vi OpenGrok

  • “java-6-sun” → “java-6-openjdk” (一箇所)
  • “ctags-exuberant” → “ctags” (一箇所)
JFlex.jar を lib に配置

$ cd (作業フォルダ)/opengrok-0.9-src/lib
$ cp ../../jflex-1.4.3/lib/JFlex.jar .

ビルド

$ cd (作業フォルダ)/opengrok-0.9-src
$ ant

dist フォルダに opengrok.jar と source.war ができていれば OK !

デブロイ(仮)

source.war ファイルを tomcat6 で使用する所定の場所にデプロイする。

$ cd (作業フォルダ)/opengrok-0.9-src
$ sudo ./OpenGrok deploy

OpenGrok のトップページが開くことを http://127.0.0.1:8080/source/ を開いて確認する。この時点ではソースの解析が済んでいないので中身は無い。

5. ソースコードの解析

ソースコードの中身を解析し必要なインデックスデータを作成する。データは /var/opengrok/data 以下に作成される。

データの準備

/var/opengrok/src フォルダを作成し、そこに解析対象のソースコードを置く。

$ sudo mkdir /var/opengrok
$ cd /var/opengrok/src
$ tar zxvf (対象のファイルのアーカイブ)

データ解析

データを解析する。このステップは数時間かかる。

$ cd (作業フォルダ)/opengrok-0.9-src
$ sudo ./OpenGrok index

デプロイ

データ解析で作成した dist/source.war を tomcat6 の所定の位置にデプロイする。

$ cd (作業フォルダ)/opengrok-0.9-src
$ sudo ./OpenGrok index

(10/12 更新)
最後のデプロイは不要でした。

http://127.0.0.1:8080/source/ を開いて確認する。OpenGrok のトップページからソースコードが参照できるようになっていれば成功です。お疲れさまでした!


Posted by sak

Tagged with:
5月 28

OpenGrok 知ってますか?

OpenGrok はブラウザから使用できる検索機能付きソースコードブラウザです。ブラウザでソースコードを見たりキーワードでソースコードを全文検索できたりします。同じ事を エディタと grep でやるよりも効率が大きく改善できます。Android のソースコードのような巨大なソースコードを探索する場合には特に重宝します。

これまで Cupcake, Donuts のソースコードは別の方が構築してくれた環境を利用しており、Eclair の環境も欲しいし、Froyo ももうそろそろだななんて考えていたのですが、今日ちょうど会社をお休みして時間が確保できたのでこれまで何度かトライして上手く行かなかった OpenGrok の環境構築に再トライすることにしました。

OpenGrok

画面はこんな感じです。

OpenGrok は Open Solaris のプロジェクトの成果物です。このため Open Solaris 用パッケージはあるようなのですが他の環境で使用するためにはソースコードを入手し自分の環境用に作るしかありません。できれば Snow Leopard で作りたかったのですが、少し手を加える必要が出てきそうだったので、ここは無難に VM上の ubuntu 9.04 で作成することにしました。

ソースのビルド

OpenGrok を作るには Java6 と Ant が必要です。これらは apt-get で入手できます。あと Exuberant ctagsJFlex というライブラリィが必要です。これらは別途入手する必要があります。Exuberant ctags は自前でコンパイルしなければなりません。JFlex は解凍後、中にある JFlex.jar を opengrok の libs 配下にコピーすれば OK です。準備を整えたのち ant コマンドでビルドします。

環境の構築

OpenGrok でやるべきことは 「インデックスの作成」と「デプロイ」の2つです。このためのスクリプトが用意されていますので簡単に実施できます。実際に動作させるためにはそれなりの準備が必要になりますが、そのうちのひとつが Tomcat6 です。スクリプトを実行する際に Tomcat6 が動作している必要がありますので Tomcat6 は事前に入手しておきます。Tomcat6 は apt-get でも入手できますが、私が試したところ上手く動作しなかったので独自に入手したものを使いました。ひとつ注意が必要なのは OpenGrok がアクセスするポート番号がデフォルトで 2424 だということです。こちらを変更する方法もあるでしょうけれど、私の場合は tomcat6 の server.xml でリスンポートを 8080 から 2424 で変更することで対応しました。次にターゲットするソースコードの指定です。環境変数を使っていろいろできるようですが、私は標準に合わせて配置しました。標準のフォルダは /var/opengrok/src。この下に実際に対象のコードもおいてもいいですし、ターゲットのフォルダをシンボリックリンクで指定しても良しです。私はシンボリックリンクでやりました。最後に環境変数 JAVA_HOME の指定を行います。この場合、/usr/lib/jvm/java-6-sun になるはずです。

$ export JAVA_HOME=/usr/lib/jvm/java-6-sun
$ ./OpenGrok index(インデックスの作成) — (1)
$ ./OpenGrok deploy(デプロイ)— (2)

(1) のコマンド実行後、dist の下に source.war ができます。これを (2) のコマンドで tomcat6 の webapps 配下にコピーします。私の場合は/var/tomcat/webapps です。このまま、source.war で運用しても良いですが、変更してもOKです。私の場合は複数の Android のバージョンのコードを同時に扱いたいので eclair.war にリネームしました。

実行

さあ、あとは実行です。リスンポートを 2424 に変更したのを忘れずに、以下のURLを指定してブラウザを起動します。

http://127.0.0.1:2424/eclair

できました。

これでソースコードを自由に参照したり検索できる、、、、、、はずなのですが、検索が上手く動きませんでした。現状、取りあえず参照だけはできるようになったので今日のところはこれで良しとすることにしましょう。


(追記)
検索できない謎が解けました。/var/opengrok/src はシンボリックリンク OK と書きましたがそれだと検索のためのデータを作成してくれないようです。シンボリックリンクを止めたら検索ができるようになりました。


Posted by sak

Tagged with:
preload preload preload