Ubuntu Server 20.04离线自动安装时如何指定预下载的内核包进行安装?
Ubuntu Server 20.04离线自动安装时如何指定预下载的内核包进行安装?
嘿,我来帮你搞定这个离线安装特定内核的问题!针对Ubuntu Server的autoinstall系统,核心思路和老的preseed有点相似——都是让安装器能找到本地的包源,但配置方式略有不同,下面一步步来:
第一步:整理本地内核包的目录结构
首先,把你预下载好的三个内核相关deb包(linux-image-5.15.0-58-generic.deb、linux-modules-extra-5.15.0-58-generic.deb、linux-headers-5.15.0-58-generic.deb)放到安装镜像的/cdrom/local-packages目录下(目录名可以自定义,只要后续配置对应上就行)。
然后,在本地电脑(非安装环境)进入这个local-packages目录,生成APT需要的索引文件——离线源必须要有索引才能被识别,执行命令:
dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz
执行完成后,目录里会多出Packages.gz文件,把这个文件也一起放到镜像的/cdrom/local-packages中。
第二步:修改你的user-data配置
接下来更新/nocloud/user-data,主要是添加本地源配置、禁用网络源(避免安装器尝试联网),确保内核包安装指向本地源。修改后的完整配置如下:
autoinstall: version: 1 identity: hostname: dev-pc username: dev-user password: encryptedpasswordhere locale: en_GB keyboard: layout: gb # 添加本地APT源配置,禁用默认网络源 sources: - source: "deb [trusted=yes] cdrom:/// local-packages/" disable_sources: true # 禁用所有默认网络源,避免离线报错 # 指定要安装的内核包,保持原包名即可 kernel: package: linux-image-5.15.0-58-generic packages: - linux-modules-extra-5.15.0-58-generic - linux-headers-5.15.0-58-generic late-commands: - cp -r /cdrom/install /target/ - curtin in-target mkdir /etc/systemd/system/getty@tty1.service.d - curtin in-target cp /install/override_dev.conf /etc/systemd/system/getty@tty1.service.d/override.conf user-data: runcmd: - mv /install /home/dev-user/ - chown -R dev-user /home/dev-user/install - /bin/sh -c 'echo "bash install/./postinstall_mgr.sh" >> /home/dev-user/.bashrc' - touch /etc/cloud/cloud-init.disabled - reboot now
关键细节说明
- sources配置:
deb [trusted=yes] cdrom:/// local-packages/告诉APT,本地CD-ROM里的local-packages目录是可信源;disable_sources: true会关闭所有默认网络源,避免离线环境下安装器报错。 - 内核包指定:不需要修改包名,APT会自动从本地源匹配对应名称的包。
- 镜像制作:确保
local-packages目录和修改后的nocloud目录都被加入安装镜像,安装过程中/cdrom会自动挂载,安装器就能访问到这些文件。
这样调整后,autoinstaller就会完全从你预下载的本地deb包安装指定内核,不需要联网啦!
备注:内容来源于stack exchange,提问作者Wezzoid




