feat: add configuration-preserving CUPS project updater

This commit is contained in:
Codex
2026-09-11 14:04:12 +08:00
parent 5f49605d24
commit 5f7e79b089
4 changed files with 895 additions and 10 deletions
+30 -1
View File
@@ -6,6 +6,7 @@
# 用法:
# 安装: chmod +x setup_cups.sh && ./setup_cups.sh
# 卸载: ./setup_cups.sh --uninstall
# 更新: ./setup_cups.sh --update
#
set -e
@@ -55,6 +56,24 @@ download_repo_archive() {
curl -fsSL -o "$output_file" "$REPO_ARCHIVE_FALLBACK_URL" 2>/dev/null
}
# 独立更新入口,不调用安装或配置函数。
update_cups() {
check_root
command -v python3 >/dev/null 2>&1 || error "更新功能需要 Python 3.9+,请先安装 Python 3"
# 在子 shell 中下载独立更新器,不调用安装流程或覆盖当前安装脚本。
(
update_dir=$(mktemp -d)
trap 'rm -f "$update_dir/update_cups.py"; rmdir "$update_dir" 2>/dev/null || true' EXIT
update_url="https://git.workyai.cn/237899745/S905L3A/raw/branch/master/update_cups.py"
info "正在下载更新器..."
if ! curl -fsSL --connect-timeout 15 --max-time 120 -o "$update_dir/update_cups.py" "$update_url" && \
! wget -q --timeout=30 --tries=2 -O "$update_dir/update_cups.py" "$update_url"; then
error "更新器下载失败,未修改已安装文件"
fi
python3 -B "$update_dir/update_cups.py" --archive-url "$REPO_ARCHIVE_URL" "$@"
)
}
# 检查是否为root用户
check_root() {
if [ "$(id -u)" != "0" ]; then
@@ -2034,6 +2053,8 @@ show_help() {
echo " $0 显示主菜单"
echo " $0 --install 直接安装 CUPS 打印服务"
echo " $0 --uninstall 直接卸载 CUPS 打印服务"
echo " $0 --update 更新已安装的程序,保留配置和密码"
echo " 可追加 --dry-run(仅检查)或 --yes(确认更新)"
echo " $0 --driver-manager-auth"
echo " 修改驱动管理器用户名和密码"
echo " $0 --help 显示此帮助信息"
@@ -2147,9 +2168,10 @@ show_menu() {
echo " 5) 查看当前网络状态(静态/DHCP)"
echo " 6) 一键共享所有打印机"
echo " 7) 修改驱动管理器用户名和密码"
echo " 8) 更新已安装程序(保留配置和密码)"
echo " 0) 退出"
echo ""
read -p " 请输入选项 [0-7]: " choice < /dev/tty
read -p " 请输入选项 [0-8]: " choice < /dev/tty
case "$choice" in
1)
@@ -2192,6 +2214,9 @@ show_menu() {
read -p "按 Enter 返回主菜单..." < /dev/tty
show_menu
;;
8)
update_cups
;;
0)
echo "已退出"
exit 0
@@ -2212,6 +2237,10 @@ case "${1:-}" in
--install|-i)
main
;;
--update)
shift
update_cups "$@"
;;
--driver-manager-auth|--dm-auth)
change_driver_manager_auth
;;