统信UOS(Debian)环境 pyinstaller 打包 Python 程序DEBIAN 文件夹并设置自动安装依赖程序
DEBIAN/control
Debian 软件包(.deb)的 “身份文件”,存放包的名称、版本、依赖、维护者等关键信息,其格式有严格规范。
Package: example-tool
Version: develop-env
Section: utils
Priority: optional
Architecture: arm64
Depends: yad,unzip,p7zip-full
Maintainer: Yogile <575969143@qq.com>
Description: 动态更新工具
动态更新工具: 此uos arm64 ft2000版本
仅支持统信UOS飞腾TF2000芯片且为1070及以上版本系统
说明:
| 字段 | 行为差异 |
|---|---|
Pre-Depends |
严格要求依赖包在本包安装之前已安装,dpkg 不会自动处理 |
Depends |
允许依赖包和本包一起安装,使用 apt install ./xxx.deb 时会自动处理 |
DEBIAN/postinst
Debian 软件包(.deb)中的一个维护脚本,全称为 post-installation,直译是 “安装后”。它在软件包安装完成(文件解压到系统后)自动执行,用于完成软件安装后的收尾配置工作(比如创建用户、启动服务、生成配置文件、设置权限等)。
#!/bin/sh
set -e
APP_DIR="/opt/apps/example-tool"
APP_NAME="example-tool_linux_arm64_normal"
BACKUP_DIR="/tmp/example-tool-backup"
# 设置目录权限
mkdir -p "$APP_DIR"
chown root:root "$APP_DIR"
chmod 755 "$APP_DIR"
# 设置可执行权限
chmod +x "$APP_DIR/$APP_NAME"
chmod +x "$APP_DIR/Updater"
# 恢复用户配置
if [ -f "$BACKUP_DIR/app_config.ini" ]; then
echo "postinst: 恢复用户配置 (app_config.ini)..."
cp "$BACKUP_DIR/app_config.ini" "$APP_DIR/" || true
fi
# 恢复 depend/config.ini
if [ -f "$BACKUP_DIR/depend/config.ini" ]; then
echo "postinst: 恢复用户配置 (depend/config.ini)..."
mkdir -p "$APP_DIR/depend"
cp "$BACKUP_DIR/depend/config.ini" "$APP_DIR/depend/" || true
fi
# 恢复当前模板文件
if [ -f "$BACKUP_DIR/lib/当前模板1月1日都江堰市党政班子领导政务活动预报.docx" ]; then
echo "postinst: 恢复当前模板文件..."
mkdir -p "$APP_DIR/depend/lib"
cp "$BACKUP_DIR/lib/当前模板1月1日都江堰市党政班子领导政务活动预报.docx" "$APP_DIR/depend/lib/" || true
fi
# 确保配置文件可写
chmod +w "$APP_DIR/app_config.ini" || true
# 恢复输出目录
if [ -d "$BACKUP_DIR/输出" ]; then
echo "postinst: 恢复输出目录..."
cp -r "$BACKUP_DIR/输出" "$APP_DIR/" || true
fi
# 创建输出目录(如果不存在)
mkdir -p "$APP_DIR/输出"
chmod 755 "$APP_DIR/输出"
# 清理备份
rm -rf "$BACKUP_DIR"
# 更新桌面数据库
update-desktop-database || true
echo "postinst: 安装完成"
exit 0
DEBIAN/postrm
负责卸载 / 移除阶段后续清理的关键脚本,配套的核心控制文件。
#!/bin/sh
set -e
APP_DIR="/opt/apps/example-tool"
# 完全卸载模式
if [ "$1" = "purge" ] || [ "$1" = "remove" ]; then
# 清理桌面数据库
update-desktop-database 2>/dev/null || true
# 清理残留目录
if [ -d "$APP_DIR" ]; then
echo "postrm: 清理残留文件..."
rm -rf "$APP_DIR"
fi
fi
echo "postrm: 卸载完成"
exit 0
DEBIAN/preinst
负责安装 / 升级前执行的关键维护脚本,直译是 “安装前”,它在 Debian 包的文件被解压到系统之前自动执行,核心职责是为安装 / 升级操作做前置准备。
#!/bin/sh
set -e
APP_DIR="/opt/apps/example-tool"
BACKUP_DIR="/tmp/example-tool-backup"
# 检查并停止运行中的程序(只匹配已安装的实际程序进程,避免误杀安装进程)
echo "preinst: 检查运行中的程序..."
if pgrep -f "/opt/apps/example-tool/" > /dev/null 2>&1; then
echo "preinst: 检测到程序正在运行,尝试关闭..."
pkill -f "/opt/apps/example-tool/" || true
sleep 1
fi
# 备份用户配置
if [ -f "$APP_DIR/app_config.ini" ]; then
echo "preinst: 备份用户配置 (app_config.ini)..."
mkdir -p "$BACKUP_DIR"
cp "$APP_DIR/app_config.ini" "$BACKUP_DIR/" || true
fi
# 备份 depend/config.ini
if [ -f "$APP_DIR/depend/config.ini" ]; then
echo "preinst: 备份用户配置 (depend/config.ini)..."
mkdir -p "$BACKUP_DIR/depend"
cp "$APP_DIR/depend/config.ini" "$BACKUP_DIR/depend/" || true
fi
# 备份当前模板文件(用户可能已修改)
if [ -f "$APP_DIR/depend/lib/当前模板1月1日都江堰市党政班子领导政务活动预报.docx" ]; then
echo "preinst: 备份当前模板文件..."
mkdir -p "$BACKUP_DIR/lib"
cp "$APP_DIR/depend/lib/当前模板1月1日都江堰市党政班子领导政务活动预报.docx" "$BACKUP_DIR/lib/" || true
fi
# 备份输出目录内容
if [ -d "$APP_DIR/输出" ]; then
echo "preinst: 备份输出目录..."
mkdir -p "$BACKUP_DIR"
cp -r "$APP_DIR/输出" "$BACKUP_DIR/" || true
fi
echo "preinst: 预处理完成"
DEBIAN/prerm
负责软件包移除 / 升级前的预处理工作,直译是 “移除前”。它在 Debian 包被卸载(remove)、彻底删除(purge) 或升级时,先于文件删除 / 替换执行。
#!/bin/sh
set -e
APP_DIR="/opt/apps/example-tool"
# 停止运行中的程序(只匹配已安装的实际程序进程)
echo "prerm: 检查运行中的程序..."
if pgrep -f "/opt/apps/example-tool/" > /dev/null 2>&1; then
echo "prerm: 检测到程序正在运行,尝试关闭..."
pkill -f "/opt/apps/example-tool/" || true
sleep 1
fi
# 清理菜单缓存
update-desktop-database || true
echo "prerm: 预处理完成"

浙公网安备 33010602011771号