Comment faire en sorte qu'apt-get ignore certaines dépendances?

86

Comment faire en sorte qu'apt-get ignore certaines dépendances? Par exemple, je voulais installer mailx afin de pouvoir l'utiliser pour envoyer des courriers électroniques à partir de scripts cron / d'outils générant des rapports. Cependant, installer mailx installe également exim4 et tout un tas de dépendances (Postfix est déjà installé), ce dont je n’ai pas vraiment besoin et dont mailx peut aussi vivre sans.

Comment ignorer certaines dépendances mais utiliser quand même apt-get car c'est un bel outil?

FrancisV
la source
comment est installé postfix? via le paquet debian? ou avez-vous installé postfix à partir des sources?
ragoût
Oui, Postfix a été installé à partir de la source
FrancisV
3
Le paquet mailx de Debian uniquement 'recommande' exim4, ne l'exige pas. Si vous ne souhaitez pas installer les packages recommandés, ajoutez simplement APT::Install-Recommends "false";à votre fichier apt.conf.
Ruief
J'ai trouvé une réponse satisfaisante à cela à l'adresse unix.stackexchange.com; unix.stackexchange.com/a/404449/23542
artfulrobot

Réponses:

45

Solution simple et facile: il suffit de spécifier les paquets indésirables avec un extra -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 d'utilisation du commutateur pour éviter l'installation exim4-base . Notez 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 constater, apt-getn’essaye plus d’installer le exim4-basepaquet, ni d’installer ses différentes dépendances ( exim4-configetc).

Et si vous aviez tort et que vous aviez besoin de cette exim4-basedépendance, vous pourrez le faire apt-get installplus tard!

Jealie
la source
5
C'est le meilleur moyen d' éviter d'installer une dépendance spécifique. Les autres réponses évitent d’installer toutes les dépendances, désinstallent les dépendances après leur installation ou suggèrent de modifier péniblement des packages.
Neil
1
C'était exactement ce dont j'avais besoin! (installation gnupg2sans pinentry-gtk2pour éviter X deps)
lapo
C’est vraiment formidable, cependant, dans mon cas, apt-get refuse d’installer le paquet avec des "dépendances non remplies" (que j’ai spécifié en utilisant cette méthode). Spécifiquement un paquet de documentation de 100 mégaoctets dont je ne me soucie pas.
Rolf
3
Fonctionne uniquement avec des dépendances optionnelles, pas avec celles requises. Erreur rmessage: Depends: xxx but it is not going to be installed. Vous pouvez ignorer tous les forfaits optionnels avecapt-get install --no-install-recommends PACKAGE
koppor
En outre, ne fonctionne pas avec les packages virtuels. Mais voir unix.stackexchange.com/a/404449/23542
artfulrobot le
55

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

  1. Décompressez deb: ar x golden-linux.deb(créera trois fichiers: debian-binary control.tar.gz data.tar.gz)
  2. Décompresser l'archive de contrôle: tar xzf control.tar.gz(créera: postinst postrm preinst prerm md5sums control)
  3. Corrige les dépendances dans control(utilise un éditeur de texte)
  4. Remballez control.tar.gz: tar --ignore-failed-read -cvzf control.tar.gz {post,pre}{inst,rm} md5sums control
  5. Remballer 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ù finissait la section de données!

Janus Troelsen
la source
2
Nice, il me résout un cas particulier de dépendances pour "raring8" à "raring6" mais la même version = (, très merci
Felipe Alcacibar
1
Merci de moi aussi; Je devais utiliser cela car une application était nécessaire libmng1.so.1même si elle fonctionnait parfaitement avec un lien symbolique défini sur libmng1.so.2. apt-getne pouvais tout simplement pas être muselé et continuait à m'agacer à propos de dépendances non satisfaites (même lors de l'installation de quelque chose de totalement indépendant!). Quel concept de charge de déchets.
erreur de syntaxe
+1 Cela a fonctionné perfectionné pour moi aussi. Paquet gnome-settings-daemonvoulu gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11mais j’ai déjà gnome-settings-daemon-schemas=3.8.6.1-0ubuntu11.2(<- remarquez le ".2" à la fin). Cette procédure m'a permis d'éditer le package et de le forcer à utiliser la version 11.2 la plus récente. MERCI!
Eric Duncan
1
Excellente solution, merci. J'ai légèrement modifié les étapes 2 et 4: 2. FILES=$(tar zxvf control.tar.gz)pour stocker la liste de fichiers dans une variable. 4. tar zcf control.tar.gz $FILES- Créez l'archive en une seule étape sans canal ou redirection à l'aide de la liste de fichiers d'origine (après modification).
Brett
2
Un autre couple de suggestions. Pour # 4: ajouter --ignore-failed-readpour tarignorer les fichiers manquants du reste de la ligne de commande. (Par exemple, prerm, postrmsont absents de nombreux paquets.) En outre, les tarballs peuvent être .xzplutôt que .gzdans les versions plus récentes du format de l' archive Debian (par exemple data.tar.xz).
Dan Lenski
33

Après avoir installé le paquet avec l' --ignore-depends option, allez éditer le /var/lib/dpkg/statusfichier et supprimez toute dépendance que vous jugez inutile. Sois juste très prudent. Dans l'ordre un dep. être requis, il est plus que probable d' être requis

Manolis
la source
3
Après la mise /var/lib/dpkg/statusà jour, il peut être nécessaire de terminer l'installation avec sudo apt-get -f install(pas besoin de spécifier un package).
Zmicier Zaleznicenka Le
Également disponible ici: superuser.com/a/815371/127024 .
Johann
Cela me donne la chair de poule, mais cela a fonctionné sans faille!
David Schmitt
25

Vous pouvez essayer le --nodepsdrapeau avec apt-get.
Ou téléchargez le package et installez-le dpkgavec l'option --ignore-depends.

Par exemple, si vous souhaitez installer un package foosans dépendance bar:

dpkg --ignore-depends=bar -i foo_1.2.3_amd64.deb
Bart De Vos
la source
52
Quelle version d'APT avez-vous? Mine ( 0.8.10 ) n'a pas une telle option.
Tshepang
8
dire à dpkg d'ignorer les dépendances n'est pas une option pour lui. Il dit seulement à dpkg d'ignorer les dépendances de THIS transaction, il essaiera alors de satisfaire les dépendances ou de supprimer la pacakge la prochaine fois que vous ferez quelque chose.
ragoût
2
Toujours pas de chance avec APT 0.8.16 BTW. Dommage car il ne semble pas y avoir d'alternative raisonnable. Quelle version avez-vous utilisée en 2011 pour que cela fonctionne?
Christian le
2
vous pouvez utiliser apt-get download puis dpkg
Frederick Roth le
7
--no-install-recommendsa travaillé pour moi.
Olle Härstedt
14

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

Dire que simplement ignorer les dépendances n’est pas une bonne solution, c’est que vous ne dites qu’à 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 de tous les paquets

Ragoût
la source
2
Voir aussi cette réponse qui renvoie à un didacticiel (bien que trop complexe) superuser.com/a/416560/128960 . La version courte est: exécutez equivs-control <name>, éditez le fichier produit pour fournir la bonne dépendance et un bon nom, puis exécutez equivs-build <name>et enfin dpkg -ile fichier .deb obtenu.
Christian le
1
IMHO c'est vraiment la meilleure solution. Toutes les autres solutions demandées ici sont un peu trop rigides. Celui-ci ne doit être fait qu'une seule fois et vous pouvez installer n'importe quel logiciel en fonction du logiciel auto-compilé par la suite ... Allons donc dans le sens de cette réponse!
rugk
7

Je cherchais cette option sur un serveur Ubuntu 12.04 exécutant Xen. Dans mes domaines, j'utilise le noyau -virtual et apt a essayé d'installer grub à chaque mise à jour du paquet du noyau. Cependant, grub n’est pas nécessaire à l’intérieur de la domU lorsqu’on utilise p [yv] grub.

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

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

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

Memartin
la source
6

Vous pouvez télécharger le paquet avec apt-get puis l’installer avec dpkg, en listant manuellement la dépendance que vous souhaitez ignorer.

Par exemple, si je veux télécharger mypackage mais que cela dépend de libperl5.14 et que 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
A.Badger
la source
Juste pour mentionner que cela vous laissera "cassé". Il ne vous laissera pas installer d'autres packages tant que vous n'aurez pas corrigé la dépendance manquante.
drpexe
6

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
AndrewHarvey
la source
2

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

Il se peut que votre paquet postfix ne l’ait pas, Provides: mail-transport-agentdonc apt ne se rend pas compte qu’un MTA est installé. Il vaudrait la peine de signaler un bogue pour cela si c'est un paquet officiel.

Andy
la source
1

Pour ce faire, vous pourriez simplement installer un clou qui, je pense, n’a pas ces dépendances?

apt-get install nail
Jamespo
la source
-5

Eh bien, non.

Utiliser le travail des autres est très important pour réussir. Lorsque vous construisez un logiciel à partir du code source (tarball), vous manquez l'occasion d'utiliser le travail du gestionnaire de paquets de la distribution.

Vous n'obtiendrez pas de mises à jour "gratuites". La plupart du temps, personne ne met à jour les paquets qu'ils ont installés à partir des sources. Parce qu'ils ont besoin de suivre le logiciel pour les nouvelles versions, reconstruisez-le et tous les programmes dépendants (essayez de les mémoriser).

Vous aurez des problèmes avec d’autres paquets issus du dépôt de votre distribution. C’est exactement le cas indiqué dans la question: Ubuntu a un excellent gestionnaire de paquets et de très bonnes personnes qui gèrent les paquets. Et ils ont décidé que, pour que le programme mailx fonctionne, vous avez besoin d'un MTA. Donc, si vous avez installé postfix à partir de sources, Ubuntu ne vous demandera pas d’installer exim.

Si, pour une raison quelconque, la maintenance du serveur est confiée à une autre personne (par exemple, votre projet rencontre un franc succès et vous décidez de confier la gestion d’un serveur à un autre utilisateur), il s’attendra naturellement à courir dpkg --get-selectionspour obtenir tous les paquets installés.

Essayez d'utiliser le logiciel de gestion de paquets de la distribution autant que possible. Apprenez à construire vos propres packages si vous ne trouvez pas un logiciel pré-construit et vous deviendrez un meilleur professionnel.

skarap
la source