equivs を使う方法
必要なパッケージをインストール
# aptitude install equivs
debhelper の参照する環境変数を設定。これらは control や changelog で利用される。debian のPackages.gz ファイルを見ると、多くの人はファーストネーム、ファミリーネームの順番。基本的には","を使っていない。
$ export DEBFULLNAME="Ryuunosuke AYANOKOUZI" $ export DEBEMAIL="i38w7i3@yahoo.co.jp"
controlファイルを作成
$ equivs-control hoge-control $ cat hoge-control ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.6.2 Package: <package name; defaults to equivs-dummy> # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph
最低 Package 部分を書き換える。
$ sed -i -e 's/Package:.*/Package: hoge/' hoge-control $ cat ns-control ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.6.2 Package: hoge # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph </pre> <p>controlファイルを元にビルドする。適当なファイルが出来上がる。</p> <pre> $ equivs-build hoge-control dh_testdir dh_testroot dh_clean -k dh_clean: dh_clean -k is deprecated; use dh_prep instead dh_clean: Compatibility levels before 5 are deprecated. dh_testdir dh_testroot dh_install dh_install: Compatibility levels before 5 are deprecated. dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated. dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated. dh_compress dh_compress: Compatibility levels before 5 are deprecated. dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated. dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated. dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated. dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated. dh_builddeb dh_builddeb: Compatibility levels before 5 are deprecated. dpkg-deb: building package `hoge' in `../hoge_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above!
パッケージの内容は以下のような感じ。
$ dpkg-deb -I hoge_1.0_all.deb new debian package, version 2.0. size 2062 bytes: control archive= 477 bytes. 263 bytes, 11 lines control 196 bytes, 3 lines md5sums Package: hoge Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 36 Section: misc Priority: optional Description: <short description; defaults to some wise words> long description and info . second paragraph $ dpkg-deb -c hoge_1.0_all.deb drwxr-xr-x root/root 0 2012-11-14 12:51 ./ drwxr-xr-x root/root 0 2012-11-14 12:51 ./usr/ drwxr-xr-x root/root 0 2012-11-14 12:51 ./usr/share/ drwxr-xr-x root/root 0 2012-11-14 12:51 ./usr/share/doc/ drwxr-xr-x root/root 0 2012-11-14 12:51 ./usr/share/doc/hoge/ -rw-r--r-- root/root 148 2012-11-14 12:51 ./usr/share/doc/hoge/changelog.gz -rw-r--r-- root/root 742 2012-11-14 12:51 ./usr/share/doc/hoge/README.Debian -rw-r--r-- root/root 936 2012-11-14 12:51 ./usr/share/doc/hoge/copyright
postinst 等のスクリプトをメタパッケージに含めたい場合がある。たとえば以下のようなファイルを含めたい場合、以下のようにする。
$ cat hoge-postinst #!/bin/sh exit 0 $ echo "File: postinst" >> hoge-control $ sed -e 's/^$/./' -e 's/^/ /' hoge-postinst >> hoge-control
再度ビルド作業を行う。
$ equivs-build hoge-control Use of uninitialized value $m in oct at /usr/bin/equivs-build line 72. dh_testdir dh_testroot dh_clean -k dh_clean: dh_clean -k is deprecated; use dh_prep instead dh_clean: Compatibility levels before 5 are deprecated. dh_testdir dh_testroot dh_install dh_install: Compatibility levels before 5 are deprecated. dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated. dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated. dh_compress dh_compress: Compatibility levels before 5 are deprecated. dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated. dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated. dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated. dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated. dh_builddeb dh_builddeb: Compatibility levels before 5 are deprecated. dpkg-deb: building package `hoge' in `../hoge_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above! $ dpkg-deb -I hoge_1.0_all.deb new debian package, version 2.0. size 2110 bytes: control archive= 515 bytes. 263 bytes, 11 lines control 196 bytes, 3 lines md5sums 18 bytes, 3 lines * postinst #!/bin/sh Package: hoge Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 40 Section: misc Priority: optional Description: <short description; defaults to some wise words> long description and info . second paragraph $ dpkg-deb -c hoge_1.0_all.deb drwxr-xr-x root/root 0 2012-11-14 13:12 ./ drwxr-xr-x root/root 0 2012-11-14 13:12 ./usr/ drwxr-xr-x root/root 0 2012-11-14 13:12 ./usr/share/ drwxr-xr-x root/root 0 2012-11-14 13:12 ./usr/share/doc/ drwxr-xr-x root/root 0 2012-11-14 13:12 ./usr/share/doc/hoge/ -rw-r--r-- root/root 148 2012-11-14 13:12 ./usr/share/doc/hoge/changelog.gz -rw-r--r-- root/root 742 2012-11-14 13:12 ./usr/share/doc/hoge/README.Debian -rw-r--r-- root/root 936 2012-11-14 13:12 ./usr/share/doc/hoge/copyright
また、適当なテキストファイルを含めることも可能。
$ cat hoge-control ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.6.2 Package: hoge # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph File: postinst #!/bin/sh . exit 0 File: /etc/skel/.hogerc #!/bin/sh . exit 0 $ equivs-build hoge-control Use of uninitialized value $m in oct at /usr/bin/equivs-build line 72. Use of uninitialized value $m in oct at /usr/bin/equivs-build line 72. dh_testdir dh_testroot dh_clean -k dh_clean: dh_clean -k is deprecated; use dh_prep instead dh_clean: Compatibility levels before 5 are deprecated. dh_testdir dh_testroot dh_install dh_install: Compatibility levels before 5 are deprecated. dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated. dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated. dh_compress dh_compress: Compatibility levels before 5 are deprecated. dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated. dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated. dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated. dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated. dh_builddeb dh_builddeb: Compatibility levels before 5 are deprecated. dpkg-deb: building package `hoge' in `../hoge_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above! $ dpkg-deb -I hoge_1.0_all.deb new debian package, version 2.0. size 2204 bytes: control archive= 551 bytes. 18 bytes, 1 lines conffiles 263 bytes, 11 lines control 196 bytes, 3 lines md5sums 18 bytes, 3 lines * postinst #!/bin/sh Package: hoge Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 56 Section: misc Priority: optional Description: <short description; defaults to some wise words> long description and info . second paragraph $ dpkg-deb -c hoge_1.0_all.deb drwxr-xr-x root/root 0 2012-11-14 13:35 ./ drwxr-xr-x root/root 0 2012-11-14 13:35 ./usr/ drwxr-xr-x root/root 0 2012-11-14 13:35 ./usr/share/ drwxr-xr-x root/root 0 2012-11-14 13:35 ./usr/share/doc/ drwxr-xr-x root/root 0 2012-11-14 13:35 ./usr/share/doc/hoge/ -rw-r--r-- root/root 148 2012-11-14 13:35 ./usr/share/doc/hoge/changelog.gz -rw-r--r-- root/root 742 2012-11-14 13:35 ./usr/share/doc/hoge/README.Debian -rw-r--r-- root/root 936 2012-11-14 13:35 ./usr/share/doc/hoge/copyright drwxr-xr-x root/root 0 2012-11-14 13:35 ./etc/ drwxr-xr-x root/root 0 2012-11-14 13:35 ./etc/skel/ -rw-r--r-- root/root 18 2012-11-14 13:35 ./etc/skel/.hogerc
equivs-build が "Use of uninitialized value $m in oct at /usr/bin/equivs-build line 72." と言っているのは、パーミッションの設定が書かれていないから。パーミッションの設定を control ファイルに書き込むことでこのエラーは消える。equivs-build が中間ファイルを作っている時点ではこのパーミッションが反映されるが、debhelper が適当なものに変えてしまうため、実際 deb パッケージに収められるパーミッションに反映されるとは限らない。たとえば以下の例では .hogerd と hoge.txt のパーミッションを666にしているが、実際の deb パッケージに収められるパーミッションは 644 に変わっている。
$ cat hoge-control ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.6.2 Package: hoge # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph File: postinst 0777 #!/bin/sh . exit 0 File: /etc/skel/.hogerc 0666 #!/bin/sh . exit 0 File: /etc/skel/hoge.txt 0666 #!/bin/sh . exit 0 $ equivs-build hoge-control dh_testdir dh_testroot dh_clean -k dh_clean: dh_clean -k is deprecated; use dh_prep instead dh_clean: Compatibility levels before 5 are deprecated. dh_testdir dh_testroot dh_install dh_install: Compatibility levels before 5 are deprecated. dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated. dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated. dh_compress dh_compress: Compatibility levels before 5 are deprecated. dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated. dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated. dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated. dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated. dh_builddeb dh_builddeb: Compatibility levels before 5 are deprecated. dpkg-deb: building package `hoge' in `../hoge_1.0_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above! $ dpkg-deb -I hoge_1.0_all.deb new debian package, version 2.0. size 2270 bytes: control archive= 555 bytes. 37 bytes, 2 lines conffiles 263 bytes, 11 lines control 196 bytes, 3 lines md5sums 18 bytes, 3 lines * postinst #!/bin/sh Package: hoge Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 60 Section: misc Priority: optional Description: <short description; defaults to some wise words> long description and info . second paragraph $ dpkg-deb -c hoge_1.0_all.deb drwxr-xr-x root/root 0 2012-11-14 14:47 ./ drwxr-xr-x root/root 0 2012-11-14 14:47 ./usr/ drwxr-xr-x root/root 0 2012-11-14 14:47 ./usr/share/ drwxr-xr-x root/root 0 2012-11-14 14:47 ./usr/share/doc/ drwxr-xr-x root/root 0 2012-11-14 14:47 ./usr/share/doc/hoge/ -rw-r--r-- root/root 148 2012-11-14 14:47 ./usr/share/doc/hoge/changelog.gz -rw-r--r-- root/root 742 2012-11-14 14:47 ./usr/share/doc/hoge/README.Debian -rw-r--r-- root/root 936 2012-11-14 14:47 ./usr/share/doc/hoge/copyright drwxr-xr-x root/root 0 2012-11-14 14:47 ./etc/ drwxr-xr-x root/root 0 2012-11-14 14:47 ./etc/skel/ -rw-r--r-- root/root 18 2012-11-14 14:47 ./etc/skel/.hogerc -rw-r--r-- root/root 18 2012-11-14 14:47 ./etc/skel/hoge.txt
Changelog、Readme、Copyright についてはファイルパスを指定して外部からファイルを提供できる。以下は changelog を指定した例。
$ cat changelog hoge (1.1) unstable; urgency=low * 2nd version -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Wed, 14 Nov 2012 15:27:47 +0900 hoge (1.0) unstable; urgency=low * First version -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Wed, 14 Nov 2012 14:38:48 +0900 $ cat hoge-control ### Commented entries have reasonable defaults. ### Uncomment to edit them. Section: misc Priority: optional # Homepage: <enter URL here; no default> Standards-Version: 3.6.2 Package: hoge # Version: <enter version here; defaults to 1.0> # Maintainer: Your Name <yourname@example.com> # Pre-Depends: <comma-separated list of packages> # Depends: <comma-separated list of packages> # Recommends: <comma-separated list of packages> # Suggests: <comma-separated list of packages> # Provides: <comma-separated list of packages> # Replaces: <comma-separated list of packages> # Architecture: all # Copyright: <copyright file; defaults to GPL2> # Changelog: <changelog file; defaults to a generic changelog> # Readme: <README.Debian file; defaults to a generic one> # Extra-Files: <comma-separated list of additional files for the doc directory> # Files: <pair of space-separated paths; First is file to include, second is destination> # <more pairs, if there's more than one file to include. Notice the starting space> Description: <short description; defaults to some wise words> long description and info . second paragraph File: postinst 0777 #!/bin/sh . exit 0 File: /etc/skel/.hogerc 0666 #!/bin/sh . exit 0 File: /etc/skel/hoge.txt 0666 #!/bin/sh . exit 0 $ equivs-build hoge-control dh_testdir dh_testroot dh_clean -k dh_clean: dh_clean -k is deprecated; use dh_prep instead dh_clean: Compatibility levels before 5 are deprecated. dh_testdir dh_testroot dh_install dh_install: Compatibility levels before 5 are deprecated. dh_installdocs dh_installdocs: Compatibility levels before 5 are deprecated. dh_installchangelogs dh_installchangelogs: Compatibility levels before 5 are deprecated. dh_compress dh_compress: Compatibility levels before 5 are deprecated. dh_fixperms dh_fixperms: Compatibility levels before 5 are deprecated. dh_installdeb dh_installdeb: Compatibility levels before 5 are deprecated. dh_gencontrol dh_gencontrol: Compatibility levels before 5 are deprecated. dh_md5sums dh_md5sums: Compatibility levels before 5 are deprecated. dh_builddeb dh_builddeb: Compatibility levels before 5 are deprecated. dpkg-deb: building package `hoge' in `../hoge_1.1_all.deb'. The package has been created. Attention, the package has been created in the current directory, not in ".." as indicated by the message above! $ dpkg-deb -x hoge_1.1_all.deb hoge_1.1_all $ zcat hoge_1.1_all/usr/share/doc/hoge/changelog.gz hoge (1.1) unstable; urgency=low * 2nd version -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Wed, 14 Nov 2012 15:27:47 +0900 hoge (1.0) unstable; urgency=low * First version -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Wed, 14 Nov 2012 14:38:48 +0900
debhelper を使う方法
今回はアーキテクチャに依存しないメタパッケージを作る。まずはパッケージ名とバージョンを含めたディレクトリを作り、そのディレクトリに移動して、パッケージの雛形を作成する。
$ mkdir hoge-dh-1.0 $ cd hoge-dh-1.0/ $ dh_make --single --native --createorig --packagename hoge-dh Maintainer name : Ryuunosuke AYANOKOUZI Email-Address : i38w7i3@yahoo.co.jp Date : Thu, 15 Nov 2012 05:26:06 +0900 Package Name : hoge-dh Version : 1.0 License : gpl3 Using dpatch : no Type of Package : Single Hit <enter> to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the hoge-dh Makefiles install into $DESTDIR and not in / .
debian ディレクトリにあるexやEXで終わるファイルは例。後々メンテナンススクリプト等の雛形に使える。存在してもビルド中に使われることはない。必要なファイル以外を削除して、controlファイルとcopyrightファイルを編集。
$ rm debian/*.ex debian/*.EX debian/README.Debian debian/README.source debian/README debian/docs $ sed -i -e 's#^Section: .*#Section: localization#' \ -e 's#^Architecture: .*#Architecture: all#' \ -e 's#^Depends: .*#Depends: ${misc:Depends}#' \ -e 's#^Standards-Version: .*#Standards-Version: 3.9.1#' \ -e 's#^Homepage: .*#Homepage: http://example.com/hoge#' \ -e 's#^Description: .*#Description: test metapackage#' \ -e 's#^ <insert .*# long discription for test metapackage#' \ debian/control $ sed -i -e 's#<url://example.com>#http://example.com/hoge#' \ -e '/<likewise for another author>/d' \ -e "s#<put author's name and email here>#Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp>#" \ -e 's#<Copyright (C) YYYY Firstname Lastname>#Copyright (C) 2012 Ryuunosuke AYANOKOUZI#' \ -e '/# Please also look if there are files or directories which have a/d' \ -e '/# different copyright\/license attached and list them here\./d' \ debian/copyright
ビルド。
$ debuild -us -uc dpkg-buildpackage -rfakeroot -D -us -uc dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: source package hoge-dh dpkg-buildpackage: source version 1.0 dpkg-buildpackage: source changed by Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> dpkg-source --before-build hoge-dh-1.0 dpkg-buildpackage: host architecture amd64 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b hoge-dh-1.0 dpkg-source: info: using source format `3.0 (native)' dpkg-source: info: building hoge-dh in hoge-dh_1.0.tar.gz dpkg-source: info: building hoge-dh in hoge-dh_1.0.dsc debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_installdirs dh_auto_install dh_install dh_installdocs dh_installchangelogs dh_installexamples dh_installman dh_installcatalogs dh_installcron dh_installdebconf dh_installemacsen dh_installifupdown dh_installinfo dh_pysupport dh_installinit dh_installmenu dh_installmime dh_installmodules dh_installlogcheck dh_installlogrotate dh_installpam dh_installppp dh_installudev dh_installwm dh_installxfonts dh_bugfiles dh_lintian dh_gconf dh_icons dh_perl dh_usrlocal dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `hoge-dh' in `../hoge-dh_1.0_all.deb'. dpkg-genchanges >../hoge-dh_1.0_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build hoge-dh-1.0 dpkg-buildpackage: full upload; Debian-native package (full source is included) Now running lintian... Finished running lintian.
作成されたパッケージは親ディレクトリにある。
$ ls -la ../ total 32 drwxr-xr-x 3 **** **** 4096 2012-11-15 05:26 . drwxr-xr-x 10 **** **** 4096 2012-11-15 03:01 .. drwxr-xr-x 3 **** **** 4096 2012-11-15 05:26 hoge-dh-1.0 -rw-r--r-- 1 **** **** 1898 2012-11-15 05:26 hoge-dh_1.0_all.deb -rw-r--r-- 1 **** **** 2157 2012-11-15 05:27 hoge-dh_1.0_amd64.build -rw-r--r-- 1 **** **** 1119 2012-11-15 05:26 hoge-dh_1.0_amd64.changes -rw-r--r-- 1 **** **** 495 2012-11-15 05:26 hoge-dh_1.0.dsc -rw-r--r-- 1 **** **** 1618 2012-11-15 05:26 hoge-dh_1.0.tar.gz $ dpkg-deb -I ../hoge-dh_1.0_all.deb new debian package, version 2.0. size 1898 bytes: control archive= 436 bytes. 264 bytes, 10 lines control 135 bytes, 2 lines md5sums Package: hoge-dh Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 32 Section: localization Priority: extra Homepage: http://example.com/hoge Description: test metapackage long discription for test metapackage $ dpkg-deb -c ../hoge-dh_1.0_all.deb drwxr-xr-x root/root 0 2012-11-15 05:26 ./ drwxr-xr-x root/root 0 2012-11-15 05:26 ./usr/ drwxr-xr-x root/root 0 2012-11-15 05:26 ./usr/share/ drwxr-xr-x root/root 0 2012-11-15 05:26 ./usr/share/doc/ drwxr-xr-x root/root 0 2012-11-15 05:26 ./usr/share/doc/hoge-dh/ -rw-r--r-- root/root 152 2012-11-15 05:26 ./usr/share/doc/hoge-dh/changelog.gz -rw-r--r-- root/root 1622 2012-11-15 05:26 ./usr/share/doc/hoge-dh/copyright
changelogの編集は dch 経由で行う。バージョンを上げるには -i オプション (バージョンの増加は適切に(一つ前のバージョンに Debian リビジョンがあれば、それを、なければアップストリームバージョンを)行われる。)。明示する場合は -v オプション。最後の引数でコメントを書ける。これがない場合はエディタ起動。
$ cat debian/changelog hoge-dh (1.0) unstable; urgency=low * Initial Release. -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Thu, 15 Nov 2012 05:26:06 +0900 $ dch -i 'some comments for v1.1 here' dch warning: your current directory has been renamed to: ../hoge-dh-1.1 dch warning: no orig tarball found for the new version. $ cat debian/changelog hoge-dh (1.1) unstable; urgency=low * some comments for v1.1 here -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Fri, 16 Nov 2012 08:14:35 +0900 hoge-dh (1.0) unstable; urgency=low * Initial Release. -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Thu, 15 Nov 2012 05:26:06 +0900 $ dch 'another comments for v1.1 here' $ cat debian/changelog hoge-dh (1.1) unstable; urgency=low * some comments for v1.1 here * another comments for v1.1 here -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Fri, 16 Nov 2012 08:14:49 +0900 hoge-dh (1.0) unstable; urgency=low * Initial Release. -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Thu, 15 Nov 2012 05:26:06 +0900 $ dch -v 2.0 'some comments for v2.0 here' dch warning: your current directory has been renamed to: ../hoge-dh-2.0 dch warning: no orig tarball found for the new version. $ cat debian/changelog hoge-dh (2.0) unstable; urgency=low * some comments for v2.0 here -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Fri, 16 Nov 2012 08:14:59 +0900 hoge-dh (1.1) unstable; urgency=low * some comments for v1.1 here * another comments for v1.1 here -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Fri, 16 Nov 2012 08:14:49 +0900 hoge-dh (1.0) unstable; urgency=low * Initial Release. -- Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Thu, 15 Nov 2012 05:26:06 +0900 $ cd ../hoge-dh-2.0/ $ debuild -us -uc dpkg-buildpackage -rfakeroot -D -us -uc dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: source package hoge-dh dpkg-buildpackage: source version 2.0 dpkg-buildpackage: source changed by Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> dpkg-source --before-build hoge-dh-2.0 dpkg-buildpackage: host architecture amd64 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b hoge-dh-2.0 dpkg-source: info: using source format `3.0 (native)' dpkg-source: info: building hoge-dh in hoge-dh_2.0.tar.gz dpkg-source: info: building hoge-dh in hoge-dh_2.0.dsc debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_installdirs dh_auto_install dh_install dh_installdocs dh_installchangelogs dh_installexamples dh_installman dh_installcatalogs dh_installcron dh_installdebconf dh_installemacsen dh_installifupdown dh_installinfo dh_pysupport dh_installinit dh_installmenu dh_installmime dh_installmodules dh_installlogcheck dh_installlogrotate dh_installpam dh_installppp dh_installudev dh_installwm dh_installxfonts dh_bugfiles dh_lintian dh_gconf dh_icons dh_perl dh_usrlocal dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `hoge-dh' in `../hoge-dh_2.0_all.deb'. dpkg-genchanges >../hoge-dh_2.0_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build hoge-dh-2.0 dpkg-buildpackage: full upload; Debian-native package (full source is included) Now running lintian... Finished running lintian.
debian ディレクトリの中にメンテナンススクリプトを配置すれば、ビルド後に適切なスクリプトが含まれるようになる。またdh_installdeb(1) によればメンテナスクリプトを追加するには debian ディレクトリの中に PACKAGE.postinst 等のファイルを作成する。PACKAGE はパッケージの名前に置き換える。ここでは hoge-dh。
$ mv debian/postinst{.ex,} $ debuild -us -uc dpkg-buildpackage -rfakeroot -D -us -uc dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: source package hoge-dh dpkg-buildpackage: source version 1.0 dpkg-buildpackage: source changed by Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> dpkg-source --before-build hoge-dh-1.0 dpkg-buildpackage: host architecture amd64 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b hoge-dh-1.0 dpkg-source: info: using source format `3.0 (native)' dpkg-source: info: building hoge-dh in hoge-dh_1.0.tar.gz dpkg-source: info: building hoge-dh in hoge-dh_1.0.dsc debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_installdirs dh_auto_install dh_install dh_installdocs dh_installchangelogs dh_installexamples dh_installman dh_installcatalogs dh_installcron dh_installdebconf dh_installemacsen dh_installifupdown dh_installinfo dh_pysupport dh_installinit dh_installmenu dh_installmime dh_installmodules dh_installlogcheck dh_installlogrotate dh_installpam dh_installppp dh_installudev dh_installwm dh_installxfonts dh_bugfiles dh_lintian dh_gconf dh_icons dh_perl dh_usrlocal dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dh_md5sums dh_builddeb dpkg-deb: building package `hoge-dh' in `../hoge-dh_1.0_all.deb'. dpkg-genchanges >../hoge-dh_1.0_amd64.changes dpkg-genchanges: including full source code in upload dpkg-source --after-build hoge-dh-1.0 dpkg-buildpackage: full upload; Debian-native package (full source is included) Now running lintian... W: hoge-dh source: dh-make-template-in-source debian/hoge-dh.default.ex W: hoge-dh source: dh-make-template-in-source debian/postrm.ex W: hoge-dh source: dh-make-template-in-source debian/hoge-dh.doc-base.EX W: hoge-dh source: dh-make-template-in-source debian/manpage.xml.ex W: hoge-dh source: dh-make-template-in-source debian/manpage.sgml.ex W: hoge-dh source: dh-make-template-in-source debian/menu.ex W: hoge-dh source: dh-make-template-in-source debian/prerm.ex W: hoge-dh source: dh-make-template-in-source debian/emacsen-remove.ex W: hoge-dh source: dh-make-template-in-source debian/hoge-dh.cron.d.ex W: hoge-dh source: dh-make-template-in-source debian/preinst.ex W: hoge-dh source: dh-make-template-in-source debian/manpage.1.ex W: hoge-dh source: dh-make-template-in-source debian/emacsen-startup.ex W: hoge-dh source: dh-make-template-in-source debian/watch.ex W: hoge-dh source: dh-make-template-in-source debian/init.d.ex W: hoge-dh source: dh-make-template-in-source debian/emacsen-install.ex W: hoge-dh: readme-debian-contains-debmake-template W: hoge-dh: maintainer-script-empty postinst Finished running lintian. $ dpkg-deb -I ../hoge-dh_1.0_all.deb new debian package, version 2.0. size 2478 bytes: control archive= 915 bytes. 264 bytes, 10 lines control 205 bytes, 3 lines md5sums 946 bytes, 39 lines * postinst #!/bin/sh Package: hoge-dh Version: 1.0 Architecture: all Maintainer: Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp> Installed-Size: 40 Section: localization Priority: extra Homepage: http://example.com/hoge Description: test metapackage long discription for test metapackage </pre> <pre> $ mkdir hoge-dh-1.0.0 $ tar oczf hoge-dh-1.0.0.tar.gz hoge-dh-1.0.0 $ tar -cvz --owner=root --group=root -f hoge-dh-1.0.0.tar.gz hoge-dh-1.0.0 $ tar tvzf hoge-dh-1.0.0.tar.gz $ cd hoge-dh-1.0.0/ $ dh_make --single --createorig -c gpl --packagename hoge-dh -f ../hoge-dh-1.0.0.tar.gz $ mv debian/postinst{.ex,} $ sed -i -e 's#^Section: .*#Section: localization#' \ -e 's#^Architecture: .*#Architecture: all#' \ -e 's#^Depends: .*#Depends: ${misc:Depends}#' \ -e 's#^Standards-Version: .*#Standards-Version: 3.9.1#' \ -e 's#^Homepage: .*#Homepage: http://example.com/hoge#' \ -e 's#^Description: .*#Description: test metapackage#' \ -e 's#^ <insert .*# long discription for test metapackage#' \ debian/control $ sed -i -e 's#<url://example.com>#http://example.com/hoge#' \ -e '/<likewise for another author>/d' \ -e "s#<put author's name and email here>#Ryuunosuke AYANOKOUZI <i38w7i3@yahoo.co.jp>#" \ -e 's#<Copyright (C) YYYY Firstname Lastname>#Copyright (C) 2012 Ryuunosuke AYANOKOUZI#' \ -e '/# Please also look if there are files or directories which have a/d' \ -e '/# different copyright\/license attached and list them here\./d' \ debian/copyright $ debuild -us -uc $ dpkg-deb -c ../hoge-dh_1.0.0-1_all.deb $ dpkg-deb -I ../hoge-dh_1.0.0-1_all.deb
パッケージを公開する場合は署名が必要。基本的には上に書いた DEBFULLNAME や DEBEMAIL 環境変数から鍵が選ばれるが、DEBSIGN_KEYID を設定することで利用する鍵を指定することもできる。これは設定を /etc/devscripts.conf や ~/.devscripts に書き込むことで行う。コマンドラインで直接指定するには debuild -k を使う。dsc と changes ファイルに対してインライン署名が行われる。書名の確認は gpg --verify を使って行う。
$ export DEBFULLNAME="Ryuunosuke AYANOKOUZI" $ export DEBEMAIL="i38w7i3@yahoo.co.jp" $ cat <<EOF >> ~/.devscripts DEBSIGN_KEYID="XXXXXXXX" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides" EOF $ debuild (snip) Now signing changes and any dsc files... signfile hoge-dh_1.0.0-4~rc4.dsc XXXXXXXX You need a passphrase to unlock the secret key for user: "AYANOKOUZI, Ryuunosuke" 4096-bit RSA key, ID XXXXXXXX, created YYYY-MM-DD signfile hoge-dh_1.0.0-4~rc4_amd64.changes XXXXXXXX You need a passphrase to unlock the secret key for user: "AYANOKOUZI, Ryuunosuke" 4096-bit RSA key, ID XXXXXXXX, created YYYY-MM-DD Successfully signed dsc and changes files $ gpg --verify ../hoge-dh_1.0.0-4~rc4.dsc gpg: Signature made WWW DD MMM YYYY 02:07:03 PM JST using RSA key ID XXXXXXXX gpg: Good signature from "AYANOKOUZI, Ryuunosuke" $ gpg --verify ../hoge-dh_1.0.0-4~rc4_amd64.changes gpg: Signature made WWW DD MMM YYYY 02:07:20 PM JST using RSA key ID XXXXXXXX gpg: Good signature from "AYANOKOUZI, Ryuunosuke"
パッケージの署名とaptサーバのdists/hoge/Releaseファイルの署名は別物。
新しいソースを使う場合にはdch でアップストリームバージョンをあげる。カレントディレクトリの名前が変更されて、親ディレクトリにorigが無いと言われる。ディレクトリを移動して、親ディレクトリに3.0.0用のorigファイルを作成する。
$ dch -v 3.0.0-1~rc1 'new source' dch warning: your current directory has been renamed to: ../hoge-dh-3.0.0 dch warning: no orig tarball found for the new version. $ cd ../hoge-dh-3.0.0/ $ mv ../hoge-dh_2.0.0.orig.tar.gz ../hoge-dh_3.0.0.orig.tar.gz