お買い物・Subversion

今日は夫婦で川崎駅前のラゾーナ川崎に買い物に出た。蚊取り線香を燻らすブタ陶器と本を買って来た。書籍は,中国南宋の詩人・陸游の『陸游詩選』(一海和義編,2007 年,岩波書店),伊藤計劃『虐殺器官』(2010 年,早川書房),佐藤竜一『Subversion 入門』(2010 年,技術評論社)の三冊。
 

20100813buta.png

* * *

『Subversion 入門』に従って,さっそく FreeBSD 8.0-RELEASE に subversion 環境を作成した。私はもともと自分の書いた Web ページやプログラムのバージョン管理には CVS を使っていたのだけれども,先般,LaTeX 関係の書籍のお手伝いをする際,執筆者で原稿のバージョン管理を Subversion で実施することになり,その使い勝手が CVS とあまり変わらないことに加え,commit 等のイベントをフックして独自の処理を追加できることにメリットを感じ,CVS のリポジトリを Subversion に移行することを考えはじめたのである。Emacs にも Subversion モードが備わっていて,CVS と同じ操作が可能である。

もちろん,「移行」といっても履歴等の情報すべてを考慮するのは難しく,ここでは CVS での最終版を Subversion に初期登録することだけを考えた。よって CVS の環境はそのままにして,今後は調査やバージョン復元のためにしか使わない位置づけとしたのである。

FreeBSD での Subversion 導入はいたって簡単。/usr/ports/devel/subversionmake install clean を発行するだけである。 ただし,Apache22 経由で複数クライアントからリポジトリにアクセスできるようにするためには,make config のインストール設定において,MOD_DAV_SVNAPACHE22_APR のオプションを選択しておかないといけない。これでインストール時に,httpd.conf に自動的にモジュールエントリが追加されるようになっている。

Subversion 導入後,サーバに svn リポジトリを svnadmin create で初期生成し,パーミションを Web サーバの UID/GROUP に変更しておく。また,http 経由でのアクセス制御のための定義を /usr/local/etc/apache22/Includes/svn.conf(名前は拡張子が .conf であれば何でもよい)として作成する。ここで,svn リポジトリや,アクセス制限のためのパスワードファイルへのパスを Apache22 に指示するわけである。パスワードファイルも htpasswd コマンドで作成しておく。これで Apache22 を再起動すれば,リポジトリの運用が可能になる。このあたりは『Subversion 入門』の第 5 章に詳しく書かれている(Linux 向けなので環境が BSD と若干違うのだが)。一応,私の作成した svn.conf を以下に掲げておく。パス情報は適宜であることに注意。

<Location /svn>
    <IfModule dav_module>
        Dav svn
        SVNParentPath /usr/local/var/svn
    </IFModule>
 
    AuthType Basic
    AuthName "Subversion Repository"
    AuthUserFile /usr/local/etc/apache22/.svnpasswd
    Require valid-user
 
    <LimitExcept GET PROPFIND OPTIONS REPORT>
        Require valid-user
    </LimitExcept>
 
    Order Deny,Allow
 
</Location>

とりあえず Web サイト用リポジトリだけは Subversion 移行を完了した。リポジトリ・ディレクトリ下の hooks ディレクトリ直下にフックスクリプトを置く。Emacs 上の svn クライアントで HTML の新しいバージョンを commit したら,自動的にサーバ上の作業コピーを update し,更新されたファイルだけ Web スペースにコピーし,さらに namazu 検索インデックスも更新するようなシェルスクリプトを書いた。これを post-commit というファイル名でこのディレクトリに格納し,実行権限を付与する。スクリプトの実行ユーザは Web サーバ(FreeBSD の場合,www)なので,svn update や Web スペースへのファイルコピーにおいてユーザ権限の齟齬がないようにするのに苦労した。expect により別ユーザにすり替わる処理を入れてこれは解決した。これでインターネット上のどこからでも,Web サイトの更新ができるようになった。

enable-auto-props = yes
[auto-props]
*.html = svn:mime-type=text/html;svn:eol-style=native;svn:keywords=Id

svn:keywords=Id というのがその設定である。svn:mime-typesvn:eol-style はそれぞれ MIME Type を text/html に,改行コードを OS (UNIX なら LF)に設定するものである。c, cpp, h, tex, txt, 等の拡張子に対しても,同様な定義をしておくとよい。
 

立ち読みで,サーバ設定がわかり易く書かれていた入門書だったので本書を選択した。しかしながら,クライアントサイドの使い方は TortoiseSVN クライアントにほぼ限定したものなので,UNIX ユーザにはまったく役に立たない。svn コマンドの使い方については,インターネット・リソース,例えば『Subversion によるバージョン管理』などのほうが有用である。