subversionを使ってportsを管理する

先頃FreeBSDportsツリーの版管理がsubversionに移行しました.ユーザーレベルの一般的な用途ではこの移行による影響はあまりないのですが,以下のような状況では利点があるものと思われます.

  • ネットワークの都合でcsupが使えない
  • portsツリーの特定の版を取得したいことがある

これはcsupは専用のポートで通信を行うため,ネットワーク環境によっては利用できないという難点がある一方で,HTTPで通信を行うportsnapの機能は最新版への更新のみであり,リリース時のものなど特定の版を取得することができないという問題あったためです.subversionによってportsツリーの管理を行うことでこの双方を解決できます.

さて,subversionによるportsツリーの管理を行うには,まず,subversionをインストールしないことには話が進みません.例えば以下のようにします.

cd /usr/ports/devel/subversion
make install clean
rehash

インストールが済んだらとりあえずportsツリーを消去して新たに取得します.

rm -rf /usr/ports/*
svn co http://svn.freebsd.org/ports/head /usr/ports

これで常に開発者による更新が行われている最新版のheadブランチが取得されます.以降,portsを最新版に更新するには以下のようにします.

svn update /usr/ports

さて、ここからが本題です.portsツリーを更新したことによって不具合が発生した場合などにportsツリーを旧版に差し戻したい場合があります.こうした場合,まずSVNWebで差し戻し対象の版を調べ,それを取得することになります.例えば,この記事の記述時点ではdevel/hwlocは1.4.2をインストールすることになっていますが,何らかの事情で過去の版であるhwloc 1.3.1をインストールしたいとします.この場合はSVNWebのhwlocのページを調べることでhwloc 1.3.1に対応するSVNの版が289923であることを確認し,以下のように289923を取得すれば良いことになります.

svn update -r 289923 /usr/ports/

また,良く知られた話ではあるのですが,FreeBSDportsツリーは常に更新が行われており,(QATindyによって往時に比べれば安定したとはいえ)時に不安定であることがあります.したがって,種々の問題を回避するために動作確認がなされたリリース時の版を取得したい場合もあります.このような場合には以下のようにすれば良いでしょう.

svn co http://svn.freebsd.org/ports/tags/RELEASE_9_0_0 /usr/ports

この例では9.0-RELEASEの版を取得しています.