Czy w Ubuntu istnieje sposób na przywrócenie lub cofnięcie ostatniej aktualizacji po wykonaniu, apt-get upgrade
jeśli nie podoba ci się wyniki?
Czy w Ubuntu istnieje sposób na przywrócenie lub cofnięcie ostatniej aktualizacji po wykonaniu, apt-get upgrade
jeśli nie podoba ci się wyniki?
Odpowiedzi:
aptitude
daje dostęp do wszystkich wersji pakietu, jeśli są one dostępne zgodnie z zarządzaniem pakietami Debiana .
Natknąłem się na Blogstatic Blog Hartmana: Jak cofnąć aktualizację w Ubuntu Lucid
Pierwszym krokiem do cofnięcia niepoprawnej aktualizacji było sprawdzenie, jakie dokładnie były aktualizacje. Po przeszukaniu niektórych forów znalazłem sposób, aby zobaczyć moją historię aktualizacji: Otwórz menedżera pakietów synaptic („sudo synaptic” w terminalu). Na pasku menu kliknij Plik -> Historia, a zobaczysz wszystkie aktualizacje posortowane według daty.
Niestety zainstalowałem dziś około 20 aktualizacji i nie wiedziałem, która z nich spowodowała problem. Przeszukując każdy z pakietów wymienionych na liście historii, mogłem obniżyć liczbę kilku jednocześnie, aż problem został rozwiązany i zidentyfikowałem niepoprawną aktualizację. Aby to zrobić:
Użyj paska wyszukiwania, aby znaleźć pakiet, który chcesz obniżyć. Po znalezieniu tego, czego szukasz, kliknij pakiet, aby go wybrać. Na pasku menu kliknij Pakiet -> Wymuś wersję i wybierz poprzednią wersję pakietu z menu rozwijanego. Kliknij przycisk „Zastosuj”, aby zastosować obniżenie wersji.
Musiałem to zrobić dzisiaj w moim systemie Debian. Najpierw zidentyfikowałem przedział czasowy, w którym nastąpiło obraźliwe uaktualnienie, i pobrałem wpisy dziennika, podając stare i nowe numery wersji uaktualnionych pakietów:
$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1
Następnie próbowałem znaleźć nadal buforowane pliki pakietów na dysku (na szczęście dla mnie nie uruchomiłem automatycznego czyszczenia):
$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root 28820 Dec 18 2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar 3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb 7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root 983174 Mar 3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
Wygląda na to, że z jakiegoś powodu nie mam starszego pakietu ethtool. Nadal kontynuujmy, wymuszając instalację starszych plików pakietów:
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
Package libwebkitgtk-3.0-common is not installed.
dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
libwebkitgtk-3.0-0:amd64
Jak napisano w komunikacie o błędzie, jeden z moich pakietów zależał od zwykłego pakietu tuż przed aktualizacją, ale aktualizacja go usunęła (a apt-get nie może go już znaleźć). Na szczęście plik pakietu nadal znajduje się w katalogu / var / cache / apt, więc mogę po prostu dodać go do listy i spróbować ponownie:
$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Sukces! Właściwie to nie rozwiązało mojego problemu. Ale z powodzeniem obniżyło pakiety, QED.
Musiałem też dziś cofnąć aktualizację pakietu na kilku serwerach Debiana. Pomyślnie przywróciłem pakiety do ostatniej wersji przy użyciu aptifier, podczas gdy następująca komenda awk była bardzo pomocna.
( W poniższym poleceniu zastąp ciąg daty datą dnia, od którego chcesz przywrócić aktualizacje )
awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log
przejrzyj dane wyjściowe, aby sprawdzić, czy są to pakiety i wersje do przywrócenia. Następnie użyj programu aptifier, aby dokonać obniżenia wersji wymienionych pakietów:
aptitute install [paste output here]
Mam nadzieję, że jest to również przydatna oszczędność czasu dla innych.
I nie wierzę, oprócz biorąc pełną kopię zapasową odpowiednich systemów plików (te, które zawierają /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
i /boot
(co może być na wszystko na systemie plików) a rekord rozruchowy), dzięki czemu można toczyć maszynę z powrotem później.
/var
) i wszelkie odpowiednie pliki konfiguracyjne przechowywane. Możesz wtedy spróbować wymusić wycofanie, wyraźnie mówiąc, dpkg
aby zainstalować te wersje. Być może będziesz miał trochę pracy do wykonania, jeśli chcesz, aby nastąpiły normalne aktualizacje, więc nie polecam tego.
Pracuję z moimi serwerami Linux w środowisku zwirtualizowanym i uruchamiam shapshot tuż przed aktualizacją apt-get lub innymi ważnymi aktualizacjami / aktualizacjami innych firm.
Potem, jeśli coś pójdzie nie tak, po prostu cofa się i życie toczy się dalej, dopóki nie znajdę więcej informacji.
Udało się to bardzo dobrze, kiedy zaktualizowałem moje Ubuntu do wersji 12.04, a MySQL po aktualizacji całkowicie przestał działać. Cofnąłem się, znalazłem odpowiedź później, przebudowałem aktualizację, naprawiłem MySQL i życie było dobre.
Możesz spróbować checkinstall
Po tobie ./configure; uczyń swój program, CheckInstall uruchomi make install (lub cokolwiek mu powiesz, aby uruchomić) i będzie śledzić każdy plik zmodyfikowany przez tę instalację, korzystając z doskonałego programu instalacyjnego ...
Więc może mógłbyś polecić uruchomienie bezpiecznej aktualizacji aptitude i śledziłby każdą modyfikację dokonaną przez aktualizację.
Istnieje projekt o nazwie Nexenta, który łączy jądro OpenSolaris z przestrzenią użytkownika Ubuntu. Zapewnia narzędzie do integracji ZFS Solaris i apt Debiana w celu zapewnienia przycisku cofania aktualizacji. Zobacz tutaj: http://www.nexenta.org/os/TransactionalZFSUpgrades
Mówiąc bardziej ogólnie, potrzebny jest system plików z wersjami. Btrfs dla systemu Linux jest w fazie rozwoju.
Użycie Apt-Undo jest możliwą opcją, ale może działać tylko wtedy, gdy używasz jej do instalowania i odinstalowywania pakietów. To nie pomoże, jeśli już odinstalowałeś oprogramowanie w normalny sposób.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -simple-way-of-undoing-apt-actions /
Zrobiłem to kilka razy, ale nie polecam tego. Oto co zrobiłem (jeśli dobrze pamiętam):
1) Usuń wszelkie nieoficjalne oprogramowanie, które nie jest zawarte w domyślnych repozytoriach ubuntu (może nie być wymagane, ale sugeruję, ponieważ mogą one stanąć na twojej drodze).
2) Zmień /etc/apt/sources.list (i sources.list.d / *) na poprzednią wersję (skomentuj wszystkie nieoficjalne repozytoria).
3) apt-get update / aptitude update
4) Korzystając z aptitude, obniż wersję podstawowych pakietów (takich jak X11, biblioteki itp.). Zacznie strzelać wiele zepsutych pakietów ... więc będziesz musiał rozwiązać każdą sprawę (musisz wiedzieć, jak to zrobić w aptitude). Sposób obniżenia wersji to przejście do panelu opisu i zainstalowanie wersji (naciskając +) na dole.
5) Powtarzaj # 4, aż całe oprogramowanie należy do wersji docelowej (sprawdź kolumnę wersji w aptitude).
Oto powód, dla którego nie polecam tej metody:
Zdecydowanie zaleciłbym przeprowadzenie czystej instalacji i stopniowe przenoszenie konfiguracji. To także wymaga czasu, ale na końcu masz stabilną wersję.
Powodem, dla którego to zrobiłem, były głównie eksperymenty i desperacja.
Jeśli zainstalowałeś swój system operacyjny w systemie plików ZFS (np. ZFS w systemie Linux ), możesz skonfigurować apt-get
działanie tak, aby zfs snapshot
instalował lub aktualizował cokolwiek, co natychmiast utworzy kopię zapasową systemu plików. Może działać z mechanizmami tworzenia kopii zapasowych innymi niż migawki ZFS, ale pozostawiam to testowanie innym.
Utwórz plik podobny do
/etc/apt/apt.conf.d/71backup
z zawartością
// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};
gdzie rpool/ROOT/debian
należy zastąpić nazwą systemu plików ZFS, do którego jest podłączony system operacyjny. Nazwa ta została nadana NAME
przy pierwszej instalacji systemu operacyjnego i można ją znaleźć w atrybucie za pomocą polecenia
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Lepiej zrób migawkę przed skorzystaniem z porady konfiguracji przypadkowej osoby internetowej:
# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test
Tu jest. Jeśli error: fn_borked
wkrótce to nastąpi, możesz przywrócić swój system do błogiego obecnego stanu za pomocą
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Wypróbuj teraz, instalując dwie małe gry, które prawdopodobnie są dostępne w twoim repozytorium:
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
Ta migawka zawiera system plików taki, jaki był przed zainstalowaniem dwóch gier.
# exit
$ sudoku
Czas zabawy dla babci, ale nienawidzisz sudoku.
$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found
Po zrobieniu wielu migawek możesz cofnąć się do dowolnej wcześniejszej, dodając -r
flagę. Na przykład w naszym przypadku spróbuj
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Ostrzegamy jednak, że nie tylko przywróci to system plików do stanu, w jakim był w momencie rpool/ROOT/debian@2018-08-01-230001_test
wykonania, ale nieodwracalnie usunie wszystkie późniejsze migawki. Jeśli śledziłeś ten post, migawkarpool/ROOT/debian@apt-get_2018-08-02-033614
zniknie.
Testowałem apt-get upgrade
na Debian GNU / Linux z
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
To działa. Jedna migawka została utworzona dla install
polecenia, a druga dla upgrade
polecenia.
Uwaga : przetestowałem to po raz pierwszy dzisiaj i bardzo mało wiem o wewnętrznych działaniach apt. Jeśli to coś dla ciebie złamie lub pociągnie za sobą ryzyko, których mój łagodny umysł nie wziął pod uwagę, proszę o komentarz poniżej.