Reflector (正體中文)

From ArchWiki
Jump to navigation Jump to search

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 將更新鏡像列表。要在每次開機時更新鏡像列表,請 啟用 此服務。

Note: 關於更多網路依賴的實現,請參閱 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 以每週自動執行 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