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?
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!
Vous pouvez changer les dépendances d'un paquet deb comme ceci:
ar x golden-linux.deb
(créera par exemple trois fichiers: debian-binary control.tar.gz data.tar.gz)tar xzf control.tar.gz
(créera: postinst postrm preinst prerm md5sums control)control
(utilisez un éditeur de texte)tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
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!
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
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
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
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
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é.
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
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.
Pour cela, vous pouvez simplement installer nail que je ne pense pas avoir ces dépendances?
apt-get install nail