参考文献

ウェブ勤怠のレポジトリ登録をサーバー側で行い、クライアント側からの操作に成功したので、忘れない内に構築方法をまとめておきます。 Subversion実践入門;に沿って構築しましたが、Debianの独特の部分は、Debian辞典にも一通り記載があったので非常に役に立ちました。

全体的な話・・

バージョン管理の概念を知ってから、この話は技術的なこともありそうだけど、手法全体としての考え方やポリシーを知って応用しなくてはならないのではないかなぁと思っていました。その考え方は間違っておらず、Subversion実践入門の初めの方は、手法全体を必要最低限なコマンドと共に解説してくれています。優れた解説書だと感じました。私なりに整理しておくと・・
  • プログラムの履歴をスナップショット的に保存し、必要に応じて呼び出せる。
  • 複数人で同時に変更する場合を想定したネットワーク環境とセキュリティ設定を行える。
  • 複数人で同時に変更した際の競合(実際にはほとんど生じないとのことです。)を解決できる。
  • リリースして運用開始されたバージョンとその後の継続開発向けのブランチ(枝)を切り分けて、リリース後の問題解決と継続開発を双方停めることなく進められる。
といった具合でしょうか・・・。まだ、複数人運用も、ブランチ分けも行っていないので、実感は無いですが、その必要性は今までのコンテンツを運用していく中で良く理解できるものです。

構築の全体像

今回はウェブ勤怠のバージョン管理とオープンソース化のためのSubversion設置なので、サーバー側に、レポジトリ(保存場所)を置き、Appache によるアクセスをおこなえる様に構築します。なお、サーバー環境の構成についてはこちら、クライアントサイドの構築環境の構成についてはこちら?をご参照ください。

サーバーサイド

  1. Subversion libapache2-svn パッケージをインストールします。
  2. レポジトリ設置を行います。
  3. コミットについては認証ユーザーだけができる様に設定を行います。

*インストール

$ sudo apt-get install subversion libapache2-svn

*レポジトリ設置

(公開サーバー上にレポジトリ用のディレクトリを設置)
$ cd /virtual
$ mkdir svn-repos           /ディレクトリ名は何でも良いです。
$ mkdir svn-repos/webkintai
$ svnadmin create /virtual/svn-repos/webkintai
ちなみに。。。ひとつのプロジェクトにすいて、一つのレポジトリがよいです。レポジトリを共通にすると、後進のレビジョン番号を共用してしまい、かっこわるいです。上記の例は、webkintai 用のレポジトリをつくったところ。

*Apacheアクセス制限

Apacheユーザーであるflaboを初期ユーザーとして、ユーザー認証ファイルを作成します。
$ sudo htpasswd -c /etc/apache2/dav_svnpasswd_webkintai flabo
(パスワードを入力します。)
SubversionのApache用の設定ファイルを編集します。
$ sudo vi /etc/apache2/conf.d/svn-repos.conf
いろいろと説明書きがある設定ファイルですが、ほとんどはコメント化(行頭に#があるものです。)されていますので、コメントを外すか、追記して以下の内容だけを有効にするようにします。
ScriptAlias /WebKINTAI/svn-repos  "/virtual/svn-repos/webkintai"
<Location /WebKINTAI/svn-repos>
  DAV svn
  SVNPath /virtual/svn-repos/webkintai
  SVNAdvertiseV2Protocol Off
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile "/etc/apache2/dav_svnpasswd_webkintai"
  <LimitExcept GET PROPFIND OPTIONS REPORT>
     Require valid-user
  </LimitExcept>
</Location>
これで、ホスト名/WebKINTAI/svn-repos/ の表示とアクセスが可能になります。また、コミット(更新反映)することができるのは認証されたユーザーだけとなります。

クライアントサイド

  1. Subversion のパッケージをインストールします。
  2. WorkSpaceの設定を行います。

*インストール

$ sudo apt-get install subversion

*WorkSpaceの設定

これまで開発環境として使用していたディレクトリは、公開前の作業用のディレクとりとしてそのまま残し、新たにSubversion用の作業ディレクトリを作ります。そして、これまでの開発ディレクトリ(例 WebKINTAI)→svnレポジトリへのインポート→新たな作業用ディレクトリ(WebKINTAI_dev)へのチェックアウトという様に進めます。これまでのディレクトリをそのままsubversionの作業ディレクトリとしようするには、インポートした後、一旦すべてのファイルを消さないとうまく行かない様です。チェックアウトがうまく行けば問題がないのですが、気持ち悪さがあることもあり、前述の方法をお勧めします。
(これまでの作業ディレクトリへ移動し)
$ svn import -m "初回ファイルをインポート" . http://felix-labo.org/webkintai/svn-repos/svn-repos/trunk
もしかしたら、Apacheの設定でこの方法がうまくいかないかもしれない。その時は、svn+ssh でやります。ssh をインストールしてある必要があります。
$ svn import -m "初回ファイルをインポート" . svn+ssh://flao@192.168.99.6/virtual/svn-repos/webkintai/trunk
ここでnanoが立ち上がる様になったみたいです。なぜかは不明。ctrl+X → Enter → c でOKだと思います。
次にあらなた作業スペースに上記でインポートしたファイルをチェックアウトします。
$ cd /home/felix/www/      /作業ディレクトリの一つ上のディレクトリから実行します。
$ svn co http://felix-labo.org/svn-repos/webkintai/trunk WebKINTAI_dev

TRAC のインストール

*TRACについて

これで開発環境とサーバーの設定が完了するのですが、現実的に管理はWebページで行いたいところです。これを実現してくれるのが、TRAC です。TRAC にはSubversion と連動したレポジトリのブラウザーやタスク(チケット)管理、Wikiページ等がセットになっています。これもフリーソフトなんて素晴らしいですね。

*インストール

サーバーから、インストール
$ sudo apt-get install trac libapache2-mod-python

*セッティング

TRACのページは、Subversionのレポジトリと対になっていると考えたらわかりやすいです。上記で作成したWebKINTAIのレポジトリに対してTRACのページ(正確にはEnviroment:エンバイロメントと呼ぶそうです)を設定してきます。まずはWebページ公開ユーザーになった後
$ su - flabo
$ cd /virtual/www
$ mkdir trac
$ cd ./trac
$ trac-admin webkintai initenv
設定が始まります。
Project Name {My Project}> Web KINTAI
Database connection string[sqlite:db/trac.db]>[Enter]
Repository type [svn]> [Enter]
Path to repository [/path/to/repos/]>/virtual/svn-repos/webkintai
設定ファイルがエンバイロメント毎にあります。このままではレポジトリが文字化けもするのでここで直しておきます。
$ cd ./webkintai/conf
$ vi ./trac.ini
156行目辺りに文字コード設定があるので書き換えます。
default_charset = utf8
これでTRACのエンバイロメントの設置は完了です。ウェブユーザーからログアウトして設定を続けます。
$ logout
新たなApache設定ファイルを書き込んでいきます。
$ sudo vi /etc/apache2/conf.d/trac.conf
ScriptAlias /WebKINTAI/trac  "/virtual/www/trac/webkintai"
<Location "/WebKINTAI/trac/">
      SetHandler mod_python
      PythonInterpreter   main_interpreter
      PythonHandler trac.web.modpython_frontend
      PythonOption TracEnv "/virtual/www/trac/webkintai"
      PythonOption TracUriRoot "/WebKINTAI/trac"
</Location>
お決まりのApache再起動
$ sudo /etc/init.d/apache2 restart
これでまずは /webkintai/trac といった感じでページが表示されます。この場合はオープンソースでこれ問題ありませんが、ページを外からアクセスさせたくない場合等には
Order deny,allow
Deny from all
Allow from 192.168.99     /99 はご自身の設定により違います。
などの設定が必要です。
この状態でレポジトリ等の表示ができますが、ユーザーの登録をしていないのでログインしてWikiページ等の編集ができません。ユーザーは、いろいろ方法がある様ですが でもおすすめのダイジェスト認証をやってみました。flabo をログインユーザーに加えます。
$ cd /etc/apache2
$ sudo htdigest -c tracdigest_webkintai trac_users flabo
[パスワードを聞いてくるので入力]
trac_users って部分は、いまいち理解できませんが、気にせずに。。。いきます。先ほど作成したApache設定ファイルを編集
$ sudo vi /etc/apache2/conf.d/trac.conf
以下を追加
<Location "/WebKINTAI/trac/login">
      LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so
      AuthType Digest
      AuthName "trac_users"
      AuthDigestDomain /WebKINTAI/trac
      AuthUserFile /etc/apache2/tracdigest_webkintai
      Require valid-user
</Location>
最後に管理者の登録をしておきます。
$ su - flabo
$ trac-admin /virtual/www/trac/netshopyasan permission add flabo TRAC_ADMIN
これでTRACのページにログインしてWikiページの編集などが出きるようになります。

Discussion Plugin を追加

Trac上の掲示板。sudo できるユーザーで適当な作業ディレクトリへ移動
$ cd /home/felix
$ wget http://trac-hacks.org/changeset/latest/discussionplugin?old_path= /&filename=discussionplugin&format=zip
$ unzip ./discussionplugin-r7589.zip
$ cd ./discussionplugin/0.11/
$ chmod 700 ./*
$ sudo python ./setup.py install