NAS(AS-202TE)でTracとGit連携
AS-202TEにTracをインストールするで取り上げたとおり、NASにTracをインストールして、運用を試みることにしました。
さらに、TracとGitを連携できることを確認しました。GitのリモートリポジトリをNASに作成して、NASのWebアプリケーションとしてTracを動作させてみます。その過程をメモしておきます。
NASとして使用しているAS-202TEには、AS-202TEをADM3にアップデートしてEntware-ngを使ってみるに記載したとおり、Entware-ngをインストールしていますので、opkgコマンドを使用してGitを導入します。なお、AppCentral経由でGitをインストールできますが、バージョンがかなり古いです(Git 1.8.5.2r3)。entware-ngからインストールするとGit 2系をインストールできます。
# opkg install git
# git --version
git version 2.14.1
例えば、Mac miniを開発環境とした場合、Mac miniローカルでgitリポジトリを管理し、リモートリポジトリの置き場をNASにします。ローカルリポジトリがMac miniのローカルディスクにあるとして、NASのディレクトリが/Volumes/Homeにマウントされている場合、NASにあるリモートリポジトリをcloneする際の操作例は以下のとおり。
$ cd /Volumes/Home/git-repository/
$ git clone --bare --shared file:///Users/[ユーザ名]/work/sample ./sample.git
ここで、file:///を付加しない場合(/Users/[ユーザ名]/work/sample)、リモートリポジトリからローカルリポジトリにリンクするだけになってしまいますので、file:///を付加して、ファイル実体も含めてcloneします。
次に、リモートリポジトリをローカルリポジトリに紐付けます。
$ cd ~/work/sample
$ git remote add origin file:///Volumes/Home/git-repository/sample.git
NASで稼働しているTracでリポジトリを登録します。
NASのユーザーディレクトリにリモートリポジトリがあるのであれば、/home/[ユーザ名]/の下のリモートリポジトリを登録します。
GItのリポジトリを登録すると、以下のような画面が表示されます。
trac-adminコマンドでリポジトリを同期しろ、というメッセージが表示されています。
また、コミットされた変更をフックしてtrac-adminコマンドに変更を登録しなさい、というメッセージ表示もされています。
前者のメッセージに対しては、NASにログインして、
# /usr/local/AppCentral/python/bin/trac-admin "/root/trac/projects/sandbox" repository resync "sample01"
とします。
問題は後者で、Mac miniから変更すると、フックするのがMac miniから動作させたGitですから、NASのtrac-adminを実行できません。したがって、フックしたときにファイルを書き出し、このファイルの変更をモニタリングしてtrac-adminを実行する必要があります。
まず、ファイル更新をモニタリングするために、inotify-toolsを導入します。NASにログインして、
# opkg install inotify-tools
し、inotify-toolsを導入します。こうして、inotifywaitコマンドを使って、ファイルの更新をモニタできるようになりました。
リポジトリのhooks配下にあるpost-update.sampleをpost-updateにコピーし、このpost-updateを、以下のように書き換えます。
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".
#
REV=$(git rev-parse HEAD)
OUTPUT_FILE='/[マウントされたディレクトリ]/git-flag/flag.txt'
echo "sandbox sample01 $REV" > $OUTPUT_FILE
exec git update-server-info
このshellは、リモートリポジトリに変更をpushしたタイミングでTracのプロジェクト名、登録するリポジトリ名、GitのHEADのRevision値をgit-flag/flag.txtに書き出します。
次に、ファイル更新をモニタリングするためのshell scriptを作成します。
#!/bin/sh
#
TRAC_ADMIN_BIN=/usr/local/AppCentral/python/bin/trac-admin
GIT_REPOSITORY_FLAG_FILE=/home/[ユーザ名]/git-repository/git-flag/flag.txt
GIT_REPOSITORY_FLAG_DIR=/home/[ユーザ名]/git-repository/git-flag
TRAC_PROJECT_DIR=/root/trac/projects
OLD=
#
trac_admin_func() {
# cd $TRAC_PROJECT_DIR
$TRAC_ADMIN_BIN "$TRAC_PROJECT_DIR/$1" changeset \
added "$2" $3
}
#
do_start() {
inotifywait -e close_write -m -s -r $GIT_REPOSITORY_FLAG_DIR | \
while read l; do
S=$(cat $GIT_REPOSITORY_FLAG_FILE)
if test "$S" != "$OLD"; then
trac_admin_func $S
fi
OLD=$S
done
return 0
}
#
case "$1" in
start)
do_start
;;
stop)
;;
restart)
do_start
;;
*)
echo "usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
このスクリプトを、/opt/etc/init.d/に登録します。例えば、S99tracadminというシンボリックリンクを作成すると良いでしょう。
# ls -l /opt/etc/init.d/S99tracadmin
lrwxr-xr-x 1 root root 25 Oct 25 02:57 /opt/etc/init.d/S99tracadmin -> /root/script/S99tracadmin*
Mac miniから変更をNASにpushしたタイミングでファイルを書き出し、当該ファイルが変更されると、trac-adminコマンドを実行して、変更を登録します。
実は、これしなくてもリポジトリブラウザに変更が反映されているみたいなのですが、状況によっては必要になるかもしれないので、推奨されていることもあり、そのまま運用しています。
| 固定リンク
「NAS」カテゴリの記事
- NASにiTunesライブラリを置く時に注意する事(その2)(2019.01.13)
- NAS(AS-202TE)の個人ディレクトリでCGIを動かしてみた(2017.11.15)
- NAS(AS-202TE)でTracとGit連携(2017.10.29)
- AS-202TEにTracをインストールする(2017.09.23)
- AS-202TEにmod_wsgiをインストールする(2017.09.19)
コメント