Könnten einige erklären, was der Befehl apt-get update bewirkt und wann ich ihn wirklich verwenden sollte?
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 werden 6.x
.
Wo ist der Paketindex gespeichert? In einer Datenbank? In einer Datei?
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.
Was passiert, wenn ich apt-get installiere, ohne den Cache zu aktualisieren?
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.
Besteht die Möglichkeit, dass das Remote-Paket nicht mehr existiert und die Verbindung unterbrochen wird?
Auf jeden Fall, weil die im Index gespeicherten Versionen sehr genau sind 5.7.19
(Vereinfachung; sie ähneln eher 5.7.19-0ubuntu1
).
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?
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, festzunageln apt-get install
; Sobald mysql-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.