Debian 软件包格式被这样设计,在具有经典命令如 ar、tar 和 xz 或者有时候是 gzip 或 bzip2的 Unix 系统上,它的内容都可以被解压。这是个看起来琐碎的属性对移植和灾难恢复是非常重要的。
想象一下,例如您误删了
dpkg 程序,因此无法再安装 Debian 软件包了。
dpkg 本身作为一个 Debian 软件包,看起来系统似乎完蛋了... 幸运的是,您知道软件包的格式,这样可以
下载 dpkg 软件包的
.deb 文件,并手动安装(请参见侧边栏
工具 dpkg、APT 和 ar)。某些不幸的情况下,一个或多个
ar、
tar 或者
gzip/
xz/
bzip2 程序丢失了,您仅需从其它系统上直接复制缺失的程序(因为它们中的任一个都独立工作而没有依赖的问题,因此简单复制足矣)。如果您的系统出现了更加反常的问题,甚至以上手段无法奏效(可能是最深处的系统库文件丢失?),您应当尝试
busybox的静态版本 (在
busybox-static 软件包中提供),它更加独立化,并能提供如下子命令:
busybox ar、
busybox tar 和
busybox xz。
来看看 .deb 文件的内容:
$ ar t dpkg_1.20.9_amd64.deb
debian-binary
control.tar.gz
data.tar.xz
$ ar x dpkg_1.20.9_amd64.deb
$ ls
control.tar.gz data.tar.xz debian-binary dpkg_1.20.9_amd64.deb
$ tar tJf data.tar.xz | head -n 16
./
./etc/
./etc/alternatives/
./etc/alternatives/README
./etc/cron.daily/
./etc/cron.daily/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg
./etc/dpkg/dpkg.cfg.d/
./etc/logrotate.d/
./etc/logrotate.d/alternatives
./etc/logrotate.d/dpkg
./sbin/
./sbin/start-stop-daemon
./usr/
./usr/bin/
$ tar tJf control.tar.xz
./
./conffiles
./control
./md5sums
./postrm
$ cat debian-binary
2.0
如你所见, Debian 包的 ar 存档格式由三个文件组成:
Debian 二进制文件
This is a text file which simply indicates the version of the .deb file package format version. In Debian Bullseye it is still version 2.0.
control.tar.xz
该档案文件包含所有可用的元信息,如软件包的名称和版本,以及在安装/卸载之前、之中或之后使用的脚本。一些元信息允许软件包管理工具根据例如机器上已有的软件包列表,来决定是否能够安装或卸载它,或者决定一起发布的文件是否已经在本地被修改。
data.tar.xz, data.tar.bz2, data.tar.gz
这个归档文件包含软件包中所有要解压的文件,包括可执行文件、库和文档等。软件包可能使用不同的压缩格式,因此文件后缀会有所不同如xz、bzip2 或 gzip。