web-dev-qa-db-fra.com

Comment obtenir apt-get pour ignorer certaines dépendances?

Comment puis-je faire en sorte qu'apt-get ignore certaines dépendances? Par exemple, je voulais installer mailx pour pouvoir l'utiliser pour envoyer des e-mails à partir de scripts cron/d'outils de génération de rapports. Cependant, l'installation de mailx installe également exim4 et un tas de dépendances (j'ai déjà installé Postfix) dont je n'ai pas vraiment besoin et dont je suppose que mailx peut également se passer.

Comment puis-je ignorer certaines dépendances tout en utilisant apt-get, car c'est un bon outil?

93
FrancisV

Solution simple et facile: spécifiez simplement les paquets indésirables avec un - Supplémentaire après chacun d'eux.

Exemple sans le commutateur -:

root@debian:~# apt-get install bsd-mailx 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  exim4-base exim4-config exim4-daemon-light liblockfile-bin liblockfile1
[...]

Exemple utilisant le commutateur pour éviter d'installer exim4-base. Remarquez le - À la fin:

root@debian:~# apt-get install bsd-mailx exim4-base-
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package 'exim4-base' is not installed, so not removed
The following extra packages will be installed:
  liblockfile-bin liblockfile1 ssmtp
[...]

Comme vous pouvez le voir, apt-get N'essaie plus d'installer le package exim4-base, Et il n'essaie pas d'installer ses différentes dépendances (exim4-config Etc.).

Et si vous vous trompiez et que vous aviez besoin de cette dépendance exim4-base Après tout, vous pouvez simplement apt-get install Plus tard!

51
Jealie

Vous pouvez changer les dépendances d'un paquet deb comme ceci:

  1. Déballez deb: ar x golden-linux.deb (créera par exemple trois fichiers: debian-binary control.tar.gz data.tar.gz)
  2. Déballer l'archive de contrôle: tar xzf control.tar.gz (créera: postinst postrm preinst prerm md5sums control)
  3. Correction des dépendances dans control (utilisez un éditeur de texte)
  4. Remballez control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Remballez deb: ar rcs newpackage.deb debian-binary control.tar.gz data.tar.gz (ordre important! Voir [Note])

[Note]: dpkg ne serait pas capable de lire rapidement les métadonnées d'un paquet s'il devait chercher où se terminait la section de données!

57
Janus Troelsen

Après avoir installé le package avec le --ignore-depends option, allez et modifiez le /var/lib/dpkg/status fichier, et supprimez toute dépendance que vous pensez n'est pas nécessaire. Soyez très prudent. Pour un dep. être requis, il est plus que probable ÊTRE obligatoire

34
Manolis

Vous pouvez essayer le --nodeps drapeau avec apt-get.
Ou téléchargez le package et installez-le à l'aide de dpkg avec l'option --ignore-depends.

Par exemple, si vous souhaitez installer le package foo sans dépendance bar:

dpkg --ignore-depends=bar -i foo_1.2.3_AMD64.deb
26
Bart De Vos

Puisque vous avez installé postfix depuis la source, vous devez installer un paquet "factice" qui satisfera la dépendance de mail-transport-agent de mailx (ou bsd-mailx). Le paquet "equivs" dans debian existe pour créer un tel paquet factice que vous pouvez installer pour dire à dpkg "que cette dépendance est satisfaite"

La raison pour laquelle dire à dpkg d'ignorer simplement les dépendances n'est pas une bonne solution, c'est que vous dites seulement à dpkg/apt de l'ignorer pour une seule transaction, vous ne pouvez pas lui dire d'ignorer les dépendances pour toujours. Chaque fois que vous utilisez apt, il vérifie les dépendances des packages all

15
stew

Une autre façon de modifier manuellement les dépendances est la suivante:

apt-get download yourpackage
dpkg-deb -x yourpackage.deb PackageFolder
dpkg-deb --control yourpackage.deb PackageFolder/DEBIAN
vim PackageFolder/DEBIAN/control
dpkg -b PackageFolder yourpackage2.deb
apt-get install ./yourpackage2.deb
7
AndrewHarvey

Je cherchais cette option sur un serveur Ubuntu 12.04 exécutant Xen. Dans mes domaines, j'utilise le noyau -virtual, et apt a constamment essayé d'installer grub avec chaque mise à niveau du paquet du noyau. Grub n'est cependant pas nécessaire à l'intérieur du domU lors de l'utilisation de p [yv] grub.

Je cherchais également l'option -nodeps pour apt-get, mais cela n'a pas fonctionné, donc j'ai fini par désinstaller/purger grub * après chaque mise à niveau du noyau.

Après tout, vraiment lecture une page de manuel aide parfois - il s'avère qu'une option similaire apt-get sur 12.04 semble être --no-install-recommend, qui fonctionne réellement dans ce cas, car grub est répertorié comme "recommandé" dans les informations sur le package (je suppose que ce n'est donc pas une "vraie" dépendance?).

J'ajoute ceci ici parce que dans mon cas, cela a résolu un problème similaire, et le conseil pour '--no-install-recommend' n'était pas encore mentionné.

7
memartin

Vous pouvez télécharger le package avec apt-get, puis l'installer avec dpkg, en répertoriant manuellement la dépendance que vous souhaitez ignorer.

Par exemple, si je veux télécharger mypackage mais cela dépend de libperl5.14 et je ne veux pas installer libperl5.14 car j'ai une version différente, je peux ignorer cette dépendance comme suit:

apt-get download mypackage
dpkg -i --ignore-depends=libperl5.14 mypackage.deb
7
A.Badger

Sur mon système Debian, bsd-mailx dépend en fait de default-mta | mail-transport-agent (vous pouvez vérifier de quoi dépend un paquet avec apt-cache show <pkg> pour quoi que ce soit dans l'archive ou dpkg -s <pkg> pour les packages installés.

Il se peut que votre paquet postfix n'ait pas Provides: mail-transport-agent si apt ne se rend pas compte que vous avez installé un MTA. Il vaudrait la peine de déposer un bogue pour cela s'il s'agit d'un package officiel.

2
Andy

Pour cela, vous pouvez simplement installer nail que je ne pense pas avoir ces dépendances?

apt-get install nail
1
jamespo