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

Ubuntu跨版本升级时预下载/复用软件包的通用方法咨询

Ubuntu跨版本升级时预下载/复用软件包的通用方法咨询

兄弟,我太懂你这种慢网+流量计费的糟心了——跨版本升级要下几百个包,两台机器重复下简直是浪费钱又浪费时间!别担心,我给你一套通用的Ubuntu跨版本升级复用软件包的方法,不管你是升24.10还是以后的任何版本都能用:

一、先搞定APT和升级工具的缓存配置(核心!)

默认情况下,do-release-upgrade会把升级包下到临时目录,升级完就自动删掉,而且APT也可能不会保留所有下载包。我们先改配置把这个问题解决:

  • 强制APT保留所有下载的deb包:新建或编辑/etc/apt/apt.conf.d/00keep-debs文件,添加以下内容:
    Binary::apt::APT::Keep-Downloaded-Packages "true";
    
    这行配置会让APT不管是日常更新还是跨版本升级,都把下载的包留在系统缓存里,不会自动清理。
  • 让升级工具使用系统缓存目录:新建或编辑/etc/update-manager/release-upgrades.d/50-cacher.conf文件,添加:
    [DistUpgrade]
    CacheDir=/var/cache/apt/archives
    
    改完这个,do-release-upgrade就会把升级需要的包下载到默认的APT缓存目录,而不是临时文件夹,升级后包也会保留下来。

二、在第一台机器(比如你的笔记本)上完成包的下载或升级

  • 如果你想先把所有升级包下好再动手升级(避免中途断网功亏一篑),可以运行这个命令:
    sudo do-release-upgrade --download-only
    它会把所有需要的升级包都下载到/var/cache/apt/archives,但不会启动升级流程,等下载完你再手动升级也没问题。
  • 要是你想直接在笔记本上完成升级,也完全可以——只要之前配置对了,所有下载的包都会留在缓存目录里,不会被删掉。

三、把缓存包复制到第二台机器(台式机)

  • 先在台式机上创建好缓存目录的必要结构,避免传输出错:
    sudo mkdir -p /var/cache/apt/archives/partial
  • 用本地网络传输,推荐用rsync,它会自动跳过已经存在的文件,比scp更高效:
    在笔记本上运行这个命令(把your-desktop-username换成台式机的用户名,desktop-ip换成台式机的本地IP,比如192.168.1.100):
    sudo rsync -avz /var/cache/apt/archives/ your-desktop-username@desktop-ip:/var/cache/apt/archives/
  • 如果你习惯用scp,也可以用这个命令:
    sudo scp -r /var/cache/apt/archives/*.deb your-desktop-username@desktop-ip:/var/cache/apt/archives/
    注意一定要加sudo,因为缓存目录里的文件都是root权限,普通用户没法读取。

四、在第二台机器上复用缓存包升级

  • 先让台式机的软件源切换到目标版本:你可以直接运行sudo do-release-upgrade --check-dist-upgrade-only,工具会自动帮你切换源;或者手动编辑/etc/apt/sources.list,把所有旧版本的代号(比如24.04是jammy)换成目标版本的代号(24.10是mantic),然后运行sudo apt update更新源列表。
  • 然后正常运行sudo do-release-upgrade就行,APT会自动检测本地缓存里已有的包,直接用这些包进行升级,不会再去网上重复下载了。

额外的实用小提示

  • 这套方法适用于所有Ubuntu版本的跨版本升级,只要对应替换源里的版本代号就可以。
  • 传输前可以在笔记本上清理一下缓存里的过期包,运行sudo apt autoclean——它只会删除那些已经不在当前源里的旧包,留下的都是升级需要的包,能减少传输的文件大小。
  • 一定要确保两台机器的硬件架构一致,比如都是64位(amd64),不然传过去的包不兼容,用不了。

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

火山引擎 最新活动