FreeBSD – Subversionでメンテナンスする。

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してシステムをぶっ壊したことがあります(汗)。

# 戻すのにえらく苦労しますた。

コメント

タイトルとURLをコピーしました