Czy jest jakiś sposób, aby przed uruchomieniem aptitude upgrade
lub apt-get upgrade
skonfigurować coś, co umożliwi „łatwe” przywrócenie systemu do stanu „apt”, który był przed faktyczną aktualizacją, jeśli coś pójdzie nie tak?
To znaczy, na przykład, zainstaluj ponownie starą wersję pakietów, które zostały zaktualizowane podczas procesu.
(EDYCJA) Kilka wskazówek : wiem, że etckeeper
na przykład używa jakiegoś zaczepienia apt
, aby był powiadamiany za każdym razem, gdy apt
instaluje lub odinstalowuje pakiet. Przypuszczam, że może istnieć jakiś skrypt, który mógłby zapisać listę nowo zainstalowanych pakietów i ich poprzedni numer wersji, aby móc je ponownie zainstalować z apt
pamięci podręcznej ( /var/cache/apt/archives
). Są też takie, checkinstall
które mogą śledzić modyfikacje plików ...
Jakieś szczegółowe informacje na temat tego, jak właściwie to osiągnąć?
Odpowiedzi:
Właśnie teraz musiałem znaleźć odpowiedź na to pytanie, ponieważ ostatni
apt-get upgrade
na serwerze Debiana uniemożliwiał uruchomienie najnowszego jądra poza zajętym boxem, nie mogąc zamontować partycji root zfs. Przynajmniej starsze jądro nadal mogło się uruchomić, ale było niekompatybilne z innym oprogramowaniem. Zatem potrzeba wycofania.Krótka odpowiedź - możesz użyć następującego polecenia:
jeśli zrobi to, co chcesz, usuń ją
-s
i uruchom ponownie. Oto kroki, które podjąłem, aby to działało poprawnie:Tymczasowo przyciąłem,
/var/log/dpkg.log
by zostawić tylko dzisiejszą aktualizacjęPo zainstalowaniu drobny skrypt
apt-history
z tutaj do~/.bashrc
i ranZapewnia to ładnie sformatowaną listę wersjonowanych pakietów, do których można przywrócić, wprowadzając ją
apt-get install
. Przytnij tę listę w razie potrzeby w edytorze tekstów, a następnie uruchom (-s
najpierw w przypadku suchobiegu):Apt ostrzeże o oczekiwanych obniżkach. Aby zapobiec zastąpieniu tego wycofania przez następne uaktualnienie, pakiety będą musiały zostać przypięte, dopóki oryginalny problem nie zostanie rozwiązany. Na przykład z:
apt-mark hold zfsutils libzfs2 ...
źródło
apt-history rollback
Polecenie można zastąpić czymś takimawk '$3 ~ /upgrade/ {print $4"="$5}' dpkg.log
.awk '$1 == "2018-09-07" && $3 == "upgrade" {print $4"="$5}' /var/log/dpkg.log
E: Version '5.24.1-3+deb9u3' for 'libperl5.24' was not found
. Używam Debian Stretch dla Raspian.Pliki dziennika
/var/log/apt/history.log
i/var/log/apt/term.log
są najbliższymi rzeczy dostępne dla opisem:history.log
zawiera listę podsumowującą każde działanie, któreapt
ma następujący format:W szczególności zawiera listę nowo zainstalowanych pakietów lub usuniętych pakietów. Dodatkowo
term.log
pokazuje, co faktycznie pojawiło się na terminalu podczas akcji, aby pokazać starą i nową wersję pakietów. Losowa próbka z mojegohistory.log
:Próba
apt
automatycznego wycofania nie jest zalecana, ale jeśli korzystasz z dzienników, powinna istnieć możliwość ręcznego cofnięcia, chyba że nieudane działanie spowodowało uszkodzenie czegoś, co zakłócaapt
działania, np. Niespójna baza danych dpkg. W takim przypadku musisz rozwiązać problem przed kontynuowaniem.źródło
Nie, apt nie ułatwia tego.
Najlepszą opcją jest jakiś rodzaj migawki. Migawki systemu plików za pomocą lvm / zfs / btrfs lub migawki instancji, jeśli używasz jakiejś maszyny wirtualnej.
Jedyną inną opcją jest sporządzenie spisu zainstalowanych pakietów (dpkg -l) przed i po. Jeśli chcesz „przywrócić”, musisz wyraźnie zainstalować poprzednią wersję.
źródło
apt install openssl=1.0.2g-1ubuntu4.12
powodujeE: Version '1.0.2g-1ubuntu4.12' for 'openssl' was not found
. Właśnie uaktualniłem do1.0.2g-1ubuntu4.13
i zastanawiam się, czy to powoduje teraz jakieś problemy CORS / CSP