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

12

Je voudrais exclure des packages spécifiques 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 une invocation de apt-get.

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

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

Même sans les extras recommandés, mate-coreinstalle 3 émulateurs: xterm, uxtermet mate-terminal , celui - ci manque de 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 j'aimerais installer xorget mate-core sans xterm 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 le faire en une seule fois? Y a-t-il une syntaxe comme

sudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov
la source
Voulez-vous vraiment supprimer xtermet mate-terminal? En 15.04, mate-terminalest une dépendance dure de mate-desktop-environment-core, qui est une dépendance dure de mate-core, et je suppose que le PPA mate-terminalne fournit pas x-terminal-emulator(ce que fait le paquetage en 15.04).
muru
Peut-être que vous avez raison , à moins qu'un astérisque à côté des noms de packages ne signifie quelque chose de spécial ici. De plus, étonnamment peu d'espace va être libéré. Quoi qu'il en soit, ma question concerne la suppression de tout ce qui peut être supprimé, disons, XTermet peut-être UXTerm(je ne suis pas sûr du nom du package pour ce dernier)
Nickolai Leschov
1
Est-ce ce que vous recherchez? askubuntu.com/questions/75895/…
Seth
@Seth Pas tout à fait: j'aimerais qu'il y ait une syntaxe commesudo apt-get install xorg mate-core --without xterm mate-terminal
Nickolai Leschov
Si vous utilisez aptitude(ou un gestionnaire de packages graphique), vous pouvez (dé) sélectionner les packages à installer, et si l'un entraîne une dépendance cassée, une explication sera (généralement) donnée.
saiarcot895

Réponses:

7

Ainsi, noyau de compagnon dépend de mate-desktop-environment-corequi à son tour dépend de mate-terminal. Une dépendance ne peut pas être brisée facilement. Ni apt-getne aptitudeprend en charge une option --withoutou --excludeet "conserver" les packages n'aidera pas:

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

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

Une possibilité serait de remplir le Depends:drapeau avec un paquet factice:

$ sudo apt-get install equivs
$ equivs-control mate-terminal
$ vi mate-terminal
Section: divers
Priorité: facultative
Version des normes: 3.9.2
Paquet: mate-terminal
Version: 1.8.0
Description: Paquet factice pour terminal de compagnon
:X

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

Maintenant mate-coredevrait être en mesure d'installer sans mate-terminal. Répétez la même chose pour les autres packages à exclure.

Certes, c'est tout un effort et une --withoutoption serait bien. Peut-être qu'un bogue de liste de souhaits peut être ouvert pour fournir de telles fonctionnalités à l'avenir, mais je doute que cela soit implémenté.

Cependant, une option plus réaliste serait de demander au propriétaire du PPA de fournir un autre méta-package pour MATE avec des Dependspackages de moindre importance .

ckujau
la source
4

Si vous utilisez aptitudeou un gestionnaire de package graphique (Synaptic, etc.), vous pouvez désélectionner les packages à installer tant qu'il ne provoque pas de problème de dépendance.

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

entrez la description de l'image ici

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

entrez la description de l'image ici

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

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

entrez la description de l'image ici

saiarcot895
la source
2

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 le programme d'installation du package gdebi . Il installera pour vous de nouvelles dépendances.

  • La liste des dépendances se trouve sur DEBIAN / control -> dépend
  • Pour obtenir de l'aide sur le remplacement de deb, voir ma réponse sur la façon de créer un PPA
totti
la source
0

Il existe une aptsyntaxe spéciale pour des scénarios comme celui-ci: ajouter un trait d'union (signe moins) à un package le supprimera / ne l'installera pas, donc le plus proche du vôtre 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 /ubuntu//a/1011439/182923 )

Cela n'aidera pas dans ce cas, 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 spécifique. Donc pour référence, ce cross-post.

eMPee584
la source