Ubuntu 22.04 Server自动安装环境下如何离线安装软件包
Ubuntu 22.04 Server自动安装环境下如何离线安装软件包
刚好我之前也碰到过一模一样的离线自动安装需求,折腾了几次后总结出一套可行的流程,给你一步步拆解:
1. 提前下载所需软件包及依赖
首先得在一台**联网的同版本Ubuntu Server(22.04 amd64)**机器上操作,确保下载的包和目标环境完全兼容:
- 先创建一个专门的目录存放离线包:
mkdir ~/offline-packages - 使用
apt-get下载指定包及其所有依赖(会自动把所有相关deb包下载到目标目录):
如果有些包依赖比较复杂,也可以用sudo apt-get download --download-only -o Dir::Cache::archives="./offline-packages/" package1 package2 package3apt-offline工具来更精准地处理离线依赖,不过上面的命令对大多数场景已经足够。
2. 将离线包加入自定义ISO
既然你已经会打包autoinstall文件到ISO里,那这一步只需要把离线包目录也整合进去:
- 挂载原Ubuntu Server ISO到临时目录:
sudo mount -o loop ubuntu-22.04-server-amd64.iso /mnt/iso - 创建ISO工作目录并复制原ISO内容:
mkdir ~/custom-iso cp -r /mnt/iso/* ~/custom-iso/ sudo umount /mnt/iso - 在工作目录里创建离线包目录,把之前下载的deb包全部复制进去:
mkdir ~/custom-iso/offline-packages cp ~/offline-packages/*.deb ~/custom-iso/offline-packages/
3. 修改autoinstall配置,指定离线源安装
接下来要调整你的user-data文件,让subiquity在安装时优先使用ISO里的离线包:
- 在
apt配置段里添加本地源,并列出要安装的包:
这里apt: # 禁用默认的网络源,避免尝试联网 disable_components: [] sources: - source: "deb [trusted=yes] file:///media/cdrom/offline-packages ./" packages: - package1 - package2 - package3trusted=yes是因为离线包没有通过在线源的签名校验,必须加上才能正常安装。 - 如果安装过程中系统没有自动挂载ISO到
/media/cdrom,可以在early-commands里手动添加挂载命令:early-commands: - mount /dev/cdrom /media/cdrom
4. 重新打包自定义ISO
最后一步就是把修改后的内容重新打包成可引导的ISO:
genisoimage -r -V "Custom Ubuntu Server 22.04" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o custom-ubuntu-22.04-autoinstall.iso ~/custom-iso/
如果你的系统里没有genisoimage,可以先安装:sudo apt install genisoimage
这样生成的ISO在离线环境下执行自动安装时,就会自动从本地ISO里读取deb包完成安装,完全不需要联网啦。
备注:内容来源于stack exchange,提问作者Mr. T




