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

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 package3
    
    如果有些包依赖比较复杂,也可以用apt-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
        - package3
    
    这里trusted=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

火山引擎 最新活动