はじめに

ここでは、インストールし立ての Ubuntu 18.04.1 に OpenGrok 1.1-rc37 を導入します。

OpenGrok の要件

Opengrok の要件には、以下が上げられています。

  • Java 1.8
  • GlassFish または Tomcat 8.x 以降
  • Universal ctags (Exuberant ctags でも動作)

Java

Java のリリースポリシーの変更や Java 1.8 (Oracle を名乗るサイトでこの記述はいいのかしら) のサポートエンドもあり、なるべく最新で長持ちするバージョンを使います。オラクルエンジニア通信のスライドを確認すると、Java 8 (こちらの記述のほうがすっきり) の公式アップデートは 2019/1 (個人利用は 2020 年末) ということで、Java 9 以降の利用を考えます。Java 11 がリリースサイクル変更後の最初の Long Term Support (LTS) になるので、これをターゲットとします。

しかしながら、現時点で Java 11 はリリースされていません。Ubuntu 18.04 では、LTS が出ていない状況だが Ubuntu の LTS である 18.04 に Java 11 を入れ込みたい、ということで 2018/9 にリリースされる Java 11 までは Java 10 をデフォルトの JDK とする方針をとっています。これは Ubuntu 18.04 のリリース ノートで確認することができます。日本語ではこちらの情報が分かりやすかったです。

Tomcat

すでに Tomcat 9 がリリースされていますが、Ubuntu 18.04 の universe に収録されているのは 8.5 系となります。特に何かこだわりがあるわけでもないので、素直に Tomcat 8.5.x を利用します。

この Tomcat の webapp ディレクトリは /var/lib/tomcat8/webapps になるので、OpenGrok の war ファイルはここに展開します。

Ubuntu 18.04: Tomcat 8.5 webapp and lib folder location

Ctags

Ubuntu 18.04 の ctags は Exuberant ctags ですが、如何せん 1.5.9~svn20110310 ととても古い。調べると Universal ctags なるものが Exuberant ctags から Fork しており、そこそこのペースで更新されています。現状は Ubuntu 18.04 (Bionic) の universe リポジトリにもありませんが、今後 18.10 (Cosmic) の universe リポジトリには入りそうな感があります。日本の方が PPA でパッケージを作られていますが、Debian のパッケージ アーカイブにも追加されていたので Debian のものを利用します。Debian のパッケージはこちら

インストール

Java

default-jdk パッケージをインストールします。

$ sudo apt install default-jdk

Tomcat

Ubuntu 18.04.1 から、universe リポジトリが /etc/apt/sources.list から削られてしまったので追加します。トラブルがあった時のために tomcat8-admin パッケージもインストールしておきます。

$ sudo vi /etc/apt/sources.list
$ cat /etc/apt/sources.list
deb http://jp.archive.ubuntu.com/ubuntu bionic main
deb http://jp.archive.ubuntu.com/ubuntu bionic-security main
deb http://jp.archive.ubuntu.com/ubuntu bionic-updates main
deb http://jp.archive.ubuntu.com/ubuntu bionic universe
deb http://jp.archive.ubuntu.com/ubuntu bionic-security universe
deb http://jp.archive.ubuntu.com/ubuntu bionic-updates universe
$ sudo apt update
$ sudo apt install tomcat8 tomcat8-admin

Universal Ctags

Debian Buster 向けの universal-ctags パッケージをダウンロードしてインストールします。

$ wget http://ftp.jp.debian.org/debian/pool/main/u/universal-ctags/universal-ctags_0+git20180225-1_amd64.deb
$ sudo dpkg -i universal-ctags_0+git20180225-1_amd64.deb

OpenGrok

OpenGrok の Github から rc37 をダウンロードして /usr/local に展開します。合わせて WebApp から参照される Config ファイルの保存先とする /etc/opengrok、検索対象のソースコードを配置する /var/opengrok/src、インデックスデータの格納先となる /var/opengrok/data を作成しておきます。

$ wget https://github.com/oracle/opengrok/releases/download/1.1-rc37/opengrok-1.1-rc37.tar.gz
$ tar xf opengrok-1.1-rc37.tar.gz
$ sudo cp -r opengrok-1.1-rc37.tar.gz /usr/local/opengrok
$ sudo mkdir -p /etc/opengrok /var/opengrok/{src,data}

セットアップ

OpenGrok

最初に deploy.py コマンドで OpenGrok のアプリケーション war ファイルを Tomcat の webapps ディレクトリにコピーします。Config ファイルがデフォルトの場所であれば、単純に war ファイルをコピーするだけで問題ありませんが、Config ファイルの場所を変えている場合は deploy.py コマンドを使う必要があります。deploy.py の中では Config ファイルの場所を war ファイル内の WEB-INF/web.xml で変更しています。

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

これでしばらくした後、http://{hostname_or_IP}:8080/source で OpenGrok アプリケーションにアクセスできます。しかし、この段階では検索対象となるソースコードが一切インデックス化されていないので、エラーが表示されます。

ソースコードのインデックス作成

試しに Kubernetes のソースコードをインデックスを作成します。

$ wget wget https://github.com/kubernetes/kubernetes/archive/v1.11.2.tar.gz
$ tar xf v1.11.2.tar.gz
$ cp -r kubernetes-1.11.2 /var/opengrok/src
$ sudo /usr/local/opengrok/bin/indexer.py -a /usr/local/opengrok/lib/opengrok.jar -- -s /var/opengrok/src -d /var/opengrok/data -H -P -S -G -W /etc/opengrok/configuration.xml -U http://localhost:8080
$ sudo systemctl restart tomcat8.service

無事ソースコード検索できるようになりました。indexer.py の各種オプションは Github の Wiki で確認できますが、詳細までは書かれていないので環境変数とオプションのマッピングから辿るほかない状況です。確認したところでは、単純に indexer.py を実行する場合は、追加/更新されたソースコードのみがインデックス化の対象となるようです。