FreeBSDなマシンをメンテナンスしているとSubversion云々で色々煩いので、CVSUPを諦めた。
以前からSubversionでコード管理するからねーとアナウンスはあったのだけれど、面倒くさいのでずっとCVSでソースコードを取得していたわけですよ。stableを追っかけている限りは単純明快だったし。
ところが、「何時までCVS使っとんのじゃ、ボケ」とかメッセージが表示されるに至っては切り替えるしかございませぬ。
FreeBSDでSubversionを使う方法は「FreeBSDハンドブック A.6. Subversion を使う」に詳しく記述してある。
Subversionのインストール
Portsを使ってインストール。
[bash]
portinstall -f devel/subversion
[/bash]
を実行。これで、svnコマンドやsvnsync、svnserve等も導入される。
Subversionを使って取得
FreeBSDのSubversionミラーは「FreeBSDハンドブック A.7 Subversionミラーサイト」に記述がある。日本からだと西海岸のサーバ(https://svn0.us-east.FreeBSD.org/)を使えば良いんだろう。
あと、今までCVSを使っているなら、今まで保存先に使用していたディレクトリ(ソースコードなら/usr/src、Portsなら/usr/ports)はリネームして置くか削除しておく。
実際にソースコードを取得する場合は
[bash]
svn checkout https://svn0.us-east.FreeBSD.org/リポジトリ/ブランチ/タグ /usr/src
[/bash]
のように実行する。
ブランチはリリース版ならreleng、stableならstableを指定。タグはバージョンを指定する。
従って、8-stableのソースコードを取得したいのなら
[bash]
svn checkout https://svn0.us-east.FreeBSD.org/base/stable/8 /usr/src
[/bash]
とすれば良いし、9.1Releaceのソースコードが欲しいなら
[bash]
svn checkout https://svn0.us-east.FreeBSD.org/base/releng/9.1 /usr/src
[/bash]
とする。
Portsの場合は単純に
[bash]
svn checkout https://svn0.us-east.FreeBSD.org/ports/head /usr/ports
[/bash]
でOK。
一度取得した後は
[bash]
svn update /usr/src
[/bash]
のようにして更新していく。
ローカルミラーを作る
ローカルにミラーを立てておけば、公式ミラーへの負荷も軽減できるはず。
ということで、svnserveを使用してローカルにミラーを立ててみる。
リポジトリは/usr/fb_svnディレクトリに置くことを前提に作業。
[bash]
mkdir /usr/fb_svn
cd /usr/fb_svn
[/bash]
リポジトリの大本を取得する。
[bash]
ftp -a ftp://ftp.jp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-base-r238500.tar.xz
ftp -a ftp://ftp.jp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-doc-r39237.tar.xz
ftp -a ftp://ftp.jp.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-ports-r301235.tar.xz
[/bash]
取得したアーカイブを展開。
[bash]
tar zxvf svnmirror-base-r238500.tar.xz
tar zxvf svnmirror-doc-r39237.tar.xz
tar zxvf svnmirror-ports-r301235.tar.xz
[/bash]
svnsyncコマンドを使用してリポジトリを更新。
[bash]
svnsync sync file:////usr/fb_svn/base
svnsync sync file:////usr/fb_svn/doc
svnsync sync file:////usr/fb_svn/ports
[/bash]
これでリポジトリは最新になるはず。更新はシェルスクリプトを組んでcronで定期的に回せば良いだろう。
次にsvnserveで各リポジトリにアクセスするための設定を行う。
リポジトリ毎の設定は「リポジトリディレクトリ/conf」ディレクトリにsvnserve.confというファイル名で配置されている。
[text]
anon-access = none
auth-access = read
password-db = passwd
[/text]
のように修正しておく。ちなみに
- anon-access
匿名でのアクセスに対するアクセスコントロール。noneなら不許可、readならcheckoutのみ許可、writeならcommitまで許可。 - auth-access
ユーザに対するアクセスコントロール。設定値はanon-accessと同じ。 - password-db
ユーザに対するパスワードを設定するファイルを指定する。
となっていて、今回は単なるミラーなので匿名アクセスを不許可、ユーザもcheckoutのみとした。外部に公開しても良いとか奇特な人がいるのならanon-accessをreadにすれば良いだろう。
パスワードを設定するファイルは
[text]
[users]
ユーザ名 = パスワード(平文)
[/text]
のように記述する。
次はsvnserveの準備。
svnserveは3690ポートを使用するので、pf等で塞いでいるのなら予め空けておく。
次に
[bash]
pw groupadd -n svn -g 90
pw useradd -n svn -u 90 -g svn -d /nonexistent -s /nonexistent
[/bash]
を実行してsvnserve用のユーザとグループを作成する。
次に/etc/rc.confにsvnserve用のパラメータを記述
[text]
svnserve_enable="YES"
svnserve_flags="-d –listen-port=3690 –listen-host=0.0.0.0"
svnserve_data="/usr/fb_svn"
[/text]
これでsvnserveの実行準備が整ったので
[bash]
/usr/local/etc/rc.d/svnserve restart
[/bash]
を実行してsvnserveを起動する。
svnserveを使ったローカルミラーからの取得方法
基本的に公式ミラーと同じだが、プロトコルがhttpsからsvnになるので、
[bash]
svn checkout svn://ローカルミラーのIPアドレス/~
[/bash]
のように実行すれば良い。
注意
ソースコードを取得する場合ブランチやタグに注意しましょう。
9-stableな奴にtypoして8-stableのリポジトリを引っ張ってきた挙句、気付かずにmakeしてシステムをぶっ壊したことがあります(汗)。
# 戻すのにえらく苦労しますた。
コメント