構成管理ツールのSubversionと、そのリポジトリの可視化&要求管理ツールのTracをインストールしたサーバーにおいて、実践的なプロジェクト(リポジトリとTrac環境)の作成の手順をレポートします。
はじめに
以下の様な、レンタルサーバーにSubversion、Tracをインストールする記事を書いてきました。
それらの記事に引き続き、実践的なプロジェクト(SubversionのリポジトリとTrac環境)を作成する手順をレポートします。(リポジトリ:ソースコード等コンテンツの貯蔵庫。)
読者にはレンタルサーバーでのサイトの管理者を想定していますが、自サーバーにてSubversion+Tracを運用しようとしている方にも、パス等を読み替えて頂くことで参考になるのではないかと思います。
また最後にプロジェクト作成手順の自動化についても考察します。
プロジェクトディレクトリの作成
まずディレクトリ構成を決定し、プロジェクト格納ディレクトリを作成します。
ディレクトリ構成
ディレクトリ構成は以下のようにします。
- リポジトリ ~/projects/repos/test-project
- Trac環境 ~/projects/trac/test-project
- 初期インポートディレクトリ ~/projects/initial-dirs
- パスワードファイル ~/projects/.htpasswd
将来的にプロジェクトが増えた場合には、~/projects/repos以下にリポジトリを、~/projects/trac/以下にtrac環境を、プロジェクトごとに同じ名前で追加していくことを想定しています。
またTracのデプロイ先は以下とします。(デプロイ:WEBで見えるように展開する、の意。)
さくらレンタルサーバー | エックスサーバー | |
ディレクトリ | ~/www/projects | ~/user.xsrv.jp/public_html/projects |
URL | http://user.sakura.ne.jp/projects/ | http://user.xsrv.jp/projects/ |
(userは各位のユーザー名になります。以下同様。)
ディレクトリの作成
SSHにてサーバーにログインし、プロジェクト格納ディレクトリを作成します。
% mkdir ~/projects % cd ~/projects % mkdir repos trac initial-dirs % cd initial-dirs/ % mkdir trunk branches tags % cd ..
ここに’% ‘はプロンプトです。各位の環境に合わせて読み替えて下さい。(以下同様。さくらのcshに合わせています。)
trunk、branches、tagsとは
initial-dirsはリポジトリ作成時にインポートするデフォルトのディレクトリ構成のつもりです。
その中に作成したtrunk、branches、tagsは、Subversionにて推奨されているディレクトリ構成です。
trunkがご本家で、通常はここを更新していきます。きりが良いところ(例えばパッケージにバージョンを付けるタイミング)でtagsにコピーを作成します。
branchesでは、本家の更新に影響を受けない形で改変やバグフィックスをしたい場合に本家(trunk)からここにコピーを作成し、独自に改変を進めます。目的を達成したら本家に改変を反映させます。
管理ユーザーの作成
次にTracの管理ユーザーを作成しますが、Tracページの認証方式によって手順が異なります。
認証方式
HTTPの認証方式の一般的なものとして、BASIC認証とダイジェスト認証があります。両者とも、ユーザーがブラウザで入力したユーザー名とパスワードを、サーバーサイドにあらかじめ作成したアカウントと照合する、というシンプルなものです。
BASIC認証においては、アカウント情報は通信路で(SSLを使わない限り)暗号化されません。これに対してダイジェスト認証では、アカウント情報はハッシュ化され、通信を傍受されたとしても解読が困難です。
エックスサーバーではBASIC認証もダイジェスト認証も可能です。しかしさくらレンタルサーバーではダイジェスト認証はできません。
ということで、ここで認証方式を決定し、それぞれの手順にお進み下さい。(さくらレンタルサーバーではBASIC認証にせざるを得ませんが。orz。)
BASIC認証の場合
.htpasswdの作成
.htpasswdという名前でパスワードファイルを作成します。
% htpasswd -c .htpasswd admin-user
admin-userは管理ユーザー名のつもりですので、任意に変更して下さい。このあとパスワードを聞かれるので、2回入力します。
.htaccessの作成
.htaccessはWEBで表示されるディレクトリに置くものですが、プロジェクトディレクトリにひな型を作成しておき、それをデプロイ時にコピーすることにします。
% vi .htaccess
viを起動し、以下のファイルを作成します。(ローカルで作成し、FTPでPUTしてもかまいません。)
<IfModule mod_auth_basic.c> AuthType Basic AuthName "trac" AuthUserFile "/home/user/projects/.htpasswd" Require valid-user </IfModule>
(4行のuserは各位のユーザー名です。)
BASIC認証の場合はここまでです。「プロジェクトの作成」にお進み下さい。
ダイジェスト認証の場合
.htpasswdの作成
.htpasswdという名前でパスワードファイルを作成します。
% htdigest -c .htpasswd trac admin-user
admin-userは管理ユーザー名のつもりですので、任意に変更して下さい。このあとパスワードを聞かれるので、2回入力します。
.htaccessの作成
.htaccessはWEBで表示されるディレクトリに置くものですが、プロジェクトディレクトリにひな型を作成しておき、それをデプロイ時にコピーすることにします。
% vi .htaccess
viを起動し、以下のファイルを作成します。(ローカルで作成し、FTPでPUTしてもかまいません。)
<IfModule mod_auth_digest.c> AuthType Digest AuthName "trac" AuthDigestDomain . AuthUserFile /home/user/projects/.htpasswd Require valid-user </IfModule>
(5行のuserは各位のユーザー名です。)
ダイジェスト認証の場合はここまでです。
プロジェクトの作成
続いてリポジトリとTracの環境を作成し、WEBで表示できるようにデプロイします。
リポジトリとTrac環境の作成
以下のコマンドでtest-projectのリポジトリとTrac環境を作成します。
% svnadmin create repos/test-project % trac-admin trac/test-project initenv "test project" sqlite:db/trac.db svn $HOME/projects/repos/test-project % trac-admin trac/test-project permission add admin-user TRAC_ADMIN
2行目の入力の後に、「Congratulations!」と表示されていればとりあえず成功です。(メッセージを良く見ると、実はWarningが表示されていますが後ほど解決します。)
3行目の「admin-user」は前章で作成した管理ユーザー名になります。
Tracのデプロイ
続けてTrac環境がWEBで表示されるようデプロイします。
% trac-admin trac/test-project deploy ~/www/projects % chmod 755 ~/www/projects/cgi-bin/* % cp .htaccess ~/www/projects/cgi-bin/
各行の「~/www/」はさくらレンタルサーバーの場合ですで、エックスサーバーの場合は「~/user.xsrv.jp/public_html/」、その他の環境の方は各位の環境に合わせて読み替えて下さい。
以降デプロイしたディレクトリを「tracのドキュメントルート」と表します。
WEBブラウザでの設定
ここでブラウザより「http://user.sakura.ne.jp/projects/cgi-bin/trac.cgi」あるいは「http://user.xsrv.jp/projects/cgi-bin/trac.cgi」にアクセスします。(以下「tracサイト」と表します。)
表示確認
ユーザー名とパスワードを聞かれるので、管理ユーザー名(admin-user)とパスワードを入力します。
上のようなページが表示されていれば成功です。(表示されているWarningにはこの後対処します。)
もしパスワードが聞かれなかったり、ページが表示されない場合は、サーバーのエラーログや、以下をご確認下さい。
- tracのドキュメントルート以下にファイルが展開されているか
- (tracのドキュメントルート)/cgi-bin以下のファイルのパーミッションは755か
- .htaccessの記述は間違っていないか
Tracの管理ツールでの設定
メインメニューの右端に表示されている「Admin」をクリックします。
SubversionConectorの有効化
左メニューから「Plugins」をクリックします。
「Trac 1.0.ja1」をクリックします。プラグインのリストが展開します。
ページの下方に「SubversionConnector」があるので、その右側のチェックボックスをチェックします。その下の3つも、Subversionの表示を適当に変換してくれそうなのでチェックします。
「Apply changes」をクリックします。
プラグインを有効化した旨が表示されます。ここではまだWarningが表示されていますが、この後は表示されなくなります。
その他の設定
その他、管理メニューにて必要な設定を行います。
例えば、Ticket SystemのComponents、Milestones、Versionsは一度すべて削除して、プロジェクトに適当なものを適宜追加すればよいでしょう。
またPriorities、Resolutions、Severities、Ticket Typesなどは、(日本語で)適当に作りなおしたほうが良いと思います。(また別の機会に、私の例を示せたら、と思います。)
リポジトリの初期設定
再びSSHのコンソールに戻り、最後の設定をします。
場所はprojectsディレクトリにいると思いますが、一応pwdでご確認下さい。
post-commitの作成
リポジトリの更新がTracに伝達されるよう、リポジトリにpost-commitフックを作成します。
以下のコマンドでviを起動します。
% vi repos/test-project/hooks/post-commit
作成するファイルの内容は以下です。
#!/bin/sh REPOS="$1" REV="$2" /home/user/local/bin/trac-admin /home/user/projects/trac/test-project changeset added $REPOS $REV
(6行のuserは各位のユーザー名になります。)
パーミッションを設定します。
% chmod 755 repos/test-project/hooks/post-commit
初期ディレクトリのインポート
リポジトリに、最初の方に作成した初期ディレクトリをインポートします。
% svn import initial-dirs file://$HOME/projects/repos/test-project --message "Initial directories." Adding initial-dirs/branches Adding initial-dirs/tags Adding initial-dirs/trunk Committed revision 1.
もし先のpost-commitに間違いがあれば、ここでErrorかWarningが表示されると思います。その場合はpost-commitの内容とパーミッションを確認します。
Tracの確認
ブラウザに戻り、Tracを確認します。
上部メニューの「Timeline」をクリックします。
タイムラインの先頭に、初期ディレクトリをインポートした時のログが表示されています。
次に、上部メニューの「Browse Source」をクリックします。
インポートした初期ディレクトリが確認できます。
これから
以上でインストールしたSubversion、Tracが動作することを確認しました。
これから何をすべきか、を書きたいと思います。
コンテンツの追加
試しにコンテンツ(ソースコード)を追加してみたい方もいらっしゃると思います。
TortoiseSVNを使ってみる
WindowsのExplorerのアドオンである、TortoiseSVNを使ってみたい場合は、「エックスサーバーにSubversionをインストールする」の「TortoiseSVNのインストールと設定」以降をご参照下さい。(さくらについても追記しました。)
エックスサーバーの場合はその前の章「鍵ファイルの作成」も必要になります。
Eclipseを使う
Eclipse上からソースコードなどをリポジトリに格納する場合は、「EclipseをSubversionに接続する」をご参照下さい。
いずれの記事も、各ツールの実際の使用法(更新、コミット、追加、削除、リネーム等)までは解説するに至っていません…。
プロジェクトの削除
test-projectという名前でプロジェクトを作成しましたが、名前が気に入らなかったり、お試しが終ったりで、削除したくなることがあると思います。
その場合は、Subversion、TracともBerkeley DBとかSqliteとか、ディレクトリ内のファイルにデータを格納するデータベースですのでディレクトリごと削除すればOKです。
具体的には以下のコマンドになります。
% cd ~/projects % rm –rf trac/test-project % rm –rf repos/test-projct
(「rm –rf」って、その後のパスを間違えると大変なことになりますので注意しましょう。)
新しいプロジェクトの追加
新しいプロジェクトを追加するには、プロジェクト名である「test-project」を読み替えて、「プロジェクトの作成」から「リポジトリの初期設定」までの章を実行します。但し、「Tracのデプロイ」は必須ではありません。
trac.iniの継承
本稿ではまったく解説していませんが、たとえばtracサイトのロゴ画像やfaviconなどは、~/projects/trac/(プロジェクト名)/conf/trac.iniを編集することで指定できます。
新しいプロジェクトを追加するたびに上のようなtrac.iniを編集することは面倒ですので、trac環境を作成するときに継承を指定することができます。
その場合、「リポジトリとTrac環境の作成」で入力する、trac-admin initenvコマンドは以下のようになります。
% trac-admin (trac環境へのパス) initenv --inherit=(継承するtrac.iniへのパス) "(説明)" sqlite:db/trac.db svn (リポジトリへのパス)
しかし、Tracの環境ツールで設定する「Ticket System」の設定は、trac.iniではなくデータベースの中に格納されているようですので、面倒ですが再設定が必要です。
Tracのマルチプロジェクト化
trac.cgiはマルチプロジェクトに対応しており、環境変数「TRAC_ENV_PARENT_DIR」に、「/home/user/projects/trac」を設定すれば、新しいプロジェクトをデプロイし直さなくてもマルチプロジェクト対応になります。
環境変数の設定は、http.confとか.htaccessでSetEnvすればよいのですが、レンタルサーバーではうまく行かない場合があります。その場合はソースコードを修正します。
「(tracのドキュメントルート)/cgi-bin/trac.cgi」をエディタで開くと以下のようなpythonのコードが見られます。
(前略) try: import os import pkg_resources if 'TRAC_ENV' not in os.environ and \ 'TRAC_ENV_PARENT_DIR' not in os.environ: os.environ['TRAC_ENV'] = '/home/user/projects/trac/test-project' (後略)
この部分の最後の行をコメントアウトして、一行を追加します。
#os.environ['TRAC_ENV'] = '/home/user/projects/trac/test-project' os.environ['TRAC_ENV_PARENT_DIR'] = '/home/user/projects/trac'
userは各位のユーザー名になります。またpythonはインデントに意味がありますので、きちんと合わせましょう。(上のリストではインデントが無くなってしまっています。)
プロジェクトのリスト表示
これだけで「http;//(ドメイン)/projects/cgi-bin/trac.cgi」が、プロジェクトのリストを表示するようになります。
味気ない表示ですが、ドットの後ろが各プロジェクトへのリンクになります。
課題とまとめ
以上、実践的なプロジェクト(リポジトリとtrac環境)の作成をレポートしてきました。
繰り返しになりますが、プロジェクトの追加は、「プロジェクトの作成」から「リポジトリの初期設定」までの章を実行します。(「Tracのデプロイ」は除く。)
手順がわかっていれば、それを自動化するスクリプトを作成できます。(Trac lightningとか、そういったバッチファイルが同梱されていて楽ちんなんですけど。)
そのようなスクリプトの汎用的なやつは既に作っており、自分ではそれを使っています。(「Ticket System」の設定も継承するものです。)
テストを実行し、公開可能な品質になれば公開するつもりですが、そのテストの実行がいつになるやらさだかではありません。
またtracに関して、複数プロジェクトのリストがあっさりしているだとか、さくらレンタルサーバーだと認証がBASICのみだとか、ログオフができないのが仕様だとか、mod_annoがないとアカウントがない人に公開できないとか、気に入らない点が多々あります。
それらを解決するアイデアもあるのですが、今のところいつ試せるようになるか目処がついていません。
(試す前にRedMineの方ががメジャーになるかも。)
進捗がありましたら、また記事にします。m(_ _)m