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:
@@ -28,6 +28,59 @@ check_root() {
|
|||||||
fi
|
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() {
|
detect_os() {
|
||||||
if [ -f /etc/os-release ]; then
|
if [ -f /etc/os-release ]; then
|
||||||
@@ -782,6 +835,9 @@ main() {
|
|||||||
info "开始安装..."
|
info "开始安装..."
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
|
# 0. 解决 apt 锁问题
|
||||||
|
fix_apt_lock
|
||||||
|
|
||||||
# 1. 换源(如果选择)
|
# 1. 换源(如果选择)
|
||||||
if [[ "$change_mirror" =~ ^[Yy]$ ]]; then
|
if [[ "$change_mirror" =~ ^[Yy]$ ]]; then
|
||||||
change_to_china_mirror
|
change_to_china_mirror
|
||||||
|
|||||||
Reference in New Issue
Block a user