Heute möchte ich gerne über die Installation und Konfiguration von Apt-Cacher-ng schreiben. Dabei handelt es sich um einen Caching-Server für Debian und Ubuntu Repositories.
Der Clou and der Sache ist, auch Repositories für openSUSE (oder andere Distributionen) können von Apt-Cacher-ng im Cache gehalten werden.
Warum?
Nun, in Zeiten von schnellem Internet könnte sich der ein oder andere fragen, für was man noch einen Cache für Repositories benötigt.
In Unternehmen sieht dies allerdings schon wieder etwas anders aus. Dort teilen sich viele Menschen oder Computer die Bandbreite. Des Weiteren macht einem eventuell der Proxy-Server oder die Firewall Probleme.
Gerade wenn man viele Systeme updaten möchte, ist es sehr bequem, wenn die Anfragen einfach aus dem Cache beantwortet werden.
Warum nicht einen Mirror hosten?
Das letzte mal als ich einen Debian Mirror gebaut habe, hatte das (wenn ich mich richtig erinnere) ca 1TB Speicherplatz gefressen.
Mein produktiver Apt-Cacher-ng wird im Moment von mehr als 50 Systemen genutzt und benötigt dabei ca 12GB Festplattenspeicher mit einer Cache Hit Rate von 89%.
Funktionsweise
Apt-Cacher-ng kommt mit einem Webserver und wird einfach in die sources.list
von APT eingetragen.
Alle Pakete, werden dann über Apt-Cacher-ng bezogen, also wie bei einem Proxy-Server.
Zusätzlich speichert sich der Apt-Cacher-ng Server jedoch die .deb
und .rpm
Dateien.
Wenn ein zweites System nun die gleichen Dateien benötigt, werden diese nicht mehr aus dem Internet gezogen, sondern direkt vom Caching-Server ausgeliefert.
Das Betriebssystem, auf dem ihr Apt-Cacher-ng installiert spielt dabei übrigends kleine Rolle.
Installation
Ich installiere bei mir den Apt-Cacher-ng auf einem Ubuntu 16.04. In der Praxis würde ich dafür einen schlanken LXC Container verwenden.
Alle Befehle müssen als root
oder über sudo
ausgeführt werden!
apt-get update
apt-get install apt-cacher-ng
Konfiguration
Eigentlich gibt es nicht viel, was konfiguriert werden möchte.
Alle Einstellungen findet ihr in der Datei /etc/apt-cacher-ng/acng.conf
Für den Cache benötigt ihr etwas Speicherplatz. Den Ort, wo Apt-Cacher-ng seine Daten abspeichern soll, könnt ihr einstellen.
CacheDir: /var/cache/apt-cacher-ng
Im Standard wird der Port 3142
auf allen Interfaces verwendet.
Port:3142
Den Wert, wann Dateien aus dem Cache gelöscht werden sollen, welche nicht mehr in den Paketquelle verfügbar sind, habe ich bei mir auf 120 Tage gestellt. (Man weiß ja nie)
ExTreshold: 120
Wenn ihr einen Proxy benötigt, müsst ihr diesen setzen.
Proxy: http://proxy.example.net:3128
Um die Änderungen zu übernehmen, müssen wir den Dienst einmal neu starten.
systemctl restart apt-cacher-ng.service
In meinem Fall, kann ich Apt-Cacher-ng jetzt über die Adresse http://192.168.1.195:3142
erreichen.
Bei ubuntuusers.de gibt es übrigends noch sehr viele weitere Informationen.
Cache Verwenden
Apt-Cacher-ng kann man auf zwei Arten verwenden. Zum einen könnte man ihn einfach als Proxy-Server für APT eintragen. Alternativ kann man auch jedes Repository einzeln angeben.
Ich gebe in allen Beispielen jedes Repository einzeln an, ich bin kein Freund von der Proxymethode, der Grund ist einfach: Interne Repositories oder PPAs möchte ich nicht im Cache haben.
Der Cache sollte natürlich auf allen Systemen genutzt werden. Wenn ihr eure Server über ein fancy Configuration Management verwaltet, habt ihr Glück
Ubuntu und Debian
Als erstes tragen wir nun den Cache in der Datei /etc/apt/sources.list
ein.
Dort sind alle standard Repositories aufgelistet, welche Ubuntu/Debian nutzen.
Am einfachsten geht dies mit "Suchen und Ersetzen" in einem Editor wie vim
.
Lasst einfach http://
durch http://192.168.1.195:3142/
ersetzen und speichert die Datei.
Original
deb http://de.archive.ubuntu.com/ubuntu/ xenial main restricted
Mit Cache:
deb http://192.168.1.195:3142/de.archive.ubuntu.com/ubuntu/ xenial main restricted
Die IP-Addresse müsst ihr natürlich anpassen. Ich würde hier ja einen DNS Namen empfelen.
Um die Änderungen zu übernehmen, fürt einmal apt-get update
aus.
openSUSE
Ich weiß gar nicht, wann ich das letzte mal ein SUSE System gesehen hab. Bin da nicht der Typ für. Hoffe mal es ist nicht komplett falsch, in meinen Tests hatte es funktioniert.
Unter openSUSE werden die Repositories in einzelnen Konfigurationsdateien
gespeichert, welche im Ornder /etc/zypp/repos.d/
liegen.
Um uns die Sache etwas zu vereinfachen, nutzen wir Apt-Cacher-ng nur für die Einträge, welche wirklich aktiv sind:
opensuse1:/etc/zypp/repos.d # grep 'enabled=1' *
download.opensuse.org-non-oss.repo:enabled=1
download.opensuse.org-non-oss_1.repo:enabled=1
download.opensuse.org-oss.repo:enabled=1
download.opensuse.org-oss_1.repo:enabled=1
openSUSE-Leap-42.3-0.repo:enabled=1
In diesen Dateien können wir nun wieder http://
durch http://192.168.1.195:3142/
ersetzen
Original
baseurl=http://download.opensuse.org/distribution/leap/42.3/repo/non-oss/
Mit Cache:
baseurl=http://192.168.1.195:3142/download.opensuse.org/distribution/leap/42.3/repo/non-oss/
Die Änderungen übernehmen wir mit dem Befehl zypper refresh
(auch für YaST).
Cache Testen
Ubuntu
Für einen kurzen Test, habe ich extra ein altes Ubuntu Image gesucht und zwei
VMs damit installiert. Beide verwenden Apt-Cacher-ng über die sources.list
und begrüßen mich mit folgender Meldung:
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-62-generic x86_64)
131 Software-Pakete können aktualisiert werden.
62 Aktualisierungen sind Sicherheitsaktualisierungen.
Nun führe ich ein Update auf der ersten Maschine aus, zu diesem Zeitpunkt ist der Cache noch komplett leer!
root@ubuntu1:~# apt-get dist-upgrade
Paketlisten werden gelesen... Fertig
...
127 aktualisiert, 4 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 167 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 317 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
167 MB müssen nun also, aus dem Internet, heruntergeladen werden.
Holen:131 http://192.168.1.195:3142/de.archive.ubuntu.com/ubuntu xenial-updates/main amd64 vlan amd64 1.9-3.2ubuntu1.16.04.3 [30,8 kB]
Es wurden 167 MB in 45 s geholt (3.656 kB/s).
Wie man sehen kann, hat der Download 45 Sekunden gedauert.
Nun führe ich das Update auf der zweiten Maschine aus.
root@ubuntu2:~# apt-get dist-upgrade
Paketlisten werden gelesen... Fertig
...
127 aktualisiert, 4 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
Es müssen 167 MB an Archiven heruntergeladen werden.
Nach dieser Operation werden 317 MB Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
...
Holen:131 http://192.168.1.195:3142/de.archive.ubuntu.com/ubuntu xenial-updates/main amd64 vlan amd64 1.9-3.2ubuntu1.16.04.3 [30,8 kB]
Es wurden 167 MB in 2 s geholt (82,0 MB/s).
Wie man sehen kann, hat jetzt der Download nur 2 Sekunden benötigt, mit einer Übertragungsrate von 82MB/s, diese Daten kamen also definitiv aus dem Cache. (Habe nur eine 100Mbit/s Internetverbindung)...
openSUSE
Für meinen openSUSE Test kann ich leider nicht einfach ein altes openSUSE nutzen, da ich keins habe. Ich nutze kein SUSE.
Also baue ich wieder zwei identische VMs und installiere auf beiden einfach etwas Software um Traffic zu erzeugen.
Zuerst wieder das System, wo der Cache leer ist und alle Daten aus dem Internet geladen werden müssen.
zypper install apache2 php7 apache2-mod_php7 mariadb screen tmux htop vim mariadb-test kernel-source
...
63 new packages to install.
Overall download size: 181.0 MiB. Already cached: 0 B. After the operation, additional 1.1 GiB will be used.
Leider ist die Ausgabe von Zypper, was die Übertragunsrate angeht, für diesen Test
nicht zu gebrauchen. Also habe ich mit vnstat
einfach den Traffic für den Zeitraum
aufzeichnen lassen.
opensuse1:~ # vnstat -l
Monitoring eth0... (press CTRL-C to stop)
rx | tx
--------------------------------------+------------------
bytes 189.33 MiB | 3.92 MiB
--------------------------------------+------------------
max 109.67 Mbit/s | 2.19 Mbit/s
average 24.23 Mbit/s | 501.16 kbit/s
min 0 kbit/s | 1 kbit/s
--------------------------------------+------------------
time 1.07 minutes
opensuse1:~ #
Wie man sehen kann, betrug die maximale Übertragunsrate 109Mbit/s.
Nun wiederhole ich den Test auf der zweiten Maschine, hier sollten die Daten jetzt aus dem Cache kommen.
zypper install apache2 php7 apache2-mod_php7 mariadb screen tmux htop vim mariadb-test kernel-source
...
63 new packages to install.
Overall download size: 181.0 MiB. Already cached: 0 B. After the operation, additional 1.1 GiB will be used.
Vnstat sagt dazu:
opensuse2:~ # vnstat -l
Monitoring eth0... (press CTRL-C to stop)
rx | tx
--------------------------------------+------------------
bytes 189.31 MiB | 513 KiB
--------------------------------------+------------------
max 775.12 Mbit/s | 1.04 Mbit/s
average 45.61 Mbit/s | 120.62 kbit/s
min 0 kbit/s | 1 kbit/s
--------------------------------------+------------------
time 34 seconds
Auch hier wurden die Daten eindeutig von Apt-Cacher-ng bereitgestellt, wie man an der Übertragungsrate von 775Mbit/s erkennen kann.
Monitoring
Aktuell ist das Verzeichnis, in dem der Cache gespeichert wird, natürlich noch sehr klein.
root@aptcacher:/etc/apt-cacher-ng# du /var/cache/apt-cacher-ng/ -sh
373M /var/cache/apt-cacher-ng/
Dies sollte man allerdings auf jedenfall überwachen.
Des Weiteren kann man über die URL http://192.168.1.195:3142/acng-report.html
eine Statusseite aufrufen: