Jak wybrać najszybsze dublowanie z wiersza poleceń?

137

Chcę zaktualizować mój sources.listplik najszybszym serwerem z wiersza polecenia w nowej instalacji serwera Ubuntu. Wiem, że jest to banalnie łatwe z GUI, ale wydaje się, że nie ma prostego sposobu, aby to zrobić z wiersza poleceń?

Evan
źródło
3
W wyrażeniach regularnych. znak oznacza dowolny znak. Jeśli chcesz, aby pasował do., Musisz uciec z \, więc us.archive [..] powinno być us \ .archive [..]
Egil
Powiązane: askubuntu.com/questions/37753/…
Jorge Castro
2
W moim przypadku musiałem zastąpić #znaki ukośnikami ( /). W przeciwnym razie dostaję sed: -e expression #1, char 53: unterminated polecenie.
Ethan Leroy
@EthanLeroy sama tutaj z Ubuntu 12.04.3
wylogowanie
Powinno być slash, a nie hash.
Matt H

Odpowiedzi:

22
Pakket netselect-apt

    dapper (net): Wybierz najszybsze lustro Debiana z netselect 
    [wszechświat]
    0.3.ds1-5: wszystkie
    hardy (net): Wybierz najszybsze lustro Debiana z netselect 
    [wszechświat]
    0.3.ds1-11: wszystkie
Pakket apt-spy

    dapper (admin): zapisuje plik sources.list na podstawie testów przepustowości 
    [wszechświat]
    3.1-14: amd64 i386 powerpc

Wygląda na to, że nie jest uwzględniony w nowszym Ubuntu z powodu problemów z bezpieczeństwem: patrz: Raport o błędzie

Ale .. Zwykle po prostu używam polecenia ping, aby sprawdzić szybkość połączenia z jakąś lokalizacją. Ilość chmielu i opóźnienie.

Rinzwind
źródło
4
netselect-apt nie wydaje się być dostępny w Ubuntu 12.04
offby1
8
To już nie jest najbardziej pozytywna opinia, ani najlepsza odpowiedź, sprawdź następny
ntg
Która odpowiedź jest „następna” mogła ulec zmianie.
gmatht
apt-spy zniknął w debianie 9, ale netselect-apt jest OK
netawater
147

Nie trzeba robić żadnych poszukiwania już - jak ajmitch został wyjaśniony , można użyć deb mirror, aby mieć najlepsze lusterko automatycznie zbierane dla Ciebie.

apt-get obsługuje teraz metodę „lustrzaną”, która automatycznie wybierze dobre lustro na podstawie twojej lokalizacji. Stawianie:

deb mirror://mirrors.ubuntu.com/mirrors.txt precise main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/mirrors.txt precise-security main restricted universe multiverse

u góry w /etc/apt/sources.listpliku powinno być wszystko, co jest potrzebne, aby automatycznie wybrać dla ciebie lustro na podstawie położenia geograficznego.

Użytkownicy świadomi (10.04), Maverick (10.10), Natty (11.04) i Oneiric (11.10) mogą zastąpić preciseodpowiednią nazwę.

badp
źródło
Świetna wskazówka. Pamiętaj tylko, że po dokonaniu zmiany musisz uruchomić ją sudo apt-get updateprzed apt-get installużyciem, aby użyć najbliższego lustra.
Simon East
2
Powiązane: askubuntu.com/q/319433/11244
Do
23
Dobra wskazówka, ale w moim przypadku nieprzydatna. Działa na geolokalizacji, dając mi lokalny serwer, który jest o wiele wolniejszy tam, gdzie jestem. Ważnym czynnikiem jest tutaj odległość czasowa sieci, a nie odległość przestrzenna.
jarondl
1
@maraton naprawiony co najmniej na 18.04+
Pablo A
49

Oto jeden ze sposobów, który zawsze będzie działał, wykorzystując stare dobre netselecti trochę grepmagii:

Hack „znajdź najlepszy serwer” uzależnionego od terminalu!

  • Pobierz i dpkg -i netselectdla swojej architektury ze strony Debiana. (około 125 KB, brak zależności)
  • Znajdź najszybsze serwery lustrzane Ubuntu z Twojej lokalizacji, albo aktualne, albo co najwyżej sześć godzin temu (wyjaśnię to poniżej, przepraszam, że nie dzieli się ładnie w Markdown)

    sudo netselect -v -s10 -t20 `wget -q -O- https://launchpad.net/ubuntu/+archivemirrors | grep -P -B8 "statusUP | statusSIX" | grep -o -P "(f | ht) tp: // [^ \"] * "'
    
  • netselect:

    1. -v sprawia, że ​​jest trochę gadatliwy - chcesz zobaczyć kropki postępu i wiadomości informujące, że różne lustra mapujące na ten sam adres IP zostały scalone :)
    2. -sN kontroluje liczbę kopii lustrzanych na końcu (np. 10 najlepszych kopii)
    3. -tN określa, jak długo każde lustro jest testowane pod względem prędkości (domyślnie jest to 10; im wyższa liczba, tym dłużej trwa, ale bardziej wiarygodne wyniki).
  • To jest backquotes (nie wklejaj, tylko dla wyjaśnienia)

    wget -q -O- https://launchpad.net/ubuntu/+archivemirrors
    | grep -P -B8 „status (UP | SIX)”
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetpobiera najnowszy status kopii lustrzanej z https://launchpad.net/ubuntu/+archivemirrors .
    2. Pierwszy grepwyodrębnia lustra, które są aktualne lub sześć godzin za nimi, wraz z 8 liniami poprzedniego kontekstu, który zawiera rzeczywiste adresy URL ftp / http
    3. Drugi grepwyodrębnia te adresy URL ftp / http
  • Oto przykładowy wynik z Kalifornii, USA:

    60 ftp://mirrors.se.eu.kernel.org/ubuntu/
    70 http://ubuntu.alex-vichev.info/
    77 http://ftp.citylink.co.nz/ubuntu/
    279 http://ubuntu.mirrors.tds.net/pub/ubuntu/
    294 http://mirror.umd.edu/ubuntu/
    332 http://mirrors.rit.edu/ubuntu/
    364 ftp://pf.archive.ubuntu.com/ubuntu/
    378 http://mirror.csclub.uwaterloo.ca/ubuntu/
    399 ftp://ubuntu.mirror.frontiernet.net/ubuntu/
    455 http://ubuntu.mirror.root.lu/ubuntu/
    
    • „Rangi” są dowolną miarą; niższy jest zwykle lepszy.
    • Jeśli zastanawiasz się, dlaczego serwer lustrzany kernel.org Szwecja-UE i serwer lustrzany NZ znajdują się w pierwszej trójce z Kalifornii , to ja też ;-) Prawda jest taka, że netselectnie zawsze wybiera się najbardziej odpowiedni adres URL do wyświetlenia, gdy wiele kopii lustrzanych mapowanych na pojedynczy adres IP; numer 3 jest również znany jako nz.archive.ubuntu.com!
ish
źródło
9
netselect wybiera kopie lustrzane o niskim opóźnieniu udp lub icmp. Niekoniecznie wybiera lustra, które mogą zwiększyć przepustowość.
Tobu,
@pix Zatwierdziłem twoją edycję, ale to nie zastąpienie polecenia powoduje zastąpienie nowego wiersza. To kolejne dzielenie pól usunęło nowe linie. Podstawianie poleceń usuwa tylko końcowe znaki nowej linii.
muru
25

Oneliner, który wybiera najlepszy (według prędkości pobierania) serwer lustrzany na podstawie mirrors.ubuntu.com dla twojego adresu IP.

curl -s http://mirrors.ubuntu.com/mirrors.txt | xargs -n1 -I {} sh -c 'echo `curl -r 0-102400 -s -w %{speed_download} -o /dev/null {}/ls-lR.gz` {}' |sort -g -r |head -1| awk '{ print $2  }'
KAndy
źródło
2
Aby mieć więcej opcji wymienić na końcu: sort -gr | head -3.
Pablo A
1
Obecnie curl -s http://mirrors.ubuntu.com/mirrors.txtzwraca tylko jedną linię: http://archive.ubuntu.com/ubuntu/co przeczy celowi wyboru spośród kilku. : - /
Stéphane Gourichon
tak, więc ta metoda to NG.
netawater
Uznałem, że curlczęść tej odpowiedzi jest pomocna, ponieważ curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gzgdzie [server_url]jest wymieniony podstawowy adres URL mirrors.txtkopii lustrzanej, pozwala na porównanie szybkości pierwszego ~ 100 KB pliku indeksu z kopii dystrybucyjnej.
jamesc
Ta prędkość transferu testuje, co jest zdecydowanie poprawą w stosunku do netselect. Pobiera tylko 10k z każdego serwera, co może nie być świetną reprezentacją stałej prędkości transferu na szybszych połączeniach. Zwiększ 102400, aby przetestować przy większym pobieraniu
Phil Miller
17

Oto napisany przeze mnie skrypt w języku Python , który wyszukuje kopie lustrzane o najniższym opóźnieniu TCP.

Skrypt zapewnia również dane o przepustowości i stanie pobrane ze startera i automatycznie wygeneruje nowy sources.listplik lub przy użyciu kopii lustrzanej wybranej z listy.

Przykład użycia, który umożliwia wybranie jednego z 5 amerykańskich serwerów lustrzanych o najniższym opóźnieniu względem komputera:

$ apt-select --country US -t 5 --choose
John B.
źródło
5
Chcę cię poinformować, że stworzyłem pakiet debian z twoim skryptem, który jest gotowy do użycia w bardzo łatwy i bezpośredni sposób: github.com/brodock/apt-select/releases/tag/0.1.0
Gabriel Mazetto,
jest to idealne rozwiązanie, ponieważ wypróbowałem inne metody. aby Noob był przyjazny, napisałem post opisujący tę metodę: blog.kmonsoor.com/…
kmonsoor
To świetnie, ponieważ netselectnie jest dostępne w nowszych wersjach Ubuntu
Tek
Pokaż, jak używać go w swoim poście
Jonathan
@Jonathan skończył. Pełne wykorzystanie znajduje się READMEw pierwszym linku.
John B
5

Opracowałem prosty skrypt nodejs oparty na pingach, który testuje serwery wymienione na mirrors.ubuntu.com/mirrors.txt i zwraca najszybszy:

sudo npm install -g ffum
ffum

Daj mi znać, jeśli uznasz to za przydatne lub masz jakieś sugestie (=

tentaculo
źródło
ffum nie działa: Błąd połączenia.
James Fu
To nie działa: Pusty wynik.
Juan Simón
git clonerepozytorium i uruchomnode ffum
Michael
Wspaniale, działa dla mnie! Miałem błąd polegający na tym, że szukał węzła zamiast nodejsa ... fajnie byłoby też mieć trochę szczegółowych informacji o każdej testowanej prędkości archiwum.
tweak2
4

Wiem, że to nie odpowiada bezpośrednio na pytanie OP, ale w wersji Ubuntu na pulpicie / GUI znajduje się przycisk, który znajdzie dla ciebie najlepsze lustro. Wydawało się, że działa całkiem dobrze, więc przyjrzałem się temu krótko, ale nie miałem czasu na śledzenie.

Powodem, dla którego o tym wspomniałem, jest to, że myślę, że przekształcenie go w narzędzie wiersza poleceń byłoby całkiem proste i użyteczne.

Jeśli ktoś jest zainteresowany, test wydaje się znajdować w:

/usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

Znów, to o tyle, o ile mi się udało, ale pomyślałem, że zostawię to tutaj na wypadek, gdyby ktoś tego chciał. Pewnie go odzyskam, kiedy będę miał trochę więcej czasu.

copeland3300
źródło
W dniu 18.04 skrypt ten wykrywa, kiedy jest wywoływany jako aplikacja (jako główna ) z terminala .... i po prostu drukuje jego wyniki na terminalu. Daj mu wystarczająco dużo czasu na ukończenie. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg,
Niestety nie działa poprawnie. Ten skrypt pobiera 5 serwerów z najniższym pingiem, a następnie ocenia je według przepustowości, pobierając plik ~ 1M (Packages.gz głównie z Twojej dystrybucji). Jeśli zmodyfikujesz skrypt, aby zwiększyć go do 25 serwerów i pobierzesz plik 500M, otrzymasz zupełnie inne wyniki, tym razem poprawne.
Jocelyn
2

Polecenie, które znajduje szybkie lustra

Na Ubuntu 18.04 uzyskałem dobre wyniki, uruchamiając

 python /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py

To wypisuje listę serwerów lustrzanych uporządkowanych według „czasu” (nie wyjaśniono), a następnie użyłem jednego z serwerów lustrzanych, które uzyskały najwyższą pozycję.

Więcej szczegółów

Dla mnie użyteczne było przetestowanie kilku najlepszych wyników uzyskanych przez to polecenie, ustawiając je jako moje lustro, /etc/apt/sources.lista następnie wykonując

time sudo apt update

aby zobaczyć, ile czasu zajęło pobranie listy pakietów z tego serwera lustrzanego. Testowałem trzy najlepsze sugestie i wszystkie były szybkie, ale jedna z nich była dwa razy szybsza niż pozostałe dwie w time sudo apt updateteście.

Oto przykładowy wynik z python /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py:

mirror: es-mirrors.evowise.com - time: 0.183778047562
mirror: it-mirrors.evowise.com - time: 0.18604683876
mirror: la-mirrors.evowise.com - time: 0.192630052567
mirror: ny-mirrors.evowise.com - time: 0.208723068237
mirror: mirrors.accretive-networks.net - time: 0.385910987854
mirror: mirror.team-cymru.org - time: 0.46785402298
mirror: mirrors.psu.ac.th - time: 1.64231991768
and the winner is: es-mirrors.evowise.com
ntc2
źródło
1
Niestety nie działa poprawnie. Ten skrypt pobiera 5 serwerów z najniższym pingiem, a następnie ocenia je według przepustowości, pobierając plik ~ 1M (Packages.gz głównie z Twojej dystrybucji). Jeśli zmodyfikujesz skrypt, aby zwiększyć go do 25 serwerów i pobierzesz plik 500M, otrzymasz zupełnie inne wyniki, tym razem poprawne.
Jocelyn
1

W wierszu polecenia można użyć narzędzia Python o nazwie apt-smart

Przykład użycia, który pozwala wyświetlić listę kopii lustrzanych w twoim kraju (automatycznie wykrywa):

$ apt-smart -l

Za pomocą -l, lub --list-mirrorsotrzymasz (przykład danych wyjściowych z serwera Travis CI US):

---------------------------------------------------------------------------------------------------------
| Rank | Mirror URL                            | Available? | Updating? | Last updated    | Bandwidth   |
---------------------------------------------------------------------------------------------------------
|    1 | http://mirrors.gigenet.com/ubuntua... | Yes        | No        | Up to date      | 1.73 MB/s   |
|    2 | http://mirror.genesisadaptive.com/... | Yes        | No        | Up to date      | 1.68 MB/s   |
|    3 | http://ubuntu.mirrors.tds.net/pub/... | Yes        | No        | Up to date      | 1.4 MB/s    |
|    4 | http://repos.forethought.net/ubuntu   | Yes        | No        | Up to date      | 1.35 MB/s   |
|    5 | http://repo.miserver.it.umich.edu/... | Yes        | No        | Up to date      | 937.62 KB/s |
...
|   75 | http://mirror.cc.vt.edu/pub2/ubuntu   | Yes        | No        | 1 day behind    | 659.67 KB/s |
|   76 | http://mirror.atlantic.net/ubuntu     | Yes        | No        | 2 days behind   | 351.26 KB/s |
|   77 | http://mirror.lstn.net/ubuntu         | Yes        | No        | 4 days behind   | 806.81 KB/s |
|   78 | http://mirrors.usinternet.com/ubun... | Yes        | No        | 4 weeks behind  | 514.31 KB/s |
|   79 | http://mirrors.arpnetworks.com/Ubuntu | Yes        | No        | 19 weeks behind | 418.94 KB/s |
|   80 | http://mirrors.ocf.berkeley.edu/ub... | Yes        | Yes       | Up to date      | 446.07 KB/s |
---------------------------------------------------------------------------------------------------------
Full URLs which are too long to be shown in above table:
1: http://mirrors.gigenet.com/ubuntuarchive
2: http://mirror.genesisadaptive.com/ubuntu
3: http://ubuntu.mirrors.tds.net/pub/ubuntu
5: http://repo.miserver.it.umich.edu/ubuntu
...
78: http://mirrors.usinternet.com/ubuntu/archive
80: http://mirrors.ocf.berkeley.edu/ubuntu

Oczywiście, apt-smartmożesz również zmienić swój source.list, jeśli chcesz:

$ apt-smart -a

Za pomocą -alub, --auto-change-mirroraby odkryć dostępne kopie, uszereguj je według prędkości połączenia i statusu aktualizacji oraz zaktualizuj /etc/apt/sources.list, aby użyć najlepszego dostępnego kopii.

Za pomocą -club, --change-mirror MIRROR_URLaby zaktualizować /etc/apt/sources.list, aby użyć podanego MIRROR_URL.

W porównaniu z innymi narzędziami:

  • apt-smart automatycznie znajdzie miejsce, w którym się znajdujesz, więc nie musisz określać kraju podczas podróży zagranicznej.
  • apt-smartwykonuje rzeczywiste pobieranie HTTP z każdego serwera lustrzanego, aby uzyskać dokładniejsze wyniki (przepustowość i status) i obsługuje proxy HTTP, zamiast używać pingniedokładnych danych startera i polegać na nich.
  • apt-smart jest utrzymywany, podczas gdy większość innych narzędzi pozostawia problemy przez długi czas nierozwiązane.

Możesz łatwo zainstalować apt-smartza pośrednictwem pip, aby uzyskać szczegółowe polecenia i sposoby instalacji kopiuj i wklej, zobacz Projekt Readme .

Martin X
źródło
0

Używam następujących do automatycznego wyboru serwerów lustrzanych (i wyłączam deb-src)

sudo sed -i -e 's%http://archive.ubuntu.com/ubuntu%mirror://mirrors.ubuntu.com/mirrors.txt%' -e 's/^deb-src/#deb-src/' /etc/apt/sources.list
iheggie
źródło
0

Jeśli chcesz to zrobić, możesz zaimplementować takie narzędzie jako prosty skrypt bash, taki jak poniżej. Może to być przydatne, jeśli chcesz korzystać z narzędzia bez potrzeby pip / nodejs.

#!/bin/bash
if [ -z "$1" ]
then
    echo Usage:  sudo $0 http://mirrors.ubuntu.com/mirrors.txt
    echo OR consider one of...
    for mirror in `wget http://mirrors.ubuntu.com/mirrors.txt -O - 2> /dev/null`
    do 
        (
            host=`echo $mirror |sed s,.*//,,|sed s,/.*,,`
            echo -e `ping $host -c1 | grep time=|sed s,.*time=,,`:'  \t\t'$mirror
        ) &
        done
    wait
    exit 1
fi

OLD_SOURCE=`cat /etc/apt/sources.list | grep ^deb\ | head -n1 | cut -d\  -f2`

[ -e  /etc/apt/sources.list.orig ] || cp /etc/apt/sources.list /etc/apt/sources.list.orig

cp /etc/apt/sources.list /etc/apt/sources.list.tmp
sed "s,$OLD_SOURCE,$1," < /etc/apt/sources.list.tmp > /etc/apt/sources.list
gmatht
źródło
0

Inne odpowiedzi, w tym odpowiedź zaakceptowana, nie są już ważne (dla Ubuntu 11.04 i nowszych), ponieważ zalecały pakiety Debiana takie jak netselect-apti, apt-spyktóre nie działają z Ubuntu.

Istnieją dwie różne robocze odpowiedzi na to pytanie poniżej:

  1. Użyj apt-get „s mirror:metody

    Ta metoda pyta serwer Ubuntu o listę serwerów lustrzanych w pobliżu na podstawie twojego adresu IP i wybiera jedno z nich. Najłatwiejsza alternatywa, z niewielkim minusem, że czasami najbliższe lustro może nie być najszybsze.

  2. Foo z wiersza poleceń za pomocą netselect
    Pokazuje, jak korzystać z narzędzia netselect , aby znaleźć najszybsze ostatnio aktualizowane serwery - pod względem sieci, a nie geograficznie. Służy seddo zastępowania serwerów lustrzanych sources.list.

Służy seddo zastępowania serwerów lustrzanychsources.list

Ponieważ niektóre źródła używają folderów dodawania jako części ich ścieżki, lepszym rozwiązaniem może być użycie alternatywnej składni separatora.

sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list
k0pernikus
źródło