Schnellere Linux Updates durch Cachen von Software Paketen (apt-cacher-ng)
Veröffentlicht am 1. September 2024 • 5 Min. Lesezeit • 978 WörterDas Cachen von Linux Software Paketen optimiert den Download-Prozess und beschleunigt die Verteilung der Pakete an die Rechner im Heimnetzwerk
Gerade erst habe ich wiedermal die Runde über die Rechner und virtuellen Maschinen in meinem Heimnetz gemacht, nur um überall sudo apt update && sudo apt dist-upgrade -y
einzugeben. Dabei hatte ich zwei Gedanken:
Zumindest gegen letzteres habe ich etwas unternommen und einen systemweiten Software Packet Proxy und Cache installiert (apt-cacher-ng
). Dieser ist zwar auf Debian und Debian basierte Distributionen spezialisiert, aber nicht auf diese beschränkt.
Im Folgenden beschreibe ich, wie man das mit wirklich wenig Aufwand bewerkstelligen kann.
Installation von apt-cacher-ng (Server)
Anpassung eines Linux Clients
Zum Ausprobieren des apt-cacher-ng
bietet sich eine virtuelle Maschine an, die sich mit Ubuntu Bordmitteln schnell aufsetzen lässt:
multipass launch jammy --cpus 1 --disk 10G --memory 2G --name apt-cacher-ng
Dies erzeugt eine virtuelle Ubuntu 22.04 Instanz, mit einer CPU, 2GB RAM und 10GB Speicher, um die Software Pakete zwischenzuspeichern.
Ist die Shell erst einmal geöffnet
multipass shell apt-cacher-ng
unterscheidet sich der Installations Prozess zwischen virtuelle Instanz oder handfestem Server nicht mehr.
Installiert wird apt-cacher-ng
via
# apt-cacher-ng installieren
sudo apt update
sudo apt install apt-cacher-ng
# Konfiguration anpassen in /etc/apt-cacher-ng/acng.conf
sudo nano /etc/apt-cacher-ng/acng.conf
# auskommentieren oder hinzufügen von "PassThroughPattern: .*"
# Dienst dauerhaft einrichten
sudo systemctl enable -q --now apt-cacher-ng
# IP Adresse des Rechners ermitteln
ip addr
[...]192.168.10.211[...]
Das war es bereits.
Die Statusseite von apt-proxy-ng
kann man sich unter Port 3142
im Browser betrachten
http://192.168.10.211:3142/acng-report.html
Wenn man einen Proxmox Server im Netzwerk hat, kann es sich auch anbieten, den apt-cacher-ng als Proxmox LXContainer zu installieren.
Dies lässt sich z.B. extrem einfach über das Projekt Proxmox VE Helper Script erreichen, das vorgefertigte und getestete Scripte bereitstellt, um unterschiedliche Applikationen über einfache Skripte auf einem Proxmox-Server zu installieren. Dieses Projekt ist auf jeden Fall einen Blick wert.
In unserem Fall kopiert man das Proxmox VE Helper Script für Apt-Cacher-NG , fügt es im Proxmox Server in die Shell ein und drückt Return. Fertig.
bash -c "$(wget -qLO - https://github.com/tteck/Proxmox/raw/main/ct/apt-cacher-ng.sh)"
Möchte man nach ein paar Wochen die virtuelle Festplatte des Containers vergrößern habe ich hier die passenden Befehle zusammengefasst.
Jeder Maschine, die diesen apt-proxy verwenden soll, muss man dies zunächst beibringen. Hierfür gibt es mehrere Weg, jenachdem welche Flexibilität man erreichen / Aufwand betreiben möchte.
Auch hierfür kann man zum Ausprobieren einen virtuellen Rechner verwenden.
multipass launch jammy --cpus 1 --disk 5G --memory 2G --name apt-cacher-ng-client
multipass shell apt-cacher-ng-client
Der schnelle und einfachste Weg ist sicherlich, den apt Proxy auf dem Client Rechner von Hand einzutragen.
Auf dem Client Rechner wird die entsprechende Konfiguration erstellt
# Verwendung eines apt-proxy angeben in /etc/apt/apt.conf.d/00aptproxy
sudo nano /etc/apt/apt.conf.d/00aptproxy
# hinzufügen: Acquire::http { Proxy "http://<IP apt-proxy-ng>:3142"; };
# hier: Acquire::http { Proxy "http://192.168.10.211:3142"; };
Ein alternativer Weg, einem Client System einen apt-proxy zur Verfügung zu stellen, führt über die Verwendung eines Tools namens auto-apt-proxy
. Dieses Tool sucht nach einem apt proxy Server und stellt diesen seinem Host System zur Verfügung. Eine der Suchmethoden ist es zu versuchen, ob der DNS-Name apt-proxy
bzw. apt-proxy.<search-domain>
aufgelöst werden kann und ob dieser Rechner einen apt-proxy anbietet. Diese wird im Folgenden ausgenutzt.
Neben der Verwendung eines externen DNS-Servers zur Namensauflösung besteht in einem Linux System auch die Möglichkeit manuell Zuordnungen von Rechner-Namen zu IP-Adressen lokal zu definieren. Dazu wird lediglich in der hierfür vorgesehen Datei /etc/hosts
eine Zeile hinzugefügt, die unter dem Namen apt-proxy
auf unsere apt-cacher-ng Instanz zeigt 192.168.10.211
.
# Öffnen und Hinzufügen eines IP <-> Rechner-Namen Tupels in /etc/hosts
sudo nano /etc/hosts
# hinzufügen: <IP apt-proxy-ng> apt-proxy
# hier: 192.168.10.211 apt-proxy
Wer in seinem Netzwerk bereits einen DNS-Server betreibt, kann die Auflösung des Rechner-Namens apt-proxy
zur entsprechenden IP-Adresse des Rechners auch dort eintragen. Auf diese Weise steht die Information automatisch allen Rechnern im Netzwerk zur Verfügung.
Wie genau dies zu tun ist hängt vom verwendeten DNS-Servers ab.
Zunächst prüft man, ob der Rechner mit der apt-cacher-ng Installation von der Client Maschine aus unter dem Namen apt-proxy
bzw. apt-proxy.<search-domain>
angepingt werden kann.
ping apt-proxy
PING apt-proxy (192.168.10.211) 56(84) bytes of data.
64 bytes from apt-proxy (192.168.10.211): icmp_seq=1 ttl=64 time=1.51 ms
64 bytes from apt-proxy (192.168.10.211): icmp_seq=2 ttl=64 time=0.816 ms
64 bytes from apt-proxy (192.168.10.211): icmp_seq=3 ttl=64 time=1.01 ms
64 bytes from apt-proxy (192.168.10.211): icmp_seq=4 ttl=64 time=0.819 ms
^C
--- apt-proxy ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev = 0.816/1.038/1.511/0.283 ms
Das hat funktioniert, nun wird das Tool wie gehabt auf der Client Maschine installiert
sudo apt install auto-apt-proxy
Führt man nun das Programm ohne Parameter aus, zeigt es den gefundenen und eingerichteten apt-proxy an:
auto-apt-proxy
http://192.168.10.211:3142
Der apt-proxy wurde gefunden und wird fortan verwendet. Es macht dabei keinen Unterschied, ob die Namens-Auflösung von apt-proxy
lokal oder via DNS im Netzwerk erfolgt. Sollte der Proxy einmal nicht erreichbar sein, werden die Pakete automatisch wieder aus dem Internet geladen.
apt-proxy-ng
-Status-Seite vor der Benutzung