Dlaczego poprzednie wersje pakietów Debiana znikają w repozytoriach pakietów? (wysoce istotne dla konfiguracji systemu kontrolowanej wersją)


38

Scenariusz: w konfiguracji systemu sterowanej wersją opartej na Puppet, Chef itp. Wymagane jest odtworzenie określonego stanu systemu. Odbywa się to poprzez jawne określenie wersji pakietu systemowego.

Ostatnio natrafiliśmy na problem polegający na braku niektórych wersji pakietów w repozytoriach Debiana. Jeden przykład: Pakiet „łatka” był wymagany w wersji 2.7.5-1 + deb9u1, ale dostępny był tylko 2.7.5-1 + deb9u2. Wymagany jest jeszcze jeden, jeszcze poważniejszy przykład: „linux-headers-4.9.0-9-common” (ze względu na zainstalowane powiązane jądro) i dostępny jest tylko „linux-headers-4.9.0-11-common”.

To uniemożliwia odtworzenie określonego stanu systemu.

Powyższe pakiety są tylko przykładami (z którymi faktycznie się spotkałem). Jestem zainteresowany zrozumieniem i rozwiązaniem ogólnego problemu.

Jaki jest sens tych aktualizacji, „znikających” pakietów i wersji pakietów?

Gdzie mogę uzyskać poprzednie wersje (nie tak naprawdę stare, ale wersje sprzed kilku tygodni) pakietów Debiana? Powinna istnieć możliwość zautomatyzowania procesu instalacji w ogólny sposób.


1
Nieco zależy od oprogramowania użytego do skonfigurowania repozytorium. Reprepro, iirc, dopuszcza tylko jedną wersję każdego pakietu
muru

2
stablepozostaje spójny, przynajmniej do następnego wydania punktu. stabilne aktualizacje, testy i niestabilne zawierają tylko najnowszą wersję dowolnego pakietu. Aby znaleźć cokolwiek innego, musisz zajrzeć na archive.debian.org (lub snapshot.debian.org, jak wspomniano w odpowiedzi SK)
cas

5
Czy istnieje powód, dla którego nie prowadzisz własnego repozytorium, na którym możesz kontrolować zasady wymiany i wersje pinów (które będą miały tę zaletę, że przyszłe automatyczne instalacje będą lokalne)?
Eric Towers

2
Nowa linuxnazwa pkg jest wyjątkiem: ogólnie, pakiety stabilne Debiana mają tę samą nazwę i zmieniają tylko numer wersji. linux-image-amd64nigdy nie zmienia nazwy i zawsze zależy od najnowszych linux-image-4.9.0-*. Nowa linux-image-4.9.0-*nazwa pkg oznacza niekompatybilne zmiany ABI jądra wymagane do backportu niektórych poprawek błędów i pozwala na radzenie sobie z konieczną rekompilacją niestandardowych modułów (dkms itp.). Podobnie dla linux-headers-*.
ignis

1
Jaki jest pomysł tych aktualizacji apt-get changelog packagename
Ignis

Odpowiedzi:


64

Zdolność do odtworzenia konkretnej konfiguracji, aż do dokładnej wersji, jest twoim wymaganiem, a nie Debiana.

Debian obsługuje tylko jedną wersję każdego pakietu binarnego w dowolnej wersji; odpowiednikiem tego jest staranie, aby aktualizacje pakietów w danym wydaniu nie wprowadzały regresji, a gdy taka opieka nie jest możliwa, aby to udokumentować. Utrzymywanie wielu wersji danego pakietu tylko zwiększy obciążenie i wymagania testowe: na przykład opiekunowie pakietów będą musieli przetestować zaktualizowane pakiety pod kątem wszystkich dostępnych wersji używanych bibliotek, a nie tylko aktualnie obsługiwanych wersji ... Pakiety są aktualizowane w stabilnej wersji tylko wtedy, gdy jest to naprawdę konieczne, tjnaprawić poważny błąd (w tym problemy bezpieczeństwa). W przypadku jądra czasami oznacza to, że ABI jądra zmienia się, a nazwa pakietu zmienia się w wyniku tego (w celu wymuszenia przebudowy pakietów zależnych); istnieją meta-pakiety, które można wyciągnąć w zamiast twarde kodowania (ABI linux-image-amd64, linux-headers-amd64itp).

Istnieje jednak obejście tego problemu: każde opublikowane źródło i pakiet binarny jest archiwizowane na snapshot.debian.org . Podczas tworzenia instalacji w wersji można wybrać odpowiednią migawkę (na przykład jedną z migawek z września 2019 r. ) I użyć jej jako adresu URL repozytorium:

deb https://snapshot.debian.org/archive/debian/20190930T084755Z/ buster main

Jeśli w końcu na tym polegasz, skorzystaj z jakiegoś zwierciadła buforującego, na przykład Apt-Cacher NG . To nie tylko zmniejszy obciążenie serwera migawek, ale zapewni także lokalną kopię wszystkich potrzebnych pakietów.

(Sytuacja związana z pakietami źródłowymi jest nieco bardziej złożona, a archiwa zawierają wiele wersji niektórych pakietów źródłowych w danym wydaniu z powodu zależności licencyjnych. Ale to nie jest istotne tutaj. Ściśle mówiąc, Debian udostępnia wiele wersji niektórych pliki binarne w obsługiwanych wersjach: bieżąca wersja w bieżącym wydaniu punktowym, wraz z wszelkimi aktualizacjami w repozytoriach zabezpieczeń i repozytoriach aktualizacji; te ostatnie są składane w następnym wydaniu punktowym. Utrzymanie odtwarzalnej, kontrolowanej wersji konfiguracji systemu jest możliwe bez uciekając się do migawek, pod warunkiem, że aktualizuje się je za każdym razem, gdy następuje wydanie punktu.)


Pamiętaj, że czasami niektóre wcześniejsze wersje są dostępne - apt-cache madison packagenamepokażą wszystkie wersje, które aptmożna zobaczyć za pośrednictwem skonfigurowanych repozytoriów.
ivanivan

5
(Proszę nie przeciążać serwerów migawek / archiwów, używając ich niepotrzebnie, zamiast pobliskiego lustra. Więc zostaw swoje normalne lustro w źródle.list z wyższym priorytetem niż migawka, aby pakiety nadal dostępne z niego mogły zostać pobrane w ten sposób .)
Peter Cordes

3
Tylko po to, aby sprawdzić, czy dobrze zrozumiałem: w praktyce nie chodzi o wersje, które określam podczas instalowania pakietów (ponieważ starsze wersje mogą być niedostępne), ale raczej o stan repozytorium pakietów, którego używam. Tak więc, jeśli chcę „świeżego” Debiana 9.8, potrzebuję repozytorium pakietów w tym samym stanie (np. Migawka lub repozytorium, które sam stworzyłem), a następnie, oczywiście, poprawny pakiet linux-header- * nadal jest dostępny . Jeśli chcę przeprowadzić migrację do Debiana 9.9, otrzymuję repozytorium pakietów do stanu skojarzonego i uruchamiam apt-get dist-upgrade. Czy to jest poprawne?
Flo

2
Tak, to jest poprawne.
Stephen Kitt

3
@Flo zauważ, że wydania punktowe (takie jak debian X.9 lub X.8) są przeznaczone tylko do pobrania plików ISO, więc nowe instalacje nie pobierają mnóstwa pakietów. W repozytoriach nie ma rozróżnienia między wydaniem punktowym, zawsze dostajesz najnowszy pakiet.
Braiam

15

Nie polegaj na serwerach, które nie są pod twoją kontrolą, aby odtworzyć określony stan systemu. Nawet sądząc, że serwery Debiana są dość niezawodne, nigdy nie wiadomo, co może się wydarzyć w przyszłości. Jest to szczególnie istotne w przypadku innych repozytoriów, których możesz użyć.

Powinieneś zachować własne lustro, aby uzyskać możliwe do odtworzenia stany systemu. W ten sposób możesz mieć nawet stan produkcyjny dla swoich normalnych systemów i kilka stanów testowych dla nowych konfiguracji.

Narzędzie do zarządzania repozytorium trafnie jest w stanie tworzyć kopie lustrzane repozytoriów. Możesz wybrać pakiety do wykonania kopii lustrzanej, utworzyć migawki zawartości repozytorium w określonym momencie i połączyć kilka kopii lustrzanych lub migawek w jedno repozytorium. W ten sposób możesz całkowicie odtworzyć możliwe stany systemu.


8

Chociaż odpowiedź Stephena Kitta jest z pewnością jednym z możliwych rozwiązań, myślę, że bezpieczniej byłoby przechowywać własne kopie potrzebnych pakietów.

Podczas nagrywania konfiguracji systemu pamiętaj, aby zapisać kopie .debplików-z /var/cache/apt/archives/. Możesz także użyć apt-get download.

Podczas przywracania konfiguracji systemu musisz być bardzo rygorystyczny, aptaby uniknąć wyzwalania potencjalnie niebezpiecznych automatycznych działań.

Prawdopodobnie łatwiej będzie użyć dpkgbezpośrednio, aby zainstalować dokładnie to, czego chcesz.


6
Jeszcze lepszym podejściem IMO byłoby użycie lokalnej pamięci podręcznej APT. Pozwala to uniknąć problemów z trzeciego akapitu, a także pozwala uniknąć zbiorów /var/cache/apt.
Stephen Kitt

3
Istnieją dwa warianty tego - jeden polega na użyciu czegoś takiego jak apt-mirror, aby sklonować całe repo, drugi polega na pobraniu tylko określonych pakietów i zależności . Następnie wykonaj migawkę katalogu - np. Przy pomocy btrfs as pkgs-20190501, a następnie opublikuj katalog migawek jako repozytorium. W czasie kompilacji umieść wersję repo url (np. http://debmirror/pkgs-20190501/...) W sources.list, a następnie uruchom aktualizację apt-get, apt-get install $ pkgs itp.
bain
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.