5 (debhelperCDBSdpatchquilt いた )


PIC
____________________________________________________________________

5.1 はじめに

この文書ではまず Debian ビルド流れと debian/rules 概観したdebhelper CDBS いて debian/rules メンテナンスしやすくする方法します発元スコする ンテナンスしやすいかたちでえる方法としてである dpatch quilt 使 ます

的な Debian 方法味のあるとしています

5.2 までのおさらい

これまでにについてんだことをしてみまし単にまとめてしまえば以下のようになるのではな いでしうか

りの流れやdebian/rules イルとなく分かたかといますしかし debhelper コマンド連ねられている debian/rules についてはのところどのようなことをしておりどのような流れ られているのかはおそらくまだできていないといますまたをさらにかく されたものにする方法分からないでし

そこでdebian/rules debhelper コマンドがどのようなビルドされ ているのかをらかにしますそのdebhelper CDBS いてDebian Policy Manual (debian-policy) した メンテナンスしやすいかたちでする方法しますまた発元スコするメン テナンスしやすいかたちでえる方法としてである dpatch quilt 使 ます

まずビルド流れについてていくことからめまし

5.3 deb ビルド

debuild などのジビルドツではまかにうと的にのようなビルド ます

  1. ビルドする
  2. イルする (debian/rules clean)
  3. スパをまとめる (dpkg-source -b < レクトリ>)
  4. バイナリパインストするイルビルドする (debian/rules build)
  5. ビルドしたイルバイナリパにまとめる (debian/rules binary)
  6. .changes イルする (dpkg-genchanges)
  7. 名する

以 下 で こ れ ら を し く し ま す

5.3.1 ビルドする

ビルドめるまずはビルドのためのえる必要があります

ビルドのためのえるてもとありますがえばスパ展開などがげられます スパビルドするスパ展開してスツリにするところからめなければなりま せんもちろんスツリビルドするはこれはです

またビルドにはなもの (コンパイラライブラリなど) 必要となるのでビルドエラ ならないようそれらの存在認しておく必要もあります必要となるスパ.dsc Build-Depends ルドスツリdebian/control Build-Depends ルドかれています ルドツによてはビルド必要認するだけでなくインストされていないインストして くれるものもあります

またpdebuild などのように chroot ビルドするこういにまず chroot てそこにるところからめるでし

5.3.2 イルする (debian/rules clean)

必要揃っていることを認したところでイルしますビルド生成された イルがあるはそれをして同じからビルドできるようにすべきですdebian/rules clean をそのような的で使うようdebian-policy においてめられています

5.3.3 スパをまとめる (dpkg-source -b < レクトリ>)

スパするタイミングとしてはイルしたバイナリパめるイルビル もよいでしdpkg-sourceコマンド-bオプシ使うとスツリからスパ できます

5.3.4 バイナリパインストするイルビルドする (debian/rules build)

スパえたらいよいよバイナリパりますバイナリパきく 2 分けることができますコンパイルです

C などの言語かれたプログラムライブラリまれているそれらをインストコンパイル してバイナリプログラムライブラリする必要がありますプログラムビルドGNU Autoconf 使 するようになているコンパイルconfigure スクリプトらせて必要もあるで

この続きはバイナリプログラムライブラリんでいないについても必要になることが多いでし えばLATEXSGML などのかれたドキメントHTML PostScriptPDF などの適した してバイナリパめるべきですまたとなるしてインストする必要があ はここでそのいます

debian-policy ではこのようなプログラムライブラリコンパイルのためにdebian/rules build 使うようされています

5.3.5 ビルドしたイルバイナリパにまとめる (debian/rules binary)

必要イルをすべてビルドしたところでそれらを適切適切場所バイナリパにま とめげる必要がありますさりといてしまいましたがdebian-policy するしようとする にはかなり複雑されるプロセスです

このプロセスまず debian/tmp /なしてソフトウ全体インスト( インスト) そのdebian/tmp イル適切debian/< バイナリパ> 分け最後debian/< バイナリ > をそれぞれバイナリパするという流れでいますdebian/< バイナリパ > バイナリパするには調節イルなどしなければなら ないこと推奨されていることが多数ありますそれらはしますのでここではしい ます

debian-policy ではバイナリパをまとめげるためにdebian/rules binary 使うようされて います

5.3.6 .changes イルする (dpkg-genchanges)

スパバイナリパイル揃ったところでこれらのイルする をまとめた.changes イルする必要がありますこれには dpkg-genchanges コマンド使され ます

5.3.7 名する

テストビルドでは必要ありませんがにする最後 名する必要がありますにしないでもするには名することをおめし ます

名は.dsc イル.changes イルしています.dsc イルにはスパ.tar.gz イル.diff.gz イルサイズかれているので名をすことでこれらのイル できますまた.changes イルにはスパバイナリパのすべての サイズかれているので名をすことでこれらのイルすべてのできま *2

名にはdevscripts まれている debsign コマンド使いますこのコマンド.dsc イル する名をその.changes .dsc イルエントリサイズ名後した .changes イル名してくれます

5.4 debian/rules

ビルドから分かるかといますがdebian/rules にはビルド必要となる がありますした cleanbuildbinary 他にbinary-arch binary-indep 必須 です以下でこれらの単にします (debian-policy してくだ さい)

clean
build binary をすべてすためのですただし生成 れたバイナリパはすべきでありませんこのroot 必要があるかも しれません
build
バイナリパめるプログラムライブラリコンパイル使される です的だと動ビルドができなくなるため的なものでなけれ ばなりませんインストルパスなどの的にうようになているソフトウについては プログラムえなどでしてくださいこのではroot 必要ては なりません
binary
binary build ビルドされたバイナリパをまとめげるのに使されま binary binary-arch binary-indep 存するだけとなりま このroot されなくてはなりません
binary-arch
ビルドされたイルからキテクチバイナリパ生成するためのです めるイルビルドするとしてbuild (またはされている build-arch ) 存するようにしておくべきですこのroot されなくて はなりません
binary-indep
ビルドされたイルからキテクチ存バイナリパ生成するための めるイルビルドするとしてbuild (またはされている build-indep ) 存するようにしておくべきですこのroot され なくてはなりません

cleanbuildbinary についてはプレベルデレクトリ (debian レクトリレクトリ) カレ ントデレクトリとしてするようめられています

5.5 debhelper 使わない debian/rules

debian/rules 必須する単に眺めたところでdebian/rules てみまし 以下ではDebian 使わずにしたhello debian/rules からした (したもの) します

まずは clean です

clean:
rm -f build
-$(MAKE) -i distclean
rm -rf *~ debian/tmp debian/*~ debian/files* debian/substvars

単にめますね以下のことをやているだけです

続いて build です

CC = gcc
CFLAGS = -g -Wall

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O2
endif

build:
./configure --prefix=/usr
$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"
touch build

GNU Make makefile れていないと部分分かりにくいかもしれませんがbuild 単純ですねソフトウからインストしたことのあるかたならおみのAutoconf いた的な C プログラムビルド方法です

最後binarybinary-archbinary-indep 3 つのです

package = hello
docdir = debian/tmp/usr/share/doc/$(package)

INSTALL_PROGRAM = install

ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
  INSTALL_PROGRAM += -s
endif

binary-indep: build

binary-arch: build
rm -rf debian/tmp
install -d debian/tmp/DEBIAN $(docdir)
$(MAKE) INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \
prefix=$(CURDIR)/debian/tmp/usr install
cp -a NEWS debian/copyright $(docdir)
cp -a debian/changelog $(docdir)/changelog.Debian
cp -a ChangeLog $(docdir)/changelog
cd $(docdir) && gzip -9 changelog changelog.Debian
gzip -r9 debian/tmp/usr/share/man
dpkg-shlibdeps debian/tmp/usr/bin/hello
dpkg-gencontrol
chown -R root:root debian/tmp
chmod -R u+w,go=rX debian/tmp
dpkg-deb --build debian/tmp ..

binary: binary-indep binary-arch

つずつていけば以下のようなバイナリパ生成していることが分かります

  1. インストレクトリする
  2. ソフトウMakefile install インストレクトリイルインスト するDEB_BUILD_OPTIONSnostrip という文字まれていないインスト ブジクトフイルからシンボルてる (strip する)
  3. インストドキメントレクトリソフトウドキメントdebian/copyright インス する
  4. インストドキメントレクトリdebian/changelog およびソフトウChangeLog それぞれ changelog.Debian および changelog としてインストする
  5. インストした changelog.Debian および changelog マニアルペする
  6. インストしたバイナリフイルビルド使われたライブラリへの存関調べてdebian/substvars ${shlibs:Depends}する
  7. debian/control debian/tmp/DEBIAN/control するそのdebian/control ${shlibs:Depends}したする
  8. インストレクトリイル適切する
  9. deb にする

バイナリプログラム 1 つとバイナリパ1 つにインストするだけなのにかなり複雑踏ん でいますこれは以下のような由からです

バイナリパ1 つを生成するでさえこれだけの踏まなければならないのでイル複数 バイナリパ分けてインストするようなかなりがかかるのは想像でき ます

______________________________________________________________________________________________

deb イル dpkg-deb –build がどのようにして複数イル1 つのにまとめているか味があるかもしれませ そのような以下になるでし

noritada[3:50]%  ls
hello_2.2-2_i386.deb
noritada[3:50]%  ar x hello_2.2-2_i386.deb
noritada[3:50]%  ls
control.tar.gz data.tar.gz  debian-binary  hello_2.2-2_i386.deb
noritada[3:50]%  cat debian-binary
2.0
noritada[3:50]%  tar ztf control.tar.gz
./
./control
noritada[3:50]%  tar ztf data.tar.gz
./
./usr/
./usr/share/
./usr/share/doc/
./usr/share/doc/hello/
[snip]
./usr/share/man/
./usr/share/man/man1/
./usr/share/man/man1/hello.1.gz
./usr/bin/
./usr/bin/hello

5.6 debhelper いた debian/rules

debian-policy Debian できるようにしてくれるのがdebhelper ですとして hello して debhelper 使した hello-debhelper debian/rules てみま

まずは clean です

clean:
dh_clean
rm -f build
-$(MAKE) -i distclean

hello とほぼ同じですがdebian レクトリしてはdh_cleanというコマンド使している ことが分かります

build ですがこれは hello のものとまたく同じなので略します

最後hello ではかなり複雑binarybinary-archbinary-indep 3 つの です

package = hello-debhelper

install: build
dh_clean
dh_installdirs
$(MAKE) prefix=$(CURDIR)/debian/$(package)/usr install

binary-indep: install

binary-arch: install
dh_installdocs -a NEWS
dh_installchangelogs -a ChangeLog
dh_strip -a
dh_compress -a
dh_fixperms -a
dh_installdeb -a
dh_shlibdeps -a
dh_gencontrol -a
dh_md5sums -a
dh_builddeb -a

binary: binary-indep binary-arch

dh_まるコマンドめられているのが分かりますこれらが debhelper コマンドですオプシイル 名のなどは部分的にはあるものの的にはシンプルとなておりバイナリパ名やインスト パスなどの的なする必要がなくなていますここでは単一バイナリパげていますが 複数バイナリパ生成する debian/rules についても同様シンプルできますそれはdebhelper 以下 のような長からです

debhelper debian/rules メンテナンスするきくらしてくれる有用だと ます

5.7 debhelper コマンド

debhelper 長をしたところでそのコマンド概観しましてもコマンドオプシ 必要となるイルについてはコマンドマニアルペ[] Debian しいがあるのでそれらにりますここではまかな分類使をし ます

debian/rules らしてくれる debhelper ですが多数コマンドのどれをどのタイミング使うべきか分かりにく というがありますそれはべたようにdebian-policy dpkg コマンドごとにdebhelper にも するコマンド存在するためdebhelper 使してもdeb にまとめるまでの多いからですそこで こでは使するによコマンド7 つに分類しておきますdebhelper debian/rules にしていただ けるといです

なおbinary とはbinarybinary-archbinary-indep 3 つののことです

5.7.1 認系

以下コマンド頭においてしいしようとしているか認するために使われるも のです

5.7.2

以下コマンドclean 使われるものです

5.7.3 インスト

以下コマンドbinary においてインストすべきものです

5.7.4 インスト

以下コマンドbinary においてインストイルなどを debian/< バイナリパ> インストするのに使われます

5.7.5

以下コマンドbinary においてdebian/< バイナリパ> 以下インストされたイル debian-policy 適合するようするのに使われます

5.7.6 deb

以下コマンドbinary においてdeb 生成直前使されます

5.7.7 deb

以下コマンドbinary においてdeb 生成直前使されます

5.8 debian/rules をさらにくには

debhelper コマンド使するタイミングによ7 つに分類してみましたこれによかびてくるの どのでもコマンドはほぼ同じという事実ですdh_make した debian/rules をいじるでもdebhelper コマンド順序することはほとんどないで

ここでではコマンドしの流れをしてしまえばdebhelper コマンドばかりがんだたような debian/rules しないでくといますとしてからしたたような debian/rules するのはコストがかかりますしいコマンドができたそれをすべての debian/rules 同じ場所えればなり ません

そこでするのが CDBS ですCDBS debhelper いて debian/rules をさらににし ます

5.9 CDBS debhelper いた debian/rules

短くはない debian/rules するという debhelper するのがCDBS debhelper (debhelper.mk) ですCDBS とはdebian/rules モジして利用できるようにしたものをライブラ として的な流れに沿debian/rules 単にできるようにするシステムです CDBS debhelper (debhelper.mk) ではdebhelper いたビルド的な流れが れているのでdebhelper コマンド与えるオプシするだけで debian/rules ます

hello-debhelper debian/rules CDBS debhelper いてえるとのようになり ます

#!/usr/bin/make -f

include /usr/share/cdbs/1/rules/debhelper.mk

package = hello-cdbs

CC = gcc
CFLAGS = -g -Wall

ifeq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
  CFLAGS += -O2
endif

clean::
-$(MAKE) -i distclean

install/hello-cdbs::
$(MAKE) prefix=$(CURDIR)/debian/$(package)/usr install

common-configure-arch::
./configure --prefix=/usr

common-build-arch::
$(MAKE) CC="$(CC)" CFLAGS="$(CFLAGS)"

DEB_INSTALL_DOCS_ALL := NEWS
DEB_INSTALL_CHANGELOGS_ALL := ChangeLog

えは以下のようないました

  1. /usr/share/cdbs/1/rules/debhelper.mkインクルする
  2. debhelper コマンドをすべてオプシしなおす
  3. コロンからコロンする
  4. 名をえる

以下でこれらをしくします

5.9.1 /usr/share/cdbs/1/rules/debhelper.mkインクルする

debhelper むには/usr/share/cdbs/1/rules/debhelper.mkインクルする必要があり ます

5.9.2 debhelper コマンドをすべてオプシしなおす

debhelper コマンドオプシがついていないものについてはしてかまいませんするdebhelper されています

オプシがついているそのしなおす必要がありますCDBS debhelper では debhelper コマンドオプシする使するようになています ます

DEB_INSTALL_DOCS_< バイナリパ>
< バイナリパ> インストしたいドキメント リストしますされると適切タイミングdh_installdocs -p < バイナリパ > < >されます
DEB_INSTALL_DOCS_ALL
すべてのバイナリパインストしたいドキメントリストします されると適切タイミングdh_installdocs -A < >されます
5.9.3 コロンからコロンする

CDBS 使するコロン使する必要がありますこれはモジ コロンすることで多重できるという GNU Make makefile 能を使していためです以下 ストのようにコロンされたされますがコロンすると両方され ます

noritada[10:22]%  cat Makefile
hoge:
        @echo foo

hoge:
@echo bar
noritada[10:22]%  make
Makefile:5:  :   ‘hoge’  へのコマンドえます
Makefile:2:  :   ‘hoge’  へのコマンド無視されます
bar
noritada[10:22]%  cat Makefile
hoge::
@echo foo

hoge::
@echo bar
noritada[10:22]%  make
foo
bar
5.9.4 名をえる

CDBS debhelper *4 binary build-archbuild-indep などのきな流れを表す複数分割 多重いて適切タイミングできるようにしています ます

common-configure-arch
configure スクリプトのようなものをいてビルドするのに使され ますこれはキテクチ存のバイナリパするものです
common-configure-indep
configure スクリプトのようなものをいてビルドするのに使 れますこれはキテクチ存のバイナリパするものです
common-build-arch
Makefile all のようなものをいてソフトウビルドするのに使されます
install/< バイナリパ>
Makefile install のようなものをいてインストうのに 使されます

5.10 ここまでのまとめ

ビルド方法debian/rules 概観したdebian/rules をより より分かりやすく方法めてdebhelper CDBS てきました分かりやすく ことはメンテナンスのしやすさにがるのでできるだけ debian/rules シンプルつことをおめし ま す

5.11 いた発元スコ

これまでは debian レクトリ以下のみをいじてきましたが最後発元しているスコえる 方法しますdebian/rules についてはメンテナンスのしやすさをしましたがそれは発元している スコえるにもてはまります

Debian していると発元スコえたくなることがよくあります由は です

こんなときに発元スコえる単な方法debian レクトリ側のスコ直接 いじることですネイテでない Debian スパ.tar.gz イル.diff.gz イル.dsc イルから のでスコえればそれは発元スコからの分として.diff.gz イルまれ ます

しかしこの直な方法にはもちろんきながあります

そこで発元スコ直接えることはせずdpatch quilt いて味的なま とまりのある単位としてすることが推奨されています単にまとめると以下のような方法 です

ここでは単にその使ていきます

5.11.1

dpatch quilt するdebian/patches レクトリとして使しますdpatch debian/patches/00list quilt debian/patches/series がそれぞれリストとなており debian/patches まれている連のこのチリストされている適用されていき ます

dpatch 使している kazehakase debian/patches :

noritada[16:39]%  ls debian/patches/*
debian/patches/00list
debian/patches/05_add_missing.dpatch
debian/patches/20_user_agent_tag.dpatch
debian/patches/30_bookmarkbar_DSA.dpatch
debian/patches/50_passwordmgr.dpatch
debian/patches/60_fix_ftbfs.dpatch
debian/patches/70_enable_gtk_deprecated.dpatch
debian/patches/80_NSIBADCERTLISTNER.dpatch
noritada[16:39]%  cat debian/patches/00list
20_user_agent_tag
30_bookmarkbar_DSA
50_passwordmgr

quilt 使している skksearch debian/patches :

noritada[16:52]%  ls debian/patches/*
debian/patches/clean-build-errors-and-warnings.diff
debian/patches/conf-file.diff
debian/patches/db4.3.diff
debian/patches/dic-bufsize.diff
debian/patches/plain-search.diff
debian/patches/series
noritada[16:52]%  cat debian/patches/series
conf-file.diff
db4.3.diff
dic-bufsize.diff
plain-search.diff
clean-build-errors-and-warnings.diff
5.11.2

てるにはdpatch dpatch apply quilt quilt push 使してくださいすにはdpatch dpatch deapply quilt quilt pop 使してください

たなするにはまずをどこにむかめてくださいdpatch において < ある> のようにいます

$ dpatch-edit-patch patch <> <ある>
$ editor <あるイル> (めるえます)
$ exit 0

quilt において同様のようにします

$ quilt push <ある> (<ある>ているquilt pop <ある>になります)
$ quilt new <>
$ quilt add <あるイル> (したするadd しておく必要があります)
$ editor <あるイル> (めるえます)
$ quilt refresh

えるためにエデ使quilt edit < あるイル >すればquilt add < ある >せずにすることも能です

5.11.3 ビルド適切

debian/patches れておいたところでスパビルドするときにはしたにしてお バ イ ナ リ パ ビ ル ド す る と き に は て た に し て お か な け れ ば 味 が あ り ま せ ん こ れ は debian/rules する存関適切することでできます以下ではについてdebian/rules します

まずdpatch についてですdebhelper 使している
/usr/share/doc/dpatch/examples/rules/rules.new.dh.gzにしてください

build: build-stamp
build-stamp: patch
dh_testdir
#  ここでソフトウビルドする
touch build-stamp

clean: clean1 unpatch
clean1:
dh_testdir
dh_testroot
dh_clean -k
#  ここでをする

patch: patch-stamp
patch-stamp:
dpatch apply-all
dpatch cat-all >patch-stamp
touch patch-stamp

unpatch:
dpatch deapply-all
rm -rf patch-stamp debian/patched

CDBS 利用しているCDBS ドキメントにあるとおり以下のようなえるだけでかまいませんただし autotools.mk インクルしているdpatch.mk インクルするのはそれよりもろにしてくだ さい

include /usr/share/cdbs/1/rules/dpatch.mk

quilt についてもCDBS 利用しているCDBS ドキメントにあるとおり以下のようなえるだけでかま いません

include /usr/share/cdbs/1/rules/patchsys-quilt.mk

_____________________________________________________________________________________________________________________________

近況今後 Debian 長いこと使われてきたdpatch についてはdh_make1ほど0.45 --dpatchオプシめましたこれまではへのとなるdh_makeによるサポがなか たためジメンテナみで使するものという雰囲があたようにいますが 発元スコいじらないという潮がくなるのだとしたらしいこと です

quilt についてはマイナでしたがxorg する Debian X Strike Force glibc する Debian GNU Libc Maintainers など評判がられ透してきてい るようですまた直観的なザインタフのためか初心からの評判もよい ようでdebian-mentors リングリストなどでもしばしばているのをけますDebian でもなところで使えるだとうので今後認知度まることをしてい ます

さてこのようなですが的にはスパそのものにまれてい くことがされますこれまではオリジナルからの分を.diff.gz イルにすべてんでいました これはオリジナルからの分かりやすくするというからは不便でした するためdpkg 1.14.18 ではたなスパ3.0 (quilt)サポ されましたlenny リリからデフルトかつ推奨されるスパになる予定 です

3.0 (quilt)ではスパ以下イルからります

  • .orig.tar.< 張子 > イル
  • .debian.tar.< 張子 > イル
  • .orig-< 部品 >.tar.< 張子 > イル(任意)

すべきはこれらの展開方法です

  1. .orig.tar.< 張子 > イル展開される
  2. < 部品 > サブデレクトリ.orig-< 部品 >.tar.< 張子 > イル展開される< 部品 > サブ レクトリにあるされる
  3. プレベルデレクトリ.debian.tar.< 張子 > イル展開される.debian.tar.< 張子 > イルには debian レクトリまれていなければならないdebian レクトリにあるはま される
  4. debian/patches/debian.series または debian/patches/series リストまれているがすべて される

つまりdebian レクトリ以下+ 発元スコするからるこれまでの.diff.gz イル されスコするのかたちでしかできなくなりますこれはメンテナンスめる 味できなでし

41 エリア Debian 2008 6
____________________________________________________________________________________________