До этого дня просто копировал российские зеркала в начало списка, но в последнее время скорость установки пакетов упала до неприличия и я решил список оптимизировать и воткнуть суточный таймер в systemd. Поковырял reflector, но он какой-то медленный, формирует список 20 минут. Набашил себе деревянный велосипед, который пингует по списку и сортирует по среднему значению скорости. В сетях вообще не разбираюсь, мой уровень - роутер настроить. Поэтому вопрос: правильно ли ориентироваться именно на этот параметр? Или есть что-то более подходящее, что позволит за минут пять получить более оптимальный список?
Скрипт:
#!/bin/bash
 
#cкачиваем списoк зеркал и убираем лишние строки
 curl -s "https://archlinux.org/mirrorlist/?country=all&protocol=https" | grep Server >> mirrorlist_all
 
#считаем количество строк для вывода
 NUMBER_OF_LINES=$(wc -l mirrorlist_all)
 
#разделитель меняем на символ перевода строки, чтоб цикл читал всю строку
 IFS="
 "
#построчно обрабатываем список
 for LINE in $(cat mirrorlist_all); do
    #счётчик строк
    COUNT=$((${COUNT} + 1))
    #вытаскиваем адрес из строки
    URL=$(echo ${LINE} | sed 's|^.*:\/\/||; s|\/.*$||')
    #пингуем ссылку и вытаскиваем из результата среднее значение
    PING="$(ping -q -w 1 -i 0.2 "${URL}" | sed "1,4d; s|.*\/\(.*\)\/.*\/.*$|\1|")"
    #для наглядности выводим порядковый номер, результат пинга и адрес сервера
    echo "${COUNT}/${NUMBER_OF_LINES%% *} ${PING} ${URL}"
    #вставляем результат пинга в начало строки в списке
    sed "${COUNT}!d; s|^\(.*\)$|${PING} \1|" mirrorlist_all >> ping_list
done
 
#сортируем по скорости, убираем молчащие сервера и формируем итоговый список
sort -n ping_list | sed "/^ /d; s|^.*Server = |Server = |" > mirrorlist_all
 
#копируем список в систему
#cp mirrorlist_all /etc/pacman.d/mirrorlist
#убираем за собой
#rm -rf mirrorlist_all ping_list





