До этого дня просто копировал российские зеркала в начало списка, но в последнее время скорость установки пакетов упала до неприличия и я решил список оптимизировать и воткнуть суточный таймер в 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