Reflector (简体中文)

From ArchWiki
翻译状态:本文是 Reflector翻译。上次翻译日期:2020-10-03。如果英文版本有所更改,则您可以帮助同步翻译。

Reflector 是一个 Python 脚本;它可以从 Arch Linux Mirror Status 页面获取最新的镜像列表,然后筛选出最新的镜像并按速度排序,最后将结果写入到 /etc/pacman.d/mirrorlist 文件。

安装

安装 reflector 软件包。

用法

警告:
  • 在下面的例子中,会覆盖 /etc/pacman.d/mirrorlist 文件。进行操作前应该进行备份。
  • 在同步或更新 pacman 前,需要确保 /etc/pacman.d/mirrorlist 文件没有包含你不信任的镜像。

要查看所有可用命令,运行以下命令:

$ reflector --help

示例

根据下载速度进行排序,并筛选出前 5 个最近同步的镜像,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件内:

# reflector --verbose --latest 5 --sort rate --save /etc/pacman.d/mirrorlist

选择 200 个最近同步的 HTTP/HTTPS 镜像,然后根据下载速度进行排序,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件内:

# reflector --latest 200 --protocol http --protocol https --sort rate --save /etc/pacman.d/mirrorlist

选择在最近 12 小时内同步的,并且是位于法国或德国的镜像,然后根据下载速度进行排序,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件内:

# reflector --country France --country Germany --age 12 --protocol https --sort rate --save /etc/pacman.d/mirrorlist

自动处理

systemd service

从 2020.9 版本开始,Reflector 附带了一个可启用的 reflector.service 服务文件。

该服务会根据 /etc/xdg/reflector/reflector.conf 文件所指定的参数运行 Reflector 脚本。该配置文件包含了 Reflector 运行时所需的所有命令行参数。这些参数可以用一行或者多行来表示,并且允许空白行和以 # 开头的注释行。可以从默认配置文件开始进行自定义配置。

例如,从法国和德国的镜像中筛选出 5 个最新的并且支持 HTTPS 的镜像,然后将结果覆写到 /etc/pacman.d/mirrorlist 文件内;使用:

/etc/xdg/reflector/reflector.conf
--save /etc/pacman.d/mirrorlist
--country France,Germany
--protocol https
--latest 5

启用 reflector.service 服务可以在引导时运行 Reflector 脚本。要立即运行,启动该服务。

systemd timer

从 2020.8 版本开始,Reflector 提供一个 systemd timer (reflector.timer) 定时器,这样每周都会调用 reflector.service 服务。可以编辑 reflector.timer 来调整时间表。

首先像服务一节那样编辑好配置文件。配置文件更新后,启用启动 reflector.timer 定时器。

要提前刷新镜像列表,启动 reflector.service 服务。

pacman hook

你可以创建一个 pacman 挂钩来启动 reflector.service 服务,并且在更新 pacman-mirrorlist 软件包后删除所创建的 .pacnew 文件。

/etc/pacman.d/hooks/mirrorupgrade.hook
[Trigger]
Operation = Upgrade
Type = Package
Target = pacman-mirrorlist

[Action]
Description = Updating pacman-mirrorlist with reflector and removing pacnew...
When = PostTransaction
Depends = reflector
Exec = /bin/sh -c 'systemctl start reflector.service; if [ -f /etc/pacman.d/mirrorlist.pacnew ]; then rm /etc/pacman.d/mirrorlist.pacnew; fi'

服务一节所说那样编辑 /etc/xdg/reflector/reflector.conf 文件,从而设置好所需的镜像选项。

Cron task

要每天更新镜像列表,参考如下内容:

/etc/cron.daily/mirrorlist
#!/bin/bash

# Get the country thing
/usr/bin/reflector -c "India" -p http --sort rate > /etc/pacman.d/mirrorlist

# Work through the alternatives
/usr/bin/reflector -p http  --latest 20 -p https -p ftp --sort rate >> /etc/pacman.d/mirrorlist

参考