Ubuntu 22.04 ARM自动化部署中自动更新引发的APT锁定及交互问题求助
Ubuntu 22.04 ARM自动化部署中自动更新引发的APT锁定及交互问题求助
我完全懂你这种自动化部署被打断的头疼——本来想一键搞定服务器配置,结果被自动更新的APT锁和交互提示卡得死死的,尤其是ARM版22.04还比18.04多了不少默认自动更新的配置。给你梳理几个针对性的解决办法:
一、彻底管控unattended-upgrades,避免自动触发
你看到的unattended-upgrades/jammy,now 2.8ubuntu1 all [installed,automatic]说明这个包是系统自动安装的,咱们可以把它改成手动标记,同时彻底禁用相关服务,确保它不会在首次启动时偷偷跑起来:
- 先停止并禁用自动更新服务:
sudo systemctl stop unattended-upgrades sudo systemctl disable --now unattended-upgrades - 把包标记为手动安装,这样系统就不会把它当成自动维护的组件:
sudo apt-mark manual unattended-upgrades - 最后修改APT自动更新的配置文件,彻底关闭触发开关:
编辑/etc/apt/apt.conf.d/20auto-upgrades,把里面的两个1改成0:
这样不管是服务还是APT定时任务,都不会触发自动更新了。APT::Periodic::Update-Package-Lists "0"; APT::Periodic::Unattended-Upgrade "0";
二、不用硬编码sleep,优雅等待APT锁释放
如果实在需要等系统默认的更新进程跑完(比如你不想直接禁用,只是想等它结束再继续),可以用进程检测代替固定sleep时间,写个循环直到锁文件被释放:
# 等待APT锁定释放 while sudo fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do echo "等待其他APT进程完成..." sleep 3 done
这个脚本会每隔3秒检查一次,直到没有进程占用APT锁为止,比瞎猜sleep时间靠谱多了。
三、解决apt-get upgrade的交互回车问题
你碰到的需要按回车的情况,大概率是系统提示是否覆盖配置文件(比如某些软件的配置更新了)。可以通过设置非交互式环境变量+强制参数来跳过所有交互:
DEBIAN_FRONTEND=noninteractive sudo apt-get upgrade -y --force-confdef --force-confold
DEBIAN_FRONTEND=noninteractive:告诉APT不要弹出任何交互提示--force-confdef:优先使用默认配置--force-confold:如果没有默认配置,就保留当前的旧配置
这样整个升级过程就会完全自动化,不会停下来等你回车。
这些方法我在AWS的ARM实例自动化部署里亲测有效,应该能解决你的问题!
备注:内容来源于stack exchange,提问作者LeviRCoding




