通过自动更新镜像列表来避免 Arch Linux 上的 Pacman 难题
在 Arch Linux 上自动更新镜像列表,使其始终保持最新状态。
要点
- 镜像是在 Linux 存储库中保存软件包的服务器。保持镜像列表最新对于应用程序安装和系统更新至关重要。
- 手动更新 Arch 镜像列表涉及生成您所在区域的镜像列表,将其粘贴到文件中,然后保存以供 pacman 使用。
- Reflector 是一个生成镜像列表并更新镜像列表文件的实用程序。它可以在命令行上使用,也可以作为具有可自定义选项的服务使用。
镜像是复制 Linux 发行版存储库的服务器。 Arch Linux 在全球拥有许多镜像。我们向您展示两种选择 Arch Linux 计算机使用的镜像的方法。
为什么镜子很重要
Linux 发行版用户可用的所有软件包都保存在存储库中。存储库只是可通过互联网访问的服务器。当您安装应用程序时,您的包管理器必须连接到存储库,以便它可以检索安装文件。
与所有基于云的资源一样,存储库面临着带宽和可用性的挑战。连接和网络流量过多,服务器可能会陷入困境并变得缓慢。硬件故障或计划维护可能会使存储库脱机。
发行版使用位于世界各地的模仿存储库网络。这些通过在用户所在区域提供存储库来允许更快地连接到用户,而不是强迫每个人连接到主存储库。
确保计算机使用的镜像列表是最新的非常重要,因为应用程序安装和系统更新依赖于它们。
手动更新 Arch Mirror 列表
默认情况下,Arch 不会自动更新镜像列表。它在安装时创建一个镜像列表,但除非您自己采取行动,否则该列表永远不会更改。
手动更新列表可以,但不方便。自动化该过程是最好的解决方案。但如果您愿意,您可以手动更新镜像列表。
首先从 Arch Linux Pacman Mirrorlist Generator 开始。我们的目标是获取您所在区域的镜像列表以及其他区域的一些镜像以实现冗余。
我从滚动列表中选择“英国”,并从复选框中选择“HTTPS”和“IPV4”。我选择了“使用镜像状态”复选框,因此结果中仅包含活动镜像。
要查看结果,请单击“生成列表”按钮。
列出了匹配的镜像。复制此文本并将其粘贴到编辑器中。请注意,所有行均以井号“#”开头,这意味着它们将被视为注释。要激活镜像,请从其行的开头删除哈希值。
您可以对其他区域重复此过程,每次将结果粘贴到编辑器中。我还选择了德国和瑞典的镜子。这样,如果英国的镜像宕机或无法访问,pacman 将尝试使用瑞典和德国的镜像。
pacman 从名为“/etc/pacman.d/mirrorlist”的文件中读取其镜像。您需要编辑该文件并将其内容替换为新列表。
sudo gedit /etc/pacman.d/mirrorlist
将“gedit”替换为您最喜欢的编辑器。将刚刚创建的列表复制并粘贴到镜像列表文件中,替换原始内容。保存文件并关闭编辑器。
pacman 现在将使用我们的新列表。
什么是反射器,它有什么作用?
Reflector 是一个用于生成镜像列表并可选择更新镜像列表文件的实用程序。您可以在命令行上使用它,也可以将其作为服务使用。
您可以向它传递参数来选择要使用镜像的区域,并且可以根据下载速度等对结果进行排名。
在 Arch Linux 中,默认情况下不会安装 Reflector,但在其他基于 Arch 的发行版中可能会安装。
在 Arch Linux 上安装 Reflector
安装 Reflector 很简单,只要您有一个可用的镜像列表即可。如果不这样做,pacman 将无法工作。如果是这种情况,您必须执行上述步骤来手动创建工作镜像列表。
pacman命令是:
sudo pacman -S reflector
在命令行上使用 Reflector
在命令行上使用 Reflector 可能会覆盖现有的镜像列表,因此,如果您想保留现有的镜像列表作为备份,请在开始之前复制一份。
sudo cp /etc/pacman.d/mirrorlist /etc/pacman.d/old-mirrorlist
此示例不会覆盖您的镜像列表。
reflector --verbose --ipv4 --protocol https --score 10 --sort rate
我们使用的选项是:
- 详细:尽可能提供更详细的输出。
- ipv4:选择支持 IPv4 协议的镜像。
- 协议:选择支持指定协议的镜像,例如 HTTP、HTTPS 或 FTP。
- 分数:选择分数最高的多个镜像。每个镜子都会获得一个分数,分数越低越好。这是根据连接延迟时间、平均连接持续时间和成功完成的测试连接的百分比计算得出的。请注意,命令行中的“10”指的是我们想要返回多少个得分最高的镜像。它并不指分数本身。
- 排序:对结果进行排序。我们选择按下载速率排序。 pacman 从上到下尝试镜像列表中的镜像,直到找到一个正在工作的镜像,因此将最快的镜像放在列表中的第一个是有意义的。
Reflector 支持很多命令行选项。不过,您不会在 Reflector 的手册页上找到它们,您需要使用它的帮助选项:
reflector --help
正如我们所看到的,省略 --save 选项可以让您空运行 Reflector 命令,而不会使现有的镜像列表面临风险。让我们包含 --save 选项,以便更新镜像列表文件。使用此选项时需要使用 sudo。
sudo reflector --verbose --country DE,SE,GB --protocol https --sort rate --latest 20 --download-timeout 6 --save /etc/pacman.d/mirrorlist
我们的新选择是:
- 国家:选择我们希望包含镜像的区域。您可以使用国家/地区代码或国家/地区名称。
- 最新:我们想要使用 20 个最近更新的镜像。
- 下载超时:设置 Reflector 认为存储库离线之前的持续时间(以秒为单位)。
- 保存:结果应写入的文件。 Arch 上的默认位置是“/etc/pacman.d/mirrorlist”。
您可以使用 cat 或 less 命令查看镜像列表。
less /etc/pacman.d/mirrorlist
Reflector 写入带时间戳的标头,以便您可以看到上次更新发生的时间。
使用反射器服务
Reflector提供了一个服务和一个定时器。如果您启用并启动 Reflector.service,它会在您启动计算机时更新您的镜像列表。缺点是启动时间较慢。
更好的解决方案是启用并启动 Reflector.timer。它会每周为您运行一次 Reflector.service。
sudo systemctl enable reflector.timer
sudo systemctl start reflector.timer
要编辑 Reflector 配置文件,请在此命令中使用您最喜欢的编辑器:
sudo gedit /etc/xdg/reflector/reflector.conf
您可以看到命令行选项列在单独的行中。
您可以更改它们的值或添加您想要使用的值。
要编辑计时器的配置文件,请使用:
sudo gedit /usr/lib/systemd/system/reflector.timer
我们在另一篇文章中深入描述了如何配置计时器。
使用计时器并在需要时更新
您可以随时通过在命令行上运行 Reflector 来手动更新镜像列表。如果将命令转换为别名或 Bash shell 函数,则无需记住所有参数。