第三章 软件包 更新ing
第一部分 Debian(deb)
一、组成部分
1.文件结构
text
.
├── DEBIAN
│ ├── control
│ ├── conffiles
│ ├── preinst
│ ├── postinst
│ ├── prerm
│ └── postrm
├── usr
│ ├── bin
│ │ └── software
└── etc
└── core.conf
在此项目结构中,除了DEBIAN文件夹用于控制dpkg程序打包流程,其他文件将在复制阶段被复制到安装主机对应位置。
2.control
text
# 必须包含的内容
Package: app # 指该软件包的名字。如果你的软件包名称有两个词,用一个连字符(-)把它们连起来。软件包的名称只能有小写的英文字母,数字以及"+"和"-"。
Version: 1.0 # 程序的版本,确保这里的值不包括连字符。
Section: admin # 列出了你的软件属于的类别,可能的值包括admin(管理),games(游戏),gnome,kde,mail(电子邮件),misc(杂项)<译者注:misc是miscellaneous的简称>,net(网络),sound(声音),text(文本),utils(实用工具)和web(万维网)
Priority: optional # 声明这个包的优先级(大部分的时候使用optional(可选的))
Architecture: amd64 # 是该程序可运行的CPU架构(可能的值为i386,amd64和powerpc)
Maintainer: user # 软件包编写者以及联系方式(写上你的名字,后面的方括号"[ ]"里留下你的电子邮件地址)
Description: app description # 软件包的描述
3.preinst/postinst/prerm/postrm
perinst
执行时机:安装软件包之前执行
主要任务:- 停止正在运行的服务,以避免安装过程中出现冲突或错误。
- 检查系统环境,确保安装的先决条件已经满足。
- 执行其他安装前的准备工作,如备份现有配置文件等。
postinst
执行时机:安装软件包之后执行
主要任务:- 创建必要的用户和组。
- 设置文件和目录的权限。
- 启动或重新启动相关服务,以确保软件包正常运行。
- 提示用户输入必要的配置信息,或者进行其他安装后的配置工作。
prerm
执行时机:删除软件包之前执行
主要任务:- 停止正在运行的服务,以避免删除过程中出现错误或服务中断。
- 删除临时文件或缓存文件。
- 执行其他删除前的清理工作,如备份重要数据等。
postrm
执行时机:删除软件包之后执行
主要任务:- 删除不再需要的用户和组。
- 删除日志文件或配置文件(取决于删除命令的选项)。
- 执行其他删除后的清理工作,以保持系统的整洁和安全。
脚本 | 参数 | 触发时机 |
---|---|---|
preinst | install | 包内容解压前 |
upgrade | 升级时(旧版本) | |
remove | 卸载时 | |
postinst | configure | 包内容解压后(首次安装或升级) |
abort-upgrade | 升级失败时 | |
prerm | remove | 卸载前 |
upgrade | 升级前(新版本 prerm 被调用) | |
postrm | remove | 卸载后(文件已删除) |
purge | 完全清除(包括配置文件) |
4.conffiles
用于告诉 dpkg 在删除软件包时,指定保留哪些配置文件
text
/etc/conf
/etc/apache2/httpd.conf
二、dpkg常见命令执行流程
1.dpkg -i (安装)
- 执行 preinst 脚本。
- 复制新版本的文件。
- 执行 postinst 脚本。
2.dpkg -i (升级)
在系统中已经安装对应软件包的情况下,会先删除旧版本文件并安装新版本
- 执行 prerm 脚本(旧版本)。
- 执行 preinst 脚本(新版本)。
- 文件删除(旧版本,保留配置文件)
- 执行 postrm 脚本(旧版本)。
- 复制新版本文件(不复制配置文件)
- 执行 postinst 脚本(新版本)。
3.dpkg -r
- 执行 prerm 脚本(旧版本)。
- 文件删除(保留配置文件)
- 执行 postrm 脚本(旧版本)。
4.dpkg -P
- 执行 prerm 脚本(旧版本)。
- 文件删除
- 执行 postrm 脚本(旧版本)。
三、构建deb包
bash
dpkg -b <源目录> [输出包名.deb]
text
package_name/ # 包名(自定义)
├── DEBIAN/ # 控制目录(必须大写)
│ ├── control # 包的元数据(必选)
│ ├── preinst # 安装前脚本(可选)
│ ├── postinst # 安装后脚本(可选)
│ ├── prerm # 卸载前脚本(可选)
│ ├── postrm # 卸载后脚本(可选)
│ └── ... # 其他控制文件(如conffiles, md5sums等)
| # * 以下为实际安装内容
├── bin/ # 二进制文件
├── etc/ # 配置文件
├── usr/ # 共享文件
└── ...