備忘録的なもの

Arch Linux のミラーリストの設定に reflector を使う

Arch Linux のパッケージダウンロードに使うミラーリストを reflector で設定したのでメモ。

まとめ

最終的に以下で設定した。

sudo reflector --country 'Japan' --protocol https --age 24 --sort rate --completion-percent 95 --save /etc/pacman.d/mirrorlist

背景

メインマシンを変えようと思い OS ( Arch Linux ) の再インストール等している。

その中で、ミラーリストの設定に使える reflector なるツールがあることを認識し今回の再インストールで使ったのだが、それに際して調べた/試したことの覚え書き。 (ちなみに今までは /etc/pacman.d/mirrorlist を直接エディタで修正していた)

reflector に関しては ArchWiki の Arch Linux インストールガイドでも触れられているのだが、 変更履歴を見る限り2020年末頃に追記されたっぽく、自分がそれ以降にインストールガイドを見ていなかったので認識していなかったらしい。

コマンド使い方

まず、コマンドは以下でインストールできる。

sudo pacman -S reflector

コマンドの引数はそんなに多くないので、コマンドの使い方に関しては reflector --help を眺めるでも十分とは思うが、今回使ったものなどをメモ。

引数としては、コマンドの挙動を制御する option と、リストアップする対象をフィルタする filter に大別できるのでそれぞれでまとめる。

option メモ
–list-countries どの国にいくつミラーがあるとかのサマリを表示する
–save <filepath> コマンドの実行結果をファイルに保存する、指定しなければ標準出力に出す
–sort {age,rate,country,score,delay} フィルタした結果のミラーを指定したパラメータで並べ替え
–info フィルタした結果のミラーリストの詳細情報を表示する

rate でのソートの場合、 rate 算出のため実際に各リポジトリにアクセスしているらしく少し時間がかかる。

filter メモ
–country <country name or code> リポジトリの置かれた国の指定、 Japan の様な指定と JP のようなコード指定ができる
–protocol <protocol> プロトコルの指定、複数指定する場合は http,https の様なカンマ区切りで指定できる。選択肢はおそらく http, https, rsync の3つ。
–age n 直近 n 時間以内に同期されたミラーのみ表示する
–completion-percent [0-100] チェックサーバからミラーへの接続成功率、省略時(デフォルト)は100.0 になっている。

filter に関しては基本的に省略すると ANY で扱われるのだが、 --completion-percent だけはデフォルトでフィルタがかかっているので注意が要る。(後述)

結果

ということで、冒頭のコマンドでミラーリストを生成して、以下の様なミラーリストが得られた。

################################################################################
################# Arch Linux mirrorlist generated by Reflector #################
################################################################################

# With:       reflector --country Japan --protocol https --age 24 --sort rate --completion-percent 95
# When:       2022-12-23 10:40:57 UTC
# From:       https://archlinux.org/mirrors/status/json/
# Retrieved:  2022-12-23 10:40:55 UTC
# Last Check: 2022-12-23 10:03:59 UTC

Server = https://mirror.saebasol.org/archlinux/$repo/os/$arch
Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch

その他調べたこと等

ミラーステータスについて

冒頭のコマンドで --completion-percent を指定した背景の部分。

最初は --completion-percent 省略して(チェックサーバからミラーへの接続成功率100%のミラーを)設定しようとしたのだが、 それだとミラーが1つも引っかからず、 かと言って ArchWiki のミラーリスト を見てもちゃんとミラー動いてる様に見えるし何でだろうなぁ、ということで調べていた。

実際のコマンドの出力としてはこんな感じ

❯ reflector --country 'Japan' --protocol https --age 24
error: no mirrors found

reflector --help から真面目に見ていった結果としては、 ArchWiki(www.archlinux.jp) のミラーステータスのページと、 ArchWiki(archlinux.org) のミラーステータスのページで接続成功率等の値の算出方法が違っていて、 reflector は ArchWiki(archlinux.org) で算出した方の結果を表示している、ということだった。

算出方法の違いに関しては、ざっくりではあるが

  • ArchWiki(www.archlinux.jp)
    • 日本にある単一チェックサーバから各リポジトリへの定期チェック(1週間分)を行った結果のサマリ
  • ArchWiki(archlinux.org)
    • 何カ国かに分散しているチェックサーバそれぞれから各リポジトリへの定期チェック(1週間分)を行った結果のサマリ

と理解している。

具体的にはこんな感じで差があった。(キャプチャは 2022/12/23 17:00 頃の状態)

Arch Linux JP Project - ミラーの状態

ArchWiki (www.archlinux.jp) でのミラーステータス

Arch Linux - Mirror Status
( Japan でフィルタできなかったので若干見にくいが、接続成功率〜ミラースコアの並び順は上記と同じ)

ArchWiki (archlinux.org) でのミラーステータス

実際に reflector コマンドで --info を使ってミラーステータスの値を確認しても、 ArchWiki(archlinux.org) と同じ値になる。
(全部貼ると長くなるので https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/ の値だけ)

❯ reflector --country Japan --protocol https --completion-percent 95 --info --include 'jaist'
https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
active          : True
completion_pct  : 0.99375
country         : Japan
country_code    : JP
delay           : 3324
details         : https://archlinux.org/mirrors/jaist.ac.jp/1024/
duration_avg    : 1.0586534056273647
duration_stddev : 0.41886775262396314
ipv4            : True
ipv6            : True
isos            : True
last_sync       : 2022-12-23 09:04:01 UTC
protocol        : https
score           : 2.4159542053682124

ということで、 reflector コマンドのソースになっている ArchWiki(archlinux.org) の方のミラーステータスでは接続成功率100%なミラーサーバがなかったので、 --completion-percent を指定して(条件緩くして) reflector コマンドを実行した、という次第。

ちなみに ArchWiki(archlinux.org) のミラーステータスのページでは、いつどこのチェックサーバからどう失敗していたかとかも確認できる。

https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/ のリポジトリチェックログ
rsync://ftp.tsukuba.wide.ad.jp/archlinux/ のリポジトリチェックログ

ミラーステータスはある程度の期間の定期チェックの結果ではあるが、チェックサーバ側の問題も含めて算出される一時的な値っぽいので、 最終同期日時がよっぽど前になってるとか以外はあんまりシビアに考えなくても良いのかもとは思った。

自動更新について

ミラーリストはそんな頻繁に変わるものでも無いだろうというのと、 個人的にラップトップにしてもデスクトップにしても2年前後でマシン自体を買い替えたり OS の再インストールをしたりしているので、 OS インストール時に設定しとけば自動更新はしなくて良いかなと思っている。

一応定期更新する場合も、パッケージに systemd 用の設定ファイルが同梱されているので reflector のオプションだけ書いて systemd enable 〜 で有効化できる。
ArchWiki の通り ではある)

# reflector のオプション設定(コマンド実行時の引数がそのまま使える)
sudo tee /etc/xdg/reflector/reflector.conf << __EOF__
--save /etc/pacman.d/mirrorlist
--country 'Japan'
--protocol https
--age 24
--sort rate
--completion-percent 95

__EOF__

# サービスの有効化(マシン起動時に更新する場合)
sudo systemctl enable reflector.service

# タイマーの有効化(スケジュールで更新する場合、デフォルトは週次)
sudo systemctl enable reflector.timer

また若干余談にはなるが、今回 reflector で更新した /etc/pacman.d/mirrorlistcommunity/pacman-mirrorlist パッケージに含まれるファイルだが、 今回の作業前の /etc/pacman.d/mirrorlist のタイムスタンプとパッケージインストール日を見る限りパッケージ更新時に上書きされたりはしないらしい。 (この辺をあんまり理解してないので pacman のファイル管理の方法はちゃんと学んだ方が良いんだろうな、と感じた)

# 今のマシンのOSインストール時に設定した /etc/pacman.d/mirrorlist
❯ ls -lh /etc/pacman.d/mirrorlist
-rw-r--r-- 1 root root 1.6K Jun 26 14:38 /etc/pacman.d/mirrorlist

# /etc/pacman.d/mirrorlist を含むパッケージである pacman-mirrorlist のインストール日等
❯ pacman -Qi pacman-mirrorlist
Name            : pacman-mirrorlist
Version         : 20221204-1
Description     : Arch Linux mirror list for use by pacman
Architecture    : any
URL             : https://www.archlinux.org/mirrorlist/
Licenses        : GPL
Groups          : None
Provides        : None
Depends On      : None
Optional Deps   : None
Required By     : pacman
Optional For    : None
Conflicts With  : None
Replaces        : None
Installed Size  : 47.14 KiB
Packager        : Florian Pritz <[email protected]>
Build Date      : Sun 04 Dec 2022 09:39:10 PM JST
Install Date    : Thu 22 Dec 2022 08:20:36 PM JST
Install Reason  : Installed as a dependency for another package
Install Script  : No
Validated By    : Signature

他の設定方法について

今回は reflector コマンドを使って設定したが、 /etc/pacman.d/mirrorlist の設定方法としては他にも ArchWiki で公開されているツールを使う形でもできる。

国やプロトコル等を選んで Generate するとこんな感じの出力が得られるので、コピペなり curl でダウンロードするなりした上で、これまでと同じ様に適宜アンコメントする。

https://archlinux.org/mirrorlist/?country=JP&protocol=https&ip_version=4&ip_version=6

##
## Arch Linux repository mirrorlist
## Generated on 2022-12-23
##

## Japan
#Server = https://mirrors.cat.net/archlinux/$repo/os/$arch
#Server = https://ftp.jaist.ac.jp/pub/Linux/ArchLinux/$repo/os/$arch
#Server = https://mirror.saebasol.org/archlinux/$repo/os/$arch

ちなみにプロトコルとして http と https しか選択できないが、 rsync は非推奨ってことだろうか(使い難そうではあるし)。

参考