fix: 添加自动解决apt锁问题的功能

- 新增 fix_apt_lock 函数,在安装前自动处理
- 自动停止 unattended-upgrades 服务
- 等待并清理残留的 apt 锁文件
- 自动修复可能中断的 dpkg 安装

解决安装时卡在 "Waiting for cache lock" 的问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-30 22:55:19 +08:00
parent 62730710ed
commit 31cdd5cc62

View File

@@ -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