You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform部署AWS EC2 Ubuntu实例时,远程执行命令因内核升级弹窗卡住的解决方法

Terraform部署AWS EC2 Ubuntu实例时,远程执行命令因内核升级弹窗卡住的解决方法

我太懂这个痛点了!Ubuntu在执行apt upgrade时偶尔弹出的「pending kernel upgrade」交互式弹窗,简直是非自动化脚本的噩梦——Terraform的remote-exec会一直卡在那儿等用户输入,完全没法自动完成部署。

其实咱们只需要给apt命令加上几个环境变量,强制它进入非交互式模式,就能彻底跳过所有需要人工确认的提示。具体做法如下:

核心解决思路

在所有apt相关的命令前,添加Debian/Ubuntu专属的环境变量,告诉系统不要弹出任何交互窗口:

  • DEBIAN_FRONTEND=noninteractive:全局禁用apt的交互式提示
  • APT_LISTCHANGES_FRONTEND=none:跳过包变更信息的展示提示
  • 额外可以加上--option Dpkg::Options::="--force-confold",确保升级时保持现有配置文件不变,避免配置冲突的提示

修改后的Terraform Provisioner代码

把你原来的remote-exec部分替换成下面的内容,重点看标注的修改处:

provisioner "remote-exec" {
  inline = [
    # 先设置非交互式环境变量,避免所有弹窗
    "export DEBIAN_FRONTEND=noninteractive",
    "export APT_LISTCHANGES_FRONTEND=none",
    # 更新包列表并升级,添加非交互式参数
    "sudo DEBIAN_FRONTEND=noninteractive apt update -y",
    "sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y --option Dpkg::Options::=\"--force-confold\"",
    # 添加并安装Adoptium OpenJDK仓库(无交互)
    "wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public | sudo tee /etc/apt/keyrings/adoptium.asc > /dev/null",
    "echo \"deb [signed-by=/etc/apt/keyrings/adoptium.asc] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main\" | sudo tee /etc/apt/sources.list.d/adoptium.list > /dev/null",
    "sudo DEBIAN_FRONTEND=noninteractive apt update -y",
    # 安装Java JDK 17(无交互)并查看版本
    "sudo DEBIAN_FRONTEND=noninteractive apt install temurin-17-jdk -y --option Dpkg::Options::=\"--force-confold\"",
    "java --version",
    # 添加并安装Jenkins仓库(无交互)
    "curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null",
    "echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null",
    "sudo DEBIAN_FRONTEND=noninteractive apt-get update -y",
    # 安装Jenkins(无交互)
    "sudo DEBIAN_FRONTEND=noninteractive apt-get install jenkins -y --option Dpkg::Options::=\"--force-confold\"",
    # 启动Jenkins并查看状态
    "sudo systemctl start jenkins",
    "sudo systemctl status jenkins",
    # 打印Jenkins初始密码
    "sudo cat /var/lib/jenkins/secrets/initialAdminPassword",
  ]
}

补充说明

  • 为什么要把DEBIAN_FRONTEND=noninteractive加到sudo后面?因为sudo默认会重置环境变量,直接export的变量可能不会被sudo继承,所以直接在sudo命令里指定更稳妥。
  • --force-confold参数会让dpkg在遇到配置文件冲突时,保留原来的配置文件而不是弹出选择提示,非常适合自动化场景。

这样修改后,你的Terraform部署就能全程自动完成,再也不会被内核升级的弹窗卡住啦!

备注:内容来源于stack exchange,提问作者busuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 14:09:51