Reflector (简体中文)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
翻译状态:本文是 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

参考