deb软件包实际上是archive file,可以使用ar命令进行打包和解包
文件格式
以下图片来自维基百科


解压deb包
1 2 3 4 5 6 7 8
| ~ $ ar tv google-chrome-stable_current_amd64.deb rw-r--r-- 0/0 4 Jan 16 09:44 2020 debian-binary rw-r--r-- 0/0 12131 Jan 16 09:44 2020 control.tar.gz rw-r--r-- 0/0 62181000 Jan 16 09:46 2020 data.tar.xz
~ $ ar x google-chrome-stable_current_amd64.deb
|
使用ar命令解压后得到三个文件,分别是debian-binary, control压缩包, data压缩包。
debian-binary
纯文本文件,只有一行内容,记录了当前deb格式的版本号:
1 2
| ~ $ cat debian-binary 2.0
|
control压缩包
control包使用tar打包,支持gzip和xz压缩方式,其中包含了deb软件包的控制文件
data压缩包
data压缩包中包含了实际要安装的文件,同样使用tar打包,支持gzip、bzip2、lzma和xz压缩
dpkg-deb命令
dpkg-deb命令是dpkg工具包中用来操作deb软件包的命令,可以解压、查看和重新打包deb文件。
查看deb包信息
1 2 3 4
| dpkg-deb -c <deb package> dpkg-deb -I <deb package> dpkg-deb -f <deb package> dpkg-deb -W <deb package>
|
解压deb软件包
1 2
| dpkg-deb -e <deb package> <directory> dpkg-deb -x <deb package> <directory>
|
与使用ar命令解压不同,ar命令会解压出control和data两个压缩包,而dpkg-deb会继续对压缩包进行解压,输出其中的文件。
打包deb软件包
1
| dpkg-deb -b <directory> <deb name>
|
该命令中,待构建文件夹的结构为:
1 2 3 4 5 6
| <top directory>/ |---- DEBIAN/ | |---- control | |---- md5sums |---- <path to install>/ |---- <file>
|
其中DEBIAN文件夹内必须包含control文件,其他控制文件及脚本按需添加,文件安装的路径与top dir中其他文件的路径一致,即top dir作为fakeroot。
control压缩包
control包中包含以下文件:
control
md5sums
conffiles
perins, postins, prerm, postrm
config
shlibs
control
control文件包含了软件包的信息,例如Chrome安装包的control文件内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13
| Package: google-chrome-stable Version: 79.0.3945.130-1 Architecture: amd64 Maintainer: Chrome Linux Team <chromium-dev@chromium.org> Installed-Size: 215627 Pre-Depends: dpkg (>= 1.14.0) Depends: ca-certificates, fonts-liberation, libappindicator3-1, libasound2 (>= 1.0.16), libatk-bridge2.0-0 (>= 2.5.3), libatk1.0-0 (>= 2.2.0), libatspi2.0-0 (>= 2.9.90), libc6 (>= 2.16), libcairo2 (>= 1.6.0), libcups2 (>= 1.4.0), libdbus-1-3 (>= 1.5.12), libexpat1 (>= 2.0.1), libgcc1 (>= 1:3.0), libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk-3-0 (>= 3.9.10), libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.22), libpango-1.0-0 (>= 1.14.0), libpangocairo-1.0-0 (>= 1.14.0), libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1), libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3 (>= 1:5.0), libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1, libxtst6, wget, xdg-utils (>= 1.0.2) Recommends: libu2f-udev Provides: www-browser Section: web Priority: optional Description: The web browser from Google Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.
|
关于control文件中各个字段的意义及格式可以参考Debian官方文档。
md5sums
该文件中记录了软件包中所有待安装文件的MD5校验和,格式如下:
1 2 3 4 5 6
| 1d15dcfb6bb23751f76a2b7b844d3c57 sbin/parted 4eb9cc2e192f1b997cf13ff0b921af74 usr/share/man/man8/parted.8.gz 2f356768104a09092e26a6abb012c95e usr/share/doc/parted/README.Debian a6259bd193f8f150c171c88df2158e3e usr/share/doc/parted/copyright 7f8078127a689d647586420184fc3953 usr/share/doc/parted/changelog.Debian.gz 98f217a3bf8a7407d66fd6ac8c5589b7 usr/share/doc/parted/changelog.gz
|
conffiles
该文件内容表示,软件包的待安装文件中,哪些是配置文件,文件内容格式如:
1 2
| /etc/cups/snmp.conf /etc/cups/cupsd.conf
|
执行
在输出结果中的conffiles字段可以看到这些内容,例如cups包的输出中包含:
1 2
| Conffiles: /etc/cups/snmp.conf 47b8f1c3fecdc44e3d1fdee4b9eeb3f5
|
perins, postins, prerm, postrm
这四个文件是在包安装和删除前后触发执行的脚本,其中perins和postins分别在安装前后执行,prerm和postrm在卸载前后执行
config
config是一个可选的,支持debconf机制的脚本,参考debconf教程。
shlibs
该文件列出软件包依赖的共享库,参考Debian官方文档。