CVS によるパッケージのバージョン管理

TurboLinux Japan Product Development Team
Hirofumi Takeda, Takeshi Aihana,
Toshihiro Yamagishi, Masaru Yokoi

目次

CVS で管理する目的

各国の TurboLinux で 統一されたパッケージの制作を行うにあたり、 パッケージの SPEC ファイルやパッチファイルなど、 パッケージを構成するファイルを CVS で管理することを目的として この文書を示す。

この方法を導入することによって、以下のような状況になったとき、 効果を発揮すると考えられる。

運営方針

CVS で管理する範囲

CVS で管理するパッケージは、「Common package」(仮称) と呼ばれる 一つのソースパッケージで、 各地域の言語に適したバイナリパッケージを作成できる ソースパッケージになります。 「Common package」に関しては、別資料の 「TurboLinux RPM パッケージ向け SPEC ファイル作成ルール」を参照してください。

RPM パッケージを作成する上で必要なファイルのうち、 SPEC ファイルの NoSource: タグで指定されていない ファイルです。 CVS での管理対象で代表的なものを以下に示します。

リポジトリ構造

CVS で管理する リポジトリ構造は、パッケージ名とバージョンの 2 つの要素を利用してモジュールとディレクトリを作成し、分類します。 CVS でのリポジトリ構造は、パッケージ名をモジュール名に、 各ディレクトリの中には SPEC ファイル、パッチファイル など NoSource: タグで指定されていないファイルを保管します。

モジュールとディレクトリは以下の順に作成し、ツリー状にします。

Name / Version

パッケージ名 (Name) が モジュール名 となり、その下に言語別の ディレクトリ、バージョン のディレクトリを作成し、 SPEC ファイル と パッチ類 を保管します。

そして、各ディレクトリの名前の付け方は 次のようになります。

Name
SPEC ファイルの Name: に書かれる内容
Version
SPEC ファイルの Version: に書かれている バージョン

イメージ

ある一つ種類のパッケージを例に、 各地域別の L10N パッケージを CVSリポジトリにいれる場合、 そのディレクトリの構造は以下のようになります。

$CVSROOT/
  + Name/                         (Package name)
  | + Version/                    (Package version)
  | | + Name.spec                 (SPEC File)
  | | + Name-Version-???.patch    (Patch file)
  | | ......
  | |
  | + Other version
  |   ......
  + Other package
  .....

利用方法

設定

環境変数 CVS_RSHCVSROOT を 指定してください。

例えば Bシェルの場合、以下のようになります。

export CVS_RSH=ssh
export CVSROOT=[担当者のユーザ名]@pkgcvs:/work/packages

そして Cシェルの場合、以下のようになります。

setenv CVS_RSH ssh
setenv CVSROOT [担当者のユーザ名]@pkgcvs:/work/packages

CVS の history に、更新を行った者を記録するために、 担当者のユーザ名を利用する方針です。

CVS リポジトリから必要なファイルを入手する

あるパッケージを手元の環境で修正したりビルドするときに、 CVS リポジトリを取り出す方法を示します。

Check Out

CVS リポジトリ から対象となるファイルを入手するには "check out" を行なう必要があります。

パッケージ名がモジュール名となっているので、

$ cd ~/pkg
$ cvs checkout [パッケージ名]
と行うと ~/pkg に 目的のパッケージの SPEC ファイルなどが 展開されます。

準備

CVS リポジトリから入手した SPECファイル、ソースファイル、パッチファイル、 を元に、手元の環境でビルドするのに必要な準備をします。 SPECファイルに書かれたソースファイル、パッチファイルを RPM の SOURCE ディレクトにコピーするには rpmcvs (仮称) を利用すると便利です。

以下のような手順で利用することになります。

$ cd ~/pkg/[名前]/[バージョン]
$ rpmcvs -c [SPEC ファイル]

パッチファイルなど NoSource: タグで 指定されていない ファイル が カレントディレクトリ から /usr/src/turbo/SOURCES など 任意のディレクトリ にコピーされます。

その後、rpm -ba などのコマンドでビルドを行なったり、 SPEC ファイルなどを編集してください。

CVS リポジトリ に変更を反映する

新しいパッケージをつくる場合

新しいパッケージ (たとえば「newpackage」 と言ったパッケージ) を作成し、CVS リポジトリに反映させる方法は 次のようになります。

$ cd ~/pkg
$ mkdir -p newpackage/1.0
$ cd newpackage/1.0
$ ls
newpackage-1.0-hoge.patch  newpackage.spec
$ cd ~/pkg/newpackage
$ cvs import -m 'newpackage' newpackage turbolinux start

パッケージのバージョンが上がった場合

あるパッケージ (例えば 「newpackage」) のバージョンが 上がり、それに伴い パッケージのバージョンを上げる場合は 以下の作業をすることになります。

現在作成されている (古いバージョンの) パッケージ を入手。

$ cd ~/pkg
$ cvs co newpackage

新しいバージョン (1.1) のディレクトリを作成

$ mkdir ~/pkg/newpackage/1.1

前のバージョンの SPEC ファイルを新しいバージョン向けに 編集

$ cd ~/pkg/newpackage/1.1
$ cp ../1.0/newpackage.spec .

そして、新しいバージョンに必要な作業をおこない、 完成したら CVS リポジトリに反映させてください。

パッチファイルなどを CVS のディレクトリにコピーする

$ rpmcvs -s newpackage.spec

新しいディレクトリが作成されたことを CVS リポジトリに 反映させる

$ cd ~/pkg/newpackage
$ cvs add 1.1
$ cvs commit

SPEC ファイルなどの修正を行う場合

新たにパッチファイルを追加・編集するなど、 SPEC ファイルやパッチファイルの変更を行い、 CVSリポジトリに反映させる方法を示します。

そのパッケージに対し 何らかの修正を行う

$ cd ~/pkg/newpackage/1.1
$ vi newpackage.spec

CVS リポジトリに反映する。

$ cvs ci
cvs commit: Examining .
pkg@kankichi.jp.tlan's password: パスワード

vi が起動するので、コメントを書いてください。

新たにファイルを追加した場合

SPEC ファイルの修正などに伴い、パッチファイルなどが追加された場合、 CVS リポジトリに反映させる方法を示します。

ファイルの追加を知らせる。

$ cvs add [ファイル名]

CVS リポジトリに追加する。

$ cvs commit

ツール

この作業を 行うにあたり、Perl によるスクリプトを準備しました。 現在のところ、以下の2つのツールが準備されています。

rpmcvs.pl
RPM の SPEC ファイルを CVS で保管すべきディレクトリ、 RPM のシステムで保管すべきディレクトリ の間で コピーを行います。
dividespec.pl
SPEC ファイルを読み込み、CVS で管理すべき パッチファイルなどを カレントディレクトリにコピーします。

参考資料

日本語

gnujdoc <http://duff.kuicr.kyoto-u.ac.jp/~jargon/>
GNU のマニュアルを日本語に翻訳して公開されています。 CVS のマニュアルだけでなく、 autoconf, automake, bison, emacs などのマニュアルがあります。
Webmaster コラム (2000/3/8) CVS のすすめ <http://www.linux.or.jp/column/20000308.html>
Web ページを CVS で管理する方法をテーマに、 CVS の利用方法などが紹介されています。

TurboLinux Japan Product Development Team <product@turbolinux.co.jp>
$Modified: Mon May 22 19:46:04 2000 $