Zentrales Update für verschiedene PCs mit apt
Wenn man mehrere Linux-PCs im Einsatz hat, möchte man natürlich die Updates nur einmal aus dem Internet laden
Um das zu erreichen, wird einer der PCs das apt-Repository und den Cache verwalten. Die anderen PCs nutzen dann diesen Cache ebenfalls mit. Dieser PC exportiert das apt-Verzeichnis als NFS-Server. Die anderen importieren dieses Verzeichnis dann. Wie man den NFS-Server und die -Clients aufsetzt setze ich hier mal als bekannt voraus.
Eventuell richtet man sich noch eine eigene Gruppe apt und einen speziellen apt-user ein. Das rundet die Sache ab, ist aber nicht zwingend erforderlich. Diesem apt-user gewährt man dann root-Zugriff via sudo. Auch das setze ich als bekannt voraus.
Mein apt-cache und die apt-Verwaltungsdaten liegen in /local/packages Dieses Verzeichnisse wird dann via NFS exportiert. Die anderen PCs mounten dieses Verzeichnis (NFS-Clients) und können dann von dort die Pakete holen und gegebenfalls auch neue Pakete dort einfügen. Die Clients müssen ja nicht zwingend die gleichen Pakete installiert haben
Damit apt mit dem Verzeichnis /local/packages arbeitet und nicht per default mit /var/cache/apt und /var/state/apt ist eine kleine Änderung an der /etc/apt/apt.conf.d/apt.conf erforderlich:
// Directory layout Dir "/" { // Location of the state dir State "local/packages/state/apt" { lists "lists-9.1/"; xstatus "xstatus"; userstatus "status.user"; status "/local/packages/status"; }; // Location of the cache dir Cache "local/packages/cache/apt/" { archives "archives-9.1/"; srcpkgcache "srcpkgcache-9.1.bin"; pkgcache "pkgcache-9.1.bin"; }; ... };
In der Sektion Dir "/" legt man die Verzeichnisstruktur für apt fest. in diesem Beispiel also /local/packages als Wurzel.
Diese Verzeichnisstruktur erzeugt man mit
mkdir -p /local/packages/cache/apt/archives-9.1/partial mkdir -p /local/packages/state/apt/lists-9.1/partial touch /local/packages/cache/apt/archives-9.1/lock touch /local/packages/state/apt/lists-9.1/lock
Wer mehrere SuSE Versionen hat, erzeugt dann eben noch weitere
mkdir -p /local/packages/cache/apt/archives-9.0/partial mkdir -p /local/packages/state/apt/lists-9.0/partial
Auf den einzelnen Clients befindet sich dann nur noch die apt Konfiguration in /etc/apt. Und diese Konfiguration ist dann auf das jeweilige apt-Verzeichnis anzupassen, also die 9.0 SuSE-Rechner zeigen auf archives-9.0 und lists-9.0, die 9.1er SuSE-Rechner zeigen entsprechend dann auf archives-9.1 und lists-9.1.
Damit der parallele Zugriff auf das apt-NFS-Verzeichnis funktioniert ist natürlich auf allen Rechnern der nfs-lock-daemon zu starten!!
Wer nur eine SuSE Version auf allen PCs hat, der könnte sogar die apt-Konfiguration ebenfalls auf dem /local/packages Verzeichnis aufsetzen und in ein /local/packages/etc/apt kopieren. Dazu ist dieser Block entsprechend anzupassen:
// Config files Etc "local/etc/apt/" { sourcelist "sources.list"; main "apt.conf"; preferences "preferences"; };
Die zentrale Konfiguration wird dann dem apt-get -c /local/packages/apt/etc/apt.conf mitgegeben
Zur Klarheit hier noch eine komplette apt.conf:
// with "apt-config dump" all settings can be viewed Acquire::CDROM::Copy "true"; Debug { pkgRPMPM "false"; } RPM { // Hold (do not update) a list with pkgs: // Hold { "k_deflt"; "sane"; }; // Leave list empty to disable Hold { "kernel-default"; "kernel-source"; }; Ignore {"gpg-pubkey"; }; Options { }; Install-Options ""; Erase-Options ""; Source { Build-Command "rpmbuild --rebuild"; }; } // Directory layout Dir "/" { // Location of the state dir State "local/state/apt/" { lists "lists/"; xstatus "xstatus"; userstatus "status.user"; status "/local/status"; }; // Location of the cache dir Cache "local/cache/apt/" { archives "archives/"; srcpkgcache "rcpkgcache.bin"; pkgcache "pkgcache.bin"; }; // Config files Etc "local/etc/apt/" { sourcelist "sources.list"; main "apt.conf"; preferences "preferences"; }; };
und als zusätzlichen kleinen Tip für die "schreibfaulen":
In meiner .bashrc habe noch folgende Aliase erstellt, vielleicht erleichtert das jemand die Arbeit mit der neuen Konfiguration:
alias apt-get='sudo apt-get -c /local/etc/apt/apt.conf.d/apt.conf' alias apt-cache='sudo apt-cache -c /local/etc/apt/apt.conf.d/apt.conf'
oc2pus