web-dev-qa-db-fra.com

Comment exclure des paquets spécifiques de l'installation avec apt-get?

Je souhaite exclure certains packages de l'installation avec apt-get, c'est-à-dire installer un métapaquet sans la liste des packages spécifiques, de préférence avec un seul appel de apt-get.

Par exemple, dans Ubuntu 14.04 LTS en ligne de commande, j'installe MATE environnement de bureau. Dans 14.04 LTS MATE n'est pas une saveur officielle, j'ajoute donc un 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

puis installer:

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

Même sans les extras recommandés, mate-core installe 3 émulateurs de terminal: xterm, uxterm et mate-terminal , ce dernier n’ayant pas les polices appropriées lorsqu’il est installé dans cette configuration minimale.

Supposons que je décide que 3 programmes de terminal seraient trop nombreux et que je voudrais installer xorg et mate-corewithoutxterm et mate-terminal. je pourrais faire

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

mais est-il possible de faire cela en une fois? Y a-t-il une syntaxe comme

Sudo apt-get install xorg mate-core --without xterm mate-terminal
11
Nickolai Leschov

Donc, mate-core dépend de mate-desktop-environment-core qui à son tour dépend sur mate-terminal. A dépend ne peut pas être cassé facilement. Ni apt-get ni aptitude ne prend en charge une option --without ou --exclude et le fait de "conserver" les packages ne vous aidera pas:

 $ echo "mate-terminal hold" | Sudo dpkg --set-selections 
 $ Sudo apt-get install mate-core 
 [...] 
 Certains paquets n'ont pas pu être installés ... 
 Les paquetages suivants ont des dépendances non satisfaites: 

Bien sûr, on peut utiliser dpkg --force-depends pour installer un paquet, mais ce n'est peut-être pas ce que vous voulez.

Une possibilité serait de remplir l'indicateur Depends: avec un package factice:

 $ Sudo apt-get install equivs 
 $ Equivs-control mate-terminal 
 $ Vi mate-terminal 
 Section: misc 
 Priorité: optionnel 
 Normes - Version: 3.9.2 
 Colis: terminal compagnon 
 Version: 1.8.0 
 Description: Paquet factice pour terminal maté 
. : x 
 
 $ équivs-build mate-terminal 
 $ Sudo dpkg -i mate-terminal_1.8.0_all.deb 

mate-core devrait maintenant pouvoir installer wso mate-terminal. Répétez la même chose pour les autres paquets à exclure.

Certes, c’est tout un effort et une option --without serait Nice. Peut-être qu'un bug de la liste de souhaits peut être ouvert pour fournir une telle fonctionnalité dans le futur, mais je doute que cela soit mis en œuvre.

Cependant, une option plus réaliste consisterait à demander au propriétaire de PPA de fournir un autre méta-paquetage pour MATE avec des paquets inférieurs à Depends.

6
ckujau

Si vous utilisez aptitudeou un gestionnaire de packages graphique (Synaptic, etc.), vous pouvez alors désélectionner les packages à installer tant que cela ne pose pas de problème de dépendance.

Dans le cas de aptitudename__, avant d'installer un package (dans la vue graphique), il vous montrera pourquoi un package dépendant est en cours d'installation. Dans mon cas, j'utilise KDE et je n'ai donc aucun paquet MATE. Si je lui dis d'installer mate-core, j'obtiens ce qui suit:

enter image description here

Notez que mate-core est marqué comme étant installé manuellement et de nombreux autres packages sont en cours d'installation. Pour le paquet mate-terminal, en bas, il est écrit "mate-desktop-environment-core [univers] dépend de mate-terminal (> = 1.0.0)". Passer à l'entrée pour mate-desktop-environment-core,

enter image description here

"mate-core [univers] dépend de mate-desktop-environment-core (> = 1.8.0 + 9)". C'est pourquoi mate-terminal est en cours d'installation.

Si, au lieu de cela, un paquet recommandé est en cours d'installation (plutôt que quelque chose qui dépend d'un autre paquet), aptitudevous le dira et vous pouvez lui dire de ne pas installer ce paquet sans aucune dépendance cassée. Par exemple:

enter image description here

3
saiarcot895

Une autre méthode

Téléchargez le package principal qui dépend de l'autre. Extrayez le paquet, supprimez les dépendances indésirables, remballez-le. Ouvrez maintenant le nouveau package avec gdebi l'installateur du package. Il installera de nouvelles dépendances pour vous.

  • La liste des dépendances peut être trouvée à DEBIAN/ control -> dépend
  • Pour obtenir de l'aide sur le repacing de deb, voyez ma réponse sur comment créer un PPA
2
totti

Il existe une syntaxe spéciale apt pour des scénarios tels que: ajouter un trait d'union (signe moins) à un paquetage supprimera/ne l'installera pas, ainsi le plus proche de votre Sudo apt-get install xorg mate-core --without xterm mate-terminal est Sudo apt-get install xorg mate-core xterm- mate-terminal- (repéré sur https://askubuntu.com/a/1011439/182923 )

Dans ce cas, cela n’aidera pas, car vous rencontrerez

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.

mais cela semble être la réponse à votre question précise. Donc, pour référence, ce cross-post.

0
eMPee584