deb 打包、安装、卸载

2023-05-16

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 脚本

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

deb 打包、安装、卸载 的相关文章

  • Windows程序设计 截屏

    span style font family none span BLOWUP C Video Magnifier Program c Charles Petzold 1998 include lt windows h gt include

随机推荐

  • windows 程序设计 调色板

    调色板 这时就需要使用Windows调色盘管理器 xff08 在Windows 3 0中提出 xff09 了 Windows保留了256种颜色中的20种 xff0c 而允许应用程序修改其余的236种 xff08 在某些情况下 xff0c 应
  • windows程序设计 文字和字体

    文字和字体 简单的文字输出 让我们先来看看Windows为文字输出 影响文字的设备内容属性以及备用字体提供的各种函数 文字输出函数 我已经在许多范例程序中使用过最常用的文字输出函数 xff1a TextOut hdc xStart ySta
  • windows 网络编程 WinNet

    初始化 winNet 库 HINTERNET InternetOpen LPCTSTR lpszAgent DWORD dwAccessType LPCTSTR lpszProxyName LPCTSTR lpszProxyBypass D
  • Cocos 随写

    auto listenter 61 EventListenerTouchOneByOne create 设置单点触摸 listenter gt onTouchBegan 61 Touch pTouch Event event gt bool
  • android NDK崩溃信息调试

    android NDK崩溃 调试 主要利用 tombstones xff0c 可以看成是普通linux上利用core文件调试查问题类似 一 tombstones简介 1 什么是tombstone 当独立ndk bin方式或者jni方式开始运
  • 延迟加载DLL[转]

    问题来源 我的应用程序需要用到D3DX9 41 dll 程序里用的静态加载 xff0c 这个dll通常是把它放在根目录下 xff0c 否则应用程序找不到dll 但是有一天 xff0c 我需要把他放到别的目录 xff0c 那么下面就是一个解决
  • C++11 lambda 表达式

    lambda 表达式也是一种可调用对象 xff0c 那么可调用对象有哪些呢 xff1f 有函数 xff0c 函数指针 xff0c 重载了调用运算符的类 xff0c 还有lambda表达式 1个lambda表达式表示一个可调用的代码单元 xf
  • Windows核心编程之 2 字符和字符串

    1 包含新的安全是字符串处理头文件 StrSafe h counof 宏可以计算缓冲区的元素个数 StringCchCat StringCchCopy StringCchPrintf 34 Cch 34 表示 字符数 StringCbCat
  • Windows核心编程之 用户模式下的线程同步 读写锁和条件变量

    读写锁 include lt Windows h gt include lt tchar h gt include lt stdio h gt include lt process h gt include lt winbase h gt
  • 八戒常用之php时间戳strtotime前一天或后一天的日期

    date default timezone set 39 PRC 39 默认时区 今天 date 34 Y m d 34 time 昨天 date 34 Y m d 34 strtotime 34 1 day 34 明天 date 34 Y
  • 信号量和互斥锁的区别

    信号量和互斥锁 xff1a 信号量 xff08 semaphore sem f r xff09 用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过信号量告诉别的线程 xff0c 别的线程再进行某些动作 而互斥锁 xff08
  • VLC生成流媒体实时流

    VLC生成实时流 xff0c 分为以下步骤 1 打开VLC xff0c 如果未下载可在官网下载 2 现在将要产生流的视频文件选中 3 开始产生流 4 检验流的生成 转载请注明出处 xff1a http www wolfnx com 2017
  • nmap 缺少module 'citrixxml'以及citrixxml.lua的修补

    当使用nmap的 script功能时 xff0c 可以参考nmap脚本使用总结 xff0c 但是在ubuntu12 04 LTS下使用默认下载安装的nmap xff08 版本为5 21 xff09 时 xff0c 当运行nmap scrip
  • 【ROS】Ubuntu18.04安装IntelRealsense D435

    参考文章 xff1a 文章一 文章二 这两篇文章多多少少和自己的有点不一样 xff0c 故在此记录 以实际为准 从官网https github com IntelRealSense librealsense下载安装包 xff08 用git的
  • 利用ROS同时采集激光雷达、摄像头数据并提取信息

    利用ROS同时采集激光雷达 摄像头数据并提取信息 在实际工程中 xff0c 往往需要采集lidar和camera的信息 xff0c 并进行同步 xff0c 而二者的频率往往不一致 xff0c 比如相机的采集频率为30HZ xff0c 而ve
  • C#连接SQLserver数据库

    导入命名空间 span class token keyword using span span class token namespace System span class token punctuation span Configura
  • MTK编译记录

    MTK编译记录 系统编译1 Q FAILED check kernel config 系统编译 1 Q FAILED check kernel config bin bash c python device mediatek build b
  • Git回退到指定版本

    Git版本回退 xff0c 在idea中不方便操作 xff0c 需进行强制提交 主要使用reset和push f进行强制回退 1 git 命令行回退到某个指定的版本 1 在开发过程中遇到合并别人的代码或者合并主分支的代码导致自己的分支代码冲
  • 四旋翼无人机crazepony烧写流程

    开源crazepony 自上而下 xff0c 从产品到底层的学习方法是效率比较高的 事前准备 xff1a 编译stm程序用的是Keil 5 xff0c 官方推荐用5不用4 4不支持Unicode8 xff0c 怕是不支持中文输入 在用官方包
  • deb 打包、安装、卸载

    deb 打包 安装 卸载 deb 格式是 Debian 系统 包含 Debian 和 Ubuntu 专属安装包格式 dpkg 是 Debian下的包管理工具 xff0c 用来执行软件包的打包 解包 安装 卸载等命令 运行环境 xff1a D