Skip to content

第三章 软件包 更新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

  1. perinst
    执行时机:安装软件包之前执行
    主要任务:

    • 停止正在运行的服务,以避免安装过程中出现冲突或错误。
    • 检查系统环境,确保安装的先决条件已经满足。
    • 执行其他安装前的准备工作,如备份现有配置文件等。
  2. postinst
    执行时机:安装软件包之后执行
    主要任务:

    • 创建必要的用户和组。
    • 设置文件和目录的权限。
    • 启动或重新启动相关服务,以确保软件包正常运行。
    • 提示用户输入必要的配置信息,或者进行其他安装后的配置工作。
  3. prerm
    执行时机:删除软件包之前执行
    主要任务:

    • 停止正在运行的服务,以避免删除过程中出现错误或服务中断。
    • 删除临时文件或缓存文件。
    • 执行其他删除前的清理工作,如备份重要数据等。
  4. postrm
    执行时机:删除软件包之后执行
    主要任务:

    • 删除不再需要的用户和组。
    • 删除日志文件或配置文件(取决于删除命令的选项)。
    • 执行其他删除后的清理工作,以保持系统的整洁和安全。
脚本参数触发时机
preinstinstall包内容解压前
upgrade升级时(旧版本)
remove卸载时
postinstconfigure包内容解压后(首次安装或升级)
abort-upgrade升级失败时
prermremove卸载前
upgrade升级前(新版本 prerm 被调用)
postrmremove卸载后(文件已删除)
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/               # 共享文件
└── ...

第二部分 RetHat