文中では、squeeze
のシステムを使っていると想定しています。この文書を
lenny
のシステム用として読みたいのであれば、少なくともバックポートされた
dpkg
および debhelper
パッケージをインストールする必要があります。
dh-make-perl
、dh-make-php
などのように、同様ではありますが、特定目的に特化したパッケージもわずかにあります。
(訳注)日本語版は developers-reference
とはいっても、パッケージ化する価値のある新しいプログラムはいつだって存在するでしょう。
ファイルの拡張子で足りなければ、file
コマンドを使ってアーカイブ形式を判別することができます。
このプログラムはすでにパッケージ化されています。現在のバージョンは 0.15.3 で、以下の例にあるバージョン 0.9.12 とは大幅に変更されています。
Autotools
Tutorial
と
/usr/share/doc/autotools-dev/README.Debian.gz
を参照してください。
バージョン文字列は、"dpkg --compare-versions
ver1 op ver2"
として比較できます。dpkg(1)
のマニュアルページを参照してください。
以下の文章はあなたが Bash
をあなたのログインシェルとして使っていると仮定しています。Z
シェルのような他のログインシェルを用いている場合
~/.bashrc
と代えてそれに適当な設定ファイルを使って下さい。
上流のソースが debian
ディレクトリとその中身を提供している場合は、かわりに
dh_make
コマンドを --addmissing
オプションをつけて実行してください。新しい 3.0
(quilt)
形式のソースはとても堅牢なので、こういったパッケージでも壊すことはありません。自分の
Debian
パッケージ用に、アップストリームで提供されている内容を更新する必要があるかもしれません。
ここでの選択肢はわずかです。"s" は
"Single binary (単一のバイナリ)"、"i は
"Arch-Independent(アーキテクチャ非依存)"、"m"
は "Multiple binary (複数のバイナリ)、"l"
は "Library (ライブラリ)"、"k" は
"Kernel module
(カーネルモジュール)"、"n" は
"Kernel patch (カーネルパッチ)"、"b"
は "cdbs
"
です。このドキュメントでは、dh
コマンドで
debhelper
パッケージを使うのに重点を置いています。
この設定を無効にするには、quilt
コマンドを
"quilt --quiltrc /dev/null ..."
として実行すれば良いです。
前に説明したように dh_make
を実行していれば、debian/patches
ディレクトリはもう存在しているはずです。この操作例では、既存のパッケージを更新している場合に合わせて作成しています。
複数バイナリパッケージでは、dh_auto_install
コマンドはdebian/tmp
を一時ディレクトリとして使いますが、dh_install
コマンドは debian/package-1.install
や
debian/package-2.install
ファイルによって、debian/tmp
の中身を
debian/package-1
や
debian/package-2
一時ディレクトリに分配することで複数バイナリ
*.deb
パッケージを作成します。
これは Makefile
ファイルがこうなっているべきである、ということを示すための例にすぎません。Makefile
ファイルが ./configure
コマンドで作成されているなら、この手の Makefile
を修正する正しい方法は、dh_auto_configure
コマンドに --prefix=/usr
を含むデフォルトのオプションを与えて、./configure
コマンドを実行させることです。
libncurses
パッケージが libcurses.so
シンボリックリンクを持っていることを考えると、これが最適な例ではないと著者は思うのですが、よりよい例を思いつきません。提案をもらえるとありがたいです
:-)
この、少し変わった状況はDebian Policy
Manual, Footnotes
48
で詳しく説明されている機能です。これは、
debian/rules
ファイル内のdh
コマンドではなく、dpkg-buildpackage
に起因します。同様の状況はauto build
system for Ubuntu
にも当てはまります。
共有VSCを更新する時に、間違ってパッケージがアップロードされないように、UNRELEASEDなどの無効なディストリビューションの値を設定する人もいます。
このターゲットは例えば、完全な(再)構築, 第 6.1 節などで、"dpkg-buildpackage"が使用します。
このターゲットは例えば、Autobuilder, 第 6.2 節などで、"dpkg-buildpackage -B"が使用します。
このターゲットは、 "dpkg-buildpackage -A"が使用します。
これは新しいdebhelper
V7の機能です。このデザインコンセプトはNot Your
Grandpa's
Debhelper
Debconf9でdebhelper
上流によって提示されました。lennyでは、必須となる明示されたターゲットごとに、もっと複雑なrules
ファイルとdh_*
スクリプトを量産し、最初にパッケージ化する際に、各状態に凍結していました。新しいdh
コマンドは、もっとシンプルで、旧来の制約に縛られません。その上、override_dh_*ターゲットでカスタマイズする利便性は失われていません。詳しくはrules
ファイルのカスタマイズ, 第
4.4.3
節を参照してください。これは、debhelper
パッケージがもとになっており、cdbs
のようにパッケージをビルドするプロセスを複雑化することはありません。
target変数で呼び出され、dh_*
プログラムが実際に実行するシーケンスは、プログラムを走らせなくても"dh
--no-act target" や、"debian/rules --
'--no-act
target'"コマンドで確認することができます。
python-support
がインストールされているという前提で
dh_*
スクリプトが、実際に何をして、どのようなオプションがあるのかを知りたい場合は、debhelper
のマニュアルにある該当ページを参照してください。
"dh_auto_build --list"
Makefile
中の
distclean、realclean、 cleanのうち、最初に利用可能なものを実行します。
実際には、Makefile
中のtestかcheckのうち、最初に利用可能なものを実行します。
もし、パッケージが
/usr/share/perl5/Debian/Debhelper/Sequence/custom_name.pm
ファイルをインストールする場合、そのカスタマイズの機能を
"dh --with custom-name
$@"で有効にしなければなりません。
dh_pycentral
コマンドよりもdh_pysupport
コマンドが好まれます。dh_python
コマンドは使用しないでください。
lennyでは、dh_*
スクリプトの挙動を変えたい場合、rules
ファイル内の該当する行を見つけ出し、調整していました。
gentoo
パッケージはAutotoolsとしても知られているGNU
build systemを使用します。詳細はhttp://en.wikipedia.org/wiki/GNU_build_system
を参照してください。
引数なしのdh_auto_build
は、Makefile
の最初のターゲットを実行します。
debian/changelog
と debian/NEWS
は常に自動でインストールされます。上流のチェンジログファイルは、ファイル名を小文字に変換し、changelog
、changes
、changelog.txt
、changes.txt
のいずれかと一致するものを検索します。
files
ファイルによって、dh_movefiles(1)
コマンドが設定され、置換されます。
/usr/share/package
ディレクトリにドキュメントがあるにも関わらず、
コマンドがinfo
ページを見つけられない場合は、help2man
コマンドで生成されたページを直接編集します。
squeeze向けに、大規模なメニュー構造の見直しが行われました。
ここでは簡略化するために"{postpre}{instrm}
"にBashを使っていますが、maintainer
scriptsには、互換性の観点から、可能な限りPOSIX(Bashではない)シェルを使うべきでしょう。
ソースの書式を3.0 (quilt) and 3.0
(native)に移行する際の注意点などは、DebSrc3.0
にまとまっています。
この新しいフォーマットは、複数の上流のtar玉などもっと多くの圧縮方法をサポートしています。詳細は本稿の範疇を超えるため割愛します。
パッチセットをメンテナンスするためのいくつかの方法が提案され、Debianパッケージで使われていますが、quilt
が推奨されています。他には、dpatch
、dbs
、cdbs
、などがあります。これらの方法は、大抵debian/patches/*
ファイルでパッチを管理しています。
スポンサーにパッケージのアップロードを頼む時にも、あなたが加えた変更に対するこのような明確な分離とドキュメントは、スポンサーによるパッケージのレビューを促進させるためにも、非常に重要です。
3.0 (quilt)ソースフォーマットで
quilt
パッチを当てないようにするには、上記コマンドに--skip-patchesオプションをつけて実行します。または、通常の工程の後に、"quilt
pop -a"を実行する方法もあります。
実際の autobuilder システムは、本稿の説明よりもかなり複雑なスキームによって実現しています。それらの詳細は、本稿の範囲を超えるため割愛します。
pbuilder
パッケージとは違い、オートビルダーによって使用されるsbuild
パッケージ下でのchroot
環境では、最小構成を強制しないので、多くのパッケージがインストールされたままになるかもしれません。
pbuilder
パッケージはまだ進化の過程なので、実際の構成は、公式ドキュメントで確認して下さい。
HOOKDIR="/var/cache/pbuilder/hooks"に設定した場合。フックスクリプトのサンプルは/usr/share/doc/pbuilder/examples
ディレクトリににあります。
stable パッケージのそのようなアップデートには制限が課せられます。
上級者のみなさんのためになるウェブ上で閲覧できる資料です。
"Building Debian Packages with git-buildpackage" at
/usr/share/doc/git-buildpackage/manual-html/gbp.html
その場合は、通常だと正しく設定される環境変数は設定されません。アップロード用のパッケージはこの簡易メソッドで生成しないでください。
/etc/devscripts.conf
や ~/.devscripts
において
debuild
コマンド, 第 6.4
節 で述べた設定をしている場合には、lintian
に -i -I --show-overrides
オプションを指定する必要はありません。
dput
パッケージは、より多くのフィーチャーがあり
dupload
パッケージより人気が出てきています。それは、/etc/dput
ファイルをグローバル設定に用い、 ~/.dput.cf
ファイルをユーザー毎の設定に用います。更にそれは、そのままUbuntu関連のサービスもサポートします。
ftp://ftp.upload.debian.org/pub/UploadQueue/README
参照。これに代わる方法として、dput
パッケージ中にある dcut
コマンドを用いること模できます。
もしパッケージ foo
が旧 1.0
フォーマットでパッケージされている場合は、新規に展開されたソース中で
"zcat
/path/to/foo_oldversion.diff.gz|patch
-p1" を実行すれば出来ます。
もし uscan
コマンドが更新されたソースはダウンロードするが
uupdate
コマンドを実行しない場合には、URLの最後に "debian
uupdate" となるように debian/watch
ファイルを修正するべきです。
もしあなたのスポンサーや他のメンテナが既存のパッケージスタイル更新に異存がある場合には、更新することもまたその議論することも意味がありません。他にするべきより重要なことがあります。
cdbs
(0.4.74) パッケージ中に、
cdbs
以外の選択をした際の dh_make
コマンドにより生成される rules
ファイルに関する否定的記述があります。心配無用です。それは
dh_*
コマンドの長いリストを明示的ターゲットとして生成した
lenny にのみ当てはまります。
splitdiff
コマンドを用いると big.diff
は多くの小さな増分パッチに分割できます。
Debian 新メンテナガイド
version 1.2.25, 2010-12-21 14:06:56 UTCjoy-mg@debian.org
nabetaro@debian.or.jp
yyatsuo@gmail.com
uwabami@gfd-dennou.org
lurdan@gmail.com
osamu@debian.org