Allgemeine Frage:
Könnten Sie erklären, was der Befehl apt-get update
bewirkt und wann ich ihn wirklich verwenden sollte?
Bemerkungen
Bitte geben Sie eine ausführliche Antwort . Nicht nur eine Kopie der Manpage, es sei denn, Ihre Version ist wirklich detailliert (ich habe eine Definition von der Manpage unten angegeben).
apt-get update : Dient zum erneuten Synchronisieren der Paketindexdateien von ihren Quellen. Die Indizes der verfügbaren Pakete werden von den in /etc/apt/sources.list (5) angegebenen Speicherorten abgerufen. Ein Update sollte immer vor einem Upgrade oder Dist-Upgrade durchgeführt werden.
Unterfragen:
- Wo ist der Paketindex gespeichert? In einer Datenbank? In einer Datei?
- Was passiert, wenn ich
apt-get install
den Cache nicht aktualisiere? Besteht die Möglichkeit, dass das Remote-Paket nicht mehr existiert und die Verbindung unterbrochen wird? - Gibt es eine einvernehmliche Politik in Bezug auf Deb-Repositories? Soll ein Repository beispielsweise nur die letzte Version eines Pakets enthalten, oder sollen im Gegenteil alle Versionen enthalten sein, die für eine bestimmte Distributionsversion verfügbar sind?
Kontext
Ich stelle meine Frage, weil ich das Docker-Framework studiere . Eine seiner Funktionen ist das Dockerfile , mit dem Sie eine Art Betriebssystem-Image erstellen können , indem Sie Anweisungen aus dieser Datei ausführen. Eine Eigenschaft dieses Images ist, dass es unabhängig vom Kontext (Erstellungszeitpunkt usw.) immer gleich sein sollte.
Ich fürchte, wenn ich das apt-get update
Kommando zu einem anderen Zeitpunkt starte, ist das Ergebnis anders und meine Bilder würden anders sein.
Antworten:
apt-get update
Lädt die Liste der verfügbaren Pakete herunter.Die Liste der Pakete kann sich im Laufe der Zeit ändern. Neue Pakete werden hinzugefügt und alte Pakete werden entfernt. Wenn du also einen wirklich alten Cache hast und versuchst einen zu machen
apt-get install
versuchen, einen zu erstellen, wird möglicherweise versucht, ein Paket herunterzuladen, das nicht mehr existiert.Wie lange ein altes Paket in einem Repository aufbewahrt wird, hängt vom Repo-Betreuer (Ihrer Distribution) ab. Daher sollten Sie, wenn Sie so etwas wie Docker verwenden, bei dem der Cache möglicherweise sehr veraltet ist, immer ausführen,
apt-get update
bevor Sie Pakete installieren.Der Grund für das Entfernen und Hinzufügen von Paketen sind hauptsächlich Fehlerbehebungen und Sicherheitsupdates. Wenn Sie Repos von Drittanbietern wie PPA verwenden, ist alles möglich.
Wenn Sie Docker für die Containerisierung in einer Unternehmensumgebung verwenden, sollten Sie den Container einmal erstellen und dann diesen Container durch Ihre verschiedenen Release-Umgebungen (Entwicklung, Staging, Produktion) verschieben und den Container nicht jedes Mal neu erstellen. Auf diese Weise stellen Sie sicher, dass Sie keinen anderen Container erhalten, der nicht getestet wurde.
Zur Beantwortung Ihrer Frage, wo die Cache - Dateien leben
/var/lib/apt/lists
.quelle
apt-get update
dann? Und Dockerfile soll das Image nicht garantieren?apt-get update
betrifft nur neu installierte Pakete. Bestehende Pakete werden nur dann aktualisiert, wenn sie von den neuen Paketen benötigt werden (dies sollte minimal sein). Wennapt-get upgrade
Sie alle Pakete, einschließlich der vorhandenen, aktualisieren, erhalten Sie ein völlig anderes Image. Obwohl dies jedes Mal zu einem anderen Ergebnis führen kann, wenn Sie aus der Docker-Datei erstellen, ist dies meines Erachtens kein ernstes Problem, wenn Sie ein Release mit mehreren Umgebungen durchführen. Ich denke, dies ist eher ein Problem, wenn Sie die Docker-Datei an andere Personen verteilen und sie erstellen lassen.apt-get update
Lädt aktualisierte Indizes aus den Paket-Repositorys der Distribution herunter und listet alle verfügbaren Pakete und ihre genauen Versionen auf.Gängige Distributionen wie Ubuntu und Debian sind in ihren Paketangeboten normalerweise konservativ und abwärtskompatibel, so dass sich die Versionen im Laufe der Zeit nicht wesentlich ändern. Sie ändern sich aufgrund von Sicherheitsupdates oder Fehlerbehebungen. Zum Beispiel könnte mysql von
5.7.18
nach,5.7.19
aber nicht nach aktualisiert werden6.x
.Es wird normalerweise in einer oder mehreren Dateien gespeichert
/var/lib/apt
. Im Kontext von Docker befinden sich diese Dateien im Image. Beim Erstellen der Docker-Datei werden sie in den neuen Ebenen des Dateisystems gespeichert, die als neu erstelltes Image erstellt und beibehalten werden.Sie können versuchen, Paketversionen herunterzuladen, die nicht mehr existieren. Dies ist auf virtuellen Maschinen durchaus üblich, aber auch in Containern möglich, wenn die Distributions-Repositorys nach dem Erstellen des Basis-Images neue Pakete veröffentlicht haben. Möglicherweise gibt es keine Koordination zwischen den Distributionsbetreuern und den Dockerfile-Betreuern, die der Distribution nachgeschaltet sind und möglicherweise eine größere Anzahl haben. Es gibt nur ein Debian-Repository, aber Tausende von
jessie
Container-Images und Dockerfile.Darüber hinaus entfernen einige vorgelagerte Bilder wie das Ubuntu den heruntergeladenen Index , um das Bild zu verkleinern und veraltete Dateien dort zu vermeiden. Es wird daher erwartet, dass ein aktualisierter Index heruntergeladen wird, wenn Sie auf einem Basisimage aufbauen, und nicht für jede Version eines Basisimages, die mit dem neuesten Index ausgeliefert wird.
Auf jeden Fall, weil die im Index gespeicherten Versionen sehr genau sind
5.7.19
(Vereinfachung; sie ähneln eher5.7.19-0ubuntu1
).Es ist üblich, dass alte Nebenversionen schnell entfernt werden, sobald ein Update verfügbar ist. Ich gehe davon aus, dass dies Platz auf den Servern spart, da Binärdateien mehrere zehn Megabyte wiegen können, multipliziert mit allen unterstützten Versionen und Architekturen. So ist es normalerweise unmöglich,
mysql-5.7.18
im folgenden zu sagen, festzunagelnapt-get install
; Sobaldmysql-5.7.19
es in der Distribution veröffentlicht wird, wird das vorherige entfernt.Um Docker gegenüber fair zu sein, ist dieser Nicht-Determinismus von
apt-get update
ein Problem, das im Rahmen der Paketverwaltung jeder Distribution aufgeworfen wird. Sie haben das gleiche Problem beim wiederholten Erstellen einer virtuellen EC2- oder Vagrant-Maschine.Einige Systemadministratoren verwenden Dienste wie Aptly, um die ursprünglichen Repositorys zu spiegeln und eine bestimmte Version zu pinnen. Es besteht jedoch die Gefahr, dass Sie Sicherheitsupdates verpassen, es sei denn, Sie führen regelmäßig einen separaten Prozess aus, um die Updates zu testen und Ihre Einstellungen zu ändern stecken fest.
quelle