• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[HOWTO] zentrales Update für verschiedene PCs mit apt

Status
Für weitere Antworten geschlossen.

oc2pus

Ultimate Guru
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:
Code:
// 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:
Code:
  // 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
 
OP
oc2pus

oc2pus

Ultimate Guru
"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:
Code:
// 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:
Code:
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'
 
Status
Für weitere Antworten geschlossen.
Oben