書式
[epoch:]upstream-version[-debian-revision]説明
Debian バイナリおよびソースパッケージで用いられているバージョン番号は、以下の 3 つの要素からなっている:- epoch
- これは一桁の (通常小さい) 符号なし整数であり、0 の場合は省略してよい。省略した時には、upstream-version にコロンを含めてはならない。
- epoch は、パッケージの古いバージョンにおけるバージョン番号の誤りを許容すると共に、パッケージの以前のバージョンにおける番号体系をそのまま残しておくために提供されている。
- upstream-version
- これはバージョン番号の中核部分であり、通常 .deb ファイルの生成元であるオリジナル ("アップストリーム") のパッケージのバージョン番号が可能であれば用いられる。一般的に、このバージョン番号は、アップストリームの作者によって指定された形式と同じ形式になるが、場合によってはパッケージ管理システムの形式や比較ができる形式に合わせるために、形式の変更が必要となる場合もある。
- パッケージ管理システムが upstream-version 間で比較を行う際の挙動については後述する。バージョン番号には、必ず upstream-version 部分がなければならない。
- upstream-version には英数字 ("A-Za-z0-9") と、文字 . + - : ~ (ピリオド、プラス、ハイフン、コロン、チルダ) の各記号のみが許容され、先頭は数字である必要がある。debian-revision が存在しない場合は、ハイフンを使うことはできない。epoch が存在しない場合は、コロンを使うこともできない。
- debian-revision
- バージョン番号のこの部分では、upstream-version に基づく Debian パッケージとしてのバージョン (リビジョン) を指定する。これには英数字と文字 + . ~ (プラス、ピリオド、チルダ) のみが許容される。比較については、upstream-version と同様に行われる。
- この部分は任意であるが、存在しない場合は upstream-version にハイフンを含めることはできない。ソフトウェアが Debian パッケージ化を前提に開発された場合、あるバージョンに対する "debian 化" されたバージョンが 1 つしか存在しないため、リビジョン番号は不要となる。
- upstream-version がバージョンアップしたら、debian-revision は '1' から再度始めるのが慣習になっている。
- dpkg はバージョン番号文字列を、最後のハイフンの前後で upstream-version とdebian-revision とに分割する (ハイフンがある場合)。debian-revision が存在しない場合は、存在する場合よりも小さいとみなされる (ただし、debian-revisionは、バージョン番号を構成する要素のうち、もっとも右の部分であることに留意)。
ソートアルゴリズム
パッケージ管理システムは、同じアルゴリズムを用いて upstream-version や debian-revision 同士を比較する。文字列は左から右に順に比較される。
最初に、双方の文字列の先頭から、数字以外の文字からなる部分が切り出され、これら (片方が空文字列の場合もある) が辞書的に比較される。相違点が検出された場合、そこで比較は完了となる。辞書的な比較とは、ASCII 文字の比較に手を加えたもので、すべての文字は記号よりも先となるが、チルダだけは例外で、空文字を含むあらゆる文字よりも先となる。例えば、以下の文字列は、このソート順に並べられている: '~~', '~~a', '~', 空文字, 'a'。
次に、双方の文字列の残りの部分の先頭から数字の部分が切り出され、数値として比較される。相違点が検出された場合は、それが比較結果として返却される。空文字列 (比較されるバージョン文字列の末尾以外に存在することはない) は、比較時には 0 として扱われる。
このステップ (先頭の数字以外の文字列と数字を順に切り出して比較していく) を、相違点が確認されるか、双方の文字列の終端に達するまで繰り返す。
epoch は、バージョン番号の設定ミスや、バージョン番号の付与体系の変更にうまく対応できるようにする目的で存在する。パッケージ管理システムが解釈できない文字列 (例えば 'ALPHA' や 'pre-'など) が含まれているバージョン番号や、明らかにおかしい番号づけに対応することを意図したものではない。