ひとりDebian勉強会 その2 dpkg-deb
前回から2ヶ月近くあきましたが、そろそろ書かないと忘れてしまいそうです。すでに忘れてますが。
前回はバイナリパッケージ(.deb ファイル)の構造を確認し、手動で展開しましたが、dpkg-debを使うとこれを簡単に行うことができます。他にもバイナリパッケージを作成したり、情報を確認したりできます。
ということで、今回はdpkg-debを試してみます。
ここでは実例を紹介する程度ですので、詳細はdpkg-deb(1)を参照してください。
$ man dpkg-deb
今回の要点
- バイナリパッケージを作るにはdpkg-debを使う。(--buld -b) (次回にまわします。)
- バイナリパッケージを展開するにはdpkg-debを使う。(--extract -x)
- バイナリパッケージの含まれるファイルを確認するにはdpkg-debを使う。(--contents -c)
- バイナリパッケージから制御ファイルをとりだすにはdpkg-debを使う。(--control -e)
- バイナリパッケージから制御ファイルを確認するにはdpkg-debを使う。(--field -f)
- バイナリパッケージの情報を確認するにはdpkg-debを使う。(--info -I)
- とりあえず、バイナリパッケージをなにやらするのはdpkg-deb(書くのにつかれた)
バイナリパッケージを作る。dpkg-deb --buld
バイナリパッケージが作れます。順序の都合、次回解説する予定。
バイナリパッケージを展開する。 dpkg-deb --extract
パイナリパッケージの中身をとりだします。平たくいうと、バイナリパッケージに含まれたdata.tar.gzを展開します。実際にhostname_2.95_amd64.deb(第1回で使ったものです。)で、試してみます。
カレントディレクトリのhostnameに展開してみます。
$ dpkg-deb --extract hostname_2.95_amd64.deb hostname $ find hostname hostname hostname/bin hostname/bin/dnsdomainname hostname/bin/hostname hostname/usr hostname/usr/share hostname/usr/share/man hostname/usr/share/man/fr hostname/usr/share/man/fr/man1 hostname/usr/share/man/fr/man1/hostname.1.gz hostname/usr/share/man/man1 hostname/usr/share/man/man1/dnsdomainname.1.gz hostname/usr/share/man/man1/hostname.1.gz hostname/usr/share/doc hostname/usr/share/doc/hostname hostname/usr/share/doc/hostname/copyright hostname/usr/share/doc/hostname/changelog.gz
dpkg -L hostnameや前回のtar ztf data.tar.gzと比較してみましょう。
-
- extractの省略形は-xになりますので、以下のようにしてもよいです。
$ dpkg-deb --extract hostname_2.95_amd64.deb hostname
バイナリパッケージに含まれるファイルを確認する (--contents -c)
中身だけ確認したいんだよ!ってときに使います。
文章で書くより見たほうが早いです。
$ dpkg-deb --contents hostname_2.95_amd64.deb drwxr-xr-x root/root 0 2007-12-28 00:50 ./ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/doc/ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/doc/hostname/ -rw-r--r-- root/root 1089 2007-11-15 07:22 ./usr/share/doc/hostname/copyright -rw-r--r-- root/root 2447 2007-12-27 20:47 ./usr/share/doc/hostname/changelog.gz drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/man/ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/man/man1/ -rw-r--r-- root/root 1709 2007-12-28 00:50 ./usr/share/man/man1/hostname.1.gz drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/man/fr/ drwxr-xr-x root/root 0 2007-12-28 00:50 ./usr/share/man/fr/man1/ -rw-r--r-- root/root 1176 2007-12-28 00:50 ./usr/share/man/fr/man1/hostname.1.gz drwxr-xr-x root/root 0 2007-12-28 00:50 ./bin/ -rwxr-xr-x root/root 11712 2007-12-28 00:50 ./bin/hostname -rwxr-xr-x root/root 11712 2007-12-28 00:50 ./bin/dnsdomainname lrwxrwxrwx root/root 0 2007-12-28 00:50 ./usr/share/man/man1/dnsdomainname.1.gz -> hostname.1.gz
パーミッションやらも確認できてよい感じです。
-c が省略形になります。
パッケージファイルから制御情報ファイルをとりだす(--control -e)
data.tar.gzを展開しましたので.control側も展開したいです。--controlを使います。
hostname_controlに展開してみる例です。
$ dpkg-deb --control hostname_2.95_amd64.deb hostname_controln $ find hostname_control hostname_control hostname_control/control hostname_control/md5sums
tar ztf control.tar.gzの結果を比較してみるとよいかもしれません。
省略形は法則には(?)従わずに-eになるので注意です。
パッケージファイルに含まれる制御情報ファイルの中身を確認する。
いちいち展開してcontrolファイルなんて確認したくない人のために。
$ dpkg-deb --field hostname_2.95_amd64.deb Package: hostname Version: 2.95 Architecture: amd64 Essential: yes Maintainer: Daniel Baumann Installed-Size: 84 Pre-Depends: libc6 (>= 2.7-1) Section: base Priority: required Description: utility to set/show the host name or domain name The hostname command can be used to either set or display the current host or domain name of the system. This name is used by many of the networking programs to identify the machine. The domain name is also used by NIS/YP.
特定の値だけみたい場合は引数を指定すると幸せになります。
$ dpkg-deb --field hostname_2.95_amd64.deb Pre-Depends libc6 (>= 2.7-1)
忘れてしまってもgrep cutでなんとかしてしまいそうだとかいってはいけません。
$ dpkg-deb --field hostname_2.95_amd64.deb | grep Pre-Depends: | cut -d ' ' -f 2- libc6 (>= 2.7-1)
バイナリパッケージの情報を確認するにはdpkg-debを使う。(--info -I)
fieldよりやや詳しい情報が得られます。
$ dpkg-deb --info hostname_2.95_amd64.deb 新形式 debian パッケージ、バージョン 2.0。 サイズ 12370 バイト: コントロールアーカイブ = 655 バイト。 484 バイト、 13 行 control 373 バイト、 6 行 md5sums Package: hostname Version: 2.95 Architecture: amd64 Essential: yes Maintainer: Daniel Baumann Installed-Size: 84 Pre-Depends: libc6 (>= 2.7-1) Section: base Priority: required Description: utility to set/show the host name or domain name The hostname command can be used to either set or display the current host or domain name of the system. This name is used by many of the networking programs to identify the machine. The domain name is also used by NIS/YP.
省略形は大文字となり、-Iです。