Debian パッケージのフォーマットは伝統的なコマンドである ar、tar、gzip (xz や bzip2 の場合もあります) を備える Unix システムで内容を展開できるように設計されました。この一見たわいもない特徴は可搬性と障害復旧を考えると重要です。
たとえば、誤って
dpkg プログラムを削除して、Debian パッケージをインストールできなくなったとしましょう。
dpkg は Debian パッケージなので、もはやシステムを回復することは不可能のように見えます... 幸いなことに、パッケージの構成を知っていれば、
dpkg パッケージの
.deb ファイルをダウンロードし、手作業でパッケージをインストールできます (補注
「TOOLS dpkg、APT、ar」を参照してください)。もし不幸にも、
ar、
tar、
gzip/
xz/
bzip2 のうち 1 つでもなかったら、足りないプログラムを別のシステムからコピーするだけで十分です (各々のプログラムは、依存関係がなく、完全に独立して動くため、単純にコピーすれば十分です)。システムが最悪の状況に陥ってこれらのプログラムが動かない場合 (最も根源的なシステムライブラリが欠けている場合?)、静的リンクされた
busybox (
busybox-static パッケージに含まれます) を試してみるべきです。静的リンクされた
busybox はさらに依存関係が少なく、
busybox ar、
busybox tar、
busybox gunzip などのサブコマンドを備えています。
それでは .deb ファイルの内容を見てみましょう。
$ ar t dpkg_1.17.23_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$ ar x dpkg_1.17.23_amd64.deb
$ ls
control.tar.gz data.tar.gz debian-binary dpkg_1.17.23_amd64.deb
$ tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$ tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm
$ cat debian-binary
2.0
ご覧の通り、Debian パッケージの ar アーカイブは以下の 3 つのファイルから成り立っています。
debian-binary。これは使われている .deb ファイルのバージョンを示す (2015 年の時点ではバージョン 2.0) テキストファイルです。
control.tar.gz。このアーカイブファイルには、パッケージの名前やバージョンなど、利用できるすべてのメタ情報が含まれています。このメタ情報の一部と、たとえば、マシンにインストールされているパッケージのリストを照らし合わせて、パッケージ管理ツールはパッケージをインストールまたはアンインストールが可能かを決定します。
data.tar.gz。このアーカイブには、パッケージから展開されるすべてのファイルが含まれています。つまり、実行ファイル、文書などすべてが保存されています。一部のパッケージでは異なる圧縮フォーマットが使われているかもしれません、このような場合、ファイルは別の名前が付けられています (bzip2 の場合 data.tar.bz2、XZ の場合 data.tar.xz です)。