OpenGrokでソース全文検索

プロジェクトで、リポジトリ内のソースコード全文検索する仕組みが欲しくていろいろ探しまわった結果、OpenGrokなるものを発見。

セットアップ自体はそんなに難しくないです。JavaGlassfishTomcat、それと全文検索したいリポジトリがあればOK。

紹介するだけに留めておこうと思ったけど、さくらのVPSを使った構築方法を書いてみることにしました。
環境としては、

Install Glassfish

cd ~
wget http://download.java.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-web-ml.zip
unzip glassfish-3.1.2.2-web-ml.zip
sudo mv glassfish3 /usr/local

vi ~/.bash_profile
  # Append '/usr/local/glassfish3/bin' to PATH
source ~/.bash_profile

cd /usr/local/glassfish3

## Change port number
sed -e "s/8080/50080/g" glassfish/domains/domain1/config/domain.xml | grep "port=\"50080\""
  # <network-listener port="50080" protocol="http-listener-1" transport="tcp" name="http-listener-1" thread-pool="http-thread-pool"></network-listener>
sed -i -e "s/8080/50080/g" glassfish/domains/domain1/config/domain.xml
sed -e "s/8181/50081/g" glassfish/domains/domain1/config/domain.xml | grep "port=\"50081\""
  # <network-listener port="50081" protocol="http-listener-2" transport="tcp" name="http-listener-2" thread-pool="http-thread-pool"></network-listener>
sed -i -e "s/8181/50081/g" glassfish/domains/domain1/config/domain.xml
sed -e "s/4848/50048/g" glassfish/domains/domain1/config/domain.xml | grep "port=\"50048\""
  # <network-listener port="50048" protocol="admin-listener" transport="tcp" name="admin-listener" thread-pool="admin-thread-pool"></network-listener>
sed -i -e "s/4848/50048/g" glassfish/domains/domain1/config/domain.xml

## Set admin password
asadmin change-admin-password

## Start glassfish server
asadmin start-domain domain1
  # domain1の起動を待機しています .....
  # domain が正常に起動されました: domain1
  # domain 場所: /usr/local/glassfish3/glassfish/domains/domain1
  # ログ・ファイル: /usr/local/glassfish3/glassfish/domains/domain1/logs/server.log
  # 管理ポート: 50048
  # コマンドstart-domainは正常に実行されました。

## Chagne security setting
asadmin enable-secure-admin --port 50048
  # 管理ユーザー名を入力してください>  admin
  # ユーザー"admin"の管理パスワードを入力してください>
  # セキュリティ保護された管理に対する変更を有効にするには、稼働中のすべてのサーバーを再起動する必要があります。
  # コマンドenable-secure-adminは正常に実行されました。

## Restart glassfish server
asadmin restart-domain domain1
  # ドメインは正常に再起動されました
  # コマンドrestart-domainは正常に実行されました。

Add proxying for glassfish

単に、iptablesでPort開けて、http://IP_ADDR:50048/http://IP_ADDR:50080/でアクセスできるようにしたかったけどうまくいかなかったので、nginxのreverse proxyを使うことにした。
ちなみに、下の設定だと管理画面のログイン画面が表示できない・・・うーむ。

sudo vi /usr/local/nginx/conf/nginx.conf
  # server {
  #     listen       80;
  #     server_name xxxxxxx;
  # 
  #     location / {
  #         proxy_set_header X-Forwarded-Host $host;
  #         proxy_set_header X-Forwarded-Server $host;
  #         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  #         proxy_pass http://localhost:50080;
  #     }
  #     location /admin {
  #         proxy_set_header X-Forwarded-Host $host;
  #         proxy_set_header X-Forwarded-Server $host;
  #         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  #         proxy_pass https://localhost:50048;
  #     }
  # }

Install OpenGrok

cd ~
wget http://java.net/projects/opengrok/downloads/download/opengrok-0.11.1.tar.gz
tar xvfz opengrok-0.11.1.tar.gz
sudo mv opengrok-0.11.1 /usr/local/
cd /usr/local
sudo ln -s opengrok-0.11.1 opengrok
sudo chown -h user:group opengrok

vi ~/.bash_profile
  # Append '/usr/local/opengrok/bin' to PATH
source ~/.bash_profile

cd opengrok
vi bin/OpenGrok
  # ファイルの初めの方に追記
  # OPENGROK_INSTANCE_BASE=/usr/local/opengrok/data
  # JAVA_HOME=/usr/java/default
  # OPENGROK_APP_SERVER=Glassfish
  # OPENGROK_GLASSFISH_BASE=/usr/local/glassfish3/glassfish
mkdir data

Deploy OpenGrok to Glassfish

OpenGrok deploy
  # Loading the default instance configuration ...
  # ERROR: Unable to determine Java 6 Home for Linux 2.6.18-308.16.1.el5
  # Installing /usr/local/opengrok/bin/../lib/source.war to /usr/local/glassfish3/glassfish/domains/domain1/autodeploy ...
  # 
  # Start your application server (Glassfish),  if it is not already
  # running, or wait until it loads the just installed web  application.
  # 
  # OpenGrok should be available on <HOST>:<PORT>/source
  #   where HOST and PORT are configured in Glassfish.

Create index

下の手順を実行した後、http:///sourceでアクセスすればsandbox内を全文検索できるようになるんだけど、Searchしてもなにもひっかからん・・・。

## Make repository
sudo mkdir repos
sudo chown user:group repos
cd repos

mkdir sandbox
cd sandbox
git init
echo 'hogehoge' >> hogehoge
echo 'fugafuga' >> hogehoge
git add hogehoge
git commit -m 'hogehoge'

OpenGrok index /usr/local/reposrok
  # Loading the default instance configuration ...

ということで、構築の参考程度にしてもらえれば。職場では正常に動いたんだけどなあ。
なお、日本語が文字化けするんだけど、対処方法がよくわからず。