论离线更新 Fedora

论离线更新 Fedora

本文翻译自 https://itsfoss.com/offline-update-fedora/

我感觉 Fedora 的更新比其他发行版(如 Ubuntu LTS)更频繁。因此,您需要定期更新系统。

如果您身处网络受限或完全没有网络连接的地方,升级将会被延迟很长时间,这对系统的健康运行并并不理想。

我曾在 Reddit 上看到 Fedora 提供一种离线更新的机制。我尝试了一下,现在与您分享我的发现。

🚧 这并不是一篇“如何操作”的教程,而是我分享自己的实验经历,希望您能从中获得一些启发。请不要盲目地照搬这里的内容。

我将讨论两种场景:

  • 网络受限情况下的离线更新: 在这种情况下,您至少可以更新包缓存,以查看哪些已安装的包可以更新。这种方法适用于有限的移动数据网络。
  • 完全无网络连接情况下的离线更新: 在这种情况下,您无法知道哪些包需要更新。因此,您需要列出所有已安装的包,并下载它们的更新。

这两种场景的操作步骤大致相同:在另一台可以联网的 Fedora 系统上下载更新包,然后通过 USB 将它们传输到离线的 Fedora 系统上。

注意:离线和在线的 Fedora 系统必须运行相同的 Fedora 版本。

场景 1:网络受限系统的更新

📋 您需要一台运行 Fedora 并具有正常网络连接的计算机,或者一台可以移动到网络连接较好的地方的笔记本电脑。

在这种情况下,我们假设您使用的是有限的计量网络(如移动网络)。通过这种方法,您可以获取有关系统包和仓库状态的一些信息,从而高效地完成更新。

🚧 我并未测试 RPM Fusion 和其他外部仓库(如 Brave 浏览器)中的包更新,仅测试了从默认 Fedora 仓库安装的包。

创建需要更新的包列表

首先,在离线系统上获取所有需要更新的已安装包的信息,可以通过以下命令在终端中完成:

1
dnf repoquery --upgrade --queryformat '%{name}.%{arch}' > updates.txt

然后可以使用以下命令查看文件内容:

1
less updates.txt

文件中包含需要更新的包列表。

在联网系统上下载更新包

接下来,在一台具有良好网络连接的 Fedora 系统上,我在下载目录中创建了一个名为 downloaded-packages 的文件夹:

1
mkdir -p ~/Downloads/downloaded-packages

使用以下命令下载更新包:

1
dnf download --resolve $(cat updates.txt) --downloaddir="/home/$USER/Downloads/downloaded-packages"

这样会将 updates.txt 文件中列出的所有包下载到指定目录中。

之后,我将此目录复制到 U盘上。

在离线系统上安装下载的更新包

将 USB 驱动器插入离线的 Fedora 系统,并将 downloaded-packages 文件夹复制到系统的 Downloads 文件夹。

进入该目录后,运行以下命令安装更新:

1
2
cd ~/Downloads/downloaded-packages
sudo dnf install *.rpm

方法 2:完全无网络连接的系统

如果系统完全没有网络连接,但您可以在其他地方访问互联网,可以尝试以下方法。

🚧 这种方法也需要一台联网的 Fedora 系统来下载实际的包文件,并且操作过程可能会在多个地方出错。请谨慎使用,仅在别无选择的情况下使用。

列出所有已安装的包

在这种方法中,您需要列出系统上所有已安装的包,并将其保存到文件中:

1
rpm -qa --queryformat "%{NAME}\n" > packages.txt

此文件中会包含系统上所有已安装包的完整列表。

🚧 在生成的列表中,可能包含类似 gpg-pubkey 的条目。这些条目可能会导致错误,因为这些包的名称不可用。

将该文件复制到 USB,然后转移到能够联网的系统上。

下载所有包

在联网的 Fedora 系统上,使用以下命令下载所有包:

1
dnf download --resolve $(cat packages.txt) --downloaddir="/home/$USER/Downloads/downloaded-packages"

将下载的文件夹复制到 USB,并转移到离线系统的 Downloads 文件夹中。

更新离线系统

将所有必需文件复制到本地系统后,进入目录并运行以下命令安装这些包:

1
2
cd ~/Downloads/downloaded-packages
sudo dnf install *.rpm

这样将安装列表中的所有包。

总结

您可以使用 --disablerepo=* 选项禁用仓库和镜像检查,但需要谨慎使用。

需要注意的是,Fedora 并不是一个设计为完全离线运行的系统。在某些特殊情况下,您可能会遇到与您的具体系统相关的错误。

幸运的是,现在世界大部分地区都能使用互联网。而现代操作系统的设计通常需要活跃的互联网连接。

尽管如此,在极少数情况下,仍有计算机需要离线工作。然而,Fedora 并不是此类场景的理想操作系统。


论离线更新 Fedora
https://lixuannan.github.io/posts/4716.html
作者
CodingCow Lee
发布于
2024年12月15日
许可协议