ARTICLE · 1101475
在断网的银河麒麟系统上装个软件,真的很难?
我们将介绍如何使用Apt-offline工具对基于Debian的离线系统进行全面更新和升级。与之前的方法不同,这种方法不会只更新或升级单个软件包,而是整个系统。当您的网络速度较慢或完全无法连接互联网时,这种操作方式会非常有用。
想象一下这样的场景:你在工作时使用一台系统(Windows 或 Linux),并拥有高速互联网连接,而你家中的 Debian 或任何基于 Debian 的系统则没有网络连接,或者网络连接非常缓慢。
你想升级你的离线家庭系统,你会怎么做?购买高速互联网连接?其实并不必要!即使没有网络,你仍然可以更新或升级基于 Debian 的离线系统。这时 Apt-Offline 就派上用场了。
什么是apt-offline?
apt-offline 是 Debian/Ubuntu/ 银河麒麟 等 APT 系系统的离线包管理工具,实现断网机器更新系统、安装软件。Apt-offline 是一款使用 Python 编程语言编写的跨平台工具,提供命令行界面和图形界面。
核心流程三步:离线机生成签名文件 sig → 联网机根据 sig 下载全部依赖 → 拷回离线机执行安装
Requirements
一个连接互联网的系统,我们称之为“在线系统”。
“离线系统”(Debian 及其衍生系统)。
U盘或外接硬盘,需有足够的空间存放所有更新后的软件包。
⚠️ 重要前提:联网机和离线机必须是相同系统版本、相同 CPU 架构(x86_64/arm64),sources.list 源保持一致,否则包版本、架构不匹配会安装失败。 |
一、安装 apt-offline
离线机和联网机都需要安装(离线机如果还没装 apt-offline,只能手动 dpkg 先装上)
sudo apt updatesudo apt install apt-offline -y
升级离线 Debian 系统包括以下步骤:
进入离线系统,创建一个目录(例如 PkgUpdates),并生成更新所需文件的数据库。
将 PkgUpdates 目录复制到在线系统,并根据数据库文件下载所有软件包更新。
最后,通过USB传输下载的更新,或使用任何文件传输工具将它们复制到离线系统中,并安装这些更新。
二、三大核心子命令
1. apt-offline set(离线机器:生成签名文件 *.sig)
作用:扫描本机当前 APT 数据库,生成需求清单(sig 文件),记录需要更新 / 安装的包 + 依赖信息
语法:
sudo apt-offline set 签名文件.sig [选项] |
常用选项:
参数 | 说明 |
--update | 等效 apt update,只下载源索引包列表 |
--upgrade | 等效 apt upgrade,系统全量升级 |
--install-packages pkg1 pkg2 | 指定要离线安装的软件包,自动包含全部依赖 |
--release jammy | 指定系统发行版代号(如 jammy=Ubuntu22.04) |
--simulate | 模拟运行,不生成文件,仅测试 |
--verbose | 详细输出调试 |
示例:
# 场景1:生成系统更新+升级的sig(update + upgrade) # 场景2:只安装指定软件(例如安装nginx) # 场景3:仅更新源列表(只做apt update) |
2. apt-offline get(联网机器:读取 sig,下载所有 deb 包)
把离线机生成的 .sig 文件拷贝到联网电脑,执行下载,两种输出方式:
--bundle xxx.zip:打包成单个 zip 压缩包,U 盘传输最方便
-d /path/folder:下载到目录,不打包,支持断点续传
语法:
sudo apt-offline get 签名文件.sig [选项] |
常用选项:
参数 | 说明 |
--bundle out.zip | 打包为 zip 压缩包 |
-d /data/pkgs | 下载到指定目录 |
--threads N | 多线程并发下载,加速 |
--bug-reports | 额外下载软件 bug 报告(一般不用) |
--no-checksum | 跳过校验(不推荐,有安全风险) |
示例:
# 下载并打包成zipsudo apt-offline get upgrade.sig --bundle upgrade.zip --threads 4# 下载到文件夹,不打包sudo apt-offline get nginx.sig -d ~/nginx_pkgs --threads 4
3. apt-offline install(回到离线机器:导入包并安装)
把下载好的 zip 包 / 整个目录拷贝回离线内网机器执行安装。
可以直接接收 zip 包 或者 存放 deb 的目录
# 用zip包安装sudo apt-offline install upgrade.zip# 用文件夹安装sudo apt-offline install /media/usb/nginx_pkgs
内部会自动:更新 apt 缓存 + 安装所有 deb 包,自动处理依赖,等效联网apt upgrade / apt install
三、完整实操流程示例(离线升级系统)
离线机
sudo apt-offline set upgrade.sig --update --upgrade拷贝 upgrade.sig 到 U 盘
联网同版本同架构机器
sudo apt-offline get upgrade.sig --bundle upgrade.zip --threads 4拷贝 upgrade.zip 回离线机
离线机执行安装
sudo apt-offline install upgrade.zip四、辅助命令
apt-offline -h # 帮助apt-offline --version # 查看版本
五、常见坑与注意事项
sources.list 必须一致:离线机 /etc/apt/sources.list 和联网机完全相同,否则会找不到包或者版本不一致。
架构匹配 x86_64 离线机,联网机也必须 x86_64;arm64 对应 arm64。
大版本跨版本升级(如 20.04→22.04)不建议用 apt-offline,容易依赖断裂。
apt-offline set 需要 root,必须加sudo;get/install 同样需要 sudo 权限。
磁盘空间:下载的所有 deb 包体积较大,预留足够 U 盘 / 磁盘空间。
如果中途失败,可以重新执行apt-offline get,支持断点续下。
六、适用场景
物理隔离内网、空气隔离(air-gap)服务器(银河麒麟、Ubuntu 服务器)
无外网工控机、嵌入式 Debian 系统
安全环境不允许主机直接访问互联网
七、和 dpkg + apt download 的区别
apt download:只能手动下载单个包,不会自动完整解析整套依赖链,容易缺依赖
apt-offline:基于本机 apt 数据库自动计算完整依赖,一步导出全部需要的包,更适合大批量离线升级
Resource:
Apt-Offline GitHub repositoryApt-Offline GitHub 仓库
扩展阅读:
创作不易,辛苦发财的小手
一键三连
点点关注、收藏、点赞 ~
再次感谢各位小主~