+1
If you prefer not to need sudo. Edit /etc/pacman.conf to have all your repo lines use a new file to be owned by your user:
[core]
Include = /etc/pacman.d/mirrorlist.reflector
[extra]
Include = /etc/pacman.d/mirrorlist.reflector
[community]
Include = /etc/pacman.d/mirrorlist.reflector
Make the file and use the little function in your shellrc (rename it if you want):
# touch /etc/pacman.d/mirrorlist.reflector
# chown youruser:yourgroup /etc/pacman.d/mirrorlist.reflector
Function to include:
upp () {
for i in 1 3 10
do
if reflector -c US -a $i -f 5 -p https --sort rate --save /etc/pacman.d/mirrorlist.reflector
then
return 0
else
echo "something is fucked up"
fi
done
}
$ time ./reflection.py
Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
Server = https://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://arch.mirror.constant.com/$repo/os/$arch
Server = https://mirror.kaminski.io/archlinux/$repo/os/$arch
Server = https://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://mirrors.rit.edu/archlinux/$repo/os/$arch
Server = https://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://repo.ialab.dsu.edu/archlinux/$repo/os/$arch
Server = https://archmirror1.octyl.net/$repo/os/$arch
Server = https://mirror.sfo12.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://arch.rrig.gs/$repo/os/$arch
Server = https://mirrors.xtom.com/archlinux/$repo/os/$arch
...
real 0m6.854s
user 0m0.361s
sys 0m0.021s
$ time reflector --country 'United States' --latest 1000 --protocol https -f 15
...
Server = https://iad.mirrors.misaka.one/archlinux/$repo/os/$arch
Server = https://mirror.wdc1.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://mirrors.kernel.org/archlinux/$repo/os/$arch
Server = https://mirror.pit.teraswitch.com/archlinux/$repo/os/$arch
Server = https://arch.mirror.constant.com/$repo/os/$arch
Server = https://mirror.stephen304.com/archlinux/$repo/os/$arch
Server = https://plug-mirror.rcac.purdue.edu/archlinux/$repo/os/$arch
Server = https://mirror.dal10.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://mirror.mia11.us.leaseweb.net/archlinux/$repo/os/$arch
Server = https://mirrors.rit.edu/archlinux/$repo/os/$arch
Server = https://iad.mirror.rackspace.com/archlinux/$repo/os/$arch
Server = https://mirrors.xtom.com/archlinux/$repo/os/$arch
Server = https://mirror.kaminski.io/archlinux/$repo/os/$arch
Server = https://mirror.lty.me/archlinux/$repo/os/$arch
Server = https://mirrors.rutgers.edu/archlinux/$repo/os/$arch
...
real 0m4.530s
user 0m0.634s
sys 0m0.055s
I'll play around with this some more, thanks for sharing.
]]>#!/bin/python
from urllib.request import urlopen
from json import loads
from time import time
from sys import stderr
with urlopen('https://www.archlinux.org/mirrors/status/json/') as f:
mirrors = [ m for m in loads(f.read().decode())['urls'] if
m['country'] == 'United States' and
m['protocol'] == 'https' and
m['completion_pct'] == 1.0 and
m['delay'] <= 3600 and
m['duration_avg'] + m['duration_stddev'] <= 1.5
]
for m in mirrors:
t0 = time()
with urlopen(m['url'] + 'core/os/x86_64/core.db') as f:
m['rate'] = len(f.read()) / (time() - t0)
for m in sorted(mirrors, key=lambda k: k['rate'], reverse=True):
print(f'Server = {m["url"]}$repo/os/$arch')
Edit the first block according to your region and preferences.
]]>$ grep reflectme .bashrc
alias reflectme="sudo reflector --country 'United States' --latest 1000 --protocol https -f 15 --save /etc/pacman.d/mirrorlist"
]]>So pacman seems to rely on only one server on the list (the fastest to respond ???)
It does only use one, but there is no testing to see which is fastest - that's on you to do. Pacman simply uses the first mirror in the list. Only if the first one fails to respond (or responds with a 404 or equivalent) will further mirrors even be attempted.
]]>