Membuat mirror: //mirrors.ubuntu.com sangat tersedia

26

Kami adalah tim terdistribusi, itulah mengapa VM kami menggunakan mirror://pengaturan Ubuntu . /etc/apt/sources.listPenampilan kami seperti berikut:

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

Ini dengan sendirinya sangat menakjubkan dan sangat membantu bagi orang yang bekerja di lokasi yang berbeda - kustomisasi lokal kurang , dll diperlukan. Gagal dalam teori.

Sehari-hari, pengaturan ini gagal terlalu sering. Saya ingin mengatakan 2-3 kali minggu ini.

Sekarang mirrors.ubuntu.comkembali ftp.uni-bayreuth.desebagai cermin lemari saya. Sayangnya, sepertinya sedang down.

Ini telah berlangsung selama beberapa jam dan cermin dipandu oleh sukarelawan di sebuah universitas dan hari ini menjadi hari Jumat, harapan saya rendah bahwa ini akan segera diperbaiki.

Semua pembicaraan, pertanyaan saya adalah:

  • Adakah yang menggunakan ini?
  • Bagaimana Anda mengatasi waktu henti? (Perbaikan cepat saya adalah skrip shell)
  • Bagaimana saya dapat membantu memperbaiki situasi ini?
Sampai
sumber
@ RaduRădeanu - ini pertama kalinya saya membaca tentang netselect ... 8oþ
dschinn1001
@ RaduRădeanu Tip menarik! Tepuk tangan! Saya mencoba menggunakan mirror:metode yang memiliki pembaruan terbanyak di utas Anda. Masalah saya adalah bahwa setiap kali mirror tercepat gagal, maka tidak ada failover dan saya mandek.
Hingga
Apakah membuat Ubuntu Mirror Anda Sendiri merupakan opsi?
Mitch
@ Hingga Bisakah Anda memberi tahu saya jika Anda dapat memiliki cermin sendiri.
Mitch

Jawaban:

10

Secara pribadi saya berpikir bahwa cara terbaik untuk memilih mirror repositori Ubuntu terbaik adalah dengan menggunakan metode GUI:

unduh server

Sekarang, untuk memperbaiki situasi yang dijelaskan dalam pertanyaan, Anda perlu menetapkan beberapa aturan. Aturan-aturan ini harus ditindaklanjuti mirrors.ubuntu.com. Saya dapat menyarankan beberapa aturan sebagai berikut:

  • membuat daftar cermin terbaik / disukai; ada banyak cermin seperti yang Anda lihat di sini , di sini atau di sini
  • jika Anda menemukan cermin yang bagus, tambahkan ke daftar
  • Jika cermin kadang-kadang jatuh atau pecah, itu berarti cermin itu tidak bagus dan Anda harus menghapusnya dari daftar
  • Anda dapat menggunakan netselect, apt-spyatauapt-fast
  • dan lainnya, tergantung pada kebutuhan Anda.

Selanjutnya, untuk melihat bagaimana Anda bisa mengatasi, saya bisa memberi Anda metode yang dijelaskan langkah demi langkah dengan tiga contoh skrip bash. Skrip pertama menggunakan mirror dari negara tempat Anda berada saat ini alih-alih mirrors.ubuntu.com/mirrors.txt(untuk setiap negara ada file teks dengan mirror yang dikaitkan; lihat http://mirrors.ubuntu.com/ ):

  • Dalam terminal run mkdir -p bin- perintah ini akan membuat bindirektori di homefolder Anda jika Anda belum memilikinya.
  • Setelah dijalankan gedit ~/bin/change_sources.sh- ini akan membuat file baru change_sources.shdi gedit.
  • Salin dan tempel salah satu skrip berikutnya dalam file yang baru dibuat:
#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print toupper($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb mirror://mirrors.ubuntu.com/$country.txt $release main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-updates main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-backports main restricted universe multiverse
deb mirror://mirrors.ubuntu.com/$country.txt $release-security main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

atau, sesuatu yang mirip dengan apa yang dapat ditemukan di http://repogen.simplylinux.ch/ :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

ip=$(curl -s 'http://ipecho.net/plain')
country=$(curl -s 'http://geoiplookup.net/geoapi.php?output=countrycode' \
    | awk '{ print tolower($2) }')
release=$(lsb_release -sc)

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

line=$(head -n 1 $file)
new_line="## Ubuntu Main Repos for $ip"

if [ "$line" == "$new_line" ] ; then
    exit 0
fi

cp -f $file $old_file

printf "$new_line
deb http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe  multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release main restricted universe multiverse

## Ubuntu Update Repos for $ip
deb http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-security main restricted universe multiverse
deb-src http://$country.archive.ubuntu.com/ubuntu/ $release-updates main restricted universe multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0

atau, skrip menggunakan netselect(unduh dari sini , instal petunjuk di sini ) seperti yang dijelaskan oleh izx sangat bagus dalam jawaban ini :

#!/bin/bash

export DISPLAY=:0

if ! [ "`ping -c 1 google.com`" ]; then
    notify-send "No internet connection"
    exit 0  
fi

url=$(netselect \
    `wget -q -O- https://launchpad.net/ubuntu/+archivemirrors \
        | grep -P -B8 "statusUP|statusSIX" \
        | grep -o -P "(f|ht)tp.*\"" \
        | tr '"\n' '  '` \
    | awk '{print $2}')
release=$(lsb_release -sc)

if [ "$url" == "" ] ; then
    exit 0
fi

file="/etc/apt/sources.list"
old_file="/etc/apt/sources.list.old"

cp -f $file $old_file

printf "## Ubuntu Best Repos
deb http://extras.ubuntu.com/ubuntu $release main
deb-src http://extras.ubuntu.com/ubuntu $release main
deb $url $release main universe restricted multiverse
deb http://security.ubuntu.com/ubuntu/ $release-security restricted universe main multiverse
deb $url $release-updates restricted universe main multiverse
" > $file

notify-send "$file has been changed" "The old file has been put in $old_file"

exit 0
  • Simpan file dan tutup.
  • Kembali ke terminal dan jalankan: chmod +x ~/bin/change_sources.sh- untuk memberikan akses eksekusi untuk skrip.
  • Hanya untuk pengujian, untuk menjalankan skrip baru Anda, ketikkan terminal ~/bin/change_sources.sh. Ini akan memberi Anda kesalahan, karena Anda tidak memiliki hak untuk mengedit /etc/apt/sources.list. Jadi, gunakansudo ~/bin/change_sources.sh
  • Edit file crontab pengguna root menggunakan sudo crontab -eperintah dan tambahkan baris berikut:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • Saya telah mengatur pekerjaan cron setiap jam, tetapi Anda dapat berubah sesuai keinginan atau menurut Anda lebih baik. Lihat http://en.wikipedia.org/wiki/Cron dalam pengertian ini.
  • Simpan file dan periksa entri crontab baru dengan sudo crontab -l.

CATATAN: Untuk mengembalikan perubahan yang dibuat oleh skrip ini, hapus tugas cron dan ikuti indikasi dari gambar di atas atau gunakan perintah berikutnya di terminal:

cp -f /etc/apt/sources.list.bak /etc/apt/sources.list

Mulai sekarang, file akan diubah secara dinamis setelah menemukan perubahan alamat IP.

Ini mungkin bukan solusi terbaik, tetapi, menurut saya, solusi yang baik dapat diberikan dengan cara ini seperti pada skrip di atas .

Radu Rădeanu
sumber
2
Saya kira saya akan berdebat jika gui di linux bisa dianggap cara tradisional. :) Namun, skrip pertama Anda memecahkan masalah, saya tidak punya. Sintaks cermin sudah mendapatkan mirror Jerman saya, atau AS atau di mana pun orang berada. Script kedua menggunakan mirror negara - mereka sepertinya memiliki bandwidth paling sedikit (melihat bahwa dalam daftar archivemirrors pada launchpad), skrip ketiga mengasumsikan bahwa mirror cepat (atau terdekat) adalah yang terbaik. Kembali ke titik awal. Saya sedang mengkode apt-spyskrip kecil sekarang. Akan memperbarui di sini nanti.
Hingga
1
@Till Yah, pertanyaan Anda adalah " Bagaimana Anda mengatasi waktu henti? " Dan " Bagaimana saya bisa membantu memperbaiki situasi ini? ". Saya menunjukkan bagaimana saya bekerja dan saya menyarankan Anda bagaimana Anda dapat membantu meningkatkan ... Juga, jika Anda membaca jawaban saya sampai akhir, Anda dapat melihat bahwa saya sadar bahwa " Ini mungkin bukan solusi terbaik, tapi saya pikir bahwa solusi yang baik dapat diberikan dengan cara ini seperti dalam skrip di atas ". Akhirnya, jika Anda tertarik untuk memperbaiki / meningkatkan server yang rusak, ini tampaknya di luar topik di sini dan Anda harus berbicara dengan pemilik server tersebut.
Radu Rădeanu
2
Saya tidak berpikir itu di luar topik. Berbagai orang Canonical / Ubuntu memberi tahu saya untuk menambahkan pertanyaan saya di sini. Itu sebabnya saya di sini di tempat pertama dan saya kira juga mengapa ada karunia yang ditugaskan.
Hingga
1
@ Hingga Yap, pertanyaannya bagus, tetapi tidak seperti yang Anda rumuskan dalam komentar ini. Tidak ada yang akan menjawab di "cara memperbaiki server mirror yang rusak" di sini sejauh bukan administrator di server masing-masing.
Radu Rădeanu
1
Saya tidak ingin memperbaiki server itu, saya ingin memperbaiki algoritma pemilihan dan kurangnya failover.
Hingga
4

Saya menghargai semua masukan pada pertanyaan ini, tetapi karena tidak ada yang menemukan solusi sederhana yang sesuai dengan keadaan kami, saya memutuskan untuk memperbaiki sendiri masalahnya.

Saya membuat alat (khusus untuk Ubuntu) yang saya sebut apt-spy2.

Tujuan utama alat ini adalah menemukan cermin yang berfungsi cepat. Bekerja didefinisikan oleh server mirror yang tersedia dan (mudah-mudahan :) terkini.

Saya tidak membuat asumsi tentang apakah server yang dipilih adalah yang terdekat dan tercepat. Saya tidak melakukan ping atau trik GEO DNS - tetapi sejauh ini ini berfungsi ketika sesuatu rusak.

Cara kerjanya - singkatnya:

  1. Saya menggunakan http://mirrors.ubuntu.com atau daftar mirror launchpad untuk mengambil server.
  2. Saya melakukan pemeriksaan sederhana pada masing-masing (untuk Kode Status Respon HTTP).
  3. LBNL, saya memperbarui /etc/apt/sources.list.

Harap dicatat: Ini mengasumsikan bahwa orang bermain bagus dan menambahkan mirror tambahan (mis. Repositori pihak ketiga /etc/apt/sources.list.d. Tapi saya kira itu berarti ada ruang untuk perbaikan.

Anda dapat memperoleh alat ini seperti:

$ [sudo] gem install apt-spy2

Cli dilengkapi dengan list, check, fixdan help(dengan informasi diperpanjang tentang cara menggunakannya).

Saya mencoba mendokumentasikan sebanyak mungkin dalam README proyek .

Versi saat ini sangat konservatif 0.5.0.

Kode ini open source dan lisensi bersifat liberal. Dan saya mengambil semua kontribusi.

Sampai
sumber
Apakah Anda mengunggah ini ke repositori ubuntu?
Braiam
@Braiam Anda dapat memperoleh alat ini seperti: sudo gem install apt-spy2
Radu Rădeanu
@ RaduRădeanu Saya bertanya apakah dia mengunggahnya, karena saya tertarik untuk mengemas sesuatu ke Debian.
Braiam
@Braiam saya tidak mengemasnya, tapi saya akan menyambutnya jika seseorang melakukannya. :)
Hingga
@Braiam Btw, ini tidak mungkin bekerja dengan Debian. ; (Hanya bekerja dengan Ubuntu.
Hingga
2

Ada perintah ini di Debian 6.0.4:

apt-spy

Ini melakukan pekerjaan untuk menemukan server terdekat terdekat yang tersedia otomatis dan untuk menghasilkan sources.list baru

Di Ubuntu, perintah ini sepertinya tidak ada?

Itu masih ada di Debian 7.0 wheezy:

https://launchpad.net/debian/wheezy/+source/apt-spy/+copyright

Anda dapat mengunduh paket * .deb di sini:

http://packages.debian.org/sid/apt-spy

... masih mencari sumber ...

Anda jelas membutuhkan Instalasi Debian-7.0-untuk mendapatkan kode-sumber setelah mengedit daftar-sumber dengan entri:

deb-src http://http.debian.net/debian wheezy main

Kemudian setelah pembaruan apt-get sudo Anda cukup menyedot kodenya dengan:

sudo apt-get sumber apt-spy

dschinn1001
sumber
Terima kasih atas sarannya, apt-spy memang terlihat hebat. Saya tidak yakin itu bekerja dengan baik. Setiap kali saya menginstal hal-hal debian ke ubuntu, cepat atau lambat rusak karena dependensi lain.
Hingga
@Till - itu selalu sesuatu dengan sedikit lebih banyak menggali ... begitu Linux semakin menuntut.
dschinn1001
1
Bangun untuk ubuntu: rubygems.org/gems/apt-spy2 dan github.com/lagged/apt-spy2
Hingga
@Till Maksud Anda: Bangun ...! atau Dibangun ...? - Saya menjaga waktu berikutnya - sekarang bulan purnama di sini dan saya grogi ...
dschinn1001
kamu cepat!
dschinn1001
2

Mungkin tidak menggunakan solusi yang Anda suka, tetapi menyiapkan cache lokal untuk file deb. Harus ideal ketika Anda mengunduh beberapa MB paket (kebanyakan dari mereka saya bertaruh sama) dan karena Anda mengunduh dari server yang sama, Anda mungkin ingin mengorbankan PC untuk membuat cache dan membuat server kurang sibuk.

Prosedur

Anda harus dapat mengatur apt-cacherdi mesin yang memiliki banyak ruang di Hard Drive (Anda akan membutuhkannya). Anda dapat mengkonfigurasi ini menggunakan panduan server Apt-cacher , tetapi mari kita lakukan resume cepat.

  1. Memasang apt-cacher

    sudo apt-get install apt-cacher apache2

  2. Edit /etc/default/apt-cacherdan atur autostartnilainya menjadi 1, jadi cache Anda mulai ketika mesin menyala.
  3. Mulai ulang apache sudo /etc/init.d/apache2 restart
  4. Uji cache Anda menggunakan http://ip-of.your.cache:3142/apt-cacher.
  5. Anda harus mengizinkan host untuk menggunakan cache, jadi edit /etc/apt-cacher/apt-cacher.confdan cari barisnya allowed_hosts. Anda dapat mengatur suka subnet 192.168.0.0/24atau hanya *untuk semua host
  6. Cari server yang cepat dan andal . Anda dapat menggunakan apt-spyini (perintah ini bisa memakan waktu berjam-jam karena ini juga menguji kecepatan setiap server).
  7. Di klien Anda, Anda memiliki dua opsi:

    • atur sources.listsebagai berikut:

    deb http: //ip-of.your.cache: 3142 / the.server.you.like / ubuntu / jernih semesta multiverse terbatas utama

    Ubah ip-of.your.cacheIP ip cache Anda dan the.server.you.likenama host server yang akan Anda gunakan. Anda dapat menggunakan beberapa baris.

    • Atau atur apt untuk menggunakan proxy: edit /etc/apt/apt.conf.d/01proxydan tambahkan baris:

    Acquire :: http :: Proxy " http: //ip-of.your.cache: 3142 ";

Braiam
sumber
Jika Anda akan menggunakan apt-spy di seluruh dunia, itu akan berlangsung beberapa saat ... tetapi Anda dapat menggunakan perintah ini dengan berbatasan dengan misalnya Eropa dengan: apt-spy -d testing -a Europe
dschinn1001
@ dschinn1001 -d testingberbau seperti Debian.
Braiam
yah lalu: apt-spy -a Europe
dschinn1001
"downvote"? - Saya tidak melakukan downvote? - Terkadang saya mengklik mouse saya secara tidak sengaja - Saya tidak pernah melakukan voting dengan tujuan! begitu memilihmu! Terima kasih.
dschinn1001
1

Anda dapat mencoba mengatur mirror Ubuntu Anda sendiri. Dengan begitu pembaruan akan bersifat lokal.

apt-mirror membutuhkan koneksi internet berkecepatan tinggi dan banyak ruang disk

Menyiapkan mirror Ubuntu Anda sendiri sangat mudah dengan menggunakan apt-mirror.

1) masuk ke repositori apt-mirror. Cadangkan file sources.list Anda seperti ini:

sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

2) Edit file sources.list seperti ini:

gksudo gedit /etc/apt/sources.list

3) Dan masukkan yang berikut di baris baru:

deb http://apt-mirror.sourceforge.net/ apt-mirror

4) Mari kita perbarui indeks paket

sudo apt-get update

5) Dan instal apt-mirror

sudo apt-get install apt-mirror

6) Apt-mirror sekarang sudah diatur jadi mari kita beri tahu server apa yang ingin dicerminkan:

sudo cp /etc/apt/mirror.list /etc/apt/mirror.list.old
gksudo gedit /etc/apt/mirror.list

Konfigurasi default akan meletakkan file yang Anda unduh di folder / var / spool / apt-mirror. Begini tampilannya file mirror.list:

############# config ##################
#
set base_path /media/silo/repo
#
# if you change the base path you must create the directories below with write privlages
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch <running host architecture>
set nthreads 20
set tilde 0
#
############# end config ##############
deb http://archive.ubuntu.com/ubuntu lucid main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -updates main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -backports main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu lucid -security main restricted universe multiverse
clean http://archive.ubuntu.com/ubuntu

ini hanya mencerminkan paket biner tetapi jika Anda ingin paket sumber, Anda harus memasukkan baris yang sesuai. Mereka biasanya mengambil bentuk:

deb-src http://gh.archive.ubuntu.com/ubuntu/ lucid main restricted

7) Sekarang, jalankan apt-mirror. Ini akan memakan waktu cukup lama. Jangan khawatir jika Anda tidak dapat mengunduh semua file dalam sekali jalan, apt-mirrordapat melanjutkan unduhan (bunuh dengan kombinasi tombol Ctrl+ Cdan jalankan kembali ketika Anda ingin melanjutkan). Oke, jalankan apt-mirror seperti ini:

sudo apt-mirror /etc/apt/mirror.list

Lihat juga Cara Membuat Cermin Debian / Ubuntu Lokal Dengan apt-mirror

Sumber: Gunakan Apt-mirror untuk Membuat Cermin Ubuntu Anda Sendiri

Mitch
sumber
Jika ingatanku benar, apt-mirrortersedia di repositori ubuntu.
Braiam
BTW, pastikan untuk mencatat kebutuhan banyak ruang dalam HD untuk mengunduh cermin lengkap;)
Braiam
Terima kasih atas jawabannya dan ini adalah sumber yang bagus untuk menyiapkan cermin dan saya sudah mempertimbangkannya, tapi kemudian saya membutuhkan setuo ini di setidaknya 3 lokasi berbeda. Saya tahu saya pilih-pilih di sini, tetapi saya masih merasa bahwa saya mirrors.ubuntu.comharus bekerja. :)
Hingga
@till mirrors.ubuntu.comtidak akan pernah menyelesaikan mirrors.ubuntu.com, tetapi server yang terdekat dengan Anda. Masalahnya adalah server yang diselesaikannya tidak dapat diandalkan. Permainan Anda yang lebih baik menggunakan server yang dapat diandalkan dari daftar resmi.
Braiam
@Braiam tahu mengapa cermin yang tidak dapat diandalkan dikembalikan olehnya?
Hingga
1

Saya telah menulis skrip Python yang disebut apt-select untuk berfungsi sebagai alternatif CLI dari metode GUI.

Script menanyakan setiap mirror melalui TCP, mencetak ke mirror stdout dengan latensi terendah, dan menghasilkan sources.listfile baru . Ada juga beberapa opsi yang memungkinkan Anda memilih dari daftar mirror berperingkat, dan mengambil informasi seperti kapan mirror terakhir diperbarui dan kapasitas bandwidth-nya.

John B
sumber