deb 包里面装的是什么?
格式解析
根据维基百科,deb 包是一个标准的 ar 归档。
因此,对于 Modern CMake for C++ 中示例代码用 CPack 创建的包 CPackPackage-1.2.3-Linux.deb,可以直接解压。
ar x CPackPackage-1.2.3-Linux.deb
解压可以得到三个东西:
.
├── control.tar.gz
├── data.tar.gz
└── debian-binary
其中 debian-binary 是个文本文件,我这里里面填写的信息是字符串 2.0
。
control.tar.gz 解压之后有两个文件:control 和 md5sums,前者记录了包的基本信息:
Architecture: amd64
Description: Simple Calculator
Maintainer: email@example.com
Package: cpackpackage
Priority: optional
Section: devel
Version: 1.2.3
Installed-Size: 33
后者记录了 data.tar.gz 中每个文件的校验和。
data.tar.gz 解压之后:
$ mkdir data && tar -C data -zxf data.tar.gz
$ tree data
data
└── usr
├── include
│ └── calc
│ └── calc.h
└── lib
├── calc
│ └── cmake
│ ├── CalcConfig.cmake
│ ├── CalcTargets.cmake
│ └── CalcTargets-debug.cmake
└── libcalc.a
说明 data.tar.gz 里面放的是标准的压缩数据,和以压缩文件方式导出是一样的。
用工具查看
在不解压、不安装的情况下查看 deb 包的文件可以使用 dpkg
的 -c
选项。
dpkg
提供了一个 --fsys-tarfile
选项,这个选项可以将 deb 包输出为 tar 包,从而允许将 deb 包提取到文件(提取之前肯定是要用 -c
选项去看有哪些文件的),或者和 tar
程序建立管道执行文件提取等功能。比如:
dpkg --fsys-tarfile somepackage.deb | tar -xO ./usr/include/a/b/c.hpp | less