如何将Ubuntu完整软件仓库下载至apt缓存以实现离线使用
我完全懂你想要的效果——把整个Ubuntu软件仓库的所有deb包都下载到apt缓存目录(/var/cache/apt/archives/)里,这样没网的时候也能随时安装任何软件。之前你试的sudo apt-get install --download-only *没起作用?那是因为这个命令的写法不对,我给你一步步讲清楚正确的操作,完全满足你要的「完整仓库、原生命令、简单易懂」的要求:
先理清几个前提
- 你用的是Ubuntu LTS版本Jammy Jellyfish,只需要64位(amd64)的二进制deb包,我们的操作会自动适配这个需求
- 磁盘空间要充足:整个Jammy的amd64仓库包体积很大,可能需要几十GB甚至上百GB的存储空间,提前确认好磁盘容量
具体操作步骤
更新本地包索引
先确保你的本地包列表是最新的,能获取到仓库里的所有包信息:sudo apt update导出所有可用包的名称列表
用apt-cache命令把仓库里所有的包名导出到一个文本文件里,方便后续批量处理:apt-cache pkgnames > all_packages.txt执行完后,当前目录下会生成
all_packages.txt,里面就是仓库里所有包的名字。批量下载所有包到apt缓存
用刚才生成的包列表,让apt只下载不安装,把所有包都存到/var/cache/apt/archives/里:sudo apt-get install --download-only $(cat all_packages.txt)⚠️ 注意:过程中可能会遇到个别包因依赖冲突、架构不兼容等问题无法下载,apt会自动跳过这些包,不影响整体的下载进度,不用纠结这些提示。
验证下载结果
切换到apt缓存目录,查看下载的deb包:cd /var/cache/apt/archives/ ls -lh这里就能看到大量的
.deb文件,就是你要的完整仓库内容了。
为什么之前的命令没用?
你之前试的sudo apt-get install --download-only *,在shell里*会被解释成当前目录下的所有文件名,而不是仓库里的所有包,所以这个命令其实是尝试安装当前目录的文件,完全不是你想要的效果,这就是为什么没成功。
离线使用说明
之后没网的时候,你直接用sudo apt install <软件包名>,apt会优先从本地缓存里读取已下载的deb包,不需要联网就能完成安装,和你提到的osdisk那种DVD导入缓存的效果完全一样。
备注:内容来源于stack exchange,提问作者abc

