diff --git a/setup_cups.sh b/setup_cups.sh index 59cf2ff..fbdd749 100755 --- a/setup_cups.sh +++ b/setup_cups.sh @@ -28,6 +28,59 @@ check_root() { fi } +# 解决 apt 锁问题(停止自动更新服务) +fix_apt_lock() { + info "检查 apt 锁状态..." + + # 检查是否有 unattended-upgrades 进程 + if pgrep -x "unattended-upgr" > /dev/null 2>&1; then + warn "检测到自动更新服务正在运行,正在停止..." + + # 停止 unattended-upgrades 服务 + systemctl stop unattended-upgrades 2>/dev/null || true + + # 等待进程结束(最多等待30秒) + local count=0 + while pgrep -x "unattended-upgr" > /dev/null 2>&1 && [ $count -lt 30 ]; do + sleep 1 + ((count++)) + echo -ne "\r 等待自动更新进程结束... ${count}s" + done + echo "" + + # 如果还在运行,强制结束 + if pgrep -x "unattended-upgr" > /dev/null 2>&1; then + warn "强制结束自动更新进程..." + killall unattended-upgr 2>/dev/null || true + sleep 2 + fi + + success "自动更新服务已停止" + fi + + # 检查是否有其他 apt 进程 + if fuser /var/lib/dpkg/lock-frontend > /dev/null 2>&1; then + warn "检测到其他 apt 进程,等待其完成..." + local count=0 + while fuser /var/lib/dpkg/lock-frontend > /dev/null 2>&1 && [ $count -lt 60 ]; do + sleep 1 + ((count++)) + echo -ne "\r 等待 apt 锁释放... ${count}s" + done + echo "" + fi + + # 清理可能残留的锁文件 + rm -f /var/lib/dpkg/lock-frontend 2>/dev/null || true + rm -f /var/lib/dpkg/lock 2>/dev/null || true + rm -f /var/cache/apt/archives/lock 2>/dev/null || true + + # 修复可能中断的安装 + dpkg --configure -a 2>/dev/null || true + + success "apt 锁检查完成" +} + # 检测系统版本和架构 detect_os() { if [ -f /etc/os-release ]; then @@ -782,6 +835,9 @@ main() { info "开始安装..." echo "" + # 0. 解决 apt 锁问题 + fix_apt_lock + # 1. 换源(如果选择) if [[ "$change_mirror" =~ ^[Yy]$ ]]; then change_to_china_mirror