Jak zapobiec aktualizacji określonego pakietu?

331

Z powodu błędu # 693758 chciałbym zapobiec apt-get upgrade i Update Manager z aktualizacji pakietu "libgtk2.0-0".

Jak można to osiągnąć?

    
zadawane Ivan 23.12.2010, 18:29
źródło

12 odpowiedzi

484

Trzymanie

Istnieją cztery sposoby zatrzymywania pakietów: za pomocą dpkg, apt, aptitude lub dselect.

dpkg

Zawieś pakiet:

echo "<package-name> hold" | sudo dpkg --set-selections

Usuń wstrzymanie:

echo "<package-name> install" | sudo dpkg --set-selections

Wyświetl status pakietów:

dpkg --get-selections

Wyświetla status pojedynczego pakietu:

dpkg --get-selections | grep "<package-name>"

apt

Zatrzymaj pakiet:

sudo apt-mark hold <package-name>

Usuń wstrzymanie:

sudo apt-mark unhold <package-name>

dselect

Za pomocą dselect wejdź do ekranu [S] elect, znajdź pakiet, który chcesz zatrzymać w swoim obecnym stanie i naciśnij = lub H . Zmiany wejdą w życie natychmiast po wyjściu z ekranu [S] elekt.

Poniższe podejścia są ograniczone, ponieważ blokowanie / trzymanie pakietu w aptitude lub synaptic nie ma wpływu na apt-get / apt.

aptitude

Zatrzymaj pakiet:

sudo aptitude hold <package-name>

Usuń wstrzymanie:

sudo aptitude unhold <package-name>

Blokowanie za pomocą Menedżera pakietów Synaptic

Przejdź do Menedżera pakietów Synaptic (System > Administracja > Menedżer pakietów Synaptic).

Kliknij przycisk wyszukiwania i wpisz nazwę pakietu.

Po znalezieniu pakietu wybierz go i przejdź do menu Pakiet i wybierz Zablokuj wersję .

Ten pakiet nie będzie teraz wyświetlany w menedżerze aktualizacji i nie będzie aktualizowany.

    
odpowiedział hhlp 23.12.2010, 19:04
źródło
43

Aby zawiesić pakiet "foo":

echo "foo hold" | dpkg --set-selections

W twoim przypadku zamierzamy zawiesić wino:

sudo -i
echo "wine hold" | dpkg --set-selections

Aby usunąć wstrzymanie:

sudo -i
echo "wine install" | dpkg --set-selections
    
odpowiedział Panther 08.12.2011, 21:15
źródło
28

Szukałem tego samego i po wielu badaniach odkryłem, że za pomocą następującej składni można zakazać jednej konkretnej wersji, ale pozwolić na następną aktualizację:

Package: compiz-plugins-main
Pin: version 1:0.9.7.0~bzr19-0ubuntu10.1
Pin-Priority: -1

Przechodzi do pliku / etc / apt / preferences.

    
odpowiedział soger 22.07.2013, 13:13
źródło
19

Zainstaluj synaptic , używając sudo apt-get install synaptic .

Uruchom używając gksudo synaptic i na polu wyszukiwania znajdź pakiet, który chcesz zablokować, tj: gedit

ZmenupaczkiwybierzWersjablokady:

I to wszystko, wersja aktualnie zainstalowana w czasie blokady pozostanie zainstalowana nawet podczas aktualizacji.

    
odpowiedział Bruno Pereira 08.12.2011, 21:06
źródło
16

Zapobieganie instalowaniu pakietu nazywa się "pakietem" i jest bardzo proste:

echo package_name hold | dpkg --set-selections

... gdzie * nazwa_pakietu * to nazwa pakietu, który chcesz uniemożliwić instalacji.

Uwaga: powyższe polecenie przyjmuje uprawnienia root. Innymi słowy, prawdopodobnie będziesz musiał wpisać sudo su przed uruchomieniem.

    
odpowiedział RobotHumans 05.02.2011, 02:18
źródło
5

Od pewnego czasu apt-get jest zamieniany na apt , więc na przykład chcę zapobiec aktualizacji Firefoksa do wersji powyżej 56, ponieważ wiele dodatków, takich jak " Grupy zakładek " nie działają już z nowym Firefoksem 57 (patrz" Aktualizacja WebExtensions ").

Możliwe jest posiadanie więcej niż jednego pakietu za pomocą jednego polecenia i użycie symboli wieloznacznych.

Zapobiegaj aktualizacji Firefoksa

sudo apt-mark hold firefox firefox-locale-*

Jeśli powinieneś zrobić to, aby je później zatrzymać, będzie to polecenie:

sudo apt-mark unhold firefox firefox-locale-*
    
odpowiedział rubo77 19.11.2017, 08:45
źródło
4

I synaptic możesz zamrozić wersję konkretnego pakietu Nie jestem w 100% pewien, czy to zmieni apt-get, ale na pewno zatrzyma menedżera aktualizacji.

Aby zatrzymać pakiet, wybierz go w synaptyce, a następnie otwórz menu pakietu i wybierz opcję zatrzymania.

Mam nadzieję, że to pomoże

edit: To pytanie 16668 dotyczy podobnej sytuacji

    
odpowiedział Allan 23.12.2010, 18:35
źródło
3

Wszystko, co chciałeś wiedzieć o "trzymaniu" i "przypinaniu" pakietów do konkretnych wersji: link

    
odpowiedział Jeff Ferland 23.12.2010, 22:09
źródło
3

Zobacz błędy # 75332 , # 158981 i # 72806 .

Podsumowanie polega na tym, że wstrzymanie na poziomie apt-get / aptitude nie powoduje zatrzymania statusu w dpkg (patrz szczególnie błąd 72806), a update-manager odczytuje status z dpkg.

obejście jest uruchamiane jako root: echo "package hold" | dpkg --set-selections

    
odpowiedział jasper 26.11.2012, 08:24
źródło
1

Jeśli masz zainstalowany Synaptic, możesz wybrać pakiet i użyć menu Package - > Zablokuj wersję, aby zapobiec aktualizacji.

Możesz zainstalować Synaptic z sudo apt-get install synaptic. Osobiście uważam, że jest to bardziej przydatne niż Centrum Oprogramowania ... znowu jestem dość stara. :)

    
odpowiedział dinchamion 08.12.2011, 21:06
źródło
1

Możesz użyć na aptitude "specyficznego nadpisania", na przykład:

aptitude reinstall ~i oracle-java8-jre:

To jest jednorazowe użycie (nie jest przechowywane dla przyszłych reinstalacji), zachowaj określone zastąpienie, aby ponownie zainstalować wszystkie pakiety w systemie, ale nie oracle-java8-jre.

Jeśli użyjesz określonego override, pakiet będzie na chwilę w stanie, w jakim aptitude nie będzie próbował go zainstalować.

Bardzo dobra rzecz, jeśli uważasz, że Twój system został skompromitowany w jakiś sposób.

    
odpowiedział cabonamigo 18.05.2017, 18:27
źródło
0

Od czasu do czasu można wstrzymać wszystkie pakiety aktualnie zainstalowane. Oto jak.

Najpierw zapisz bieżący stan, aby cofnąć:

dpkg --get-selections > current_selections.txt

Następnie, aby zatrzymać wszystkie pakiety:

dpkg --get-selections | sed -r "s/\tinstall/hold/" |dpkg --set-selections

Na koniec, gdy chcesz przywrócić poprzedni stan:

dpkg --set-selections < current_selections.txt

Jedną z takich sytuacji może być tworzenie migawek VM lub Amazon AMI w celu migracji z QA do środowiska produkcyjnego.

    
odpowiedział JVW 14.01.2015, 20:46
źródło

Przeczytaj inne pytania na temat tagów