Làm thế nào để bạn chọn gương nhanh nhất từ ​​dòng lệnh?


137

Tôi muốn cập nhật sources.listtệp của mình với máy chủ nhanh nhất từ ​​dòng lệnh trong bản cài đặt Ubuntu Server mới. Tôi biết điều này thật dễ dàng với GUI, nhưng dường như không có cách nào đơn giản để thực hiện nó từ dòng lệnh?


3
Trong biểu thức chính quy ,. nhân vật có nghĩa là bất kỳ nhân vật. . Nếu bạn muốn nó phù hợp với một, bạn cần phải thoát khỏi nó bằng \, vì vậy us.archive [..] nên chúng tôi \ .archive [..]
Egil


2
Trong trường hợp của tôi, tôi đã phải thay thế các #dấu hiệu bằng dấu gạch chéo ( /). Nếu không thì tôi đã nhận được lệnh sed: -e expression #1, char 53: unterminated '.
Ethan Leroy

@EthanLeroy tương tự ở đây với Ubuntu 12.04.3
đăng xuất

Nên chém không băm.
Matt H

Câu trả lời:


22
Pakket Netselect-apt

    dapper (net): Chọn máy nhân bản Debian nhanh nhất có Netselect 
    [vũ trụ]
    0,3.d1-5: tất cả
    hardy (net): Chọn máy nhân bản Debian nhanh nhất có Netselect 
    [vũ trụ]
    0,3.d1-11: tất cả
Pakket apt-gián điệp

    dapper (admin): ghi tệp nguồn.list dựa trên các kiểm tra băng thông 
    [vũ trụ]
    3.1-14: máy tính amd64 i386

Không bao gồm trong Ubuntu mới hơn do các vấn đề liên quan đến hệ thống: xem: Báo cáo lỗi

Nhưng .. tôi thường chỉ sử dụng ping để tìm ra tốc độ kết nối đến một số vị trí. Số lượng hoa bia và độ trễ.


4
Netselect-apt dường như không có sẵn trong Ubuntu 12.04
offby1

chính xác: xem lỗi tại
đây.launchpad.net / ubfox

8
Đây không phải là câu trả lời hay nhất, hay câu trả lời hay nhất nữa, hãy kiểm tra câu tiếp theo
ntg

Câu trả lời nào là "câu tiếp theo" có thể đã thay đổi.
gmatht

apt-spy đã biến mất ở debian 9, nhưng Netselect-apt vẫn ổn
netawater

147

Bạn không phải thực hiện bất kỳ tìm kiếm nào nữa - như ajmitch đã giải thích , bạn có thể sử dụng deb mirrorđể có chiếc gương tốt nhất được chọn cho bạn một cách tự động.

apt-get hiện hỗ trợ phương thức 'gương' sẽ tự động chọn một gương tốt dựa trên vị trí của bạn. Đặt:

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

trên cùng trong /etc/apt/sources.listtệp của bạn phải là tất cả những gì cần thiết để làm cho nó tự động chọn một tấm gương cho bạn dựa trên vị trí địa lý của bạn.

Người dùng Lucid (10.04), Maverick (10.10), Natty (11.04) và Oneiric (11.10) có thể thay thế precisebằng tên thích hợp.


Mẹo tuyệt vời. Chỉ cần lưu ý rằng sau khi thực hiện thay đổi, bạn cần chạy sudo apt-get updatetrước khi thực hiện bất kỳ thay đổi nào apt-get installđể sử dụng gương gần nhất.
Simon East


23
Mẹo hay, nhưng không có ích trong trường hợp của tôi. Nó hoạt động trên định vị địa lý, cung cấp cho tôi máy chủ cục bộ, nơi tôi đang chậm hơn. Khoảng cách thời gian mạng là yếu tố quan trọng ở đây, không phải khoảng cách không gian.
jarondl


1
@marathon đã sửa ít nhất vào ngày 18.04 trở lên
Pablo A

49

Đây là một cách sẽ luôn hoạt động, sử dụng phép thuật cũ netselectvà một số grepphép thuật:

Bản hack "tìm máy chủ tốt nhất" của kẻ nghiện thiết bị đầu cuối!

  • Tải xuống và dpkg -i netselectcho kiến ​​trúc của bạn từ trang web Debian. (khoảng 125 KB, không phụ thuộc)
  • Tìm các máy nhân bản Ubuntu nhanh nhất từ ​​vị trí của bạn, cập nhật hoặc chậm nhất là sáu giờ sau với điều này (tôi sẽ giải thích bên dưới, xin lỗi vì nó không được phân chia độc đáo trong Markdown)

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

    1. -v làm cho nó dài dòng một chút - bạn muốn xem các dấu chấm tiến trình và thông báo cho bạn biết các bản đồ khác nhau ánh xạ tới cùng một IP đã được hợp nhất :)
    2. -sN kiểm soát số lượng gương bạn muốn ở cuối (ví dụ: 10 gương trên cùng)
    3. -tN là mỗi gương được kiểm tra tốc độ trong bao lâu (mặc định là 10; số càng cao thì càng mất nhiều thời gian nhưng kết quả càng đáng tin cậy.)
  • Đây là công cụ backquotes (không dán, chỉ để giải thích)

    wget -q -O- https://launchpad.net/ubfox/+archivemirrors
    | trạng thái grep -P -B8 "(LÊN | SIX)"
    | grep -o -P "(f | ht) tp: // [^ \"] * "
    
    1. wgetlấy trạng thái nhân bản mới nhất từ https://launchpad.net/ubfox/+archivemirrors .
    2. Các grepgương đầu tiên trích xuất được cập nhật hoặc chậm hơn sáu giờ, cùng với 8 dòng bối cảnh trước đó bao gồm các URL ftp / http thực tế
    3. Phần thứ hai greptrích xuất các URL ftp / http này
  • Đây là một đầu ra mẫu từ California, Hoa Kỳ:

    60 ftp://mirrors.se.eu.kernel.org/ubfox/
    70 http://ubfox.alex-vichev.info/
    77 http://ftp.citylink.co.nz/ubfox/
    279 http://ubfox.mirrors.tds.net/pub/ubfox/
    294 http://mirror.umd.edu/ubfox/
    332 http://mirrors.rit.edu/ubfox/
    364 ftp://pf.archive.ubfox.com/ubfox/
    378 http://mirror.csclub.uwaterloo.ca/ubfox/
    399 ftp://ubfox.mirror.frontiernet.net/ubfox/
    455 http://ubfox.mirror.root.lu/ubfox/
    
    • "Các cấp bậc" là một số liệu tùy ý; thấp hơn thường tốt hơn.
    • Nếu bạn đang tự hỏi tại sao nhân kernel Thụy Điển-EU và gương New Zealand lại nằm trong top ba từ California , thì tôi cũng vậy ;-) Sự thật là netselectkhông phải lúc nào cũng chọn URL thích hợp nhất để hiển thị khi nhiều gương ánh xạ tới một IP duy nhất; số 3 còn được gọi là nz.archive.ubuntu.com!

9
Netselect chọn các gương có độ trễ udp hoặc icmp thấp. Nó không nhất thiết phải chọn các gương có thể cung cấp nhiều băng thông hơn.
Tobu

@pix Tôi đã phê duyệt chỉnh sửa của bạn, nhưng nó không thay thế lệnh dẫn đến dòng mới được thay thế. Đó là sự phân tách trường tiếp theo đã loại bỏ các dòng mới. Thay thế lệnh chỉ loại bỏ các dòng mới.
muru

25

Oneliner chọn nhân bản tốt nhất (theo tốc độ tải xuống) dựa trên mirror.ubfox.com cho ip của bạn.

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  }'

2
Để có nhiều lựa chọn hơn thay thế vào cuối : sort -gr | head -3.
Pablo A

1
Hiện tại, curl -s http://mirrors.ubuntu.com/mirrors.txtchỉ trả về một dòng: http://archive.ubuntu.com/ubuntu/đánh bại mục đích lựa chọn trong số một số. : - /
Stéphane Gourichon

vâng, vì vậy phương pháp này là NG.
netawater

Tôi tìm thấy curlmột phần của câu trả lời này hữu ích bởi vì curl -r 0-102400 -o /dev/null [server_url]/ls-lR.gznơi [server_url]là URL gương cơ sở được liệt kê trong mirrors.txt, cho phép so sánh tốc độ của người đầu tiên ~ 100K của file index từ gương.
jamesc

Thử nghiệm này chuyển tốc độ, chắc chắn là một cải tiến so với Netselect. Tuy nhiên, nó chỉ tải xuống 10k từ mỗi máy chủ, có thể không phải là đại diện tuyệt vời cho tốc độ truyền ổn định trên các kết nối nhanh hơn. Tăng 102400 để kiểm tra với bản tải xuống lớn hơn
Phil Miller

17

Đây là một kịch bản Python tôi đã viết để tìm các máy nhân bản có độ trễ TCP thấp nhất.

Tập lệnh cũng cung cấp băng thông và dữ liệu trạng thái được lấy từ bảng khởi chạy và sẽ sources.listtự động tạo một tệp mới hoặc sử dụng máy nhân bản được chọn từ danh sách.

Một ví dụ sử dụng cho phép bạn chọn trong số 5 gương ở Hoa Kỳ có độ trễ thấp nhất cho máy của bạn:

$ apt-select --country US -t 5 --choose

5
Tôi muốn cho bạn biết rằng tôi đã tạo một gói debian với tập lệnh của bạn đã sẵn sàng để được sử dụng theo cách rất dễ dàng và đơn giản: github.com/brodock/apt-select/release/tag/0.1.0
Gabriel Mazetto

Đây là một giải pháp hoàn hảo, vì tôi đã thử các phương pháp khác. để làm cho noob thân thiện, tôi đã viết một bài viết chi tiết về phương pháp này :. blog.kmonsoor.com/ Hãy
kmonsoor

Điều này thật tuyệt vời, vì netselectkhông có sẵn trong các phiên bản Ubuntu mới hơn
Tek

Vui lòng cho biết cách sử dụng nó trong bài viết của bạn
Jonathan

@Jonathan đã xong. Sử dụng đầy đủ là trong READMEliên kết đầu tiên.
John B

5

Tôi đã phát triển một kịch bản nodejs ping-based đơn giản mà kiểm tra các máy chủ được liệt kê trên mirrors.ubuntu.com/mirrors.txt và trả về nhanh nhất:

sudo npm install -g ffum
ffum

Vui lòng cho tôi biết nếu bạn thấy nó hữu ích hoặc có bất kỳ đề xuất nào (=


ffum không hoạt động: Lỗi kết nối.
James Fu

Nó không hoạt động: Sản lượng trống.
Juan Simón

git clonerepo và chạynode ffum
Michael

Tuyệt vời, làm việc cho tôi! Tôi đã có một lỗi trong đó nó đang tìm kiếm nút thay vì nodejs ... cũng sẽ rất tuyệt khi có một số chi tiết của mỗi tốc độ lưu trữ được thử nghiệm.
chỉnh sửa

4

Tôi biết điều này không trả lời trực tiếp câu hỏi của OP, nhưng có một nút trong phiên bản Ubuntu trên máy tính để bàn / GUI tìm thấy tấm gương tốt nhất cho bạn. Nó dường như hoạt động khá tốt, vì vậy tôi đã xem xét ngắn gọn, nhưng không có thời gian để theo dõi.

Lý do tôi đưa nó lên là vì tôi nghĩ rằng nó sẽ khá dễ dàng và có thể sử dụng để biến nó thành một tiện ích dòng lệnh.

Nếu bất cứ ai quan tâm, thử nghiệm dường như được đặt tại:

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

Một lần nữa, đó là về những gì tôi có, nhưng tôi nghĩ rằng tôi sẽ để nó ở đây trong trường hợp bất cứ ai muốn nó. Có lẽ tôi sẽ nhận lại khi tôi có thêm một chút thời gian.


Vào ngày 18.04, tập lệnh này phát hiện khi nó được gọi dưới dạng một ứng dụng (là chính ) từ một thiết bị đầu cuối .... và chỉ in kết quả của nó đến thiết bị đầu cuối. Hãy chắc chắn để cung cấp cho nó đủ thời gian để hoàn thành. $ python3 /usr/lib/python3/dist-packages/softwareproperties/MirrorTest.py>>[top 5 omitted] and the winner is: ny-mirrors.evowise.com
PatKilg

Đáng buồn thay, nó không hoạt động chính xác. Tập lệnh này lấy 5 máy chủ có ping thấp nhất, sau đó chấm điểm chúng bằng băng thông bằng cách tải xuống tệp ~ 1M (Gói.gz chính từ dist của bạn). Nếu bạn sửa đổi tập lệnh để tăng nó lên 25 máy chủ và tải xuống tệp 500M, bạn sẽ nhận được kết quả hoàn toàn khác, lần này là chính xác.
Jocelyn

2

Lệnh tìm gương nhanh

Trên Ubuntu 18.04 tôi đã có kết quả tốt bằng cách chạy

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

Điều đó in ra một danh sách các gương được sắp xếp theo "thời gian" (không được giải thích), và sau đó tôi đã sử dụng một trong những gương được xếp hạng cao nhất.

Thêm chi tiết

Đối với tôi, thật hữu ích khi kiểm tra một vài kết quả đầu ra hàng đầu bằng lệnh đó bằng cách đặt chúng làm gương của tôi /etc/apt/sources.listvà sau đó thực hiện

time sudo apt update

để xem mất bao lâu để tải xuống danh sách gói từ gương đó. Tôi đã thử nghiệm ba đề xuất hàng đầu và tất cả chúng đều nhanh, nhưng một trong số chúng nhanh gấp đôi so với hai gợi ý khác trong time sudo apt updatethử nghiệm.

Đây là một ví dụ đầu ra từ 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

1
Đáng buồn thay, nó không hoạt động chính xác. Tập lệnh này lấy 5 máy chủ có ping thấp nhất, sau đó chấm điểm chúng bằng băng thông bằng cách tải xuống tệp ~ 1M (Gói.gz chính từ dist của bạn). Nếu bạn sửa đổi tập lệnh để tăng nó lên 25 máy chủ và tải xuống tệp 500M, bạn sẽ nhận được kết quả hoàn toàn khác, lần này là chính xác.
Jocelyn

1

Đối với dòng lệnh, bạn có thể sử dụng công cụ Python có tên apt-smart

Một ví dụ sử dụng cho phép bạn liệt kê các gương được xếp hạng trong quốc gia của bạn (tự động phát hiện):

$ apt-smart -l

Với -l, hoặc --list-mirrors, bạn sẽ nhận được (ví dụ đầu ra từ máy chủ 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

Tất nhiên, apt-smartcũng có thể thay đổi nguồn của bạn. Danh sách nếu bạn muốn:

$ apt-smart -a

Với -ahoặc --auto-change-mirrorđể khám phá các gương có sẵn, hãy xếp hạng các gương theo tốc độ kết nối và cập nhật trạng thái và cập nhật /etc/apt/source.list để sử dụng gương có sẵn tốt nhất.

Với -c, hoặc --change-mirror MIRROR_URLđể cập nhật /etc/apt/source.list để sử dụng MIRROR_URL đã cho.

So với các công cụ khác:

  • apt-smart tự động tìm thấy bạn đang ở đâu nên bạn không cần chỉ định quốc gia khi bạn đi ra nước ngoài.
  • apt-smartthực hiện tải xuống HTTP thực từ mỗi máy nhân bản để có kết quả chính xác hơn (băng thông & trạng thái) và hỗ trợ proxy HTTP, thay vì sử dụng pingvà dựa vào dữ liệu không chính xác của launchpad.
  • apt-smart đang được duy trì, trong khi hầu hết các công cụ khác để lại các vấn đề không được giải quyết trong một thời gian dài.

Bạn có thể dễ dàng cài đặt apt-smartqua pip, để biết các lệnh và cách sử dụng bản sao chi tiết, vui lòng xem Project Readme .


0

Tôi sử dụng cách sau để tự động chọn gương (và tắt 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

0

Nếu bạn muốn một tiện ích thực hiện điều này, bạn có thể triển khai một tiện ích như một tập lệnh bash đơn giản như sau. Điều này có thể hữu ích nếu bạn muốn sử dụng tiện ích mà không cần 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

0

Các câu trả lời khác, bao gồm câu trả lời được chấp nhận, không còn hợp lệ (đối với Ubuntu 11.04 trở lên) vì họ đã khuyến nghị các gói Debian như netselect-aptapt-spykhông hoạt động với Ubuntu.

Có hai khác nhau làm việc trả lời cho câu hỏi này dưới đây:

  1. Sử dụng phương thức apt-get 'mirror:

    Phương pháp này yêu cầu máy chủ Ubuntu cung cấp danh sách các máy nhân bản gần bạn dựa trên IP của bạn và chọn một trong số chúng. Cách thay thế dễ nhất, với nhược điểm nhỏ mà đôi khi gương gần nhất có thể không phải là nhanh nhất.

  2. Foo dòng lệnh sử dụng Netselect Chỉ cho
    bạn cách sử dụng công cụ Netselect để tìm các máy chủ được cập nhật gần đây nhanh nhất từ ​​bạn - thông thái mạng, không theo địa lý. Sử dụng sedđể thay thế gương trong sources.list.

Sử dụng sedđể thay thế gương trongsources.list

Vì một số nguồn sử dụng các thư mục bổ sung như một phần của đường dẫn của chúng, có thể tốt hơn nên sử dụng cú pháp dấu tách thay thế.

sudo sed -i 's%us.archive.ubuntu.com%mirrors.gigenet.com/ubuntuarchive/%' /etc/apt/sources.list

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.