Reflector (简体中文) - ArchWiki

Jump to content

# 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

## 参考

- Reflector thread on the Arch Linux Forums

Category:

- Package management (简体中文)