Czy istnieje dystrybucja, która obsługuje wycofywanie zaktualizowanych pakietów?

23

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.

Steffen Winkler
źródło
3
Uwaga: jeśli zmiana wersji pakietu była niewielka, mogą obowiązywać poniższe odpowiedzi; zauważ jednak, że większe zmiany pakietów mogą uaktualnić dane na dysku, które później nie będą działać poprawnie w starszej wersji. Na przykład główna aktualizacja mysql-server (lub joomla) doda i zmodyfikuje pola i zaktualizuje tabele SQL, aktualizacja inn2 może zmienić typ bazy danych, lub niektóre aktualizacje jądra dystrybucji mogą zaktualizować system ext3 do systemu plików ext4, lub niektóre aktualizacje pakietu przekonwertują pliki konfiguracyjne, itp. Jedyną ochroną przed tymi „niemożliwymi do odtworzenia zmianami” są migawki LVM / btrfs / etc (lub znacznie wolniejsze tworzenie kopii zapasowych / przywracanie).
Matija Nalis,
@MatijaNalis +1 za wzmiankę o tym!
Steffen Winkler,

Odpowiedzi:

21

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 aptlub aptitudew 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).

Stephen Kitt
źródło
1
to wygląda interesująco! Społeczność wygląda na aktywną i zdrową. Zdecydowanie spróbuję, dziękuję! Jeśli do piątkowego wieczoru nie ma lepszej / innej odpowiedzi, zaznaczę twoją odpowiedź.
Steffen Winkler,
Wycofywanie z NixOS jest niesamowite, ale prawdziwa moc pochodzi z deklaratywnego podejścia: opis pakietów (i systemu) można pobrać z repozytorium git, dzięki czemu możesz zarządzać systemem w taki sam sposób, jak zarządzasz projektem oprogramowania, w tym oddziałami i łączy się itp. (a ze względu na ulepszenia atomowe i czystość nigdy nie psujesz rzeczy)
Daniel Jour
Menedżer pakietów Nix można również uruchamiać na innych dystrybucjach Linuksa, równolegle z ich „macierzystym” menedżerem pakietów. Działa również w systemie OSX i widziałem, że może działać w systemie Windows. Możesz także powiedzieć Nixowi, aby używał „rodzimych” wersji niektórych pakietów, zamiast instalować własne duplikaty, chociaż w ten sposób tracisz niektóre z jego gwarancji (np. Może nie zauważyć, że zamieniłeś jakąś zależność).
Warbo,
po prostu FYI, udało mi się zainstalować NixOS na moim laptopie (obraz KDE4 dał mi Kernel Panic, ale mały (~ 390 MB) obraz wystartował dobrze. Dla kogoś, kto tylko instalował dystrybucje oparte na Debianie, było to dość interesujące / zabawne. , Jeszcze nie rozumiem pewnych rzeczy na temat menedżera pakietów, szczególnie jeśli chodzi o środowiska pulpitu. Zainstalowałem gdm / gnome-shell, ale to nie zadziałało. Następnie włączyłem gnome3 / gdm w pliku configuration.nix i przy przebudowie zarówno pakiety, jak i ich zależności zostały ponownie pobrane. Działało po ponownym uruchomieniu komputera, ale nie rozumiem dlaczego
Steffen Winkler
@SteffenWinkler Podczas korzystania z NixOS normalnie nie instalujesz rzeczy za pomocą nix-env, zamiast tego określasz rzeczy w, configuration.nixa następnie uruchamiasz nixos-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.nixpliku).
Pauan
15

W dowolnej yumopartej na dystrybucji dystrybucji (np. Red Hat EL , CentOS itp.) Możesz:

  1. zbadać historię zmian w systemie za pomocą sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. sprawdź szczegóły, używając sudo yum history info 10

  3. cofnij do poprzedniego punktu w historii, używając sudo yum history rollback 9

Ostrzeżenie

Istnieje kilka oczywistych zastrzeżeń:

  1. Jeśli stary pakiet nie jest już dostępny, toast (cytując @vonbrand),
  2. Jeśli zainstalujesz coś poza yum, możesz złamać historię.

W moim przykładzie, że <w wierszu z identyfikatorem 4(w ostatniej kolumnie) oznacza, że ​​nie mogę wycofać się poza ten punkt.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
andcoz
źródło
3
ciekawa funkcja! Ale ze względu na „toast” nie pasuje do mojego rachunku.
Steffen Winkler,
AFAIK jest to możliwe tylko w wersji RHEL / CentOS 6 lub nowszej. Jeśli nadal używasz RHEL / CentOS 5, jesteś SOL.
Wildcard,
Nawiasem mówiąc, w środowisku korporacyjnym z zarządzanymi repozytoriami takie podejście jest całkiem realne, ponieważ zawsze masz wokół siebie stare pakiety, nawet jeśli musisz użyć --enablerepoflagi, aby włączyć w przeciwnym razie nieużywane stare repozytorium dla obniżenia wersji.
Wildcard,
Jakie są zalety wycofania w porównaniu z ponownym zainstalowaniem starszej wersji?
Bratchley,
@Bratchley automation! 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 .
andcoz
7

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 yast2i zypper. 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.

wprowadź opis zdjęcia tutaj

andcoz
źródło
rzeczywiście interesujące narzędzie. Chociaż bardzo lubię ext4. Zbadam to! Czy mam rację zakładając, że Snapper nie jest „związany” z OpenSUSE, ale z btrfs?
Steffen Winkler,
Snapper został opracowany przez SUSE. Jest to zbiór narzędzi automatyzujących tworzenie migawek Brtfs w „zdarzeniach”. Przypuszczam, że możesz go używać w innych dystrybucjach, ale nie jestem pewien. W każdym razie możesz ręcznie utworzyć migawki Brtfs w dowolnej dystrybucji.
andcoz
3
Pamiętaj, że jeśli wolumin zawiera jakiekolwiek dane, a nie tylko pliki binarne i skrypty, wycofanie migawki spowoduje również przywrócenie twoich danych. Ta opcja brzmi ryzykownie, najlepiej nadaje się dla tych, którzy naprawdę znają układ swojego systemu plików. Dla mnie migawki zawsze służyły do ​​tworzenia spójnych kopii zapasowych, replikacji i całkowitego odzyskiwania.
jimp
1
Zauważ też, że wiele pakietów ma pliki i / lub katalogi, /varwię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 ).
cas
1
@Jimp Dobra rada. W każdym razie OpenSuSE nie włącza snappera, chyba że /homeznajduje się w osobnym systemie plików nie migawkowym .
andcoz
6

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 mksysbdo 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 :)

kubańczyk
źródło
Czy często występują problemy z przywracanymi w ten sposób programami będącymi w niespójnym stanie i przywracaniem (np. Baza danych, której silnik pamięci zmienił się lub usługa, która zmieniła format pliku konfiguracyjnego na nowy), czy istnieją dobre sposoby na obejście że?
Josh Rumbut
1
Jest to model, którego użyłem, kiedy zbudowałem podstawowy system zarządzania pakietami dla oprogramowania, które tradycyjnie było dystrybuowane w skompresowanych / spakowanych gzip plikach tar. Za każdym razem, gdy instaluje aktualizacje, najpierw buduje „pakiet przywracania” wszystkiego, co ma zostać zmodyfikowane. Ten pakiet przywracania może być następnie użyty do przywrócenia, pod warunkiem, że w międzyczasie nie zastosowano żadnych innych pakietów aktualizacji. Często zastanawiałem się, czy odpowiedni menedżer pakietów mógłby to zrobić, ale biorąc pod uwagę ograniczenia wycofywania tylko w odwrotnej kolejności ... może zamiast tego powinniśmy użyć git.
Monty Harder
cholera. Powinienem był powiedzieć, że miałem na myśli dystrybucje GNU / Linux. Co ciekawe, AIX wydaje się być w stanie obecnie uruchamiać „programy” GNU / Linuksa, chyba przyjrzę się bliżej.
Steffen Winkler,
5

W Fedorze (i jestem pewien, że także w innych dystrybucjach) możesz poprosić o powrót do poprzedniej wersji:

dnf downgrade <packages>

dostaniesz ostatnią ostatnią wersję pakietów i możesz poprosić o konkretną wersję przez:

dnf downgrade <package>.<version>

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.

vonbrand
źródło
Można również skorzystać z DNF historii cofania #thing cofnąć
wyraźniejsze
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.
Steffen Winkler,
@SteffenWinkler, jeśli stary pakiet nie jest już dostępny, toast. Oczywiście. Chyba że masz jakąś lokalną kopię zapasową.
vonbrand,
2
@MTilsted, ponieważ jest już za stary? Repozytoria nie zawierają wszystkich wersji od zarania dziejów.
vonbrand,
1
W dnf.conf (tak samo jak yum.conf) ma keepcache = true Dostępne są stare pakiety, ponieważ późniejsza pamięć podręczna nie jest czyszczona ręcznie. Ale poszło do pamięci podręcznej pakietu „wzdęcia”.
mmv-ru 11.03.16
2

Arch Linux obsługuje także obniżanie pakietów i jądra. Możesz także zainstalować narzędzia downgraderi downgrade, 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:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

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.

Caleb Reister
źródło
Poszedłem za linkiem na wiki i dotarłem tutaj . Wygląda to całkiem fajnie i od sprawdzenia repozytorium, istnieją pliki sięgające 2013 roku! Po co korzystać ze sposobu btrfs, jeśli istnieje? Z powodu plików, które są „uaktualniane”? Czy jest jakiś inny powód?
Steffen Winkler,
Po krótkiej wizycie w NixOS przeszedłem na stałe do Arch Linux. To (Arch Linux) nie jest tak niestabilne, jak zawsze myślałem, i będzie mieć zdrową społeczność.
Steffen Winkler,
@SteffenWinkler To prawda. Ponadto opcje obniżania wersji Arch nie są „oficjalnie” obsługiwane, a obniżanie prawdopodobnie zignoruje zależności (które mogą stać się dość nieuporządkowane, jeśli coś pójdzie nie tak).
Caleb Reister
2

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 :

pacman -U <file_name_of_the_package>

Aby zapobiec aktualizacji pakietu, dołącz nazwę pakietu /etc/pacman.conf, na przykład:

IgnorePkg=linux

Aby zaoszczędzić miejsce, możesz wyczyścić folder pamięci podręcznej za pomocą:

pacman -Sc

Który usunie wszystkie starsze pakiety i zatrzyma najnowszy, lub użyje -Sccdo usunięcia wszystkich.

Alko
źródło
Zauważ, że to (ignorowanie pakietów) oznacza częściowe uaktualnienie, które nie jest obsługiwane ...
jasonwryan
Poszedłem za linkiem na wiki i dotarłem tutaj . Wygląda to całkiem fajnie i od sprawdzenia repozytorium, istnieją pliki sięgające 2013 roku! Po co korzystać ze sposobu btrfs, jeśli istnieje? Z powodu plików, które są „uaktualniane”? Czy jest jakiś inny powód?
Steffen Winkler,