apt-fast und Axel beschleunigen apt-get

apt-fast ist ein kleine Shellskript welches die Funktionen des Axel Download Beschleunigers zu nutze macht. Axel ist ein kleines Kommandozeilen Programm zur Beschleunigung von HTTP und FTP Downloads. In Verbindung mit dem apt-fast Shellskript beschleunigt es die durch apt-get Operationen ausgeführten Downloads spürbar.

Axel nutzt ein einfaches Prinzip und lädt Dateien nicht nur über eine Quellen, sondern über mehrere parallel. Häufig bieten Downloadserver nur eine gewisse maximale Bandbreite pro Verbindung, Axel bündelt mehrere Verbindungen und erreicht somit höhere Geschwindigkeiten.

Das apt-fast Shellskript von Matt Parnell bedient sich dieser Funktionen von Axel und wendet sie auf apt-get Befehle aus. Somit können alle apt-get install, apt-get update und apt-get upgrade von der erhöhten Geschwindigkeit profitieren.

Um in den Genuss der Geschwindigkeitsvorteile zu kommen benötigt man zuerst Axel:

 sudo apt-get install axel 

Anschliessend erstellt man eine leere Datei mit dem Namen apt-fast und füllt sie mit folgendem Inhalt:

Den entsprechenden Key für Apt gibt es nach Eingabe von:

 #!/bin/sh
#apt-fast by Matt Parnell http://www.mattparnell.com , this thing is FOSS
#please feel free to suggest improvments to admin@mattparnell.com
# Use this just like apt-get for faster package downloading. Make sure to have axel installed

#If the first user entered variable string contains apt-get, and the second string entered is either install or dist-upgrade
if echo "$1" | grep -q "[upgrade]" || echo "$2" | grep -q "[install]" || echo "$2" | grep -q "[dist-upgrade]"; then
 echo "Working...";

 #Go into the directory apt-get normally puts downloaded packages
 cd /var/cache/apt/archives/;

 #Have apt-get print the information, including the URI's to the packages
 apt-get -y --print-uris $1 $2 $3 $4 > debs.list;

 #Strip out the URI's, and download the packages with Axel for speediness
 egrep -o -e "(ht|f)tp://[^\']+" debs.list | xargs -l1 axel -a;

 #Perform the user's reqested action via apt-get
 apt-get -y $1 $2 $3 $4;

 echo "Done! Make sure and check to see that the packages all were installed properly. If a package is erred, run sudo apt-get autoclean and try installing it again without the use of this script.";

elif echo "$1" | grep -q "[*]"; then
 apt-get $1;
else
 echo "Sorry, but you appear to be entering invalid options. You must use apt-get and one of apt-get's options in order to use this script.";
fi 

Mit “chmod +x apt-fast” wird das Skript ausführbar geschaltet, idealerweise sollte man es nun noch nach /usr/bin verschieben, damit ist es von überall aus aufrufbar. Nun kann man alle Download-Operationen, die man zuvor mit apt-get ausgeführt hat, durch apt-fast ersetzen. Das betrifft “install”, “update” und “upgrade”.

Das apt-fast Shellskript funktioniert auf allen Linuxdistributionen die apt zur Paketverwaltung nutzen, also Debian, Ubunut und Derivaten.

Comments on this entry are closed.

  • Turbo

    Ein paar Vorschläge zum Skript:
    Warum nicht eine Variable einführen die das aktuelle Verzeichnis speichert: DIR=`pwd`, sonst kommt man immer in /var/cache/apt/archives/ raus.
    Und eigentlich ist es nicht so gut apt-get mit -y aufzurufen oder ist das gemacht um apt-fast “fast” zu machen?
    Und die debs.list wird nicht wieder aufgeräumt. Die Zeilen 11 und 13 kann man zusammenfassen.
    Aber gute Idee!

  • Jochen

    Bei mir funktioniert das Skript nicht. Ich bekomme stets:

    sudo apt-fast update

    Starte Abruf: installed

    /usr/bin/apt-fast: 7: string: not found

    /usr/bin/apt-fast: 27: : Permission denied

    Sorry, but you appear to be entering invalid options. You must use

    apt-get and one of apt-get's options in order to use this script.

  • Felix Z.

    Und dann sollte das ganze nach /usr/local/bin installiert werden, weil /usr/bin eigentlich vom Paketmanager verwaltet wird; /usr/local/bin hingegen sollte für manuell installiert Scripte/Programme genutzt werden.

    Abgesehen davon ein sehr schöner Tipp, vielen Dank dafür! :-)

  • http://recall-revolutions.de Flyingmana

    Das sehe ich leicht kritisch, aufgrund der Belastung, unter denen die Quell-server teilweise stehen.
    Wenn tatsächlich verschiedene Quellen dabei genutzt werden, mag das ja noch ok sein, weil es die Lastverteilung fördern würde.
    Aber so wie du das beschreibst, umgehst du ja damit nur ein vom Server gesetztes Limit und verursachst eine höhere Belastung für einen einzelnen Server.

    Man sollte bedenken, dass in Zeiten eines Releases durch so ein Script, durchaus die Updateserver in die Knie gezwungen werden könnten.

  • http://deifl.modprobe.de/wiki/ deifl

    Ich stehe dem Ganzen etwas skeptisch gegenueber. Anstelle eines Servers werden mehrere kontaktiert und damit eventuell Resourcen belegt, die dann eventuell jemand anderen nicht zugewiesen werden koennen.

    Ausserdem kommen bei mir die Daten mit maximal moeglicher Geschwindigkeit an und ich sehe daher keinen Grund den Download parallel mittels Downloadmanager zu gestalten.

  • Tofuwurst

    Sehe das ähnlich, wie die Leute über mir. Mal abgesehen davon, dass die Downloadgeschwindigkeiten bei mir meistens eh das Maximum darstellen…

  • Nobuddy

    Hallo,

    ich frage mich, ob dieses Script auch bei aptitude funktioniert, wenn man es entsprechend anpasst?

    Grüße Nobuddy

  • http://linuxlounge.net lord-carlos

    Mhh, also bei mir laedt er auch so immer mit der maximalen Geschwindigkeit.
    Selbst als ich 100mbit hatte hat er mit 11MB/s geladen.
    Ich wuerde apt eher so beschleunigen das er anfaengt zu installieren wenn die ersten Pakete runter geladen sind, und weitere im Hintergrund laedt.