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.
stable
pozostaje 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)linux
nazwa pkg jest wyjątkiem: ogólnie, pakiety stabilne Debiana mają tę samą nazwę i zmieniają tylko numer wersji.linux-image-amd64
nigdy nie zmienia nazwy i zawsze zależy od najnowszychlinux-image-4.9.0-*
. Nowalinux-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 dlalinux-headers-*
.apt-get changelog packagename
Odpowiedzi:
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-amd64
itp).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:
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.)
źródło
apt-cache madison packagename
pokażą wszystkie wersje, któreapt
można zobaczyć za pośrednictwem skonfigurowanych repozytoriów.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.
źródło
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
.deb
plików-z/var/cache/apt/archives/
. Możesz także użyćapt-get download
.Podczas przywracania konfiguracji systemu musisz być bardzo rygorystyczny,
apt
aby uniknąć wyzwalania potencjalnie niebezpiecznych automatycznych działań.Prawdopodobnie łatwiej będzie użyć
dpkg
bezpośrednio, aby zainstalować dokładnie to, czego chcesz.źródło
/var/cache/apt
.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.