Schnellere Linux Updates durch Cachen von Software Paketen (apt-cacher-ng)

Veröffentlicht am 1. September 2024 • 5 Min. Lesezeit • 978 Wörter

Das Cachen von Linux Software Paketen optimiert den Download-Prozess und beschleunigt die Verteilung der Pakete an die Rechner im Heimnetzwerk

Schnellere Linux Updates durch Cachen von Software Paketen (apt-cacher-ng)
Foto von kevinandthepup  auf Pixabay 

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:

  • Das muss ich unbedingt automatisieren und
  • ist doch blöd für jede Maschine die praktisch selben Files herunterzuladen.

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.

Verschiedene Möglichkeiten Server und Clients einzurichten

Installation von apt-cacher-ng (Server)

1. Linux Installation bzw. Multipass Instanz

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.

2. Proxmox LX Container

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)"

Anpassung eines Linux Clients

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

1. Manuelles Eintragen der Verwendung des apt-proxy

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"; };

2. Verwendung des Tools auto-apt-proxy

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.

Lokale Namensauflösung über /etc/hosts

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

Betrieb eines DNS-Servers im lokalen Netzwerk

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.

Verwendung von auto-apt-proxy

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.

Test

  • Aufruf der apt-proxy-ng-Status-Seite vor der Benutzung


  • apt-cacher-ng Rechner: Konfigurieren zur Benutzung des eigenen Caches
  • apt-cacher-ng Rechner: Durchführen eines Updates


  • apt-cacher-ng Rechner: Durchführen eines Dist-Upgrades
    • Fetched 58.7 MB in 30s (1948 kB/s) (Download der Pakete aus dem Internet)


  • apt-cacher-ng-client Rechner: Durchführen eines Dist-Upgrades
    • Fetched 58.1 MB in 1s (90.0 MB/s) (Download der Pakete vom lokalen apt-proxy)


Fazit

Referenzen