构建DEB包
一、deb的文件结构
Debian 软件包(.deb
)是一种用于 Debian 及其基于 Debian 的 Linux 发行版的软件包格式。这些软件包包含了用于安装、升级和卸载软件的文件和元数据。
.deb
文件通常遵循一定的文件结构,包括以下主要部分:
-
控制信息 (
control
):DEBIAN/control
文件包含软件包的元数据和控制信息,如软件包的名称、版本、依赖项、描述等。这些信息用于dpkg
和包管理工具来管理和安装软件包。 -
数据档案 (
data
):软件包的实际文件和目录结构,这些文件会被安装到系统上。这些文件通常包含在data.tar.gz
或data.tar.xz
文件中。 -
预安装脚本 (
preinst
):DEBIAN/preinst
脚本包含在软件包安装之前要执行的命令,可以用于执行必要的准备工作。 -
后安装脚本 (
postinst
):DEBIAN/postinst
脚本包含在软件包安装之后要执行的命令,可以用于执行清理工作、添加启动脚本等操作。 -
预卸载脚本 (
prerm
):DEBIAN/prerm
脚本包含在软件包卸载之前要执行的命令,可以用于执行卸载前的清理操作。 -
后卸载脚本 (
postrm
):DEBIAN/postrm
脚本包含在软件包卸载之后要执行的命令,可以用于执行卸载后的清理操作。 -
配置文件 (
conffiles
):DEBIAN/conffiles
文件列出了软件包的配置文件,这些文件在软件包升级时需要特别处理,以确保用户的自定义配置不会丢失。 -
文档文件 (
doc
): - 一些软件包可能包括文档文件,这些文件通常存储在
usr/share/doc
目录下。
注意:其中除了control是必须的,其余文件可以不创建,软件包的确切文件结构可以因软件包的性质和需求而有所不同,但上述是一个典型的.deb
文件的一般结构。.deb
文件可以使用工具如 dpkg-deb
来创建或解包,以便查看其中的内容。
二、control文件的结构
Package: 软件包名称 Version: 软件包版本 Section: 软件包所属的部分 Priority: 软件包的优先级 Architecture: 软件包的体系结构 Essential: 是否是必要软件包 Depends: 软件包的依赖关系 Pre-Depends: 软件包的先决依赖 Recommends: 建议安装的软件包 Suggests: 建议但非必需的软件包 Conflicts: 与其他软件包的冲突 Provides: 软件包提供的功能 Replaces: 替代其他软件包 Maintainer: 维护者的信息 Description: 软件包的简短描述 软件包的详细描述(可以跨多行)
以下是这些字段的详细说明:
Package
:软件包的名称。Version
:软件包的版本号。Section
:软件包所属的部分,通常是一个主题分类,如net
(网络)或utils
(实用工具)。Priority
:软件包的优先级,通常是required
(必需的),important
(重要的),standard
(标准的),optional
(可选的), 或extra
(额外的)。Architecture
:软件包的体系结构,如amd64
(64位)或i386
(32位)。Essential
:指示软件包是否是系统所必需的。Depends
:软件包的运行时依赖关系,必须在安装软件包之前满足。Pre-Depends
:软件包的先决依赖,必须在安装软件包之前满足。Recommends
:建议但非必需的软件包,可以提高软件包的功能。Suggests
:建议但非必需的软件包,提供额外的功能。Conflicts
:与其他软件包存在冲突,不能同时安装。Provides
:软件包提供的功能,通常用于虚拟软件包。Replaces
:替代其他软件包,可以取代旧的软件包。Maintainer
:维护者的信息,包括姓名和电子邮件地址。Description
:软件包的简短描述和详细描述。详细描述可以跨多行。
control文件的写法示例:
Package: HelloWorld Version: 1.0.0 Section: utils Priority: optional Architecture: amd64 Depends: Installed-Size: 512 Maintainer: http://www.baidu.com Description: HelloWorld package
三、deb打包示例
1.创建一个source文件夹
DEBIAN文件中存放control文件和一些安装或卸载的执行脚本文件
opt文件中存放可执行文件的目录,在安装deb包的时候就会把可执行程序安装到系统的opt文件夹中
usr文件中存储可执行文件的依赖库或说明文档,在安装deb包的时候就会把依赖库或说明文档安装到指定的系统目录中
如上图所示,会把include中的文件覆盖到usr/include目录中,会把lib中的文件覆盖到/usr/lib目录中
2.打包成deb包
dpkg -b ./source package.deb
3.安装deb包
sudo dpkg -i package.deb
4.卸载deb包
sudo dpkg -r package