deb 打包、安装、卸载

deb 打包、安装、卸载

deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式。
dpkg 是 Debian下的包管理工具,用来执行软件包的打包、解包、安装、卸载等命令。
运行环境:Debian、Ubuntu,国产操作系统 UOS、银河麒麟等。
本文将介绍以下几点内容:
作为入门,首先以 hello world 程序为例,介绍如何将其可执行文件打包、安装到用户指定目录、软件卸载。之后介绍 Debian 的 preinst、postinst、prerm、postrm 脚本,这些是软件包安装前后自动运行的可执行脚本。最后对 deb 包管理工具 dpkg 的常用命令进行总结。

1、如何将可执行文件 helloworld 打包、安装、卸载

程序语言的入门都是 hello world 程序,下面就以此开始,介绍如何将其生成的可执行文件进行打包、安装到指定目录、卸载。
C语言 helloworld.c 代码如下:

#include <stdio.h>
int main(void)
{
	printf("Hello, world!\n");
	return 0;
}

将代码编译生成可执行文件 helloworld。
gcc helloworld.c -o helloworld

创建文件夹 MyFirstDeb,并在该文件夹下创建子文件夹 DEBIAN、创建指定的安装目录。DEBIAN目录下存放的是控制信息control、以及软件包安装前后自动运行的可执行脚本preinst、postinst、prerm、postrm(后续介绍)。其他目录为软件具体的安装路径,而在安装过程中,包里的数据会被直接解压到根目录(即/),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。

此时的目录树为:
|-- MyFirstDeb
  |-- DEBIAN
     |-- control
  |-- opt
     |-- helloworld

control文件记录待发布的软件包名,版本号,平台,维护者、描述信息等数据,内容为:

package: MyFirstDeb
version: 1.0.0
architecture: arm64
maintainer: WonderThink
description: This is my first deb package.

control字段信息说明

字段用途例子/其他
package程序名称中间不能有空格
version软件版本
description程序说明
section软件类别utils, net, mail, text, x11
priority软件对于系统的重要程度required, standard, optional, extra等
essential是否是系统最基本的软件包yes/no,若为yes,则不允许卸载(除非强制性卸载)
architecture软件所支持的平台架构i386, arm64, amd64, m68k, sparc, alpha, powerpc等
maintainer维护者信息
source软件包的源代码名称
depends软件所依赖的其他软件包和库文件若依赖多个软件包和库文件,采用逗号隔开
pre-depends软件安装前必须安装、配置依赖性的软件包和库文件常用于必须的预运行脚本需求
recommends推荐安装的其他软件包和库文件
suggests建议安装的其他软件包和库文件

以上完成了打包前准备工作,接下来执行打包、安装、卸载操作。

在 MyFirstDeb 同级目录下进行打包,规范的包名格式为(包名、版本号、平台,中间以下划线连接)package_version_architecture.deb,dpkg打包命令为:
dpkg -b MyFirstDeb/ MyFirstDeb_1.0.0_arm64.deb

MyFirstDeb_1.0.0_arm64.deb 的安装
dpkg -i MyFirstDeb_1.0.0_arm64.deb
安装后在 /opt 目录下有了 helloworld 可执行文件。

卸载 MyFirstDeb 包(dpkg对包名的大小写不敏感):
dpkg -r MyFirstDeb

通过上述操作就简单完成了 helloworld 可执行文件的打包、安装到指定目录、卸载。接下来介绍 Debian 的软件包安装前后自动运行的可执行脚本。

2、 Debian 的 preinst、postinst、prerm、postrm 脚本

DEBIAN 目录下除了 control 文件,还可以有 preinst、postinst、prerm、postrm 脚本,这些是软件包安装前后自动运行的可执行shell脚本,统称为控制文件。

控制文件描述
control用了记录软件标识,版本号,平台,依赖信息等数据
preinstpre-installation,在解包前运行的脚本
postinstpost-installation,在解包后运行的脚本
prermpre-removal,卸载时,在删除文件之前运行的脚本
postrmpost-removal,在删除文件之后运行的脚本

preinst
Debian软件包(".deb")解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成。

postinst
主要完成软件包(".deb")安装完成后所需的配置工作。通常,postinst 脚本要求用户输入,和(或) 警告用户如果接受默认值,应该记得按要求返回重新配置这个软件。 一个软件包安装或升级完成后,postinst 脚本驱动命令,启动或重起相应的服务。

prerm
停止一个软件包的相关进程,要卸载软件包的相关文件前执行。

postrm
修改相关文件或连接,和(或)卸载软件包所创建的文件。

3、dpkg 命令

打包:

dpkg -b MyFirstDeb/ xxx.deb    # build,将文件夹MyFirstDeb打deb包

安装与卸载:

dpkg -i xxx.deb   # install,安装deb软件包
dpkg -r xxx       # remove,卸载软件包

解包:

dpkg -X xxx.deb extract/         #提取包的内容到文件夹 extract/ 下
dpkg -e xxx.deb extract/DEBIAN   #提取的控制信息到文件夹 extract/DEBIAN 下

查看deb软件包信息:

dpkg -I xxx.deb   # info,查看deb软件包的控制信息
dpkg -c xxx.deb   # contents,查看deb软件包中包含的文件结构

查看已安装的deb软件包信息:

dpkg -l xxx   # list,查看xxx软件包的信息
dpkg -L xxx   # listfile,列出xxx软件包安装到系统中的文件
dpkg -s xxx   # status,查看xxx软件包的控制信息

参考文献

[1] Ubuntu中deb包详解及打包教程
[2] linux的程序打包deb
[3] Debian 的 preinst, postinst, prerm, 和 postrm 脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值