Oprogramowanie w Arch rozpowszechniane jest poprzez repozytoria dostępne na serwerze głównym, którego zawartość jest powielana przez serwery lustrzane. Te ostatnie lubią płatać figle i nie zawsze ich lista, którą udostępniamy lokalnie w pliku /etc/pacman.d/mirrorlist jest tożsama z tym, co udostępnione zostało na serwerze głównym. Niejednokrotnie również możemy mieć zastrzeżenia co do prędkości pobierania danych z tych serwerów. Nie oznacza to, że sytuacja staje się patowa i trzeba czekać, czy w ogóle serwery lustrzane się zaktualizują lub czy będą oferować lepszy transfer danych.
Muszę przypomnieć, że wspomniany wyżej plik zawiera listę serwerów, która podczas działania polecenia "pacman -S" jest przeszukiwana w kolejności od najwyżej umieszczonego serwera po najniżej umieszczony. Jeśli udaje się nawiązać sensowne połączenie z serwerem umieszczonym na liście wyżej, to transakcja zostaje przeprowadzona. Oznacza to, że jeśli prędkość transferu jest akceptowalna przez polecenie pacman, to pomijane są serwery położone na liście poniżej tego, z którym połączenie zostało nawiązane. Tym samym, może się okazać, że nie jest to ani najszybszy, ani też najaktualniejszy spośród udostępnionych systemowi serwerów lustrzanych.
Nie oznacza to, że użytkownik Archa pozostawiony został bez żadnej pomocy. Możliwości jest kilka.
I. Bez żadnych narzędzi dodatkowych w systemie, zawsze możemy skorzystać z internetowej wyszukiwarki serwerów źródlanych, udostępnionej pod adresem:
https://www.archlinux.org/mirrorlist/. Generując ją, zaznaczamy pole: Use mirror status i otrzymaną listę podmieniamy za plik /etc/pacman.d/mirrorlist. Następnie dokonujemy edycji tego pliku i usuwamy znak "#" sprzed adresów tych serwerów, które chcemy udostępnić systemowi.
II. Możemy również zainstalować skrypt
armrr, który nam zautomatyzuje pracę.
yaourt -S armrr
bądź
yaourt -S armrr-git
Po instalacji, wydajemy polecenie:
# armrr
i wybieramy kod państwa z listy bądź, jeśli ten kod znamy:
# armrr kod
III. Najbardziej rozwiniętym rozwiązaniem jest użycie programu
reflector, który znajduje się w repozytoriach.
# pacman -S reflector
Robimy kopię pliku z serwerami (wcześniej sprawdzamy, czy lista ta nie zawiera znaku "#" przed serwerem, który ma zostać udostępniony, jeśli zawiera - to znak ten usuwamy):
# cp -vf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
Teraz już możemy rozpocząć operacje z reflectorem. Oferuje on różne możliwości organizacji pliku mirrorlist. Do najbardziej popularnych prawdopodobnie, będą należeć:
a. Udostępnienie systemowi określonej ilości serwerów wraz z ich posortowaniem od najszybszego do najwolniejszego.
# reflector --verbose -l X --sort rate --save /etc/pacman.d/mirrorlist
W miejscu X wpisujemy ilość serwerów, które chcemy udostępnić.
b. Udostępnienie systemowi określonej ilości najaktualniejszych serwerów, posortowanych wg ratingu szybkości.
# reflector --verbose -l X -p http --sort rate --save /etc/pacman.d/mirrorlist
W miejscu X wpisujemy ilość serwerów, które chcemy udostępnić.
c. Udostępnienie systemowi określonej ilości najaktualniejszych i zarazem najszybszych serwerów z określonego państwa.
# reflector --verbose --country 'Nazwa Państwa' -l X -p http --sort rate --save /etc/pacman.d/mirrorlist
W miejscu X wpisujemy ilość serwerów, które chcemy udostępnić, zaś w miejscu Nazwa Państwa - nazwę państwa, z którego serwery będą udostępnione. Teoretycznie winno to być najlepsze rozwiązanie, bowiem połączenia miejscowe winny być sprawniejsze.
Polecenie może zostać zautomatyzowane poprzez usługę podnoszoną przez systemd. W tym celu tworzymy plik:
sudo nano /etc/systemd/system/reflector.service
i umieszczamy w nim następującą zawartość:
[Unit]
Description=Pacman mirrorlist update
[Service]
Type=oneshot
ExecStart=/usr/bin/reflector --protocol http --latest X --number Y --sort rate --save /etc/pacman.d/mirrorlist
W miejscu X wpisujemy jakąś liczbę, która ograniczy działania reflectora wyłącznie do takiej ilości serwerów, które są ostatnio zsynchronizowane, zaś w miejscu Y wpisujemy jakąś liczbę (nie większą od X), która w pliku /etc/pacman.d/mirrorlist wygeneruje listę tych serwerów ograniczoną do zadanej ilości.
Od tej chwili, aktualizacja listy udostępnionych serwerów może przebiegać następująco:
# systemctl start reflector
Jeśli ktoś chciałby, aby lista serwerów była uaktualniana za każdym razem przy starcie systemu, winien nadać plikowi /etc/systemd/system/reflector.service następującą zawartość:
[Unit]
Description=Pacman mirrorlist update
Requires=network.target
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/bin/reflector --protocol http --latest X --number Y --sort rate --save /etc/pacman.d/mirrorlist
[Install]
RequiredBy=network.target
(znaczenie X oraz Y zostało omówione wyżej) i następnie uruchomić automatyczne podnoszenie usługi przy starcie systemu:
# systemctl enable reflector
Więcej informacji o dostępnych poleceniach reflector uzyskacie wydając:
reflector --help
Materiał opracowany na podstawie:
https://www.archlinux.org/mirrorlist/
https://wiki.archlinux.org/index.php/Mirrors
https://wiki.archlinux.org/index.php/Reflector