Jak zabronić instalacji określonego pakietu?

27

Czy mogę skonfigurować Ubuntu, aby nigdy nie instalował określonego pakietu, nawet jeśli jest on wymagany przez inny pakiet, który instaluję?

Ivan
źródło
Nie można zainstalować pakietu bez jego zależności, chyba że chcesz uszkodzić system.
enzotib
2
@enzotib, przede wszystkim się mylisz: zależności pakietów mogą być zbędne. istnieje wiele przykładów lub możesz zainstalować odpowiednik wymaganego pakietu w inny sposób (na przykład mam zainstalowany OpenJDK-6, ponieważ jest on wymagany przez wszystkie aplikacje Java w repozytoriach, ale tak naprawdę nigdy nie używam OpenJDK-6, ja skonfiguruj wszystko, aby zamiast tego używać openjdk-7 lub Oracle JDK 7). A po drugie - nie powiedziałem, że chcę zainstalować pakiet zależny - może po prostu wyrzucić błąd w tym przypadku, chcę tylko upewnić się, że konkretny pakiet i tak nigdy nie zostanie zainstalowany.
Ivan
Jest podobne pytanie .
Nimmermehr,

Odpowiedzi:

28

Podobnie jak w Debianie, możemy używać apt-pinning do kontroli wersji i instalacji również w Ubuntu .

Aby zablokować instalację danego pakietu, możemy wstawić następujące wiersze /etc/apt/preferences

Package: <nameofpackage>
Pin: origin ""
Pin-Priority: -1

Nadając ujemny priorytet temu pinowi, zablokujemy instalację <nameofpackage>z bliżej nieokreślonego źródła, tj. Naszego lokalnego repozytorium. Oczywiście możemy użyć apt-pinning do przypięcia określonej wersji pakietu lub określonego źródła.

Przed kontynuowaniem zaleca się przeczytanie dokumentacji podanej powyżej oraz strony podręcznika z apt_preferences, ponieważ błędy w tych plikach nie są sprawdzane przez apt i jeśli wystąpią, mogą uszkodzić zarządzanie pakietami.

Aby znaleźć alternatywę i zapobiec aktualizacji danego pakietu, zobacz:

Takkat
źródło
Czy wiesz, czy to może działać w Ubuntu 12.04? Innym pytaniem jest zgłaszanie, że może to nie działa.
Lucio
1
@Lucio: pewnie - nadal działa; właśnie przetestowałem go do pracy w 12.10.
Takkat
3
W linii Package:można wyświetlić wiele pakietów oddzielonych spacjami, na przykład: Pakiet: metacity metacity-common libmetacity-private0a. (Wygląda na to, że takie wzory jak Package: metacity * są również możliwe)
Volker Siegel
5
W Ubuntu 16.04 Pin: origin ""nie działało dla mnie, ale działało Pin: release *.
barbaz
3

W debianie możesz zablokować pakiet, który nie będzie już aktualizowany

# echo name_of_package hold | dpkg --set-selections

ale nie jestem pewien, czy możesz zabronić

maniat1k
źródło
Właśnie wypróbowałem to na Ubuntu 15.10 (przebiegle) i nie zablokowało pakietu; właśnie ostrzegł mniepackage not in database
Brent Baccala
2

Mam paczkę, która ciągle się wślizguje i psuje git

sudo apt-mark hold libgnutls-deb0-28

powinien zapobiec instalacji tego pakietu

Alexx Roche
źródło