You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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]说明这个包是系统自动安装的,咱们可以把它改成手动标记,同时彻底禁用相关服务,确保它不会在首次启动时偷偷跑起来:

  1. 先停止并禁用自动更新服务:
    sudo systemctl stop unattended-upgrades
    sudo systemctl disable --now unattended-upgrades
    
  2. 把包标记为手动安装,这样系统就不会把它当成自动维护的组件:
    sudo apt-mark manual unattended-upgrades
    
  3. 最后修改APT自动更新的配置文件,彻底关闭触发开关:
    编辑/etc/apt/apt.conf.d/20auto-upgrades,把里面的两个1改成0
    APT::Periodic::Update-Package-Lists "0";
    APT::Periodic::Unattended-Upgrade "0";
    
    这样不管是服务还是APT定时任务,都不会触发自动更新了。

二、不用硬编码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

火山引擎 最新活动