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

如何在Ubuntu云配置自动安装过程中阻止内核自动更新并固定内核版本

如何在Ubuntu云配置自动安装过程中阻止内核自动更新并固定内核版本

我完全懂你这个痛点——用Packer做Ubuntu自动安装时,明明安装镜像里是5.15.0-25的内核,重启后却自动跳到最新版,害得你每次都要重新编译应用,太折腾了。咱们来一步步调整你的cloud-config配置,把内核版本牢牢固定住。

问题出在哪?

你之前尝试的方法没生效,主要是这几个原因:

  • 没彻底禁用Ubuntu默认的unattended-upgrades自动更新服务,哪怕安装过程没升级,系统启动后它还是会偷偷更内核;
  • apt-mark hold的时机不对,先锁定了generic包却没先安装指定内核版本,导致后续逻辑混乱;
  • 禁用源的配置太激进,反而让apt找不到你要的内核包。

调整后的完整配置方案

下面是修改后的cloud-config,我会标注关键改动点:

#cloud-config
# 关键:在顶层设置,阻止安装过程中的包更新/升级
package_update: false
package_upgrade: false

autoinstall:
  version: 1
  early-commands:
    # 保留你原有的ssh workaround
    - sudo systemctl stop ssh
    # 关键:提前禁用自动更新服务,从源头阻止内核升级
    - sudo systemctl disable --now unattended-upgrades
  packages: [open-vm-tools, openssh-server, curl, wget]
  network:
    network:
      version: 2
      ethernets:
        ens160:
          dhcp4: true
  identity:
    hostname: ubuntu-appliance
    username: ubuntu
    password: "$6$rounds=4096$ntlX/dlo6b$HXaLN4RcLIGaEDdQdR2VTYi9pslSeXWL131MqaakqE285Nv0kW9KRontQYivCbycZerUMcjVsuLl2V8bbdadI1"
  ssh:
    install-server: true
    allow-pw: true
    authorized-keys:
      - ssh-rsa   <key>
  user-data:
    disable_root: false
  late-commands:
    # 保留你原有的sudo权限配置
    - echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu
    - curtin in-target --target=/target -- chmod 440 /etc/sudoers.d/ubuntu
    # 关键步骤1:先更新源(只更一次,找得到指定内核包就行)
    - curtin in-target --target=/target -- apt-get update -y
    # 关键步骤2:安装你指定的内核版本及配套headers
    - curtin in-target --target=/target -- apt-get install -y linux-image-5.15.0-89-generic linux-headers-5.15.0-89-generic linux-image-generic linux-headers-generic
    # 关键步骤3:把相关内核包全部标记为锁定,彻底阻止升级
    - curtin in-target --target=/target -- apt-mark hold linux-image-5.15.0-89-generic linux-headers-5.15.0-89-generic linux-image-generic linux-headers-generic linux-image-unsigned-5.15.0-89-generic

配置说明

  1. 顶层的package设置:package_update: false和package_upgrade: false要放在cloud-config的最外层,这样autoinstall过程中不会触发全局包升级。
  2. 禁用unattended-upgrades:在early-commands里提前关掉这个服务,避免系统启动后自动拉取安全更新(内核更新属于安全更新范畴)。
  3. 安装并锁定指定内核:先安装你要的5.15.0-89版本内核及配套的headers,再把所有相关包标记为hold——包括具体版本包和generic元包,这样apt就不会再升级它们了。

验证方法

部署完VM后,登录执行以下命令确认:

  • uname -r:查看当前运行的内核版本是否为5.15.0-89-generic
  • apt-mark showhold:查看被锁定的包列表,确认所有内核相关包都在里面

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 12:44:36