Zentrales Update für verschiedene PCs mit apt

Aus Linupedia.org
Version vom 17. August 2006, 20:38 Uhr von Rolle (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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 vorraus

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-Kisten zeigen auf archives-9.0 und lists-9.0, die 9.1er SuSE-Kisten zeigen 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

"FensterZu" hat das ausprobiert und einen kleine "Fehler" entdeckt. Dieser wurde im oberen Posting korrigiert. THX für Mitdenken und Korrektur

Zur Klarheit hier noch einem seine 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