[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Japanese version of HOWTO.gz of cvs-buildpackage



樽石です。

cvs-buildpackage の HOWTO をばばそっと訳しました。
自分のために書いたのであとは知りません。
直したい人がいたらあとは勝手に引き取ってください。
翻訳権は放棄します。



Debian GNU/Linux パッケージに CVS を使う
------------------------------------------

この短い文章ではパッケージを CVS 管理に移行するための簡単
な手助けになることを意図しています。ですから CVS やバージョン
管理になじみのない人にとってこれはおそらく興味深いものに
なるでしょう。また /usr/doc/cvs-buildpackage に cvs-pkginit
(スクリプトとマニュアルの両方とも gzip で圧縮されています)
スクリプトがあります。これはこの HOWTO の書式を出力するものです。
例えばパッケージ foo、 バージョン bar1、Debian バージョン 3 の
場合は

% cvs-pkginit foo bar1 3

と入力して書式を眺めてください。そして cvs-inject(1) の
マニュアルを読むとさらに良いでしょう。

Oldenburg, 6/2/97                           Joey (joey@debian.org)
                                            / Martin Schulze   /
Mobile,                                     Manoj Srivastava
                                            srivasta@debian.org
Japanese Translation,                       Unkown


$Id: HOWTO,v 1.11 1998/10/28 23:01:24 srivasta Exp $


注意: 以下の説明では、<> で括られた実態はそれぞれの場合に
おいて変更され、他の物はそのまま使われることを意味しています。
例えば、パッケージの上流バージョンが 2.1.82 について
議論する場合、<$version> は 2.1.82 を、そして
upstream_version_<$version | tr ._> は upstream_version_2_1_82.
を意味します。

1. CVS の設定

   $ CVSROOT=/レポジトリを/置く/ディレクトリ
   $ export CVSROOT
   $ cvs init
   $ mkdir $CVSROOT/debian

(訳注)
レポジトリとは CVS が管理ソース一式を保存する貯蔵庫
の事です。

これであなたの Debian パッケージをレポジトリにある他の
ソースから将来に渡って分割できます。もし CVS を他の
ソース管理に使う必要がないという場合でも、あとになって
後悔する(後になってレポジトリを移動するのは大変です)
よりはクラス化しておくほうがよっぽど簡単です。

もし二人以上の人が CVS を使う可能性があるなら、その人
達が CVS を使って実際にレポジトリを作成できることを
確認する必要があるでしょう。レポジトリの 1 部(*)にアクセス
できるようなグループ(もしくはグループ群)を決めて、
パーミッションを

# chgrp <archive> $CVSROOT/debian
# chmod g+ws      $CVSROOT/debian

と設定してください。

(訳注)
1 部: レポジトリは CVS で管理される全てのソース情報が
      保存されます。ここでの 1 部とは全てのソース情報の
      中で Debian に関するレポジトリという意味です。

これでこのアーカイブグループのメンバーがレポジトリを設定
することができるようになります。それでは実際にそのグループ
がレポジトリの 1 部を作成できるかを確認しましょう。

# mkdir $CVSROOT/debian/<package1>
# chgrp <group1> $CVSROOT/debian/<package1>
# chmod g+ws     $CVSROOT/debian/<package1>
# mkdir $CVSROOT/debian/<package2>
# chgrp <group2> $CVSROOT/debian/<package2>
# chmod g+ws     $CVSROOT/debian/<package2>

あなたが一人の一般ユーザのように CVS レポジトリを共用できるよう
にするべきでしょう、つまり "-d /レポジトリを/置く/ディレクトリ"
と入力するか、以下のような記述をプロファイルに書いておくことに
よってできるようにしようと言うことです:

$ CVSROOT=/レポジトリ/を置く/ディレクトリ
$ export CVSROOT

2. モジュールの使用

# cvs checkout CVSROOT
# cd CVSROOT
# vi modules

以下で <package> は debian/changelog ファイルにあるパッケージ
名です。

以下の行を加えてください。1 行目は必須で 2 行目必要に応じて複製
します。


modules  CVSROOT modules
<package> debian/<package>

# cvs commit -m 'Define first modules'

(訳注)
原文は

<package> debian/pacakge

となっているがこれは間違いだと思う。


3. CVS 使用の準備

cvs-inject を使用に対して次の 1 行が必須です。すでに
orig.tar.gz、.dsc、diff.gz ファイルのセットが作成されて
いることを仮定すると

    $ cvs-inject <.dsc ファイルへのパス>

としてください(昔の方法はもっと大変でした、その方法は
この文の最後に付録として置いています。これを置いている
のは中身がどのように動いているのか好奇心のある人がい
るからです)。

debian/rules が実行可能であることを確認してください。
というのはこの方法はそれがエクスポートされたときに
実行され、そのエクスポート先のソース上で dpkg-buildpackage
の動作に問題が発生しないようにするためです。大抵の場合
、ファイルを CVS レポジトリに加える場合は全てのファイル
のパーミッションが正しくなっているか確認してください。

もし CVS を root として設定してあり、かつグループの書き込み
が許可されていない場合は $CVSROOT/debian/<package> を作成して
そのレポジトリの所有者を意図したユーザとグループに変更
する必要があります。CVS import は debian/<package> が作成でき
ないと警告してきますが問題ありません。

また、いくつかの場合において modules ファイルを設定してあるに
もかかわらずパッケージディレクトリの作成に置いて問題がある
と報告してくることがあります。それは時々 $CVSROOT/debian/<package>
に作成しようとしたのに $CVSROOT/<package> に作成されてしまう
というものです。この場合は '-Mdebian/<package>' を指定するか
手動でいったん作成されたレポジトリを移動してください(注意:
たぶんこれは CVS のバグで、調査中です)。

import する場合は -ko オプション(バイナリも管理する)を
使って上流ソースを import することに注意してください。
あなたが行った変更部分を import するわけではありません。
CVS タグ名を決定するさいに epoch は無視されます(epoch は
パッケージの順番に対する dpkg の挙動を変更するもので
CVS タグには無関係です)。

4. リリースの準備

パッケージを作成するような Debian のコマンドを実行できるように
する前に、最初にローカルの変更を commit しなければいけません。

$ cvs commit -m <message>

次に、'cvs tag' コマンドを使ってリリースに関連するような
全ての CVS 管理下のソースにタグを付けます:

$ cvs tag debian_version_<version|tr . _>-<debian-revision|tr ._>

-F フラグをつけて cvs-buildpackage を実行すると次回から
この作業は省略できます。

5. リリースを作成

cvs-buildpackage 機構と手動でエクスポートするのどちらでも
可能です(cvs-buildpackage の方が良いです)。最初に以下のような
感じで dry モード(タグが一致するかを確認する)で cvs-buildpackage
の動きを確認します。

$ cvs-buildpackage -d -n -rfakeroot

もし、問題が発生したら /etc/cvsdeb.conf が正しく設定されてい
るか確認してください。

そしてきちんと動くことを確認したら実際に実行します。
fakeroot でも実際に root になってでもどちらでも構いません。

$ cvs-buildpackage -rfakeroot

もしくは fakeroot のかわりに sudo や super とか何でも
使えます:

$ cvs-buildpackage -rsudo

手動で行うには:

パッケージを確認して

$ cvs export -d <package>-<version> \
       -r debian_version_<version|tr ._>-<debian-revision|tr . _> \
           <package>

そしたら普通のリリース方法と同じです。

(訳注)
普通のリリース方法とは CVS を使わない方法の事です。

---------------------------------------------------------------------
これで終了です。おめどうとうございます。これからはソースツリー
に対して行える作業に対して説明します。
----------------------------------------------------------------------

6. ファイルの削除、名前の変更

ファイルを移動する普通の方法は OLD を NEW へコピーし、CVS の
コマンドを使って 'remove OLD'し 'add NEW' します
(OLD と NEW は パスを含みます。例えばfoo/bar.c です)。

$ mv OLD NEW
$ cvs remove OLD
$ cvs add NEW
$ cvs commit -m 'Renamed OLD to NEW" OLD NEW

これがファイルを移動する一番単純な方法です、
エラーになりにくく、そして何が行われたのかが記録に
残ります。この記録にアクセスするためには前の名前か
新しい名前を、アクセスしようとしている記録の場所に
なるように指定しなければいけません。例えば
'cvs log OLD' は名前が変更されるまでのログを得ます。

7. import コマンドを使った module の更新

新しいソースのリリースが行われた時は最初に設定したときに使った
import コマンドを使ってレポジトリに反映させます。前の場合
との違いはこのリリースに違うタグの名前と違うメモを指定
することです。

現在は cvs-upgrade プログラムを使うとこれを簡単に行える
ようになりました。orig.tar.gz をあなたのマシンの作業ディレクトリ
に置きます(典型的に /usr/local/src/Packages/<Package name>)。上流
ソースは <作業ディレクトリ>/<パッケージ名>.orig.tar.gz という
名前でなければ行けません。

$ cvs-upgrade <パッケージ名> <上流バージョン>

これはオリジナルのソースを展開し、ベンダブランチに反映します。
アップグレードは衝突がおこる可能性があるので、この作業は
完全に自動化されてはいません。cvs-upgrade は衝突が発生した場合
に処理を中断しますので、その衝突を解決し、チェックしてから
新しいタグバージョンをつけてください。

そうしたら、自分の新しい変更部分を適用します。
これは以下のように行います:

もし作業ディレクトリを作っていないなら

$ cd /あなたの/ソースツリーが/置かれる場所
$ cvs checkout -jsource-dis:yesterday -jsource-dist <package>
$ cd /あなたの/ソースツリーが/置かれる場所/<package>

すでに作業ディレクトリがあるなら

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs update -jsource-dist:yesterday -jsource-dist  

上のコマンドは <package> の最新のリビジョンを取り出し、
yesterday 以降ベンダブランチ 'source-dist' 上で行われた変更
をマージし作業ディレクトリにコピーします。マージ中に
衝突が発生した場合は、普通の方法で解決します。
その後変更したファイルが commit されます。

上記で推奨しているように日付を使うことは 1 日に 2 回
以上の import を行わないということを仮定しています。
もし、行うのならかわりに以下のように行うと良いでしょう。

$ cvs checkout -jupstream_version_<oldversion|tr . _> \
               -jupstream_version_<newversion|tr . _> <package>

もしくは、作業ディレクトリで

$ cvs update   -jupstream_version_<oldversion|tr . _> \
               -jupstream_version_<newversion|tr . _> 

この場合、上の二つのコマンドは同じ意味を持ちます。

ローカルで変更されていないファイルに対しては、新しく
作成されたリビジョンが見出しリビジョンになります。

ですから、全てのファイルを正しく更新されているか
チェックしてください。特に、debian/changelog ファイル
の変更するのを忘れないでください。

全てが満足いくようになったら、作業ディレクトリの前の
バージョンを削除しても構いません。きちんと正しい
ディレクトリを消しているのだということを確認しましょう!!

$ rm -rf ../<package>.old

8. ディスク節約のためのソースツリーの削除

実際のソースツリーを削除するのにまだ commit されていない
ローカルの変更があるかをチェックする CVS コマンドを使わずに
rm -rf するのはやめておいた方が良いです。 

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs release -d <package>

9. 用語集

Tags		リビジョンに対する名前
Repository	ソースファイルの貯蔵庫

10 付録

A: CVS タグのしきたり

 |======================================================================|
 |Upstream Version    | <version>                                       |
 |Debian Revision     | <revision>                                      |
 |Orig tar file name  | package_<version>.orig.tar.gz                   |
 |Debian package name | package_<version>-<revision>_<arch>.deb         |
 |CVS Vendor tag      | upstream_version_<version  | tr . _>            |
 |CVS current tag     | debian_version_<version-revision | tr . _>      |
 |======================================================================|


 例:
 |======================================================================|
 |                    | upstream sources       | Debian only package    |
 |======================================================================|
 |Upstream Version    | 2.76                   | 3.38                   |
 |Debian Revision     | 1.2                    |                        |
 |Orig tar file name  | make_2.76.orig.tar.gz  |                        |
 |Debian package name | make_2.76-1.2_i386.deb | kpkg_3.38_i386.deb     |
 |CVS Vendor tag      | upstream_version_2_76  | upstream_version_3_38  |
 |CVS current tag     | debian_version_2_76-1_2| debian_version_3_38    |
 |======================================================================|

CVS タグ名を決定するのに epoch は無視されます(epoch は
パッケージの順番に対する dpkg の挙動を変更するもので
CVS タグには無関係です)。

B: ソースを導入するための以前の方法

ソースツリーを以下のコマンドを使って挿入します(すでにそれが
Debian 化されていて、orig.tar.gz が存在することを仮定します)。
-ko (バイナリファイルも管理するようにするオプション)を使って
上流ソースを import することに注意してください。あなたが行った
変更されているものではありません。CVS タグ名を決定するさいに
epoch は無視されます(epoch はパッケージの順番に対する dpkg
の挙動を変更するものでCVS タグには無関係です)。

CVS でないもので Debian 開発に使用しているソースツリー(つまり、
CVS へ導入しようとしている物、CVSROOT の下ではありません)を展開
しているディレクトリへ移動します。

もう 1 度言います: 以下で <package> は debian/changelog ファイルに
あるパッケージ名です。

$ cd /where/your/source/tree/resides/
$ tar zvvfx <package>_<version>.orig.tar.gz
$ cd <package>_<version>.orig
$ cvs import -ko -m 'Import of bare source' \
    debian/<package> source-dist upstream_version_<version|tr . _>

ブランチタグの source-dist は好きなように変更して構いません。
(cvs-buildpackage メンテナがこのタグ名を利用しているだけです)

もし CVS を root として設定してあり、かつグループの書き込み
が許可されていない場合は $CVSROOT/debian/<package> を作成して
そのレポジトリの所有者を意図したユーザとグループに変更
する必要があります。CVS import は debian/<package> が作成でき
ないと警告してきますが問題ありません。

次に行うことはすべてのツリーを取り出して、あなたの変更点を
マージすることです。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs checkout <package>

すでに debian 化したバージョンがあるのだがまだ CVS
を使っていないなら、これを実行する前に以下のコマンド
を実行してください。それが終わったら将来取り出せるよう
にリリースにタグをつけます。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ diff -qrBbw . /あなたの/ソースツリーが/置かれる場所/<package> -xvpf -
$ tar cf - $FILE_CHANGED_LOCALLY | \
   tar -C /あなたの/ソースツリーが/置かれる場所/<package> -xvpf -
$ cd /あなたの/ソースツリーが/置かれる場所/<package>

debian/rules が実行可能であることを確認してください。
というのはこの方法はそれがエクスポートされたときに
実行され、そのエクスポート先のソース上で dpkg-buildpackage
の動作に問題が発生しないようにするためです。大抵の場合
、ファイルを CVS レポジトリに加える場合は全てのファイル
のパーミッションが正しくなっているか確認してください。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs add debian <同様に他に加えるファイル>

また、レポジトリにおくファイルを手動で加える必要があります。
特に debian サブディレクトリにあるものは重要です。
cvs add コマンドは再帰的に動作しません。ですから、すべての
サブディレクトリで手動で add しなければなりません
(cd debian; cvs add *)。


良い方法を教えます。cvs update を実行することこのディレクトリの
状態を表示してくれます。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs update

出力はこんな感じです。

   cvs update: Updating .
   M Makefile
   cvs update: Updating debian
   A rules
   ? example1

M は変更されている(commit しなければいけません)、A は加えられている
(commit しなければいけません)、? はこのファイルについて管理していない
(おそらく add コマンドを使う必要あり?)をそれぞれ意味します。
おかしな部分が無く、すべてのファイルがちゃんとしたパーミッションを
持っているなら commit できます。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs commit -m 'Made all debian changes'
$ cvs tag debian_version_<version|tr . _>-<debian-revision|tr . _> .

新しいソースツリーはバージョンを持っていないディレクトリに
置かれます。後で見るようにこれは問題ありません。

かわりにもし debian ディレクトリをゼロから作るなら
(自動化は少ないのですが非常に単純です)

$ mkdir debian

必要な debian ファイルをすべて作ってソースコントロールに
加えます。

$ cvs add debian
$ cd debian
$ cvs add *

これであなたのファイルを含むことになります。

$ cd /あなたの/ソースツリーが/置かれる場所/<package>
$ cvs commit -m <some message>