Un petit complément à
pacman-mirrors --status
Un petit script qui va nous indiquer à quelle distance sont nos miroirs manjaro
Le plus rapide est le plus proche ???
le script:
#!/usr/bin/python
import urllib.request as request
from urllib.parse import urlparse
import json
import math
api_url = 'http://ip-api.com/json/'
coord_me = (-1, -1)
def getDistance(pt1, pt2):
if pt2[0]<1:
return "?" # api return nothing
ret = math.acos(math.sin(math.radians(pt1[0]))*math.sin(math.radians(pt2[0]))+math.cos(math.radians(pt1[0]))*math.cos(math.radians(pt2[0]))*math.cos(math.radians(pt1[1]-pt2[1])))*6371.
return math.trunc(ret/10)*10
# from pacman-mirrors/functions/mirror_status
def get_local_mirrors() -> tuple:
urls = []
with open("/etc/pacman.d/mirrorlist", "r") as f_list:
for line in f_list:
if not line.startswith("Server"):
continue
line = line.split("=")[1].strip()
line = line.split("$")[0]
mirror_url = line.split('/')
mirror_url.pop()
mirror_branch = mirror_url.pop()
line = "/".join(mirror_url)
urls.append(line + "/",)
return mirror_branch, urls
# get my position
with request.urlopen(api_url) as response:
if response.getcode() == 200:
source = response.read()
data = json.loads(source)
if data['status'] == 'success':
coord_me = (data['lat'], data['lon'])
if coord_me[0] < 0:
exit(5)
branch,repos = get_local_mirrors()
#print(repos)
for repo in repos:
coord_repo = (-1, -1)
try:
o = urlparse(repo)
dns = o.hostname
except AttributeError:
#raise
print(f"url parse error ? {repo}")
continue
# get repo position
with request.urlopen(f"{api_url}/{dns}") as response:
if response.getcode() == 200:
source = response.read()
data = json.loads(source)
if data['status'] == 'success':
coord_repo = (data['lat'], data['lon'])
d = getDistance(coord_me, coord_repo)
print (f"{dns} :\t à {d} kms")
Mon résultat :
mirror.futureweb.be : à 420 kms
manjaro.osmir.ch : à 330 kms
mirror.easylee.nl : à 590 kms
manjaro.mirrors.lavatech.top : à 610 kms
manjaro.moson.org : à 530 kms
quantum-mirror.hu : à 1200 kms
ftp.caliu.cat : à 620 kms
ba.mirror.garr.it : à 490 kms