Jak wykluczyć określone pakiety z instalacji za pomocą apt-get?


12

Chciałbym wykluczyć określone pakiety z instalacji apt-get, to znaczy zainstalować metapakiet bez listy konkretnych pakietów, najlepiej z jednym wywołaniem apt-get.

Na przykład w wierszu polecenia Ubuntu 14.04 LTS instaluję środowisko pulpitu MATE. W 14.04 LTS MATE nie jest oficjalnym smakiem, więc dodaję PPA:

sudo apt-get install software-properties-common # need them for 'apt-add-repository'
sudo apt-add-repository ppa:ubuntu-mate-dev/ppa
sudo apt-add-repository ppa:ubuntu-mate-dev/trusty-mate
sudo apt-get update

następnie instalując:

sudo apt-get install xorg mate-core --no-install-recommends

Nawet bez zalecanymi dodatkami, mate-coreinstaluje emulatory terminali: 3 xterm, uxterma mate-terminal ten ostatni brakuje odpowiednich czcionek natomiast zainstalowany w tym minimalnej konfiguracji.

Załóżmy, że zdecyduję, że 3 programy terminalowe byłyby zbyt liczne i chciałbym zainstalować xorgi mate-core bez xterm i mate-terminal. mógłbym zrobić

sudo apt-get install xorg mate-core --no-install-recommends
sudo apt-get purge xterm mate-terminal

ale czy można to zrobić za jednym razem? Czy jest jakaś składnia taka jak

sudo apt-get install xorg mate-core --without xterm mate-terminal

Czy na pewno można usunąć xtermi mate-terminal? W 15.04 mate-terminaljest twardą zależnością mate-desktop-environment-core, która jest twardą zależnością mate-core, i przypuszczam, że PPA mate-terminalnie zapewnia x-terminal-emulator(czego dostarcza pakiet w 15.04).
muru

Może masz rację , chyba że gwiazdka obok nazw pakietów oznacza tutaj coś wyjątkowego. Zaskakująco mało miejsca zostanie uwolnionych. W każdym razie moje pytanie dotyczy usunięcia tego, co można usunąć, powiedzmy, XTerma może UXTerm(nie jestem pewien, jaka jest nazwa tego drugiego pakietu)
Nickolai Leschov


@Seth Niezupełnie: Chciałbym, jeśli nie byłoby trochę jak składniasudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov

Jeśli używasz aptitude(lub jakiegoś graficznego menedżera pakietów), możesz (de) wybrać, które pakiety mają zostać zainstalowane, a jeśli jeden z nich spowoduje przerwanie zależności, (zwykle) zostanie podane wyjaśnienie.
saiarcot895

Odpowiedzi:


7

Tak, kolega-core zależy na mate-desktop-environment-coreco z kolei zależy na mate-terminal. Zależy nie może zostać łatwo uszkodzony. Ani też apt-getnie aptitudeobsługuje opcji --withoutlub --exclude, a „trzymanie” pakietów nie pomoże:

$ echo "mate-terminal hold" | sudo dpkg --set-selections
$ sudo apt-get install mate-core
[...]
Nie można zainstalować niektórych pakietów ...
Następujące pakiety mają niespełnione zależności:

Jasne, można użyć dpkg --force-dependsdo zainstalowania pakietu, ale może nie tego chcesz.

Możliwe byłoby wypełnienie Depends:flagi atrapą:

$ sudo apt-get install ekwiwalenty
$ equivs-control mate-terminal
$ vi mate-terminal
Sekcja: różne
Priorytet: opcjonalny
Wersja Standardowa: 3.9.2
Pakiet: mate-terminal
Wersja: 1.8.0
Opis: Pakiet atrapy dla terminala partnera
: x

$ equivs-build mate-terminal
$ sudo dpkg -i mate-terminal_1.8.0_all.deb

Teraz mate-corepowinno być możliwe zainstalowanie w / o mate-terminal. Powtórz to samo, aby wykluczyć inne pakiety.

Trzeba przyznać, że to spory wysiłek i --withoutopcja byłaby dobra. Być może błąd listy życzeń można otworzyć, aby zapewnić taką funkcjonalność w przyszłości, ale wątpię, czy to zostanie zaimplementowane.

Bardziej realistyczną opcją byłoby jednak zwrócenie się do właściciela PPA o dostarczenie kolejnego pakietu meta dla MATE z mniejszymi Dependszestawami pakietów.


4

Jeśli używasz aptitudelub graficznego menedżera pakietów (Synaptic itp.), Możesz odznaczyć, które pakiety powinny zostać zainstalowane, o ile nie spowoduje to problemu zależności.

W przypadku aptitudeprzed zainstalowaniem pakietu (w widoku graficznym) pokaże on, dlaczego instalowany jest pakiet zależny. W moim przypadku używam KDE, więc nie mam żadnych pakietów MATE. Jeśli każę to zainstalować mate-core, otrzymuję następujące informacje:

wprowadź opis zdjęcia tutaj

Zauważ, że mate-corejest oznaczony jako instalowany ręcznie i instalowanych jest wiele innych pakietów. W przypadku mate-terminalpakietu na dole jest napisane: „ mate-desktop-environment-core[wszechświat] zależy od mate-terminal(> = 1.0.0)”. Przechodząc do wpisu mate-desktop-environment-core,

wprowadź opis zdjęcia tutaj

mate-core[wszechświat] zależy od mate-desktop-environment-core(> = 1.8.0 + 9)”. Właśnie dlatego mate-terminaljest instalowany.

Jeśli zamiast tego instalowany jest zalecany pakiet (zamiast czegoś zależnego od innego pakietu), aptitudepoinformuje cię o tym i możesz powiedzieć, aby nie instalował tego pakietu bez żadnych zepsutych zależności. Na przykład:

wprowadź opis zdjęcia tutaj


2

Inna metoda

Pobierz główny pakiet, który zależy od drugiego. Wyodrębnij pakiet, usuń niechciane zależności, przepakuj go. Teraz otwórz nowy pakiet za pomocą instalatora pakietu gdebi . Zainstaluje dla ciebie nowe zależności.

  • Lista zależności znajduje się w DEBIAN / control -> zależy
  • Aby uzyskać pomoc dotyczącą zastępowania deb, zobacz moją odpowiedź na temat tworzenia PPA

0

Istnieje specjalna aptskładnia dla scenariuszy, takich jak ten: dołączanie myślnikiem (znak minus) do pakietu usunie / nie zainstalować go, więc najbliżej swoich sudo apt-get install xorg mate-core --without xterm mate-terminal Is sudo apt-get install xorg mate-core xterm- mate-terminal- (zauważony na /ubuntu//a/1011439/182923 )

W tym przypadku to nie pomoże, bo na to wpadniesz

The following packages have unmet dependencies:
 mate-desktop-environment-core : Depends: mate-terminal (>= 1.20) but it is not going to be installed                                                                        
E: Unable to correct problems, you have held broken packages.

ale wydaje się, że jest to odpowiedź na konkretne pytanie. Dla porównania, ten krzyż post.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.