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

离线(Air-gaped)Ubuntu 20.04仓库更新问题求助

离线(Air-gaped)Ubuntu 20.04仓库更新问题求助

Hey Travis,作为刚上手离线环境的Linux管理员,踩这个坑真的太正常了——光手动下载.deb包和依赖确实行不通,因为离线仓库需要的不只是包文件,还有一套完整的仓库索引文件(比如Packages、Release这类),才能让客户端机器识别到可用的更新。我来给你梳理两种靠谱的解决方案,你可以根据自己的需求选:

方法一:用apt-mirror同步完整仓库(适合长期维护内部repo)

这种方法是在联网机器上完整同步Ubuntu官方源的指定内容,然后迁移到你的内部repo服务器,适合需要给多台离线机器提供更新的场景:

  1. 在一台联网的Ubuntu 20.04机器上安装apt-mirror工具:
    sudo apt update && sudo apt install apt-mirror -y
    
  2. 编辑/etc/apt/mirror.list配置文件,只同步你需要的组件和版本(比如20.04的focal版本,main、universe这些常用库):
    set base_path /var/spool/apt-mirror
    set mirror_path $base_path/mirror
    set skel_path $base_path/skel
    set var_path $base_path/var
    set cleanscript $var_path/clean.sh
    set defaultarch amd64  # 你的机器架构,如果是32位改i386
    set postmirror_script $var_path/postmirror.sh
    set run_postmirror 0
    set nthreads 10  # 同步线程数,根据网络调整
    
    # 同步Ubuntu核心源、更新源、安全源
    deb http://archive.ubuntu.com/ubuntu focal main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu focal-updates main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu focal-security main restricted universe multiverse
    # 如果需要backports源可以加上下面这行
    # deb http://archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse
    
  3. 开始同步仓库:
    sudo apt-mirror
    
    这个过程会自动下载所有指定的.deb包和对应的索引文件,首次同步可能耗时较长,之后增量同步会快很多。
  4. 同步完成后,把/var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu整个目录打包:
    sudo tar -czf ubuntu-repo-focal.tar.gz /var/spool/apt-mirror/mirror/archive.ubuntu.com/ubuntu
    
  5. 通过U盘/移动硬盘等离线方式把压缩包传到你的内部repo服务器,解压到web服务目录(比如用Apache的话,解压到/var/www/html/ubuntu):
    sudo mkdir -p /var/www/html/ubuntu
    sudo tar -xzf ubuntu-repo-focal.tar.gz -C /var/www/html/ubuntu --strip-components=5
    
  6. 在内部repo服务器上重新生成仓库索引(确保客户端能识别):
    cd /var/www/html/ubuntu
    sudo apt-ftparchive packages . > Packages
    sudo gzip -c Packages > Packages.gz
    sudo apt-ftparchive release . > Release
    
  7. 最后在所有离线客户端的/etc/apt/sources.list里替换成你的内部repo地址:
    sudo sed -i 's|http://archive.ubuntu.com/ubuntu|http://你的repo服务器IP/ubuntu|g' /etc/apt/sources.list
    

方法二:用apt-offline按需下载更新(适合只给特定机器更新的场景)

如果不需要维护完整仓库,只是给单台或少量机器更新,可以用apt-offline工具精准下载所需的包:

  1. 在离线机器上生成更新请求文件:
    sudo apt-offline set /tmp/update-request.sig --upgrade
    
    这个文件会记录当前机器需要的所有更新包和依赖关系。
  2. 把update-request.sig传到联网机器上,下载对应包的压缩包:
    sudo apt-offline get /tmp/update-request.sig --bundle /tmp/update-bundle.zip
    
  3. 把update-bundle.zip传回离线机器,执行安装:
    sudo apt-offline install /tmp/update-bundle.zip
    
    如果要把这些包加到内部repo,只需要把zip里的.deb文件放到repo的对应目录,然后重新执行方法一里的生成索引步骤就行。

为什么你之前的方法失败?

你只下载.deb包和依赖没成功,核心原因是缺少仓库索引文件。Ubuntu的apt客户端是通过Packages、Release这些文件来获取包的版本信息、依赖关系的,光有.deb文件的话,内部repo服务器没法告诉客户端“这些包是可用的更新”,自然就识别不了。

一些小提示

  • 如果内部repo用HTTP服务,记得安装Apache或Nginx,确保离线机器能访问到repo目录:sudo apt install apache2 -y
  • 定期更新内部repo时,重复apt-mirror的同步、打包、迁移、重新生成索引步骤即可,它会自动增量更新,不用每次重新下载全部内容。
  • 如果需要第三方软件源(比如Docker、Nginx),可以在mirror.list里添加对应的源地址,同步方法和官方源一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:13:05