Question Ignorer toutes les dépendances pour un package spécifique avec apt-get


Ceci est une question très spécifique que Google n'a pas aidé à répondre.

Je cours Ubuntu 13.04 avec apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

Je veux installer Erlang à partir d'un paquet .deb, mais je ne veux pas tirer toutes ses dépendances. Le paquet lui-même spécifie que cela dépend des bibliothèques Java et WX, mais en réalité, celles-ci ne sont pas nécessaires à moins que vous ne souhaitiez vous connecter avec Java ou wxWidgets.

Je peux installer Erlang comme ça

sudo dpkg -i --force-depends erlang.deb

Cependant, en installant autre chose avec apt-get après échoue à cause de dépendances non satisfaites. Donc, si je veux installer Git après Erlang, j'obtiens les éléments suivants:

$ sudo apt-get install -y git
Reading package lists...
Building dependency tree...
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 esl-erlang : Depends: default-jre-headless but it is not going to be installed or
                       java2-runtime-headless or
                       java1-runtime-headless or
                       java2-runtime or
                       java1-runtime
              Depends: libwxbase2.8-0 but it is not going to be installed
              Depends: libwxgtk2.8-0 but it is not going to be installed
              Recommends: erlang-mode but it is not going to be installed
 git : Depends: libcurl3-gnutls (>= 7.16.2-1) but it is not going to be installed
       Depends: perl-modules but it is not going to be installed
       Depends: liberror-perl but it is not going to be installed
       Depends: git-man (> 1:1.7.9.5) but it is not going to be installed
       Depends: git-man (< 1:1.7.9.5-.) but it is not going to be installed
       Recommends: patch
       Recommends: rsync
       Recommends: ssh-client
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

Y at-il un moyen de faire esl-erlang paquet fermé sans courir apt-get install -f?

Je veux quelque chose comme ça:

sudo apt-get install --ignore-deps-for-package=esl-erlang git

ou comme ça:

sudo apt-cache shut-package-up esl-erlang

ou ca:

sudo apt-get download git
sudo dpkg -i --with-deps git.deb

J'ai trouvé une question similaire: https://serverfault.com/questions/250224/how-do-i-get-apt-get-to-ignore-some-dependencies. Quelques réponses fournissent des étapes manuelles pratiques pour modifier les dépendances de certains packages.

Je cherche toujours une méthode automatisée robuste.


15
2018-04-08 19:47


origine


As-tu essayé --nodeps (apt-get) ou --ignore-depends avec dpkg? - Mike K


Réponses:


Je comprends le point de bjanssen, mais il semble ridicule qu'un gestionnaire de paquets autorise --force-depends pour une installation de package unique, mais ne pas autoriser la force dépend-pour-toujours-et-stop-warning-me-sur-cette-dépendance.

J'ai eu un problème similaire avec un paquet qui dépendait d'une version de libcairo légèrement supérieure à celle actuellement disponible dans Debian. Pour mon propos, ça marche toujours bien. Je suis heureux de continuer à l'utiliser jusqu'à ce que la mise à jour de libcairo apparaisse dans apt. Je ne veux pas compiler à partir de sources ou créer mon propre package.

La solution que j'ai trouvée:

  • modifier /var/lib/dpkg/status,
  • trouver le paquet avec les dépendances cassées
  • éditer le Depends: ligne pour arrêter le paquet se plaindre.

Je suppose que cela sera remplacé la prochaine fois que le paquet sera mis à jour, mais c'est exactement ce que je veux.


24
2017-09-23 06:20



C'est parfait, exactement ce dont j'avais besoin pour contourner temporairement une dépendance PPA incorrecte! - Cas


Ce que vous essayez de faire est contre l’objectif d’un gestionnaire de paquets, qui essaie de garder un environnement sain, i. o. w. vous utilisez le mauvais outil pour le travail. N'essayez pas de casser apt-get.

La bonne façon de résoudre votre problème consiste à créer votre propre package avec des dépendances qui vous conviennent. Il y a le moyen officiel (très impliqué: http://www.debian.org/doc/manuals/maint-guide/index.fr.html) et le moyen rapide et sale en utilisant apt-build, ou pour les paquets ne figurant pas dans la source de distribution, checkinstall. Tous les paquets de produits apt-get seront installés avec plaisir.

Sur une note finale, vous pouvez vous interroger sur la sagesse du responsable d'esl-erlang d'inclure certaines dépendances, mais vous ne pouvez pas reprocher au gestionnaire de paquets le comportement souhaité. Si vous pensez que ces dépendances sont fausses, vous devez déposer un bogue avec le paquet.


1
2018-04-08 22:01



Ce que vous avez dit à propos du "but d'un gestionnaire de paquet" est fondamentalement vrai, mais vous ne devriez pas non plus généraliser. Je voudrais donner un exemple: une application nécessaire libmng1. Mais j'avais libmng2 installé et un lien symbolique défini sur libmng1.so. Travaillé une menace, jamais eu de problèmes. Mais apt-get toujours plaint de "dépendances non satisfaites". il y a donc absolument une bonne raison d'essayer de trouver un moyen de faire taire l'aptitude à cet égard. Depuis les choses faire travail, il continue de se plaindre pour les choses qui simplement sont aucun problème. Il ne voit que des problèmes là où ils ne sont pas. Et c'est agaçant. - syntaxerror
C'est une situation curieuse. Je suppose que vous avez installé un paquet à partir d'un référentiel de non-distribution? Dans un tel cas, jetez un oeil à equivs pour "faire taire" apt-get sans le casser. - bjanssen
Eh bien, ça aurait pu être comme ça. Mais en fait ce n'était pas ... J'ai simplement installé le plus âgée paquet de la même distribution, donc en termes Ubuntu j'étais sur 15.x, mais j'ai installé le libmng1 de 12.04 LTS. - syntaxerror


Vérifiez si le "proxy utilisé" dans le apt.conf est approprié (c'est-à-dire conformément à votre réseau). Cela provoque également de tels problèmes, car les URL seraient inaccessibles.

En règle générale, si vous utilisez un proxy, votre /etc/apt/apt.conf ressemblerait à:

Acquire::ftp::proxy "ftp://<user>:<password>@<ip>:<port>/";
Acquire::http::proxy "http://<user>:<password>@<ip>:<port>/";
Acquire::https::proxy "https://<user>:<password>@<ip>:<port>/";

0
2017-10-30 06:22