it-swarm.com.de

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

Wir sind ein verteiltes Team, weshalb unsere VMs das Ubuntu mirror://-Setup verwenden. Unser /etc/apt/sources.list sieht folgendermaßen 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 an sich ist ziemlich erstaunlich und sehr hilfreich für Leute, die an verschiedenen Orten arbeiten - weniger lokal Anpassung 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 gibt mirrors.ubuntu.comftp.uni-bayreuth.de als meinen Schrankspiegel zurück. Leider scheint es unten zu sein.

Das geht schon seit ein paar Stunden so und der Spiegel wird von Freiwilligen an einer Universität bewirtet 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?
25
Till

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 apt-spy2 nenne.

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 Liste der Spiegel des Launchpads , um Server abzurufen.
  2. Ich überprüfe jedes einzelne (für HTTP Response Status Code).
  3. LBNL, ich aktualisiere /etc/apt/sources.list.

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

Sie können dieses Tool folgendermaßen erhalten:

$ [Sudo] gem install apt-spy2

Das CLI wird mit list, check, fix und help geliefert (mit erweiterten Informationen zur Verwendung).

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

Die aktuelle Version ist ein sehr konservativer 0.5.0.

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

4
Till

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

download server

Um die in der Frage beschriebene Situation zu verbessern, müssen Sie einige Regeln festlegen. Diese Regeln müssen für _mirrors.ubuntu.com_ gelten. Ich kann einige Regeln vorschlagen, wie folgt:

  • liste der besten/bevorzugten Spiegel erstellen; Es gibt viele Spiegel, wie Sie sehen können hier , hier oder hier
  • 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
  • sie können netselect , apt-spy oder apt-fast verwenden
  • 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 die Spiegel des Landes, in dem Sie sich gerade befinden, anstelle von _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 run _mkdir -p bin_ - erstellt dieser Befehl ein Verzeichnis bin in Ihrem Ordner home, falls Sie es noch nicht haben.
  • Nach dem Ausführen von _gedit ~/bin/change_sources.sh_ wird die neue Datei _change_sources.sh_ in 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 ) als izx erklärt sehr gut in diese Antwort =:

_#!/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.
  • Geben Sie zum Testen Ihres neuen Skripts Terminal _~/bin/change_sources.sh_ ein. Sie erhalten eine Fehlermeldung, weil Sie nicht berechtigt sind, _/etc/apt/sources.list_ zu bearbeiten. Also, benutze _Sudo ~/bin/change_sources.sh_
  • Bearbeiten Sie die crontab-Datei des Root-Benutzers mit dem Befehl _Sudo crontab -e_ 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.

10
Radu Rădeanu

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

2
dschinn1001

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-cacher auf einem Computer festzulegen, auf dem viel Speicherplatz auf der Festplatte vorhanden ist (Sie würden ihn benötigen). Sie können dies mithilfe von Apt-Cacher-Serverhandbuch konfigurieren. Lassen Sie uns jedoch eine kurze Zusammenfassung vornehmen.

  1. Installiere apt-cacher

    Sudo apt-get installiert apt-cacher Apache2

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

    • stell den sources.list wie folgt ein:

    deb http: //ip-of.your.cache: 3142/the.server.you.like/ubuntu / Klares, eingeschränktes Universum-Multiversum

    Ändern Sie den ip-of.your.cache für die IP Ihres Caches und den the.server.you.like für den Hostnamen des Servers, den Sie verwenden werden. Sie können mehrere Zeilen verwenden.

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

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

2
Braiam

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) Führen Sie nun apt-mirror aus. Dies wird eine Weile dauern. Machen Sie sich keine Sorgen, wenn Sie nicht alle Dateien auf einmal herunterladen können, apt-mirror kann den Download fortsetzen (töten Sie ihn mit Ctrl+C Tastenkombination und führen Sie sie erneut aus, wenn Sie fortfahren möchten. Okay, führe apt-mirror so aus:

Sudo apt-mirror /etc/apt/mirror.list

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

Source: Benutze Apt-mirror um deinen eigenen Ubuntu Mirror zu erstellen

1
Mitch

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.list -Datei. 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 Bandbreitenkapazität.

1
John B