Pytanie ogólne:
Czy ktoś mógłby wyjaśnić, co apt-get update
robi polecenie i kiedy naprawdę powinienem go użyć?
Uwagi
Proszę podać szczegółową odpowiedź . Nie tylko kopia strony podręcznika man, chyba że twoja wersja jest naprawdę szczegółowa (umieściłem jedną definicję ze strony podręcznika poniżej).
apt-get update : Służy do ponownej synchronizacji plików indeksu pakietów z ich źródeł. Indeksy dostępnych pakietów są pobierane z lokalizacji określonych w /etc/apt/sources.list(5). Aktualizację należy zawsze wykonać przed aktualizacją lub aktualizacją.
Pytania cząstkowe:
- Gdzie jest przechowywany indeks pakietu? W bazie danych? Na plik?
- Co się stanie, jeśli zrobię to
apt-get install
bez aktualizacji pamięci podręcznej? Czy istnieje szansa, że zdalny pakiet już nie będzie istniał, a łącze zostanie zerwane? - Czy istnieje jakaś uzgodniona polityka dotycząca repozytoriów debat? Na przykład, czy repozytorium powinno zawierać tylko ostatnią wersję pakietu, czy wręcz przeciwnie, czy powinno zawierać wszystkie wersje dostępne dla konkretnego wydania dystrybucyjnego?
Kontekst
Zadaję moje pytanie, ponieważ studiuję platformę Docker . Jedną z jego funkcji jest plik Docker , który pozwala zbudować rodzaj obrazu systemu operacyjnego poprzez wykonanie instrukcji z tego pliku. Jedną z właściwości tego obrazu jest to, że zawsze powinien być taki sam, bez względu na kontekst (czas kompilacji itp.).
Obawiam się, że jeśli uruchomię apt-get update
polecenie w innym czasie, wynik będzie inny, a więc moje obrazy będą inne.
Odpowiedzi:
apt-get update
pobiera listę dostępnych pakietów.Lista pakietów może się zmieniać z czasem. Nowe pakiety są dodawane, a stare pakiety usuwane. Dlatego jeśli masz naprawdę starą pamięć podręczną i próbujesz ją wykonać
apt-get install
, może spróbować pobrać pakiet, który już nie istnieje.To, jak długo stary pakiet jest przechowywany w repozytorium, zależy od opiekuna repozytorium (twojej dystrybucji). Jako taki, jeśli używasz czegoś takiego jak doker, gdzie pamięć podręczna może być bardzo nieaktualna, zawsze powinieneś uruchomić
apt-get update
przed instalacją jakichkolwiek pakietów.Przyczyną usuwania i dodawania pakietów są głównie poprawki błędów i aktualizacje bezpieczeństwa. Chociaż jeśli korzystasz z repozytoriów innych firm, takich jak PPA, wszystko działa.
Używając czegoś takiego jak doker do konteneryzacji w środowisku korporacyjnym, należy zbudować kontener raz, a następnie przenieść go przez różne środowiska wydania (programowanie, przemieszczanie, produkcja), a nie za każdym razem przebudowywać kontener. Dzięki temu nie dostaniesz innego pojemnika, który nie został przetestowany.
Aby odpowiedzieć na pytanie, gdzie znajdują się pliki cache żyć
/var/lib/apt/lists
.źródło
apt-get update
? A plik Docker nie powinien gwarantować obrazu?apt-get update
wpłynie tylko na nowo zainstalowane pakiety. Istniejące pakiety zostaną zaktualizowane tylko w razie potrzeby przez nowe pakiety (powinno to być minimalne). Wraz zapt-get upgrade
aktualizacją wszystkich pakietów, w tym już istniejących, powstaje zupełnie inny obraz. Chociaż może to powodować inny wynik za każdym razem, gdy budujesz z pliku dokera, nie sądzę, aby był to poważny problem, jeśli przejdziesz przez wersję dla wielu środowisk. Myślę, że jest to większy problem, jeśli rozpowszechniasz plik dokera innym osobom i każesz im go zbudować.apt-get update
pobiera zaktualizowane indeksy z repozytoriów pakietów dystrybucji, wymieniając wszystkie dostępne pakiety i ich dokładne wersje.Typowe dystrybucje, takie jak Ubuntu i Debian, są zwykle konserwatywne i kompatybilne wstecz w swoich pakietach, więc wersje nie zmienią się zbytnio z czasem; zmienią się one z powodu aktualizacji zabezpieczeń lub poprawek błędów. Na przykład mysql można zaktualizować z
5.7.18
do,5.7.19
ale nie do6.x
.Zazwyczaj jest przechowywany w jednym lub kilku plikach
/var/lib/apt
. W kontekście Dockera pliki te znajdują się w obrazie. Podczas tworzenia pliku Docker są one zapisywane w nowych warstwach systemu plików, które są tworzone i zachowywane jako nowo zbudowany obraz.Możesz spróbować pobrać wersje pakietów, które już nie istnieją. Jest to dość powszechne na maszynach wirtualnych, ale jest również możliwe w kontenerach, jeśli repozytoria dystrybucji wydały nowe pakiety po zbudowaniu obrazu podstawowego. Pomiędzy opiekunami dystrybucji i opiekunami plików Dockerfile, które znajdują się poniżej dystrybucji, może nie być koordynacji. Jest tylko jedno repozytorium Debiana, ale tysiące
jessie
obrazów kontenerów i Dockerfile.Co więcej, niektóre obrazy nadrzędne, takie jak Ubuntu One, usuwają pobrany indeks, aby zmniejszyć obraz i uniknąć nieaktualnych plików. Oczekuje się, że zaktualizowany indeks powinien zostać pobrany podczas budowania na obrazie podstawowym, a nie dla każdej wersji obrazu podstawowego dostarczanego z najnowszym indeksem.
Zdecydowanie, ponieważ wersje przechowywane w indeksie są bardzo precyzyjne, podobnie jak
5.7.19
(uproszczenie; są bardziej podobne do5.7.19-0ubuntu1
).Często zdarza się, że stare niewielkie wersje są szybko usuwane, gdy dostępna jest aktualizacja; Zakładam, że pozwala to zaoszczędzić miejsce na serwerach, ponieważ pliki binarne mogą ważyć kilkadziesiąt megabajtów, pomnożone przez wszystkie obsługiwane wersje i architektury. Tak więc zazwyczaj niemożliwe jest przypięcie, powiedzmy,
mysql-5.7.18
następnegoapt-get install
; jak tylkomysql-5.7.19
zostanie wydany w dystrybucji, poprzedni zostanie usunięty.Aby być uczciwym wobec Dockera, ten niedeterminizm
apt-get update
jest zagadnieniem poruszanym w ramach zarządzania pakietami każdej dystrybucji. Ten sam problem miałbyś przy próbie zbudowania powtarzalnej maszyny wirtualnej EC2 lub Vagrant.Niektórzy administratorzy systemu używają usług, takich jak Aptly, do tworzenia kopii lustrzanych oryginalnych repozytoriów i możliwości przypięcia określonej wersji, ale istnieje ryzyko pominięcia aktualizacji zabezpieczeń, chyba że masz często uruchamiany osobny proces testowania aktualizacji i zmiany tego, co przypinają.
źródło