0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WSL2(Ubuntu)とDockerでOpenGrokを立ち上げる

Posted at

まぁまぁでかくなったプロジェクトのソースをSakuraのGrepで解析するのは大変バカらしくなり、楽するためにCopilotと相談しながら作って動いたので備忘録。
Unixのオンプレ環境に配置すればIPアドレスのポート開放をすれば閲覧ができるようになります。
ポート開放やFireWallは自前でなんとかして下さい。(笑)

前提

  • dockerの導入
    UNIX環境にはDockerが導入されていることが前提になります。
    書く環境に合わせてDockerEngineの導入をして下さい。
    (本書の内容はUbuntu24.04.01LTS,centOSで動作を確認しています。)
    https://docs.docker.com/engine/install/

  • nkfの導入
    また、nkfコマンドも必要になります。
    apt installコマンド等でインストールをしておいてください。

sudo apt install nkf
  • opengrokの閲覧するフォルダの作成
    OpenGrokが解析するソースコード等を入れるフォルダを作成します。
mkdir -p opengrok/{src,data,log,configuration}

※ opengrok/src にインデックス対象のソースコードを配置してください。

~/opengrok$ ll
total 6860
drwxr-xr-x  6 wsluser wsluser    4096 Aug 20 15:32 ./
drwxr-x--- 11 wsluser wsluser    4096 Aug 20 15:34 ../
drwxr-xr-x  2 wsluser wsluser    4096 Aug 20 13:21 configuration/
drwxr-xr-x  7 wsluser wsluser    4096 Aug 20 13:00 data/
drwxr-xr-x  2 wsluser wsluser    4096 Jul 11 10:30 log/
drwxr-xr-x  7 wsluser wsluser    4096 Aug 20 17:29 src/

ymlファイルの修正

環境に合わせて、.ymlファイルの下記opengrokのフォルダパスに修正してください。
※pwd等を使用して確認すると楽です

version: '3.8'

services:
  opengrok:
    build: .
    container_name: opengrok
    ports:
      - "8888:8080"
    volumes:
      - /home/wsluser/opengrok/src:/opengrok/src
      - /home/wsluser/opengrok/data:/opengrok/data
      - /home/wsluser/opengrok/log:/opengrok/log
      - /home/wsluser/opengrok/configuration:/opengrok/etc
    restart: unless-stopped

docker imageのビルド

DockerFileを用意する。

参考:

FROM opengrok/docker:latest

# 必要なツールのインストール(ctagsビルド用)
RUN apt update && apt install -y \
    git \
    build-essential \
    autoconf \
    automake \
    pkg-config \
    nano \
    libtool

# universal-ctagsのビルドとインストール
RUN git clone https://github.com/universal-ctags/ctags.git /tmp/ctags && \
    cd /tmp/ctags && \
    ./autogen.sh && \
    ./configure && \
    make && \
    make install && \
    rm -rf /tmp/ctags

# ポート設定(仮想環境内部は8080、外部は8888)
EXPOSE 8080
docker-compose build

(初回はかなり時間がかかります。)

※ .ymlファイルを修正してDocker Imageを更新するとき

docker-compose down
docker-compose up -d --build

docker imageの起動

下記コマンドでバックグラウンド起動します。

docker-compose up -d

※ Docker Image内部でコマンドを実行したいときは下記コマンドを実行します。

docker exec -it opengrok /bin/bash

gitローカル環境のファイルのUTF8変換

インデックスする際にSJISファイルは文字化けするため、
必要なファイルをUTF8へ変換するために下記Shellを作成して対応していました。
必要に応じて修正し、変換してください。
(docker外で実行してください。)

#!/bin/bash

TARGET_DIR=/home/wsluser/opengrok/src/
EXTENSIONS=("*.c" "*.cpp" "*.Cpp" "*.h" "*.cs" "*.go" "*.bat" "*.rb" "*.html" "*.asc" "*.css" "*.js" "*.md")

for ext in "${EXTENSIONS[@]}"; do
  find "$TARGET_DIR" -type f -name "$ext" | while read -r file; do
    encoding=$(nkf -g "$file")
    if [[ "$encoding" != "UTF-8" ]]; then
      echo "Converting $file from $encoding to UTF-8"
      temp_file="${file}.tmp"
      if iconv -f "$encoding" -t UTF-8 "$file" -o "$temp_file"; then
        mv "$temp_file" "$file"
      else
        echo "Failed to convert $file"
        rm -f "$temp_file"
      fi
    fi
  done
done

git pullの環境変数設定

git pullをする際のUser設定を保存しておかないと、CrontabやShellで都度聞かれてしまうため、
SSH-key認証か、git configで情報を保存しておく必要があります。
一例で平文保存の方法を記載します。推奨はSSH-keyになります。

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
git config --global credential.helper store

# 一度Pullして情報を保存しておく
cd ~/opengrok/src/repository/
git pull

※"Your Name"等は削除されないアカウント(adminアカウント)を記載してください。

docker image環境内でのGit環境のアクセス許可

docker image上(/opengrok/src)で、リポジトリディレクトリを信用させる必要があります。
src下が見えることを確認し、cloneした環境をadd safe.directoryで信用させます。

docker内部に入る

docker exec -it opengrok /bin/bash

docker内でリポジトリを信用させる

git config --global --add safe.directory /opengrok/src/repository
cd /opengrok/src/repository
git log

git logでログ情報が確認出来たらOKです。
追加したリポジトリ分add safe.directoryを行ってください。

インデックス作業

下記コマンドをDockerの外で実行してください。
※初回は時間がかかります。

docker exec -it opengrok java -jar /opengrok/lib/opengrok.jar \
  -c /usr/local/bin/ctags \
  -s /opengrok/src \
  -d /opengrok/data \
  -W /opengrok/etc/configuration.xml \
  -U http://localhost:8080 \
  -P -H -S

Dockerの中は下記コマンドで可能です。

java -jar /opengrok/lib/opengrok.jar \
  -c /usr/local/bin/ctags \
  -s /opengrok/src \
  -d /opengrok/data \
  -W /opengrok/etc/configuration.xml \
  -U http://localhost:8080 \
  -P -H -S

※shファイルにしておくと楽です。

アクセス確認

localhostまたはホストPCのIPアドレス

http://localhost:8888/
http://XXX.XXX.XXX.XXX:8888/

問題がなければ8888ポートで閲覧ができます。
ポート修正は.ymlファイルを修正し、再度DockerImageをビルドしてください。

※「8888」の箇所を修正してください。

Crontabでのスケジューリング

Crontabで
・git pull
・UTF8変換
・インデックス処理
をしてスケジューリングしておくと自動でGitPullとIndexの更新ができます。
一例としてcrontab修正方法を記載します。

crontab -e

crontabの内容 (例として毎朝4時にShellファイルを実行させる)

0 4 * * * /home/wsluser/opengrok/reindex_cron.sh >> /home/wsluser/opengrok/reindex.log 2>&1

参考:

#!/bin/bash

# Environment variables for Crontab execution
export HOME=/home/wsluser
export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

cd /home/wsluser/opengrok/src/

cd RemoteProject
git checkout .
git clean -df
git pull
git fetch

cd /home/wsluser/opengrok/

bash /home/wsluser/opengrok/convutf8.sh

docker exec -it opengrok sh -c "rm -rf /opengrok/data/*"

docker exec -it opengrok java -jar /opengrok/lib/opengrok.jar \
  -c /usr/local/bin/ctags \
  -s /opengrok/src \
  -d /opengrok/data \
  -W /opengrok/etc/configuration.xml \
  -U http://localhost:8080 \
  -P -S -H

echo completed.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?