Czy istnieje narzędzie, a nawet cała dystrybucja, która obsługuje wycofywanie zmienionych pakietów po aktualizacji?
Jako przykład: zaktualizowałem pakiety A, B i C. Po kilku dniach pracy z tymi pakietami, napotkałem błąd w B, który łamie układy.
Podczas przesyłania zgłoszenia błędu musiałbym również obniżyć wersję B do poprzedniej wersji, aby móc dokończyć to, co miałem zrobić. Tymczasem A jest zależne od B, więc trzeba by go również obniżyć, ale C jest niezależny od obu, więc może pozostać w obecnej wersji.
Czy istnieje narzędzie lub dystrybucja, która to obsługuje?
Wiem, że większość dystrybucji ma sposób na obniżenie pakietu, ale zwykle jest to trochę szkicowe lub nawet niemożliwe, ponieważ poprzedni pakiet został usunięty z repozytoriów i czasami (na przykład po aktualizacji serwera X i Mesa) robi się naprawdę ... , niechlujny.
źródło
Odpowiedzi:
NixOS obsługuje wycofywanie aktualizacji, chociaż, jak rozumiem, nie idzie tak daleko, jak chcesz: jeśli uaktualnisz A, B i C w jednej operacji, możesz przywrócić całą operację do tyłu, ale nie tylko A i B. (Powinieneś być w stanie cofnąć A, B i C, a następnie uaktualnić C ...) To jednak ma sens z perspektywy transakcyjnej.
Debian (w połączeniu z archiwum migawek, jeśli nie masz już starych pakietów) pozwoli Ci na obniżenie wersji B, a narzędzia takie jak
apt
lubaptitude
w wielu przypadkach stwierdzą, że A również należy obniżyć (po przekonaniu ich, że nie chcę po prostu ulepszać B). Ale, jak mówisz, jest to zwykle nieco niechlujne, a obniżki pakietów i tak nie są obsługiwane w Debianie (co oznacza, że przez większość czasu działają, ale jeśli się zepsują, to nie jest błąd).źródło
nix-env
, zamiast tego określasz rzeczy w,configuration.nix
a następnie uruchamiasznixos-rebuild switch
. Ma to tę zaletę, że cała konfiguracja systemu jest w jednym miejscu, a tworzenie kopii zapasowej całej konfiguracji systemu jest łatwe (wystarczy wykonać kopię zapasowąconfiguration.nix
pliku).W dowolnej
yum
opartej na dystrybucji dystrybucji (np. Red Hat EL , CentOS itp.) Możesz:zbadać historię zmian w systemie za pomocą
sudo yum history list
sprawdź szczegóły, używając
sudo yum history info 10
sudo yum history rollback 9
Ostrzeżenie
Istnieje kilka oczywistych zastrzeżeń:
W moim przykładzie, że
<
w wierszu z identyfikatorem4
(w ostatniej kolumnie) oznacza, że nie mogę wycofać się poza ten punkt.źródło
--enablerepo
flagi, aby włączyć w przeciwnym razie nieużywane stare repozytorium dla obniżenia wersji.yum
po prostu zajmuje się utrzymywaniem listy zainstalowanych pakietów i wersji oraz sprawdzaniem zależności podczas ponownej instalacji starych wersji. Oczywiście możesz to zrobić ręcznie .W OpenSUSE możesz łatwo używać Snappera z systemem plików Btrfs .
Jeśli podczas instalacji używasz standardowej konfiguracji systemu plików, jest ona domyślnie włączona .
Po włączeniu Snapper jest w pełni zintegrowany z
yast2
izypper
. Będzie tworzył migawkę systemu plików za każdym razem, gdy coś instalujesz lub aktualizujesz (lub tworzysz użytkownika itp.).Aby przywrócić system do poprzedniego stanu, wystarczy uruchomić
yast2 snapper
.źródło
/var
więc należy je wycofać,/
nawet jeśli jest to osobny plik fs lub podwolumna. O wiele lepiej jest dokładnie przetestować aktualizację przed zastosowaniem jej na serwerach produkcyjnych, niż polegać na funkcjach takich jak wycofanie aktualizacji systemu operacyjnego (co jest banalnie łatwe do zrobienia w półprzebiegowy sposób, ale jest niezwykle trudne do prawidłowego rozwiązania )./home
znajduje się w osobnym systemie plików nie migawkowym .AIX jest bardzo dobry w wycofywaniu aktualizacji. Cóż - jesteśmy na stronie Unix / Linux i nigdy nie określiłeś, że chcesz Linuxa :)
Każda pojedyncza aktualizacja AIX zapisuje wszystkie zmodyfikowane pliki w osobnym podkatalogu w systemie plików / var. Aktualizację można cofnąć za pomocą prostego polecenia natywnego, a przywracanie nie wymaga działania sieci, nie wymaga żadnych nośników / pakietów, niczego nie instaluje ponownie i nie zależy od żadnego technologia migawek - efekt polega na tym, że pliki ponownie pojawiają się tak, jak przed aktualizacją.
Jako bonus, istnieje jedno trywialne natywne polecenie
mksysb
do utworzenia bootowalnej autonomicznej kopii zapasowej systemu. Plik, który można po prostu uruchomić w całkowicie dysfunkcyjnym systemie, który nie uruchamia się z powodu jakiejś awarii / uszkodzenia.A wszystko to sprawdzona technologia z dziesięcioleciami historii :)
źródło
W Fedorze (i jestem pewien, że także w innych dystrybucjach) możesz poprosić o powrót do poprzedniej wersji:
dostaniesz ostatnią ostatnią wersję pakietów i możesz poprosić o konkretną wersję przez:
Działa to tylko wtedy, gdy pakiety są nadal dostępne w repozytoriach. Funkcjonalność nie jest w żaden sposób niespotykana. Ma to swoje kłopoty, jeśli częścią aktualizacji była zmiana konfiguracji, wycofanie niekoniecznie musi być dokładnie w poprzedniej wersji.
źródło
This only works if the package(s) are still available in the repositories.
tak, to jest właśnie problem. Jestem trochę zaskoczony, że nie wydaje się, aby istniało „szersze” rozwiązanie tego problemu, szczególnie w przypadku dystrybucji w wersji kroczącej. Na razie wydaje się, że NixOS jest moją najlepszą opcją, lub potrzebowałbym jakiegoś narzędzia do obrazowania systemu, które działa tylko na różnice i może przywrócić system do określonego punktu w czasie w ciągu ostatnich 20 (?) Aktualizacji.Arch Linux obsługuje także obniżanie pakietów i jądra. Możesz także zainstalować narzędzia
downgrader
idowngrade
, aby zautomatyzować proces. Rozwiązanie btrfs również działa, wcześniej użyłem go do ręcznego przywracania.Jak wycofać swój system:
Jedną z zalet btrfs jest to, że można używać podwoluminów i dynamicznych „partycji”. Na przykład mam podwolumin dla / (o nazwie @), / tmp (@tmp) i / home (@home). Następnie można łatwo wykonać kopię zapasową i przywrócić dowolny z nich. Mam / tmp w osobnej objętości cząstkowej, ponieważ tworzenie kopii zapasowej w pozostałej części systemu wydaje się bezcelowe, ponieważ jest usuwane przy prawie każdym ponownym uruchomieniu.
źródło
Używam Arch Linux i przechowuje wszystkie pobrane pakiety
/var/cache/pacman/pkg/
, abyś mógł w dowolnym momencie obniżyć wersję dowolnego pakietu (nie możesz uruchomić systemu, użyj usb na żywo). Z Arch Wiki :Aby zapobiec aktualizacji pakietu, dołącz nazwę pakietu
/etc/pacman.conf
, na przykład:Aby zaoszczędzić miejsce, możesz wyczyścić folder pamięci podręcznej za pomocą:
Który usunie wszystkie starsze pakiety i zatrzyma najnowszy, lub użyje
-Scc
do usunięcia wszystkich.źródło