snbhsmt_log

ネットワークとコンピュータ、その他いろいろ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Trac のプロジェクト環境のバックアップ、リストア

オフィシャルの Trac Backup Wiki ページにある通り、trac-admin hotcopy する。 バックアップをしている間データベースをロックして、 クライアントからのアクセスにかかわらず安全にバックアップできる。 ただし、バックエンドのデータベースに SQLite 以外を使用している場合は この方法ではダメ。

# trac-admin /path/to/projenv hotcopy /path/to/backupdir

実際には、rm -rf /path/to/backupdir してから hotcopy して、 その /path/to/backupdir を pdumpfs する事にした。

作成された /path/to/backupdir は TracEnvironment そのものなので、 リストアはこのディレクトリを然るべき場所にコピーしてパーミッション等を 適切に設定するだけ。

環境 : Trac 0.10.4-1 (rpm)

スポンサーサイト

Trac のリポジトリ・ブラウザで日本語が文字化けないよう設定

Trac のリポジトリ・ブラウザで、日本語を含むファイルの差分が文字化けしていた。 PROJENV/conf/trac.ini の default_charset が iso-8859-15 だったので utf-8 に書き換えたら直った。

Trac と Subversion を連携させる

Trac の配布アーカイブやリポジトリの contrib ディレクトリにある trac-pre-commit-hook と trac-post-commit-hook スクリプトを利用すると、 Trac と SCM を連携させる事ができる。 今回は Trac と Subversion を連携させてみる。

環境 : CentOS 4.6 / Subversion 1.1.4-2 (rpm) / Trac 0.10.4-1 (rpmforge)

標準状態でも Subversion のコミット・ログに #4 とか書いておくと、 Trac のリポジトリ・ブラウザがチケット 4 へのリンクに変換してくれる。 上記のスクリプトを利用すると、メッセージ (今回は Subversion のコミット・ログ) を Trac のチケット・コメントとして投稿し、それにチェンジセットへのリンクを追加してくれる。 これによって、要求と、変更内容の双方向リンクが作成できる。

スクリプトに与えるメッセージ (コミット・ログ) には、 キーワードとチケット番号が含まれている必要がある。 ここではそれをチケット・コマンドと言う事にする。

チケット・コマンドはコマンドとチケット番号から成り、 他の語句とは英数字以外で分離している必要がある。

コマンドは 2 種類あって、それぞれ複数の書き方ができる。 大文字、小文字の区別はない。

address, references, refs, re コマンドは、メッセージを指定したチケット番号にコメントとして投稿し、 チェンジセットへのリンクを作成する。

これはチケット references #4 に対するコメントになる
これ refs #4 は上と同じ

closes, fixes コマンドは、 それに加えてチケットを close する。

これはチケット closes #21 に対するコメントになり、しかもクローズする
これ fixes #21 は上と同じ

チケット番号はコマンドに対して複数指定可能。

チケット番号を複数指定する例 refs #14 #27
こう書いても refs #14, #27
こう書いても refs #14 & #27
こう書いても refs #14 and #27 同じ
異なる方法で refs #1, #2 & #3 and #4 指定してあっても平気

コマンドが混在していても良い。

refs #5, #6 and #9
fixes #7 & #8

詳細はスクリプトと Python ライブラリリファレンスの 4.2.1 正規表現のシンタックス を参照。

で、ここからが連携の為の作業。

trac-pre-commit-hook スクリプトは、 メッセージに有効なチケット・コマンドが含まれるかチェックする。 有効と判断されるには、 チケット・コマンドの書式が正しい、 チケットが存在する、 チケットが close されていない、 事が必要。 含まれていない場合は 0 以外の終了コードを返す。

$ python /usr/local/trac/contrib/trac-pre-commit-hook
Usage: /usr/local/trac/contrib/trac-pre-commit-hook <trac_project> <log_message>

pre-commit フック・スクリプトから trac-pre-commit-hook を実行して、 コミット・ログにチケット・コマンドを書かないとコミットできない様にする。

#!/bin/sh

REPOS="$1"
TXN="$2"

TRAC_ENV='/var/lib/trac/tractest'
LOG=`/usr/bin/svnlook log -t "$TXN" "$REPOS"`

/usr/bin/python /usr/local/trac/contrib/trac-pre-commit-hook "$TRAC_ENV" "$LOG" || exit 1

trac-post-commit-hook スクリプトは、 メッセージに含まれるチケット・コマンドを解釈し、 該当するチケットにコメントとして投稿する。 且つそのコメントにチェンジセットへのリンクを付加する。 また、コマンドが closes, fixes の場合、そのチケットを close する。

$ python /usr/local/trac/contrib/trac-post-commit-hook --help
usage: trac-post-commit-hook [options]

options:
  -h, --help            show this help message and exit
  -eENV, --require-envelope=ENV
                         Require commands to be enclosed in an envelope. If
                        -e[], then commands must be in the form of [closes #4].
                        Must be two characters.
  -pPROJECT, --project=PROJECT
                        Path to the Trac project.
  -rREV, --revision=REV
                        Repository revision number.
  -uUSER, --user=USER   The user who is responsible for this action (not used
                        anymore)
  -mMSG, --msg=MSG      The log message to search (not used anymore)
  -cENCODING, --encoding=ENCODING
                        The encoding used by the log message (not used anymore)
  -sURL, --siteurl=URL  The base URL to the project's trac website (to which
                        /ticket/## is appended).  If this is not specified, the
                        project URL from trac.ini will be used.

post-commit フック・スクリプトから trac-post-commit-hook を実行して、 コミット・ログを通じてチケットと変更内容を関連付ける。

#!/bin/sh

REPOS="$1"
REV="$2"

LOG=`/usr/bin/svnlook log -r $REV $REPOS`
AUTHOR=`/usr/bin/svnlook author -r $REV $REPOS`
TRAC_ENV='/var/lib/trac/tractest'

/usr/bin/python /usr/local/trac/contrib/trac-post-commit-hook \
 -p "$TRAC_ENV"  \
 -r "$REV"       \
 -u "$AUTHOR"    \
 -m "$LOG"

-s オプションを付けても付けなくても変わりなかった。

-e オプションでチケット・コマンドを囲む文字を指定できる。 例えば -e "[]" とすると refs #1 では認識されず、[refs #1] と書く必要がある。 ただし、trac-pre-commit-hook はこれに該当するオプションが無いので refs #1 を 有効なチケット・コマンドと認識してしまう。

参考
[Think IT] 第4回: チケットとソースコードを連携せよ! (1/3)

Trac の attachments ディレクトリに書き込み権限を追加

Trac でチケットにファイルを添付しようとして気付いたが、 添付ファイルは PROJENV/attachments ディレクトリに置かれる。 だけど Trac を インストールした時 に、このディレクトリに書き込み権限を設定していなかったので エラーになってしまった。

Trac の XML-RPC プラグインをインストール

Trac の XML-RPC プラグイン をインストールする。

環境 : Trac 0.10.4-1 (rpm) / Apache HTTP Server 2.0.52 (rpm) / CentOS 4.6

zip ファイルをダウンロードして展開。

$ wget -O xmlrpcplugin.zip 'http://trac-hacks.org/changeset/latest/xmlrpcplugin?old_path=/&filename=xmlrpcplugin&format=zip'
$ unzip xmlrpcplugin.zip
$ cd xmlrpcplugin/0.10

egg を作成してインストール。
今まで使っていなかった easy_install コマンドでインストールしてみた。

$ python setup.py bdist_egg
$ easy_install dist/TracXMLRPC-0.1-py2.3.egg
Processing TracXMLRPC-0.1-py2.3.egg
Copying TracXMLRPC-0.1-py2.3.egg to /usr/lib/python2.3/site-packages
Adding TracXMLRPC 0.1 to easy-install.pth file

Installed /usr/lib/python2.3/site-packages/TracXMLRPC-0.1-py2.3.egg
Processing dependencies for TracXMLRPC==0.1
Finished processing dependencies for TracXMLRPC==0.1

trac.ini に設定を記述。

[components]
      :
tracrpc.* = enabled

Egg cache ディレクトリを、まだ作成していなければ作成。

利用するには XML_RPC 権限とそれぞれの API が求める権限が必要。
とりあえず anonymous に与える。

# trac-admin /var/lib/trac/tractest permission add anonymous XML_RPC

http://example.com/trac/tractest/xmlrpc を HTTP GET リクエストすると API 一覧のウェブページが参照できる。

XML-RPC で Status が Closed なチケットを取得してみる。

$ cat ticket.query.xml
<?xml version="1.0"?>
<methodCall>
  <methodName>ticket.query</methodName>
  <params>
    <param>
      <value><string>status=closed</string></value>
    </param>
  </params>
</methodCall>
$ 
$ wget -q -O - --header="Content-Type: text/xml" --post-file ticket.query.xml http://example.com/trac/tractest/xmlrpc
<?xml version='1.0'?>
<methodResponse>
<params>
<param>
<value><array><data>
<value><int>1</int></value>
</data></array></value>
</param>
</params>
</methodResponse>

anonymous に XML_RPC 権限を与えているため URL を TRACPROJ/xmlrpc にしているが、 認証が必要な場合 URL は TRACPROJ/login/xmlrpc になる。

Trac の WebAdmin プラグインをインストール

Trac の WebAdmin プラグインをインストールする。 プラグインの一般的なインストール方法は TracPlugins にある通り。

環境 : CentOS 4.6 / Python 2.3.4 (rpm) / Trac 0.10.4-1 (rpm)

Trac 0.9 までは egg ファイルをダウンロードすれば良かったが、 0.10 では Subversion リポジトリから取得しなければならないらしい。

$ svn export http://svn.edgewall.com/repos/trac/sandbox/webadmin
$ cd webadmin

取得したものは setuptools に対応したソースコード配布物なので、 setup.py install でインストールする事も出来るけど、 ここでは egg ファイルを作成してインストールする。

$ python setup.py bdist_egg
        :
$ ls dist
TracWebAdmin-0.1.2dev-py2.3.egg
そしてこの egg ファイルをインストールする訳だが、 このプラグインをすべてのプロジェクトで使うつもりなので、 オフィシャルな方法なら easy_install でインストールする。 だけど、それならわざわざ egg ファイルを作らずに setup.py install すれば 良いじゃないかという気がするので、今回は /usr/share/trac/plugins に コピーする事にした。 この plugins ディレクトリは本来この為に在るんじゃなかろうか ?

# cp dist/TracWebAdmin-0.1.2dev-py2.3.egg /usr/share/trac/plugins

プラグインをグローバルな場所にインストールしたので、 プラグインを有効にするプロジェクトの trac.ini に設定を記述する必要がある。

$ cat /var/lib/trac/tractest/conf/trac.ini
        :
[components]
webadmin.* = enabled

egg ファイルをインストールしたので、 実行時に展開する必要があるファイルを置くディレクトリが必要。 デフォルトでは ${HOME}/.python-eggs ディレクトリに展開される。 この環境での Apache 実行ユーザのホーム・ディレクトリは /var/www なので /var/www/.python-eggs になる。

$ mkdir /var/www/.python-eggs
$ chown apache:apache /var/www/.python-eggs
$ chmod 755 /var/www/.python-eggs

もし、このディレクトリをデフォルト以外の場所に変更するなら、 環境変数 PYTHON_EGG_CACHE にパスを設定する。 Apache の場合それは SetEnv ディレクティブで指定する。

ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
        SetEnv TRAC_ENV_PARENT_DIR "/var/lib/trac"
        SetEnv PYTHON_EGG_CACHE "/path/to/dir"
</Location>

これで、Apache を再起動して TRAC_ADMIN 権限を持ったユーザでログインすると Admin メニューが現れる。

このプラグインで conf/trac.ini を編集できるので書き込み権限を設定。 ただし書き換えるとコメントが消えてしまう様だ。

# cd /var/lib/trac/tractest/conf
# chgrp apache trac.ini
# chmod g+w trac.ini

ちなみに、egg でインストールせず setup.py install した場合は以下の様になる。 この場合 trac.ini の編集は必要だが PYTHON_EGG_CACHE ディレクトリは不要。

# python setup.py install
        :
zip_safe flag not set; analyzing archive contents...
webadmin.plugin: module references __file__
creating 'dist/TracWebAdmin-0.1.2dev-py2.3.egg' and adding 'build/bdist.linux-i686/egg' to it
removing 'build/bdist.linux-i686/egg' (and everything under it)
Processing TracWebAdmin-0.1.2dev-py2.3.egg
creating /usr/lib/python2.3/site-packages/TracWebAdmin-0.1.2dev-py2.3.egg
Extracting TracWebAdmin-0.1.2dev-py2.3.egg to /usr/lib/python2.3/site-packages
Adding TracWebAdmin 0.1.2dev to easy-install.pth file

Installed /usr/lib/python2.3/site-packages/TracWebAdmin-0.1.2dev-py2.3.egg
Processing dependencies for TracWebAdmin==0.1.2dev
Finished processing dependencies for TracWebAdmin==0.1.2dev

1 つの Apache で複数 Trac 環境にアクセスする設定

最初に Trac をインストールした時の Apache の設定方法だと、新たなプロジェクトが作られる度に追記する必要があり 面倒だなあと思っていたら良い方法があった。

以下の設定方法だと、http://www.example.com/trac にアクセスすると /var/lib/trac 以下の Trac 環境の一覧ページが表示され、 その中のプロジェクト名をクリックすると、各 Trac 環境の WikiStart ページが表示される。

AliasMatch ^/trac/[^/]+/chrome/common/(.*) /usr/share/trac/htdocs/$1
<Directory "/usr/share/trac/htdocs">
	Order allow,deny
	Allow from all
</Directory>

ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi
<Location "/trac">
	SetEnv TRAC_ENV_PARENT_DIR "/var/lib/trac"
</Location>
<LocationMatch "/trac/[^/]+/login">
	AuthType Basic
	AuthName "Trac"
	AuthUserFile /etc/httpd/conf/trac.htpasswd
	Require valid-user
</LocationMatch>

この場合 /var/lib/trac ディレクトリも Apache から読める必要があるので以下を実行。

# chcon -t httpd_sys_content_t /var/lib/trac

RPM 版 Trac と Trac-ja の併用

RPM 版の Trac を利用しつつ Trac-ja の翻訳 を 利用できないだろうか、という事のメモ。

結論 : Trac Environment の作成時に以下を行う。

  • trac-admin ... initenv で template として Trac-ja の方のパスを指定する。
  • Trac-ja の方の wiki-default 中のファイルを wiki import する。

以下、過程。

Trac-ja の WikiJa に書いてあるとおり、 アーカイブを展開した状態、あるいはインストールした後の wiki-default/ 中の checkwiki.py 以外のファイルを wiki import すると Trac Environment の初期の Wiki ページを翻訳版に差し替えられる。

# cd /usr/local/trac/share/trac/wiki-default
# trac-admin /var/lib/trac/tractest wiki import CamelCase ./CamelCase
# trac-admin /var/lib/trac/tractest wiki import InterMapTxt ./InterMapTxt
        :

ただし、これだと Login や Settings のリンクとか Edit this page のボタンとかが英語のまま。 これを日本語にするには、trac-admin ... initenv の時に template のパスで /usr/local/trac/share/trac/templates を指定する。

template に Trac-ja の方のパスを指定したので、てっきり Wiki ページも日本語訳された ものになるだろうと思ったら英語のままだった。 たぶん RPM 版の siteconfig.py で以下の様に決め打ちされているからだろう。

__default_wiki_dir__ = '/usr/share/trac/wiki-default'

Trac Environment を作成する度に wiki import するのは面倒なのでスクリプトを作成。

#!/bin/sh

TRAC_ADMIN=/usr/bin/trac-admin
#TRAC_ADMIN="echo /usr/bin/trac-admin"

[ -d "$1" ] || exit 67
[ -f "$1/conf/trac.ini" ] || exit 1
PROJENV="$1"

cd /usr/local/trac/share/trac/wiki-default

for fn in *; do
        $TRAC_ADMIN "$PROJENV" wiki import $fn ./$fn
done

Top|Next »

HOME

Author:snbhsmt
Google Profiles

http://www.ksky.ne.jp/~snbhsmt/

全ての記事を表示する

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。