最終ゴール
オレオレ apt リポジトリにオレオレ deb パッケージを置いて,特定少人数に対して配布する.
今回のお題
例えば以下のようなコマンドがあるとする.
#!/bin/sh echo 'hello'
このコマンドを提供する Debian パッケージを作りたい.この Debian パッケージの upstream にあたるパッケージはどのように作成すればよいだろうか?
パッケージ名
まずパッケージ名を決める必要があるが,パッケージ名に使ってよい文字などの規則はどこにあるだろうか?「debian パッケージ名の規則 - metalglue」に書いた通り,Debian Policy Manual - Control files and their fields (5.6.1 Source) にあり,[a-z0-9][a-z0-9.+-]+
となる.大文字やアンダースコア _
が使えないことに注意.
ここではパッケージ名を my-hello とする.
バージョン
バージョン番号の付け方はどうしたらよいだろうか?「オープンソースソフトウェアの育て方 」を通じて知った「Versioning Numbering Concepts - The Apache Portable Runtime Project」 が参考になる.これによると,バージョン番号は . (ドット) で区切られた3つの数字で,MAJOR.MINOR.PATCH という構成を取る.ドットは小数点ではない.つまり例えば 3.1.9 の次のバージョンは 3.2.0 ではなく 3.1.10 である.
MAJOR と MINOR が同じなら PATCH が違っても機能が違ってはならない.PATCH が異なるバージョン間でアップグレードしてもダウングレードしてもバグでない挙動は同じでなくてはならない.平たく言うとバグフィックスによるバージョンアップである.
MAJOR が同じで MINOR が異なるバージョンにアップグレードしたときに,使えていた機能が使えなくなってはならない.一方,ダウングレードは安全に行えないかもしれない.
MAJOR が異なる場合は,アップグレードもダウングレードも安全に行えない可能性がある.
ここではバージョンを 0.0.1 とする.
ディレクトリ/ファイル構成
以下のようにする.
my-hello/ |-- Makefile `-- myhello
Makefile
普通,作成したコマンドは /usr/local/bin に,ライブラリなら /usr/local/lib にインストールされるように Makefile を記述する.今回の場合はどのような Makefile が都合がいいだろうか?
Debian のパッケージ生成では,あるディレクトリを仮のルートとしてファイルをインストールし,それをアーカイブしてパッケージとする(Chapter?3.?Modifying the source - 3.1 Installation in a subdirectory を参照).よって,任意のディレクトリをルートと考えてインストールできるようになっていることがのぞましい.
また,「Debian Policy Manual」によると,debian ではコマンドは /usr/bin に,ライブラリは /usr/lib にインストールすることになっている.この,/usr を基準にするか /usr/local を基準にするかが選択可能であることが望ましい.
これらを勘案し,また ldapscripts の upstream パッケージも参考にして,DESTDIR と PREFIX という変数でこれらを制御できるようにした.
DESTDIR = PREFIX = /usr/local all: install: myhello install -d $(DESTDIR)$(PREFIX)/bin install $< $(DESTDIR)$(PREFIX)/bin .PHONY: all install
以下のようにインストールする.
$ make install DESTDIR=/home/yourname/tmp PREFIX=/usr
疑問点
- upstream パッケージの作者が Debian 野郎の場合,自分で Debian 用のファイル(パッケージディレクトリ中の debian/ ディレクトリの中身)を用意するだろう.こういう場合,README とか changelog とかはどこにおいておくのがいいんだろうか?
- よくわからないので,今回は README, changelog のことは考えないことにする.
0 件のコメント:
コメントを投稿