feat: add configuration-preserving CUPS project updater
This commit is contained in:
@@ -14,6 +14,7 @@
|
||||
- 驱动管理器账号密码可通过脚本菜单修改
|
||||
- 网络和打印服务守护(断网自动切 DHCP,CUPS 卡死自动恢复)
|
||||
- 静态 IP 支持网关变更自愈:先切 DHCP,再按原静态 IP 尾号迁移到新网段
|
||||
- 独立程序更新(保留配置和密码,更新前备份,失败自动回滚)
|
||||
- 支持一键卸载
|
||||
|
||||
## 快速安装
|
||||
@@ -149,7 +150,8 @@ lpinfo -v | grep usb
|
||||
## 文件说明
|
||||
|
||||
```
|
||||
├── setup_cups.sh # 一键安装/卸载脚本
|
||||
├── setup_cups.sh # 安装/卸载/更新菜单
|
||||
├── update_cups.py # 独立更新器(Python 3.9+)
|
||||
├── watchdog/ # 网络和打印服务守护脚本
|
||||
├── cups-templates-zh_CN/ # 中文界面模板(65个文件)
|
||||
├── cups-docroot-zh_CN/ # CUPS 中文首页和前端汉化脚本
|
||||
@@ -191,20 +193,38 @@ python3 -B -m unittest discover -s tests -v
|
||||
|
||||
测试会模拟系统命令和驱动安装,不会修改真实网络、安装驱动或重启服务。
|
||||
覆盖守护锁释放与连续失败恢复、多网卡地址选择、APT 等待/超时、PDF 备用驱动、DEB 架构筛选和基础访问控制。
|
||||
通过这些测试不等于通过实机验证;USB 打印、AirPrint、NetworkManager/netplan 切换仍需在目标设备验证。
|
||||
更新器测试使用临时安装目录和模拟的 systemctl,覆盖预览、取消、配置保留、重复更新、服务状态恢复、写入失败及中断回滚。
|
||||
通过这些测试不等于通过实机验证;systemd 更新流程、USB 打印、AirPrint、NetworkManager/netplan 切换仍需在目标设备验证。
|
||||
|
||||
## 已部署设备升级提示
|
||||
## 更新已部署设备
|
||||
|
||||
更新 Git 仓库不会自动更新 `/opt` 下正在运行的文件。已安装设备需要部署更新后的
|
||||
`watchdog/network-watchdog.sh`、`watchdog/print-watchdog.sh` 到 `/opt/cups-watchdog/`,
|
||||
以及 `cups-driver-manager/driver_manager.py` 到 `/opt/cups-driver-manager/`,保留原有配置和账号密码。
|
||||
更新 Git 仓库不会自动更新设备上的程序。请在打印服务器的 **root 终端** 执行以下命令,
|
||||
或下载最新版 `setup_cups.sh` 后选择菜单 **8:更新已安装程序**。旧版安装脚本没有更新入口,需要先获取新版。
|
||||
|
||||
旧版守护脚本可能在 `/run/cups-watchdog/` 留下 `network.lock`、`print.lock` 目录。
|
||||
部署新文件后重启设备一次,可清除 `/run` 中的旧锁并加载新代码。
|
||||
不要在守护脚本仍运行时直接删除锁目录,以免破坏并发互斥。
|
||||
```bash
|
||||
# 下载最新版脚本并进入更新流程(显示文件清单后需要输入 y 确认)
|
||||
curl -fsSL https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash -s -- --update
|
||||
|
||||
# 仅检查和预览,不修改已安装文件、不停止服务
|
||||
curl -fsSL https://git.workyai.cn/237899745/S905L3A/raw/branch/master/setup_cups.sh | bash -s -- --update --dry-run
|
||||
|
||||
# 已有最新版脚本时;非交互环境可追加 --yes,明确确认更新
|
||||
bash setup_cups.sh --update --yes
|
||||
```
|
||||
|
||||
需要 Linux、systemd、Bash 和 Python 3.9+;缺少依赖时会退出,不会自动安装软件包。
|
||||
默认从 Gitea 的 `master` 下载,并检查压缩包路径和程序语法。下载失败会退出,不自动切到可能尚未同步的镜像。
|
||||
可信的离线仓库副本也可使用 `python3 update_cups.py --source-dir . --dry-run` 检查,去掉 `--dry-run` 后确认更新。
|
||||
|
||||
- 只替换已经安装且内容有变化的驱动管理器、两个守护脚本、中文模板和首页脚本;没有变化时不会重启服务。不会补装缺失的可选组件或新增文件,也不会执行安装脚本中的配置迁移。
|
||||
- 不改打印机队列、CUPS/网络/守护配置、账号密码、systemd 服务文件及开机启用状态;不升级系统软件包、不重启 CUPS。手工修改过的程序文件或中文页面会被仓库版本替换,请先看预览清单。
|
||||
- 更新前在 `/var/backups/cups-project/` 保存旧程序文件、校验值及原服务状态。先暂停原本运行的守护定时器,等待正在运行的守护检查结束,再替换文件。驱动管理器代码有变化时,其 Web 页面会短暂不可用。
|
||||
- 请在没有驱动上传/安装或手动守护操作时更新。检测到仍在运行的守护或驱动安装子进程会取消;不会强杀它们。确认守护空闲后,更新器会清理默认 `/run/cups-watchdog/` 中旧版遗留的空锁目录,无需为此重启设备。
|
||||
- 替换或服务启动检查失败时,会尝试自动恢复旧文件和原服务运行状态;备份始终保留。断电、磁盘损坏或强制杀进程不能保证自动回滚,应根据报错及备份内的 `manifest.json` 人工恢复。
|
||||
|
||||
## 更新日志
|
||||
|
||||
- 2026-09-11: 新增菜单第 8 项及 `--update`,支持更新预览、配置保留、备份校验、失败回滚和隔离回归测试。
|
||||
- 2026-09-11: 修复守护锁、多网卡静态 IP、APT 等待、PDF 备用驱动和多架构 DEB 安装问题,添加隔离回归测试。
|
||||
- 2024-12-01: 添加卸载功能、优化打印速度
|
||||
- 2024-11-30: 修复 CSS 兼容 CUPS 2.4.7、添加 PDF 打印机选项
|
||||
|
||||
Reference in New Issue
Block a user