Kiedy i dlaczego powinienem używać aktualizacji apt-get?

15

Pytanie ogólne:

Czy ktoś mógłby wyjaśnić, co apt-get updaterobi 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 installbez 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 updatepolecenie w innym czasie, wynik będzie inny, a więc moje obrazy będą inne.

Pierre-Jean
źródło
Myślę, że ten post może służyć jako artykuł na wiki, w jaki sposób zadać pytanie na wysokim poziomie. Bardzo przydatne.
Zerodf

Odpowiedzi:

12

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 updateprzed 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.

Patrick
źródło
Świetna odpowiedź! Dziękuję Ci! Chcę zareagować na akapit „(...) za każdym razem nie odbudowywać kontenera. To zapewni, że nie dostaniesz innego kontenera, który nie został przetestowany”. Czytałem, że najlepszą praktyką jest nigdy nie używać aktualizacji apt-get. Jednym z powodów może być: „Tworzy również niespójne obrazy, ponieważ nie masz już jednego źródła prawdy o tym, jak powinna działać twoja aplikacja i jakie wersje zależności są zawarte w obrazie”. Czy to nie jest ten sam problem apt-get update? A plik Docker nie powinien gwarantować obrazu?
Pierre-Jean
2
Trochę apt-get updatewpłynie tylko na nowo zainstalowane pakiety. Istniejące pakiety zostaną zaktualizowane tylko w razie potrzeby przez nowe pakiety (powinno to być minimalne). Wraz z apt-get upgradeaktualizacją 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ć.
Patrick,
0

Czy ktoś mógłby wyjaśnić, co robi polecenie apt-get update i kiedy naprawdę powinienem go użyć?

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.18do, 5.7.19ale nie do 6.x.

Gdzie jest przechowywany indeks pakietu? W bazie danych? Na plik?

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.

Co się stanie, jeśli wykonam instalację apt-get bez aktualizacji pamięci podręcznej?

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 jessieobrazó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.

Czy istnieje szansa, że ​​zdalny pakiet już nie będzie istniał, a łącze zostanie zerwane?

Zdecydowanie, ponieważ wersje przechowywane w indeksie są bardzo precyzyjne, podobnie jak 5.7.19(uproszczenie; są bardziej podobne do 5.7.19-0ubuntu1).

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?

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.18następnego apt-get install; jak tylko mysql-5.7.19zostanie wydany w dystrybucji, poprzedni zostanie usunięty.

Aby być uczciwym wobec Dockera, ten niedeterminizm apt-get updatejest 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ą.

giorgiosironi
źródło