# Reflector (正體中文)

From ArchWiki
Jump to navigation Jump to search
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.

相關文章

- Mirrors
- Pacman

Reflector 是一個腳本程式，它可以從 MirrorStatus 頁面獲得最新的鏡像列表，過濾最新的鏡像，按速度排序，並且覆蓋 `/etc/pacman.d/mirrorlist` 文件。

## 安裝

安裝 reflector 軟體包。

## 用法

警告：

- 在下面的例子中， `/etc/pacman.d/mirrorlist` 將被覆寫。執行之前請先進行備份。
- 同步或更新 Pacman 之前，確保生成的 `/etc/pacman.d/mirrorlist` 中沒有你認為不信任的條目。

執行下面的命令以查看所有可用的命令：

    # reflector --help

### 範例

以下載速度對最近同步的五個鏡像評分與排序，並覆蓋 `/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小時內同步並且位於法國或德國的 HTTPS 鏡像，依下載速度排序，並覆蓋 `/etc/pacman.d/mirrorlist` 文件：

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

## 自動化

### Pacman hook

你可以建立一個 pacman hook 執行 reflector ，並在每次 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 "reflector --country 'United States' --latest 200 --age 24 --sort rate --save /etc/pacman.d/mirrorlist; rm -f /etc/pacman.d/mirrorlist.pacnew"

請確保用你要的參數代替 reflector 。

### Systemd service

下面是服務單元等待網路連線後再執行 reflector 的例子：

    /etc/systemd/system/reflector.service

    [Unit]
    Description=Pacman mirrorlist update
    Wants=network-online.target
    After=network-online.target

    [Service]
    Type=oneshot
    ExecStart=/usr/bin/reflector --protocol https --latest 30 --number 20 --sort rate --save /etc/pacman.d/mirrorlist

    [Install]
    RequiredBy=multi-user.target

啟動 `reflector.service` 將更新鏡像列表。要在每次開機時更新鏡像列表，請 啟用 此服務。

註記: 關於更多網路依賴的實現，請參閱 Systemd#Running services after the network is up 。

### Systemd timer

假如你想每週執行 `reflector.service` ，請建立一個相關的 .timer 。舉例來說：

    /etc/systemd/system/reflector.timer

    [Unit]
    Description=Run reflector weekly

    [Timer]
    OnCalendar=Mon *-*-* 7:00:00
    RandomizedDelaySec=15h
    Persistent=true

    [Install]
    WantedBy=timers.target

然後直接 啟動 `reflector.timer` 。

### Reflector-timer package

安裝 reflector-timerAUR[broken link: package not found] 以每週自動執行 reflector 。

可以根據自己的需求編輯配置，以下是預設的配置：

    /usr/share/reflector-timer/reflector.conf

    AGE=6
    COUNTRY=Germany
    LATEST=30
    NUMBER=20
    SORT=rate
    ### remove an entry if you don't want it as available protocol
    PROTOCOL1='-p http'
    PROTOCOL2='-p https'
    PROTOCOL3='-p ftp'

請確保啟用 `reflector.timer` 服務。

### 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

Category:

- Package management (正體中文)

Hidden category:

- Pages with broken package links