在 linux os下制作 `.deb` 包涉及以下几个主要步骤。假设已经有一个应用程序或软件项目,并且希望将它打包为一个 `.deb` 包。
1. 准备源代码和构建环境
首先,需要准备好应用程序的源代码,并确保它可以在开发环境中成功编译和运行。
2. 创建目录结构
创建一个目录结构用于存放打包所需的文件和信息:
```bash
mkdir -p mypackage-1.0/DEBIAN
mkdir -p mypackage-1.0/usr/local/bin
```
在这个示例中,`mypackage-1.0` 是包的根目录,其中 `DEBIAN` 目录包含控制文件,`/usr/local/bin` 是希望安装二进制文件的位置。
3. 创建控制文件
在 `DEBIAN` 目录中,创建一个名为 `control` 的文件。这个文件包含包的元数据信息,例如包名、版本、维护者、依赖项等。
```bash
nano mypackage-1.0/DEBIAN/control
```
`control` 文件的内容示例:
```text
Package: mypackage
Version: 1.0
Section: base
Priority: optional
Architecture: amd64
Depends: libc6 (>= 2.29)
Maintainer: Your Name <your.email@example.com>
Description: My custom package
This is a custom package created for demonstration purposes.
```
4. 复制文件到目录结构中
将应用程序的二进制文件或脚本复制到适当的目录中。例如,如果有一个可执行文件 `myapp`,将它复制到 `usr/local/bin`:
```bash
cp myapp mypackage-1.0/usr/local/bin/
```
5. 设置文件权限
确保所有的文件和目录都有正确的权限。即相应的二进制文件有可执行权限:
```bash
chmod 755 mypackage-1.0/usr/local/bin/myapp
```
6. 构建 `.deb` 包
使用 `dpkg-deb` 命令来构建 `.deb` 包:
```bash
dpkg-deb --build mypackage-1.0
```
这将生成一个名为 `mypackage-1.0.deb` 的包文件。
7. 测试安装 `.deb` 包
可以使用 `dpkg` 命令安装刚刚创建的 `.deb` 包,以测试它是否正确安装和运行:
```bash
sudo dpkg -i mypackage-1.0.deb
```
8. 验证安装
确保应用程序安装到正确的位置并能正常运行。可以通过运行程序或检查安装路径中的文件来验证。
9. 处理依赖项(可选)
如果包依赖其他包,可以在 `control` 文件中指定依赖项。在安装时,使用 `apt-get install -f` 来自动安装缺少的依赖项。
10. 发布 `.deb` 包
如果一切正常,可以将 `.deb` 包发布或分发给其他用户,他们可以通过 `dpkg -i` 命令安装包。
反解析一个实际示例:
以vlc_3.0.16-1build7_amd64.deb为例
ar解压vlc_3.0.16-1build7_amd64.deb
解压control.tar.zst
control文件包含vlc_3.0.16-1build7_amd64.deb文件的元数据信息:
解压data.tar.zst
在执行 apt install 或 dpkg -i 时,Debian 包管理系统会根据 .deb 包中的 data.tar.*(通常是 .tar.gz 或 .tar.zst)的内容来决定文件安装的位置。具体位置是由 .deb 包中的文件结构决定的。
data.tar. 的结构:* data.tar.* 文件包含了软件安装后的文件系统结构。例如,如果 data.tar.* 中包含 usr/bin/vlc,那么安装时,这个文件就会被解压到系统的 /usr/bin/vlc 位置。
安装路径: .deb 包的内容在解压时会直接映射到系统文件结构中。例如,usr/bin/ 会对应到系统的 /usr/bin/,usr/lib/ 会对应到系统的 /usr/lib/,依此类推。
是的, 看到现在的小伙伴可能已经发现问题了, 就是我上面截图的目录中不包含./usr/bin呀,是的没错,我来解释下原因:
查看的 data.tar.zst 文件仅代表了vlc工具的一部分内容。
Debian 包可能由多个 .deb 文件组成,特别是大型软件,如 VLC,它可能包含多个子包,每个子包都包含不同的文件集。通常,一个应用程序的二进制文件(如 vlc)会在主程序包中,而其他文件(如文档、桌面文件等)可能在不同的子包中。解压的 vlc_deb 是一个特定的子包,并不包含所有文件,尤其是可执行文件部分。
其次我们给出这个解析示例的原因是, 举一反三的目的, 给一个标准的示例, 那么我们在构架deb包的时候可以依据标准示例来做。