Szenario: In einer versionsgesteuerten Systemkonfiguration basierend auf Puppet, Chef usw. muss ein bestimmter Systemstatus reproduziert werden. Dies erfolgt durch explizite Angabe von Systempaketversionen.
Kürzlich stießen wir auf ein Problem, bei dem bestimmte Paketversionen in den Debian-Repositories fehlten. Ein Beispiel: Das "Patch" -Paket war in Version 2.7.5-1 + deb9u1 erforderlich, aber nur 2.7.5-1 + deb9u2 war verfügbar. Ein weiteres, noch schwerwiegenderes Beispiel: "linux-headers-4.9.0-9-common" ist erforderlich (da der zugehörige Kernel installiert ist) und nur "linux-headers-4.9.0-11-common" ist verfügbar.
Dies macht es unmöglich, einen bestimmten Zustand eines Systems zu reproduzieren.
Die obigen Pakete sind nur Beispiele (auf die ich tatsächlich gestoßen bin). Ich bin daran interessiert, das allgemeine Problem zu verstehen und zu lösen.
Welche Idee steckt hinter diesen Updates, verschwindenden Paketen und Paketversionen?
Wo kann ich frühere Versionen (nicht wirklich alte Versionen, aber Versionen, die ein paar Wochen alt sind) von Debian-Paketen bekommen? Es sollte möglich sein, den Installationsprozess allgemein zu automatisieren.
stable
bleibt konsistent, zumindest bis zur nächsten Punktveröffentlichung. stable-updates, testing und unstable enthalten nur die neueste Version eines bestimmten Pakets. Für alles andere, werden Sie auf suchen, um archive.debian.org (oder snapshot.debian.org wie in SK Antwort erwähnt)linux
Paketname ist eine Ausnahme: Im Allgemeinen haben die Pakete von Debian Stable denselben Paketnamen und ändern nur die Versionsnummer.linux-image-amd64
ändert nie den Namen und hängt immer vom neuesten ablinux-image-4.9.0-*
. Der neuelinux-image-4.9.0-*
pkg-Name markiert die inkompatiblen Kernel-ABI-Änderungen, die für das Backportieren einiger Bugfixes erforderlich sind, und ermöglicht die erforderliche Neukompilierung von benutzerdefinierten Modulen (dkms usw.). Ähnliches gilt fürlinux-headers-*
.apt-get changelog packagename
Antworten:
Es ist Ihre Anforderung, ein bestimmtes Setup bis auf die genaue Version zu reproduzieren , nicht Debians.
Debian unterstützt nur eine einzige Version jedes Binärpakets in einer bestimmten Version. Das Gegenstück dazu ist, dass sehr darauf geachtet wird, dass Paketaktualisierungen in einer bestimmten Version keine Regressionen hervorrufen, und dass, wenn eine solche Sorgfalt nicht möglich ist, diese Tatsache dokumentiert wird. Das Beibehalten mehrerer Versionen eines bestimmten Pakets würde nur den Supportaufwand und die Testanforderungen erhöhen: Beispielsweise müssten Paketbetreuer aktualisierte Pakete anhand aller verfügbaren Versionen der von ihnen verwendeten Bibliotheken testen, anstatt nur der derzeit unterstützten Versionen ... Pakete werden nur dann in einer stabilen Version aktualisiert, wenn dies wirklich notwendig ist, d. HBeheben eines schwerwiegenden Fehlers (einschließlich Sicherheitsproblemen). Im Fall des Kernels bedeutet dies manchmal, dass sich die Kernel-ABI ändert und sich der Paketname infolgedessen ändert (um die Neuerstellung abhängiger Pakete zu erzwingen). gibt es Meta-Pakete , die Sie in anstelle von Hartcodierung der ABI ziehen können (
linux-image-amd64
,linux-headers-amd64
usw.).Es gibt jedoch eine Problemumgehung für Ihre Situation: Jede veröffentlichte Quelle und jedes veröffentlichte Binärpaket werden auf snapshot.debian.org archiviert . Wenn Sie ein versioniertes Setup erstellen, können Sie den entsprechenden Snapshot (z. B. einen der Snapshots vom September 2019 ) auswählen und diesen als Repository-URL verwenden:
Wenn Sie sich darauf verlassen, verwenden Sie bitte einen Cache-Spiegel, zum Beispiel Apt-Cacher NG . Dies reduziert nicht nur die Belastung des Snapshot-Servers, sondern stellt auch sicher, dass Sie eine lokale Kopie aller benötigten Pakete haben.
(Die Situation in Bezug auf die Source - Pakete ist etwas komplexer, und die Archive zu tun tragen mehrere Versionen einiger Quellpakete in einem bestimmten Release, aufgrund von Abhängigkeiten Lizenzierung. Aber das ist hier nicht relevant. Genau genommen bietet Debian mehrere Versionen einiger liefern Binärdateien in unterstützten Releases: Die aktuelle Version im aktuellen Point Release sowie etwaige Aktualisierungen in den Sicherheits-Repositorys und Update-Repositorys werden beim nächsten Point Release eingeklappt, sodass eine reproduzierbare, versionskontrollierte Systemkonfiguration ohne Weiteres möglich ist auf Schnappschüsse zurückgreifen, solange Sie diese bei jeder Veröffentlichung aktualisieren.)
quelle
apt-cache madison packagename
Diese zeigen alle Versionen an,apt
die über konfigurierte Repositorys angezeigt werden.Verlassen Sie sich nicht auf Server, die nicht unter Ihrer Kontrolle stehen, um einen bestimmten Systemstatus zu reproduzieren. Obwohl die Debian-Server ziemlich zuverlässig sind, wissen Sie nie, was in Zukunft passieren könnte. Dies gilt insbesondere für andere Repositorys, die Sie möglicherweise verwenden.
Sie sollten Ihren eigenen Spiegel verwalten, um reproduzierbare Systemzustände zu erhalten. Auf diese Weise können Sie sogar einen Produktionsstatus für Ihre normalen Systeme und mehrere Teststatus für neue Konfigurationen festlegen.
Das Repository - Management - Tool treffend ist in der Lage Spiegel von Endlagern zu erstellen. Sie können die zu spiegelnden Pakete auswählen, Snapshots von Repository-Inhalten zu bestimmten Zeitpunkten erstellen und mehrere Mirrors oder Snapshots in einem Repository kombinieren. Auf diese Weise können Sie vollständig reproduzierbare Systemzustände erhalten.
quelle
Während Stephen Kitt Antwort sicherlich eine mögliche Lösung ist, denke ich , es wäre sicherer, dass Sie Ihre eigenen Kopien der benötigten Pakete zu halten.
.deb
Achten Sie beim Aufzeichnen eines System-Setups darauf, Kopien der -Dateien von zu speichern/var/cache/apt/archives/
. Sie können auch verwendenapt-get download
.Bei der Wiederherstellung eines System-Setups müssen Sie sehr streng vorgehen
apt
, um zu vermeiden, dass potenziell gefährliche automatische Aktionen ausgelöst werden.Es wird wahrscheinlich einfacher sein,
dpkg
direkt zu verwenden, um genau das zu installieren, was Sie wollen.quelle
/var/cache/apt
.pkgs-20190501
, und veröffentlichen Sie das Snapshot-Verzeichnis als Repo. Zum Zeitpunkt der Erstellung, legen Sie die versioniert Repo - URL (zBhttp://debmirror/pkgs-20190501/...
) in sources.list, dann apt-get update apt-get $ pkgs installieren etc.