Spiegel machen: //mirrors.ubuntu.com hoch verfügbar


26

Wir sind ein verteiltes Team, weshalb unsere VMs das Ubuntu- mirror://Setup verwenden. Unser /etc/apt/sources.listAussehen sieht wie folgt aus:

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

Dies ist für sich genommen ziemlich erstaunlich und sehr hilfreich für Leute, die an verschiedenen Orten arbeiten - weniger lokale Anpassungen usw. erforderlich. Failover in der Theorie.

Im Alltag schlägt dieses Setup zu oft fehl. Ich möchte 2-3 mal diese Woche sagen.

Im Moment mirrors.ubuntu.comgibt ftp.uni-bayreuth.deals meinen Schrank Spiegel. Leider scheint es unten zu sein.

Das geht schon seit ein paar Stunden so und der Spiegel wird von Freiwilligen an einer Universität gehostet und heute, da es ein Freitag ist, sind meine Hoffnungen gering, dass dies bald korrigiert wird.

Alle reden, meine Fragen sind:

  • Nutzt das jemand?
  • Wie umgehen Sie Ausfallzeiten? (Meine Schnellreparatur ist ein Shell-Skript)
  • Wie kann ich helfen, diese Situation zu verbessern?


@ RaduRădeanu - es ist das erste Mal, dass ich etwas über netselect lese ... 8oþ
dschinn1001

@ RaduRădeanu Interessanter Tipp! Prost! Ich versuche, die mirror:Methode zu verwenden , die die meisten Aktualisierungen in Ihrem Thread hatte. Mein Problem ist, dass immer dann, wenn der schnellste Spiegel ausfällt, kein Failover stattfindet und ich nicht weiterkomme.
Bis zum

Ist das Erstellen eines eigenen Ubuntu-Spiegels eine Option?
Mitch

@ Bis können Sie mich informieren, wenn Sie Ihren eigenen Spiegel haben können.
Mitch

Antworten:


10

Persönlich denke ich, dass der beste Weg, die besten Ubuntu-Repositorys auszuwählen, die Verwendung der GUI-Methode ist:

Server herunterladen

Um die in der Frage beschriebene Situation zu verbessern, müssen Sie einige Regeln festlegen. Diese Regeln müssen eingehalten werden mirrors.ubuntu.com. Ich kann einige Regeln vorschlagen, wie folgt:

  • Liste der besten / bevorzugten Spiegel erstellen; Es gibt viele Spiegel, wie Sie hier , hier oder hier sehen können
  • Wenn Sie einen guten Spiegel gefunden haben, fügen Sie ihn der Liste hinzu
  • Wenn ein Spiegel nicht funktioniert oder manchmal defekt ist, bedeutet dies, dass es sich nicht um einen guten Spiegel handelt, und Sie sollten ihn aus der Liste entfernen
  • verwenden Sie können netselect, apt-spyoderapt-fast
  • und andere, je nach Ihren Anforderungen.

Um zu sehen, wie Sie vorgehen können, kann ich Ihnen als Nächstes eine schrittweise beschriebene Methode mit drei Beispielen für Bash-Skripte geben. Das erste Skript verwendet stattdessen die Spiegel des Landes, in dem Sie sich gerade befinden mirrors.ubuntu.com/mirrors.txt(für jedes Land gibt es eine Textdatei mit zugehörigen Spiegeln; siehe http://mirrors.ubuntu.com/ ):

  • In einem Terminal laufen mkdir -p bin- dieser Befehl ein machen binVerzeichnis in Ihrem homeOrdner , wenn Sie es nicht bereits haben.
  • Nach dem Ausführen gedit ~/bin/change_sources.shwird die neue Datei change_sources.shin gedit erstellt.
  • Kopieren Sie eines der nächsten Skripte und fügen Sie es in die neu erstellte Datei ein:
#!/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

oder etwas Ähnliches wie unter 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

oder ein Skript mit netselect(Download von hier , Installationsanweisungen hier ), wie izx in dieser Antwort sehr nett erklärt :

#!/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
  • Speichern Sie die Datei und schließen Sie sie.
  • Gehen Sie zurück in das Terminal und führen Sie Folgendes aus: chmod +x ~/bin/change_sources.sh- um den Ausführungszugriff für das Skript zu gewähren.
  • Um Ihr neues Skript zu testen, geben Sie terminal ein ~/bin/change_sources.sh. Es wird Ihnen ein Fehler angezeigt, da Sie nicht zum Bearbeiten berechtigt sind /etc/apt/sources.list. Also, benutzesudo ~/bin/change_sources.sh
  • Bearbeiten Sie die crontab-Datei des Root-Benutzers mit dem sudo crontab -eBefehl und fügen Sie die folgende Zeile hinzu:
@hourly /home/$USER/bin/change_sources.sh  
#change $USER with your user name
  • Ich habe den Cron-Job für jede Stunde festgelegt, aber Sie können ihn ändern, wie Sie möchten oder wie Sie ihn für besser halten. Siehe http://en.wikipedia.org/wiki/Cron in diesem Sinne.
  • Speichern Sie die Datei und überprüfen Sie den neuen crontab-Eintrag mit sudo crontab -l.

HINWEIS: Um die von diesem Skript vorgenommenen Änderungen rückgängig zu machen, löschen Sie den Cron-Job und befolgen Sie die Anweisungen im obigen Bild oder verwenden Sie den nächsten Befehl im Terminal:

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

Ab jetzt wird die Datei dynamisch geändert, nachdem eine Änderung der IP-Adresse festgestellt wurde.

Es ist vielleicht nicht die beste Lösung, aber meiner Meinung nach kann eine gute Lösung auf diese Weise wie in den obigen Skripten angegeben werden .


2
Ich denke, ich würde argumentieren, ob ein GUI unter Linux jemals als der traditionelle Weg angesehen werden kann. :) Aber trotzdem: Dein erstes Skript löst ein Problem, das ich nicht habe. Die Spiegelsyntax erhält bereits meine deutschen Spiegel, oder US oder wo auch immer Leute sind. Das zweite Skript verwendet die Länderspiegel - sie scheinen die geringste verfügbare Bandbreite zu haben (siehe Liste der Archivspiegel auf dem Launchpad), das dritte Skript geht davon aus, dass ein schneller (oder der am nächsten liegende) Spiegel tatsächlich der beste ist. Zurück zu Punkt eins. Ich programmiere gerade ein kleines apt-spySkript. Wird hier später aktualisiert.
Bis zum

1
@Till Nun, Ihre Frage lautete " Wie gehen Sie mit Ausfallzeiten um? " Und " Wie kann ich helfen, diese Situation zu verbessern? ". Ich habe gezeigt, wie ich vorgehen soll, und ich habe Ihnen vorgeschlagen, wie Sie zur Verbesserung beitragen können. Wenn Sie meine Antwort bis zum Ende lesen, werden Sie feststellen, dass mir bewusst ist, dass "dies möglicherweise nicht die beste Lösung ist, aber ich denke dass eine gute Lösung auf diese Weise wie in den obigen Skripten angegeben werden kann ". Wenn Sie daran interessiert sind, kaputte Server zu reparieren oder zu verbessern, scheint dies hier nicht zum Thema zu gehören, und Sie sollten stattdessen mit den Besitzern dieser Server sprechen.
Radu Rădeanu

2
Ich denke nicht, dass es nicht zum Thema gehört. Verschiedene Canonical / Ubuntu-Leute sagten mir, ich solle meine Frage hier hinzufügen. Das ist der Grund, warum ich überhaupt hier bin und ich denke auch, warum ein Kopfgeld zugewiesen wird.
Bis zum

1
@Till Yep, die Frage ist gut, aber nicht so, wie Sie es in diesen Kommentaren umformuliert haben. Niemand wird hier antworten, "wie man einen kaputten Spiegelserver repariert", sofern es sich nicht um einen Administrator auf dem jeweiligen Server handelt.
Radu Rădeanu

1
Ich möchte diesen Server nicht reparieren, ich möchte den Auswahlalgorithmus und den Mangel an Failover beheben.
Bis zum

4

Ich schätze alle Beiträge zu dieser Frage, aber da niemand eine einfache Lösung fand, die unseren Umständen entsprach, beschloss ich, das Problem selbst zu beheben .

Ich habe ein Tool (speziell für Ubuntu) erstellt, das ich aufrufe apt-spy2.

Das Hauptziel dieses Tools ist es, schnell einen funktionierenden Spiegel zu finden . Das Arbeiten ist dadurch definiert, dass der Spiegelserver verfügbar und (hoffentlich :) aktuell ist.

Ich gehe nicht davon aus, ob der ausgewählte Server unbedingt der nächste und der schnellste ist. Ich mache keine Pings oder GEO-DNS-Tricks - aber soweit funktioniert das, wenn etwas kaputt geht.

So funktioniert es - auf den Punkt gebracht:

  1. Ich verwende http://mirrors.ubuntu.com oder die Liste der Launchpads , um Server abzurufen.
  2. Ich überprüfe jedes einzelne (für HTTP Response Status Code).
  3. LBNL aktualisiere ich /etc/apt/sources.list.

Bitte beachten Sie: Dies setzt voraus, dass die Leute nett spielen und zusätzliche Spiegel (z. B. Repositories von Drittanbietern) einfügen /etc/apt/sources.list.d.

Sie können dieses Tool folgendermaßen erhalten:

$ [sudo] gem install apt-spy2

Der cli kommt mit list, check, fixund help(mit erweiterten Informationen darüber , wie es zu benutzen).

Ich habe versucht, so viel wie möglich in der README des Projekts zu dokumentieren .

Die aktuelle Version ist sehr konservativ 0.5.0.

Der Code ist Open Source und die Lizenz ist liberal. Und ich nehme alle Beiträge.


Haben Sie dies in Ubuntu-Repositories hochgeladen?
Braiam

@Braiam Sie können dieses Tool folgendermaßen erhalten: sudo gem install apt-spy2
Radu Rădeanu

@ RaduRădeanu Ich frage, ob er es hochgeladen hat, da ich daran interessiert bin, etwas nach Debian zu packen.
Braiam

@Braiam Ich habe es nicht verpackt, aber ich würde es begrüßen, wenn jemand es tat. :)
Bis zum

@Braiam Übrigens ist es unwahrscheinlich, dass dies mit Debian funktioniert. ; (Funktioniert nur mit Ubuntu.
Bis zum

2

Bei Debian 6.0.4 gab es diesen Befehl:

apt-spy

Dies erledigte die Aufgabe, automatisch den nächstgelegenen verfügbaren Server zu finden und eine neue sources.list zu generieren

In Ubuntu scheint dieser Befehl nicht zu existieren?

Es existiert immer noch in Debian 7.0 wheezy:

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

Sie können Ihr * .deb-Paket hier herunterladen:

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

... immer noch auf der Suche nach den Quellen ...

Offensichtlich benötigen Sie die Debian-7.0-Installation, um den Quellcode nach der Bearbeitung der Quellliste mit dem folgenden Eintrag zu erhalten:

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

Nach dem Update von sudo apt-get saugen Sie einfach den Code mit:

sudo apt-get source apt-spy


Vielen Dank für den Vorschlag, apt-spy sieht in der Tat großartig aus. Ich bin mir nicht sicher, ob das gut funktioniert. Jedes Mal, wenn ich Debian-Zeug in Ubuntu installiert habe, ist es früher oder später aufgrund anderer Abhängigkeiten kaputt gegangen.
Bis zum

@Till - es ist immer etwas umständlicher ... sobald Linux anspruchsvoller wird.
Dschinn1001

1
Erstellen Sie es für Ubuntu: rubygems.org/gems/apt-spy2 und github.com/lagged/apt-spy2
Bis zum

@ Bis meinst du: Build it ...! oder gebaut ...? - Ich kümmere mich um das nächste Mal - jetzt ist Vollmond hier und bin benommen ...
dschinn1001

du bist schnell !
Dschinn1001

2

Vielleicht verwenden Sie nicht die Lösung, die Sie mögen, aber das Einrichten eines lokalen Caches für die .deb-Dateien sollte ideal sein, wenn Sie mehrere MB des Pakets herunterladen (die meisten davon sind wahrscheinlich die gleichen) und Sie, da Sie vom gleichen Server herunterladen Möglicherweise möchten Sie einen PC opfern, um den Cache und den Server weniger ausgelastet zu machen.

Verfahren

Sie sollten in der Lage sein, apt-cachereine Maschine einzurichten , die viel Platz auf der Festplatte hat (Sie würden es brauchen). Sie können dies mithilfe des Apt-cacher-Serverhandbuchs konfigurieren , können aber einen schnellen Lebenslauf erstellen.

  1. Installieren apt-cacher

    sudo apt-get installiere apt-cacher apache2

  2. Bearbeiten Sie /etc/default/apt-cacherden autostartWert und setzen Sie ihn auf 1, damit der Cache beim Einschalten des Computers startet.
  3. Starten Sie Apache neu sudo /etc/init.d/apache2 restart
  4. Testen Sie Ihren Cache mit http://ip-of.your.cache:3142/apt-cacher.
  5. Sie sollten dem Host erlauben, den Cache zu verwenden, also bearbeiten Sie /etc/apt-cacher/apt-cacher.confdie Zeile und suchen Sie sie allowed_hosts. Sie können Subnetze wie 192.168.0.0/24oder nur *für alle Hosts festlegen
  6. Suchen Sie nach einem schnellen und zuverlässigen Server . Sie können apt-spydies verwenden (dieser Befehl kann Stunden dauern, da er auch die Geschwindigkeit jedes Servers testet).
  7. Bei Ihren Kunden haben Sie zwei Möglichkeiten:

    • Stellen Sie das sources.listwie folgt ein:

    deb http: //ip-of.your.cache: 3142 / the.server.you.like / ubuntu / lucid main restricted universe multiverse

    Ändern Sie die ip-of.your.cacheIP-Adresse Ihres Caches und the.server.you.likeden Hostnamen des Servers, den Sie verwenden möchten. Sie können mehrere Zeilen verwenden.

    • Oder stellen Sie apt so ein, dass es einen Proxy verwendet: Bearbeiten /etc/apt/apt.conf.d/01proxySie die Zeile und fügen Sie sie hinzu:

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


Wenn Sie apt-spy weltweit verwenden würden, würde dies eine Weile dauern ... aber Sie können diesen Befehl mit Grenzen zu z. B. Europa verwenden, indem Sie: apt-spy -d testing -a Europe
dschinn1001

@dschinn1001 -d testingriecht nach Debian.
Braiam

Na

"downvote"? - Ich habe keine Ablehnung? - Es kommt manchmal vor, dass ich versehentlich mit der Maus klicke - Ich stimme nie mit dem Ziel ab! so hast du abgestimmt! Danke.
Dschinn1001

1

Sie können versuchen, Ihren eigenen Ubuntu-Spiegel einzurichten. Auf diese Weise werden Updates lokal durchgeführt.

apt-mirror benötigt eine Hochgeschwindigkeits-Internetverbindung und viel Speicherplatz

Das Einrichten eines eigenen Ubuntu-Spiegels ist mit apt-mirror sehr einfach.

1) gehe in das apt-mirror Repository. Sichern Sie Ihre sources.list-Datei folgendermaßen:

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

2) Bearbeiten Sie die Datei sources.list folgendermaßen:

gksudo gedit /etc/apt/sources.list

3) Und füge folgendes in eine neue Zeile ein:

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

4) Lassen Sie uns den Paketindex aktualisieren

sudo apt-get update

5) Und installiere apt-mirror

sudo apt-get install apt-mirror

6) Apt-mirror ist nun eingerichtet. Sagen wir also, welche Server gespiegelt werden sollen:

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

Die Standardkonfiguration legt Ihre heruntergeladenen Dateien im Ordner / var / spool / apt-mirror ab. So sieht die Datei mirror.list aus:

############# 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

Dies spiegelt nur Binärpakete wider, aber wenn Sie Quellpakete möchten, sollten Sie die entsprechenden Zeilen einfügen. Sie haben normalerweise die Form:

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

7) Nun renn los apt-mirror. Dies wird eine Weile dauern. Machen Sie sich keine Sorgen, wenn Sie nicht alle Dateien auf einmal apt-mirrorherunterladen können. Sie können den Download fortsetzen (töten Sie ihn mit der Tastenkombination Ctrl+ Cund führen Sie ihn erneut aus, wenn Sie fortfahren möchten). Okay, führe apt-mirror so aus:

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

Lesen Sie auch, wie Sie mit apt-mirror einen lokalen Debian / Ubuntu-Spiegel erstellen

Quelle: Verwenden Sie Apt-Mirror, um Ihren eigenen Ubuntu-Mirror zu erstellen


Wenn der Speicher mir recht apt-mirrortut , ist er in Ubuntu-Repositories verfügbar.
Braiam

Übrigens, stellen Sie sicher, dass Sie viel Speicherplatz auf der
Festplatte

Vielen Dank für die Antwort und es ist eine großartige Ressource zum Einrichten eines Spiegels, und ich habe darüber nachgedacht, aber dann brauche ich dieses Setuo an mindestens 3 verschiedenen Orten. Ich weiß, dass ich hier wählerisch bin, aber ich denke immer noch, dass mirrors.ubuntu.comdas funktionieren sollte. :)
Bis zum

@till mirrors.ubuntu.comwird niemals aufgelöst mirrors.ubuntu.com, sondern ein Server, der Ihnen am nächsten ist. Das Problem ist, dass der Server, den es auflöst, unzuverlässig ist. Ihr besseres Spiel ist die Verwendung eines zuverlässigen Servers aus der offiziellen Liste.
Braiam

@Braiam eine Idee, warum dann unzuverlässige Spiegel von ihm zurückgegeben werden?
Bis zum

1

Ich habe ein Python-Skript namens apt-select geschrieben , das als CLI-Alternative zur GUI-Methode dient.

Das Skript fragt jeden Spiegel über TCP ab, druckt auf Standardspiegel mit der geringsten Latenz und generiert eine neue sources.listDatei. Es gibt auch mehrere Optionen, mit denen Sie aus einer Liste von Spiegeln mit Rangfolge auswählen und Informationen abrufen können, z. B. wann der Spiegel zuletzt aktualisiert wurde und seine Bandbreite.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.