各国の TurboLinux で 統一されたパッケージの制作を行うにあたり、 パッケージの SPEC ファイルやパッチファイルなど、 パッケージを構成するファイルを 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_RSH と CVSROOT を
指定してください。
例えば 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" を行なう必要があります。
パッケージ名がモジュール名となっているので、
$ 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 ファイルなどを編集してください。
新しいパッケージ
(たとえば「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 ファイルやパッチファイルの変更を行い、 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.pldividespec.pl