2009年11月26日木曜日

【入門DP】4.1 パッケージ作成のための基礎知識

教本で知識を確認しつつ、その知識をつかって、emacs22のパッケージをいじってみる。その様子を掲載する。


** 4 パッケージの作成と配布
*** 4.1 パッケージ作成のための基礎知識
- Ubuntu Interpidのemacs22をサンプルとしよう。

**** apt-cache showsrc emacs22
- これによって、ダウンロード前に情報をみれる。

$ apt-cache showsrc emacs22
Package: emacs22
Binary: emacs22-common, emacs22-bin-common, emacs22, emacs22-gtk, emacs22-nox, emacs22-el, emacs
Version: 22.2-0ubuntu2
Priority: optional
Section: editors
Maintainer: Ubuntu Core Developers
Original-Maintainer: Michael W. Olson (GNU address)
Build-Depends: libncurses5-dev, texinfo, liblockfile-dev, libgif-dev, libtiff-dev, xaw3dg-dev, libpng12-dev, libjpeg62-dev, libgtk2.0-dev, dpkg-dev (>> 1.10.0), quilt (>= 0.42), lsb-release, debhelper (>= 5.0.0), libxaw7-dev, libasound2-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64]
Architecture: any
Standards-Version: 3.7.2
Format: 1.0
Directory: pool/main/e/emacs22
Files:
04ef020a8f1f98965a6b1f881800414b 1461 emacs22_22.2-0ubuntu2.dsc
d6ee586b8752351334ebf072904c4d51 38694318 emacs22_22.2.orig.tar.gz
2d264719b7d1aea7e446e73c5e68c654 26934 emacs22_22.2-0ubuntu2.diff.gz
Vcs-Bzr: http://code.launchpad.net/%7Eubuntu-elisp/emacs/ubuntu/
Checksums-Sha1:
7a371332cb8400d44e8eb31f19e432bbc93523a0 38694318 emacs22_22.2.orig.tar.gz
b6e448aa81a7bf5a04a754f3b7ed39e4923079ef 26934 emacs22_22.2-0ubuntu2.diff.gz
Checksums-Sha256:
216839e1fb38ca4f2ed0a07689fb47ee80d90845f34e0a56fe781d6aa462e367 38694318 emacs22_22.2.orig.tar.gz
5dcfd2a13f68972124174271d5c7f532954500f107c972df94364ef560f2b1a6 26934 emacs22_22.2-0ubuntu2.diff.gz

$

**** ソースのダウンロード
- '-d'をつけなければ、自動的にorig.tar.gzと
diff.gzが展開される。ここではあえて展開させない。

$ apt-get -d source emacs22
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
NOTICE: 'emacs22' packaging is maintained in the 'Bzr' version control system at:
http://code.launchpad.net/%7Eubuntu-elisp/emacs/ubuntu/
Please use:
bzr get http://code.launchpad.net/%7Eubuntu-elisp/emacs/ubuntu/
to retrieve the latest (possible unreleased) updates to the package.
38.7MB のソースアーカイブを取得する必要があります。
取得:1 http://jp.archive.ubuntu.com intrepid/main emacs22 22.2-0ubuntu2 (dsc) [1461B]
取得:2 http://jp.archive.ubuntu.com intrepid/main emacs22 22.2-0ubuntu2 (tar) [38.7MB]
取得:3 http://jp.archive.ubuntu.com intrepid/main emacs22 22.2-0ubuntu2 (diff) [26.9kB]
38.7MB を 7s で取得しました (5385kB/s)
ダウンロードオンリーモードでパッケージのダウンロードが完了しました
$ ls
emacs22_22.2-0ubuntu2.diff.gz emacs22_22.2-0ubuntu2.dsc emacs22_22.2.orig.tar.gz
$

- dscファイルの確認。

$ cat emacs22_22.2-0ubuntu2.dsc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Format: 1.0
Source: emacs22
Binary: emacs22-common, emacs22-bin-common, emacs22, emacs22-gtk, emacs22-nox, emacs22-el, emacs
Architecture: any
Version: 22.2-0ubuntu2
Maintainer: Ubuntu Core Developers
Standards-Version: 3.7.2
Vcs-Bzr: http://code.launchpad.net/%7Eubuntu-elisp/emacs/ubuntu/
Build-Depends: libncurses5-dev, texinfo, liblockfile-dev, libgif-dev, libtiff-dev, xaw3dg-dev, libpng12-dev, libjpeg62-dev, libgtk2.0-dev, dpkg-dev (>> 1.10.0), quilt (>= 0.42), lsb-release, debhelper (>= 5.0.0), libxaw7-dev, libasound2-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64]
Checksums-Sha1:
7a371332cb8400d44e8eb31f19e432bbc93523a0 38694318 emacs22_22.2.orig.tar.gz
b6e448aa81a7bf5a04a754f3b7ed39e4923079ef 26934 emacs22_22.2-0ubuntu2.diff.gz
Checksums-Sha256:
216839e1fb38ca4f2ed0a07689fb47ee80d90845f34e0a56fe781d6aa462e367 38694318 emacs22_22.2.orig.tar.gz
5dcfd2a13f68972124174271d5c7f532954500f107c972df94364ef560f2b1a6 26934 emacs22_22.2-0ubuntu2.diff.gz
Files:
d6ee586b8752351334ebf072904c4d51 38694318 emacs22_22.2.orig.tar.gz
2d264719b7d1aea7e446e73c5e68c654 26934 emacs22_22.2-0ubuntu2.diff.gz
Original-Maintainer: Michael W. Olson (GNU address)

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFIv/MoW0JvuRdL8BoRAt5eAJ9vlp/tLgrk4OKHKlqexuK5E2SKcQCdHPuB
5DPs97j8ZSQHIjDU74XphAM=
=MKWY
-----END PGP SIGNATURE-----
$

**** orig.tar.gzの中身を確認
- emacs-22.2として展開される。これはGNU配布版その
ままなのだろう。

$ tar zxf emacs22_22.2.orig.tar.gz
$ ls
emacs-22.2 emacs22_22.2-0ubuntu2.diff.gz emacs22_22.2-0ubuntu2.dsc emacs22_22.2.orig.tar.gz
$ cd emacs-22.2
$ ls
AUTHORS INSTALL configure lib-src mac nt vpath.sed
BUGS Makefile.in configure.in lisp make-dist oldXMenu
CONTRIBUTE README etc lispintro man site-lisp
COPYING config.bat info lispref mkinstalldirs src
ChangeLog config.guess install-sh lwlib move-if-change update-subdirs
FTP config.sub leim m4 msdos vms
$

**** diffファイルの中身を確認
- すべて新規ファイルの作成である。
- すべて、debian/配下のファイルである。

--- emacs22-22.2.orig/debian/emacs-bin-common.overrides.linda
+++ emacs22-22.2/debian/emacs-bin-common.overrides.linda
@@ -0,0 +1,2 @@
+Tag: no-manual-for-binary
+Data: (e|c)(tags|macsclient).emacs22
--- emacs22-22.2.orig/debian/emacsclient.desktop
+++ emacs22-22.2/debian/emacsclient.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Version=1.0
[snip]

**** dpkg-sourceで展開
- ソースパッケージの展開にはdpkg-sourceを使う。
- これまでの作業で展開したものなどは念のため削除
しておく。

$ ls
emacs22_22.2-0ubuntu2.diff.gz emacs22_22.2-0ubuntu2.dsc emacs22_22.2.orig.tar.gz
$ dpkg-source -x emacs22_22.2-0ubuntu2.dsc
gpg: 2008年09月04日 23時39分36秒 JSTにDSA鍵ID 174BF01Aで施された署名
gpg: 署名を検査できません: 公開鍵が見つかりません
dpkg-source: extracting emacs22 in emacs22-22.2
dpkg-source: info: unpacking emacs22_22.2.orig.tar.gz
dpkg-source: info: applying emacs22_22.2-0ubuntu2.diff.gz
$ ls
emacs22-22.2 emacs22_22.2-0ubuntu2.dsc
emacs22_22.2-0ubuntu2.diff.gz emacs22_22.2.orig.tar.gz
$ cd emacs22-22.2/
$ ls
AUTHORS INSTALL configure leim m4 msdos vms
BUGS Makefile.in configure.in lib-src mac nt vpath.sed
CONTRIBUTE README debian lisp make-dist oldXMenu
COPYING config.bat etc lispintro man site-lisp
ChangeLog config.guess info lispref mkinstalldirs src
FTP config.sub install-sh lwlib move-if-change update-subdirs
$

- 確かに、debian/が増えているだけである。
- orig.tar.gzを展開したときはemacs-22.2だったが、
dpkg-sourceした後は、emacs22-22.2になっている。
これは、orig.tar.gzのファイル名はdebianポリシー
にあわせるが、中身は上流のままというのがポリシー
なのだろう。それを展開時に修正しているのが、

dpkg-source: extracting emacs22 in emacs22-22.2

なのだろう。

$ tar -tvf emacs22_22.2.orig.tar.gz
drwxrwxrwx cyd/cyd 0 2008-03-26 22:55 emacs-22.2/
-rw-r--r-- cyd/cyd 92389 2008-03-26 13:55 emacs-22.2/AUTHORS
-rw-r--r-- cyd/cyd 210 2007-04-15 10:34 emacs-22.2/FTP
[snip]

**** debian/の中身
***** debian/control
- このソースツリーから生成するすべてのパッケージ
のメタデータが記載されている。

Source: emacs22
Section: editors
Priority: optional
Maintainer: Ubuntu Core Developers
XSBC-Original-Maintainer: Michael W. Olson (GNU address)
Build-Depends: libncurses5-dev, texinfo, liblockfile-dev, libgif-dev, libtiff-dev, xaw3dg-dev, libpng12-dev, libjpeg62-dev, libgtk2.0-dev, dpkg-dev (>> 1.10.0), quilt (>= 0.42), lsb-release, debhelper (>= 5.0.0), libxaw7-dev, libasound2-dev [!hurd-i386 !kfreebsd-i386 !kfreebsd-amd64]
Standards-Version: 3.7.2
XS-Vcs-Bzr: http://code.launchpad.net/%7Eubuntu-elisp/emacs/ubuntu/

Package: emacs22-common
Section: editors
Priority: optional
Architecture: all
Depends: emacsen-common (>= 1.4.10), dpkg (>= 1.9.0)
Suggests: emacs22-el
Conflicts: emacs22-el (<< ${source:Version}), w3-el, dictionaries-common (<< 0.60.0), emacs22-common-non-dfsg
Replaces: emacs22-common-non-dfsg
Description: The GNU Emacs editor's common infrastructure
GNU Emacs is the extensible self-documenting text editor.
This package contains the infrastructure common between emacs22,
emacs22-gtk, and emacs22-nox.

Package: emacs22-bin-common
Section: editors
Priority: optional
Architecture: any
Depends: emacs22-common (= ${source:Version}), ${shlibs:Depends}
Description: The GNU Emacs editor's shared, architecture dependent files
GNU Emacs is the extensible self-documenting text editor.
This package contains the architecture dependent infrastructure
that's shared by emacs22, emacs22-gtk, and emacs22-nox.
[snip]

***** debian/rules
- パッケージの構築を実施するプログラム。
- rulesファイルの一行目は

#!/usr/bin/make -f

でなければならない。
- またインターフェイスとして次のターゲットは必須
である。

build [必須]
binary [必須]
binary-arch [必須]
binary-indep [必須]
clean
build-arch
build-indep
get-orig-source

- 中身を多少追ってみる。本格的に追うのはdebhelper
の節にて。

- binaryターゲットは?

binary: binary-indep binary-arch

- この前提条件達は?

binary-indep: build install
dh_testdir -i
dh_testroot -i
dh_installchangelogs -i
dh_installdocs -i
dh_link -i
dh_strip -i
dh_compress -XREADME.Debian -i
dh_fixperms -i
dh_installdeb -i
# don't install maintainer scripts in the metapackage
rm -vf debian/emacs/DEBIAN/{post,pre}{inst,rm}
dh_shlibdeps -i
dh_gencontrol -i
dh_md5sums -i
dh_builddeb -i

binary-arch: build install
dh_testdir -a
dh_testroot -a
dh_installinfo -a
dh_installman -a
dh_installchangelogs -a
dh_installdocs -a
dh_installexamples -a
dh_installmenu -a
dh_desktop -a
dh_link -a
dh_strip -a
dh_compress -a
dh_fixperms -a -X${movemail_bin}
dh_installdeb -a
dh_shlibdeps -a
dh_gencontrol -a
dh_md5sums -a
dh_builddeb -a

- buildターゲットは?

build: patch build-stamp

- patchターゲットは?

これはrulesには存在しない。おそらく、

include /usr/share/quilt/quilt.make

こちらの中にあるのでは。

- build-stampターゲットは?

build-stamp: bootstrap emacs emacs-gtk emacs-nox
dh_testdir
touch $@

- bootstrapターゲットは?

bootstrap: bootstrap-stamp
bootstrap-stamp:
dh_testdir

# Emacs must be bootstrapped at least once in order to
# generate .elc files
CFLAGS="${CFLAGS}" ./configure ${emacs_confflags}
${build_cmd} bootstrap
${build_cmd} distclean

touch $@

- ここでAutotoolsのbootstrapをやってるのだな。
- emacsターゲットは?

emacs: bootstrap emacs-stamp
emacs-stamp:
dh_testdir

$(call emacs_build,${emacs_confflags},x-emacs)
${build_cmd} distclean

touch $@

- emacs_buildマクロとは?

define emacs_build
# Build emacs
CFLAGS="${CFLAGS}" ./configure ${1}
${build_cmd}
# Check for pure space overflow
${check_pure_space}
# save binary from deletion
mv src/emacs src/${2}
endef

- ここで./configureをやる。

- build_cmdマクロとは?

define build_cmd
${MAKE} CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}"
endef

- お、ここでmakeを呼ぶのか。

- パッチあてて、./configureとmakeの流れがどう記述
さているかは理解できた。


**** ビルド環境確認
- 環境はそろっているようだ。

$ sudo apt-get -s build-dep emacs22
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
$

スタックをかなり積んだ成果が出ている。rulesの中身など、いろいろよく分かる。

こつこつ。

0 件のコメント: