Ubuntu 17.10でOpenGrok1.1-rc70

Read-Onlyで使用しているリポジトリのgit logが重くて泣きそうだったのでOpenGrokを導入しました。 前に使用したときよりだいぶバージョンが上がっていたので手順をメモしておきます。

導入

OpenGrokはTomcat等のWebアプリサーバ上で動作し、ブラウザからソースコードを閲覧するためのUIを提供してくれます。 関数や変数の参照箇所・定義箇所を高速に検索することができるほか、Git等で構成管理している場合には履歴をたどることができます。 ライセンスはCDDLです。

Androidのような大きなリポジトリでも高速で検索することができて便利です。

環境

インストール

手順はHow to setup OpenGrok · oracle/opengrok Wiki に従います。

ctags

universal-ctagsをビルドしてインストールします。

$ git clone https://github.com/universal-ctags/ctags.git
$ sudo apt install make autoconf pkg-config
$ cd ctags
$ ./configure
$ make
$ sudo make install
$ cd

Java

Oracle Javadebパッケージでインストールします。

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-11*/bin/java 1081 
$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-11*/bin/javac 1081 
$ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk-11*/bin/javadoc 1081 
$ sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk-11*/bin/javap 1081 
$ sudo update-alternatives --config java 
$ sudo update-alternatives --config javac 
$ sudo update-alternatives --config javadoc 
$ sudo update-alternatives --config javap

Tomcat

Tomcatをaptでインストールします。

$ sudo apt install tomcat8
$ sudo service start tomcat8

ブラウザで http://localhost:8080 を表示して動作を確認します。

pip

OpenGrokのCLIシェルスクリプトからPythonに移行しているようなので、pipをインストールしておきます。(Jarのラッパーなので手順的にはOptional扱いのようです)

(see: Installation — pip 18.1 documentation

$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python3 get-pip.py 

OpenGrok

OpenGrokのバイナリをダウンロードしてPythonスクリプトをインストールします。

$ wget https://github.com/oracle/opengrok/releases/download/1.1-rc70/opengrok-1.1-rc70.tar.gz
$ tar xzf opengrok-1.1-rc70.tar.gz
$ cd 
$ python3 -m pip install --users tools/opengrok-tools.tar.gz

リポジトリの格納場所、インデックスデータの格納場所、設定ファイルの格納場所を決めます。 /var/local/opengrok配下に格納するようにしました。

/var/local/opengrok
├── data: インデックスデータの格納場所(data root)
├── etc: 設定ファイルの格納場所
│   └── configuration.xml: OpenGrokの設定ファイル
├── lib: OpenGrokのバイナリに含まれるlibディレクトリ
│   ├── lib
│   ├── opengrok.jar
│   └── source.war
└── repos: リポジトリの格納場所(source root)

Pythonスクリプトを使用してデプロイします。

$ sudo opengrok-deploy -c /var/local/opengrok/etc/configuration.xml /var/local/opengrok/lib/source.war /var/lib/tomcat8/webapps/source.war

リポジトリのインデックスを作成します。Pythonスクリプトも用意されています(opengrok-indexer)が、しっくりこなかったのでjarを直接使用しました。 最低限、data root(-d)、source root(-s)は指定する必要があるようです。 configuration.xmlはここで作成するようにします(--writeConfig)。

$ sudo java -jar /var/local/opengrok/lib/opengrok.jar -d /var/local/opengrok/data -s /var/local/opengrok/repos --writeConfig /var/local/opengrok/etc/configuration.xml 

いろいろと試して以下のような形にしました。

$ sudo java -jar /var/local/opengrok/lib/opengrok.jar -d /var/local/opengrok/data -s /var/local/opengrok/repos -t 1 -P -H -r on -T 3 -G -S --progress --renamedHistory on  --writeConfig /var/local/opengrok/etc/configuration.xml

設定内容は下記の通りです。

  • タブ幅(-t): 1
  • インデックス作成時のスレッド数(-T): 3
  • プロジェクト単位での表示あり(-P)
  • 履歴表示あり(-H、-r、-G、-S、--renamedHistory on)
  • インデックス中のインデックス中の進捗表示あり(--progress)

その他、設定できる内容は下記で確認できます。

$ sudo java -jar /var/local/opengrok/lib/opengrok.jar -h --detailed

動作確認

$ sudo service restart tomcat8

ブラウザで http://localhost:8080/source へアクセスして動作を確認します。