Czy jest jakiś sposób na wycofanie najnowszej aktualizacji?

54

Zdarzyło mi się to wiele razy w ciągu ostatnich 5 lat: aktualizacja spowodowała uszkodzenie mojego systemu. Za każdym razem, gdy kończy się taka sytuacja, muszę ponownie instalować cały system, co jest naprawdę denerwujące.

Czy jest jakiś sposób na wycofanie najnowszej aktualizacji, aby mieć funkcjonalny system bez ponownej instalacji? Jeśli nie, jaki jest najlepszy sposób na zasugerowanie tego jako idei o najwyższym priorytecie?

Przeczytałem ten pomysł, który został opisany w brainstorm.ubuntu.com, ale wydaje mi się, że jest martwy ... i fora są pełne przykładów aktualizacji, które psują rzeczy, dlatego uważam, że należy coś zrobić w tym temacie. Dzięki!

Marcelo Ruiz
źródło
17
Loguję się tylko po to, aby zagłosować na to pytanie. Brak spójnego narzędzia wycofywania w 2011 roku na pulpicie jest żałosny. System Windows miał Przywracanie systemu ponad 5 lat temu, co jest daleko w tyle. Użytkownicy zostali ( poprawnie ) przeszkoleni w zakresie instalowania aktualizacji zabezpieczeń, ale jesteśmy ciągle karani za robienie tego z powodu awarii sterowników.
Gates VP,
@GatesVP Ten punkt, który zrobiłeś 8 lat temu, wciąż nęka Ubuntu (nie mogę mówić o innych dystrybucjach, ale prawdopodobnie nie są lepsze). Uważam to za całkowicie frustrujące. Ktoś powinien wydrukować twoje słowa czcionką 64 pkt i zawiesić się przed każdym nowicjuszem, który ma zamiar zanurzyć się w świecie linuksa.
horaceT
Muszę się zgodzić, że obraz zapasowy jest właściwą drogą. Nie wiadomo, czy jest to system „produkcyjny”. Jeśli jest i jest możliwe posiadanie systemu testowania klonowania, to jest to droga z kopią zapasową obrazu. Jeśli jest to tylko aktualizacja aplikacji, najszybszym rozwiązaniem jest obniżenie wersji z opcją „wymuszenia” lub bez niej.
JHPArizona

Odpowiedzi:

14

W synaptics możesz przynajmniej kontrolować, jakie były najnowsze aktualizacje: menu Plik, historia.

(jeśli można uruchomić synaptic, z uszkodzonym systemem). Zatem polecenie apt -...-, aby przywrócić ich aktualizację, nie powinno być zbyt trudne.

Wydaje mi się, że istnieje również polecenie historii dla wiersza poleceń.

Być może musisz usunąć cały pakiet i zainstalować określoną wersję. Afaik, można zainstalować konkretną wersję, ale nigdy nie musiałem tego robić.

aktualizacja: Sprawdziłem, jak zrobić z apt:

Znajdź pakiety zainstalowane w ciągu ostatnich 3x24h:

find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 

Dzięki zasadom apt-cache widzisz dostępne wersje programu:

sudo apt-cache policy PROGRAM:
 *** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
        500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
        500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
        100 /var/lib/dpkg/status
     3.6.3+nobinonly-0ubuntu4 0

tutaj 3.6.7 i 3.6.3. Teraz wiesz, jaką wcześniejszą wersję można zainstalować (często nie bezpośredni jej poprzednik):

sudo apt-get install PROGRAM=3.6.3

Następnie musisz wykonać apt-pinning, aby zapobiec przyszłym aktualizacjom:

Utwórz nowy plik w /etc/apt/preferences.d/ (jeśli> = 10.4) o nazwie po swoim programie,

Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
nieznany użytkownik
źródło
Dziękuję wszystkim za informacje. Nie mogę się doczekać, aż Ubuntu będzie zarządzać ZFS po wyjęciu z pudełka!
Marcelo Ruiz
Przepraszam - co to ma wspólnego z ZFS? Czy ZFS zarządza wycofaniami? Czy aktualizacje nie psują instalacji zfs? A może aktualizacja ZFS coś psuje?
użytkownik nieznany
Co jeśli wersja jest 1.0.2g-1ubuntu4.12zgodna z apt? Jednak odmawia przyjęcia tego jako numeru wersji. Chcę obniżyć formularz 1.0.2g-1ubuntu4.13z1.0.2g-1ubuntu4.12
Csaba Toth
dzięki, suuuuuuuuuuuuuch ból. moja ostatnia aktualizacja, która całkowicie zniszczyła wejście kontrolera, ma dokładnie 80 pakietów wymienionych find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' w tym momencie, to mniej kłopotów z ponowną instalacją całego systemu
tatsu
7

Przeważnie możesz skonsultować /var/log/apt/history.logzmiany wprowadzone przez apt / synaptic. To tylko trochę kryminalistycznych i dużo wycinania / wklejania do zrobienia.

Wróć do daty, w której system nadal działał poprawnie.

Najpierw weź wszystkie pakiety, które zostały zainstalowane od tego czasu i połącz je w skrypcie odinstalowującym. Po zakończeniu skryptu zacznij ponownie dodawać wszystkie usunięte pakiety.

Przykładowy przypadek:
plik dziennika:

Start-Date: 2014-05-28  21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28  21:28:27

możesz zobaczyć,

libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 

został zainstalowany przez Synaptic. jak libfglrx:amd64zostało usunięte przez Synaptic.

Poszliśmy w odwrotnej kolejności, więc najpierw usuwamy nowo zainstalowane pakiety i ponownie dodajemy pakiety, które zostały usunięte.

Działające polecenie dla tego przypadku może wyglądać następująco:

sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64

Być może nie byłoby najlepszym wyjściem bez -yprzełącznika - mieć większą kontrolę nad procesem (aby uniknąć przerwanych zależności). Większość z was nie złamałaby palca podczas kilku weryfikacji „y”

W większości przypadków wycofanie jest możliwe w ten sposób, ale jeśli zależności są już zerwane - możesz napotkać jeszcze większy problem.

Matt
źródło
6

W większości przypadków, jeśli twój system jest uszkodzony, jest to problem z jądrem .

Wystarczy uruchomić starsze jądro i ponownie zainstalować najnowsze pakiety (zwłaszcza pakiety jądra), które prawdopodobnie nie zostały poprawnie zaktualizowane. Kilka notatek:

/var/log/dpkg.log

jest twoim przyjacielem, aby sprawdzić, jaka jest lista ostatnio zaktualizowanych / zainstalowanych pakietów

sudo apt-get -f install

może w większości przypadków naprawić pakiety częściowo zainstalowane

Giordano Battilana
źródło
4

Niestety nie ma jeszcze na to sposobu. Migawka / przywracanie na poziomie systemu plików jest jedną z funkcji nadchodzących plików btrfs, ale ma jeszcze sposoby, aby stać się kompletnym i wystarczająco stabilnym, aby można go było używać jako domyślnego systemu plików.

psusi
źródło
1
W przypadku migawek systemu plików można użyć LVM zamiast ext3 lub ext4.
Flimm
@Flimm, teraz możesz, chociaż to nie działa bardzo dobrze i wymaga skonfigurowania LVM podczas instalacji.
psusi
3

Podczas ważnej aktualizacji klonuję dysk za pomocą Clonezilla . Nagraj go na płycie CD, miej zapasowy (zewnętrzny) dysk twardy i postępuj zgodnie z instrukcjami na Clonezilla LiveCD. Wybierz partition-imagetryb, który zajmuje najmniej miejsca.

Jeśli uważasz, że zepsułeś system (lub chcesz cofnąć zmiany), po prostu uruchom dysk Clonezilla LiveCD, wybierz obraz na (zewnętrznym) dysku twardym i przywróć go. Ponieważ te obrazy są dosłowną kopią każdego bitu na dysku, może to potrwać kilka godzin w zależności od szybkości dysku i szybkości połączenia (połączenie między danymi, zwykle zewnętrznym dyskiem twardym USB a komputerem).

Nawiasem mówiąc, nazywa się to metodą tworzenia kopii zapasowych.

Lekensteyn
źródło
3

Możesz łatwo zainstalować starszą wersję danego pakietu (obniżenie wersji) za pomocą apt lub dpkg . Problemem jest znalezienie starszej wersji pakietu, ponieważ często znikają one z puli i kopii lustrzanych podczas aktualizacji.

Jeśli zainstalujesz pakiet z instalacyjnego dysku CD lub nieaktualnego kopii lustrzanej lub pamięci podręcznej, będziesz musiał również trzymać go przypiętego do starej wersji, aby nie został zaktualizowany, dopóki na to nie zezwolisz. Co oznacza, że ​​musisz uważać na aktualizacje i testować je, aż problem zostanie rozwiązany. Jest to oczywiście problem, ponieważ w międzyczasie (może na zawsze) pozostaniesz z nie naprawionym, być może niepewnym pakietem. Oznacza to, że każdy użytkownik z jakimś problemem systemowym pozostanie w jakimś losowym stanie, dopóki nie będzie w stanie go rozwiązać.

Całe oprogramowanie również nie jest kompatybilne z poprzednimi wersjami, więc starsza wersja czegoś może nie działać poprawnie, gdy jest zasilana nowszymi plikami konfiguracyjnymi lub danymi. Oczywiście nie jest to możliwe do rozwiązania, chyba że cofniesz wszystkie dane użytkownika do stanu sprzed aktualizacji.

Byłoby wspaniale, gdyby był na to sposób, ale jest to ogromnie problematyczne. Każdy, kto uważa, że ​​istnieje spójne rozwiązanie, powinien napisać propozycję i zaprosić do komentarza lub, jeszcze lepiej, przygotować dowód koncepcji (kod, skrypt, dokument). Trollowanie i marudzenie nie jest konstruktywne.

Ponieważ nie ma czystego rozwiązania technicznego, większość oprogramowania jest opracowywana (i zintegrowana) z mentalnością „jedyną drogą do przodu”. Próba zarządzania przestarzałymi wersjami to strata czasu każdego. Znalezione problemy zostały naprawione jak najszybciej w nowszych wersjach. Jako drobne rozwiązanie chciałbym zobaczyć gdzieś archiwum poprzednich wersji pakietów, które może być tymczasowo obejrzane.

W międzyczasie możesz zgłaszać błędy i nie oczekiwać, że najnowsze oprogramowanie nigdy nie zawiedzie. Po znalezieniu poprawki powinna ona znajdować się w następnej aktualizacji. Deweloperzy to ludzie (głównie) i dlatego omylni. Komputery są wybredne i pełne niesamowitej różnorodności i detali. Defensywnie utrzymywane systemy wykorzystujące dobrze obsługiwane komponenty i stabilną, zintegrowaną dystrybucję oprogramowania mogą być bardzo stabilne, nie stając się niepewnymi lub niemożliwymi do aktualizacji.

XTL
źródło