31.08.2021
Łącząc kilka skryptów, możemy zwiększyć szybkość pobierania pakietów i innych plików o ponad połowę.
Łącząc kilka skryptów, możemy zwiększyć szybkość pobierania pakietów i innych plików o ponad połowę.
Z biegiem lat wokół systemu zarządzania pakietami Debiana powstał bogaty ekosystem aplikacji. Dostępnych opcji jest tak wiele, że niektóre łatwo przeoczyć, zwłaszcza że istnieją bardzo pomocne skrypty, które nie miały szczęścia trafić do oficjalnych repozytoriów żadnej dystrybucji. Ostatnio zastanawiałem się nad procesem pobierania i instalacji pakietów: czy istnieje sposób, by go przyspieszyć?
Udało mi się znaleźć szereg przydatnych narzędzi: Netselect [1] pozwala znaleźć najszybsze serwery lustrzane dla danej lokalizacji, Aria2 [2] i Axel [3] służą jako menedżery pobierania, zaś Apt-fast [4] przyspiesza pobieranie pakietów przez inne narzędzia, korzystając z połączeń równoległych. Procedura może zająć trochę czasu, ale biorąc pod uwagę, że może zwiększyć prędkość pobierania o ponad 50 procent, wysiłek wydaje się opłacalny.
Listing 1: 10 najszybszych serwerów lustrzanych dla danej lokalizacji
sudo netselect -v -s10 -t20 `wget -q -O- https://launchpad.net/ubuntu/+archivemirrors | grep -P -B8 "statusUP|statusSIX" | grep -o -P "(f|ht)tp://[^\"]*"`
Krok pierwszy: Określamy najszybsze serwery lustrzane
We wcześniejszych wersjach Ubuntu można było wybrać najszybszy serwer lustrzany, korzystając z opcji Ustawienia | Repozytoria | Pobierz | Inne | Najlepszy serwer. Jednak kilka lat temu ta funkcja zniknęła.
Netselect oferuje lepsze rozwiązanie służące do wyszukiwania najszybszych repozytoriów. Nie tylko daje nam wiele serwerów lustrzanych do wyboru, z których każdy może być przydatny podczas korzystania z menedżerów pobierania, ale pozwala również wziąć pod uwagę dodatkowe czynniki, takie jak nasza odległość od repozytorium, przepustowość łącza i ruch w różnych porach dnia. Być może żadne repozytorium nie będzie najszybsze o każdej porze dnia, ale możemy przeprowadzić testy w różnych momentach i skorzystać ze średnich wartości.
Szukając optymalnej opcji wyboru serwera lustrzanego, w Internecie znajdziemy wiele informacji na temat skryptu Netselect-apt. Jest on nadal dostępny i ma tę zaletę, że wybierze najszybsze serwery lustrzane dla naszej lokalizacji. Jednak zainstalowanie go na współczesnym systemie typu Debian spowoduje problemy z zależnościami, z którymi ciężko będzie sobie poradzić. Dlatego zamiast Netselect-apt należy użyć nowszego skryptu o nazwie Netselect. Jeśli jesteśmy zainteresowani konkretnymi serwerami lustrzanymi, możemy sprawdzić ich adres na liście serwerów lustrzanych Debiana [5] lub na liście swojej dystrybucji i wpisać ich nazwy po kolei, oddzielone spacjami (Rysunek 1). Dane wyjściowe pokażą nam prędkość każdego serwera lustrzanego – znajdziemy je w nawiasach na końcu wiersza, przy czym najszybszy znajduje się w ostatniej linii (najniższy wynik oznacza najszybszy serwer). Możemy także użyć różnych opcji, aby ograniczyć liczbę serwerów zwracanych przez skrypt. Innym sposobem na użycie 10 najszybszych serwerów lustrzanych (Rysunek 2) jest użycie kodu z Listingu 1.
Rysunek 1: Za pomocą Netselecta, znajdziemy najszybsze serwery lustrzane dla danej lokalizacji.
Rysunek 2: 10 najszybszych serwerów lustrzanych Ubuntu do wyboru.
Tabela 1: Opcje konfiguracyjne w pliku /etc/axelrc
Pole |
Opis |
reconnect_delay |
Ustawia liczbę sekund, które Axel ma czekać, zanim spróbuje ponownie nawiązać połączenie. |
max_speed |
Prędkość maksymalna – wartość podawana jest w bajtach na sekundę i zależy od fizycznej przepustowości. |
num_connections |
Ustawia maksymalną liczbę połączeń, których Axel będzie próbował użyć. Niektóre serwery mogą nie zezwalać na wiele równoczesnych połączeń. |
http_proxy |
Ustawia serwer pośredniczący, jeśli nie ustawiono żadnej ogólnosystemowej zmiennej środowiskowej. |
no_proxy |
Zapewnia opcjonalną listę rozdzielonych przecinkami domen lokalnych, do których Axel nie powinien próbować uzyskać dostępu przez serwer pośredniczący. |
buffer_size |
Reprezentuje maksymalną liczbę bajtów do odczytu ze wszystkich połączeń w tym samym czasie. |
verbose |
Ustawiamy na 0, aby wyłączyć komunikaty i na 1, aby je zobaczyć. |
interfaces |
Wyświetla listę interfejsów sieciowych z dostępem do Internetu. Jeśli żadnego nie podamy, zostanie użyty pierwszy znaleziony interfejs. |
Należy jednak pamiętać, że przetworzenie wyników zajmie kilka minut – w przypadku samych repozytoriów Debiana do sprawdzenia jest prawie 600 serwerów. Tak czy inaczej, do przeprowadzenia kolejnych czynności przedstawionych w tym artykule będziemy potrzebowali co najmniej pięciu serwerów lustrzanych. Alternatywną metodą wyszukiwania najszybszych serwerów lustrzanych jest Apt-smart [6], który potrafi również zarządzać źródłami pakietów.
Krok 2: Konfiguracja menedżera pobierania
Samo dodanie najszybszych serwerów lustrzanych do /etc/apt/sources.list przyspieszy pobieranie, bez konieczności wprowadzania żadnych innych modyfikacji. Możemy jednak zwiększyć prędkość pobierania jeszcze bardziej, dodając do konfiguracji menedżera pobierania, takiego jak Axel lub Aria2. Oba zastępują Wgeta i są dostępne dla systemów innych niż Debian, ale istotne jest to, że oba będą próbowały używać wielu serwerów lustrzanych w celu przyspieszenia pobierania.
Axela można skonfigurować za pomocą opcji przekazywanych w wierszu poleceń, wygodniej jest jednak zmodyfikować plik konfiguracyjny /etc/axelrc (Tabela 1).
Rysunek 3 przedstawia przykładowy minimalny plik axelrc. W zależności od posiadanego sprzętu możemy dodać dodatkowe pola. Po uruchomieniu Axela program wyświetli procentowe liczniki pobierania, a na koniec zamknie połączenia i podsumuje cały proces (Rysunek 4).
Rysunek 3: Axela konfigurujemy, tworząc plik /etc/axelrc.
Rysunek 4: Axel kończy działanie, wyświetlając podsumowanie.
Jako alternatywy dla Axela możesz użyć Arię2. W Arii2 wiele serwerów lustrzanych można dodać w wierszu poleceń lub, jak pokazano na Rysunku 5, w pliku określonym za pomocą opcji jednej z poniższych opcji:
--input-file=PLIK (-i=PLIK)
Prawdopodobnie zechcemy użyć najszybszych serwerów lustrzanych wybranych wcześniej przez Netselecta. Jednak w przeciwieństwie do Axela, Aria2 nie pokazuje, w jaki sposób wykorzystany został każdy serwer lustrzany. Przydatne opcje programu znajdziemy w Tabeli 2.
Krok 3: Konfiguracja Apt-fasta
Apt-fast oferuje niezwykle szybkie pobieranie (Rysunek 6). Ten skrypt nie znajduje się w oficjalnych repozytoriach Debiana ani Ubuntu, ale możemy go łatwo zainstalować poleceniem:
/bin/bash -c "$(curl -sL https://git.io/vokNn)"
Uwaga: bezpośrednie uruchamianie skryptów pobranych z Internetu nie jest idealnym rozwiązaniem. Generalnie zaleca się najpierw pobrać skrypt, następnie go przeanalizować pod kątem podejrzanych poleceń, a dopiero na końcu uruchomić. W praktyce wszystko sprowadza się do okoliczności: jeśli przeprowadzamy testy na maszynie wirtualnej, praktycznie nie ma to większego znaczenia, natomiast na serwerze produkcyjnym powinniśmy zachować największą ostrożność.
Po zainstalowaniu Apt-fasta edytujemy plik konfiguracyjny /etc/apt-fast.conf (Rysunek 7). Możemy na przykład określić, czy użyć Apt-geta/Apta, serwerów lustrzanych Debiana/Ubuntu, i czy wyświetlić listę najszybszych serwerów lustrzanych w postaci listy oddzielonej spacjami lub przecinkami, jak niżej
MIRRORS=( 'http://ftp.debian.org/debian, http://ftp2.de.debian.org/debian, http://ftp.de.debian.org/debian, ftp://ftp.uni-kl.de/debian' )
Te same serwery lustrzane muszą również znajdować się w pliku /etc/apt/sources.list. W zależności od potrzeb, możemy także zmodyfikować inne opcje. Pamiętajmy, że zanim użyjemy programu, powinniśmy mieć zainstalowanego Axela lub Arię2.
Podstawowa składnia wywołania Apt-fasta to:
apt-fast install PAKIET
Polecenie zaczyna od wylistowania wszystkich plików, które zostaną zainstalowane (Rysunek 8). Po pobraniu wszystkich pakietów wyświetlane są statystyki pobierania (Rysunek 9). Reszta danych wyjściowych wyświetlana jest w tych pochodzących ze standardowego wyjścia Apt-geta, ponieważ pakiety są rozpakowywane i instalowane. Zauważmy, że skrypt jest używany tylko do pobierania pakietów, zaś inne funkcje Apta są wykonywane w standardowy sposób.
Rysunek 5: Arii2 można przekazać wiele serwerów lustrzanych za pomocą opcji wiersza poleceń.
Rysunek 6: Apt-fasta możemy zainstalować za pomocą krótkiego skryptu.
Rysunek 7: Najbardziej efektywnym sposobem użycia Apt-fasta jest użycie jego pliku konfiguracyjnego.
Tabela 2: Opcje Arii2
Opcja |
Opis |
--max-overall-upload-limit=SPEED |
Ustawia maksymalną ogólną prędkość w bajtach, kilobajtach lub megabajtach. |
--connect-timeout=SECONDS |
Ustawia limit czasu połączenia w sekundach. Wartość domyślna to 60; 0 oznacza brak limitu czasu |
--max-file-not-found=NUMBER |
Ustawia maksymalną liczbę plików, których nieznalezienie spowoduje błąd pobierania. |
--max-tries=NUMBER |
Ustawia liczbę prób, której przekroczenie spowoduje błąd pobierania. 0 oznacza nieograniczoną liczbę prób. |
--retry-wait=NUMBER |
Ustawia liczbę sekund, które program odczeka między kolejnymi próbami pobierania. Wartość domyślna to 5 |
Rysunek 8: Początek pobierania pakietów Apt-fastem.
Rysunek 9: Po pobraniu pakietów Apt-fast podsumowuje wynik działania programu.
Podsumowanie
Czy warto poświęcić czas na konfigurację przyspieszonego pobierania pakietów? To zależy od sytuacji: jeśli często aktualizujemy system, jest to zdecydowanie warte rozważenia. Co więcej, menedżery pobierania sprawdzą się nie tylko podczas pobierania pakietów, ale i innych plików, takich jak np. obrazy ISO różnych dystrybucji. Korzyści mogą być znaczne: w sprzyjających okolicznościach możemy nawet potroić prędkość pobierania. Na wszelki wypadek, zanim zaczniemy modyfikować funkcje związane z Aptem, warto zrobić kopię pliku /etc/apt/sources.list.
Info
[1] OWID: https://ourworldindata.org/coronavirus-source-data
[2] Strona OWID na GitHubie: https://github.com/owid/covid-19-data/blob/master/public/data/owid-covid-codebook.csv