まぁまぁでかくなったプロジェクトのソースを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.