web-dev-qa-db-fra.com

Ignorer toutes les dépendances d'un paquet spécifique avec apt-get

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

J'utilise 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 extraire toutes ses dépendances. Le paquet lui-même indique qu'il dépend des bibliothèques Java et wx, mais en réalité, elles ne sont pas nécessaires, sauf si vous souhaitez vous connecter à Java ou à wxWidgets.

Je peux installer Erlang comme ça

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

Toutefois, l'installation ultérieure de apt-get échoue à cause de dépendances non satisfaites. Donc si je veux installer git après Erlang, je reçois ce qui suit

$ 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).

Est-il possible de fermer le paquet esl-erlang sans exécuter apt-get install -f?

Je veux quelque chose comme ça:

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

ou comme ceci:

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 manuelles pour modifier les dépendances de certains paquets.

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

16
android

Je comprends le point de vue de bjanssen, mais il semble ridicule pour un gestionnaire de paquets d'autoriser --force-depends pour une seule installation de paquet, mais de ne pas autoriser la force-dépend-pour-toujours-et-cesse-de-m'avertir de 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 mes besoins, cela fonctionne 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 depuis les sources ni créer mon propre paquet.

La solution que j'ai trouvée:

  • éditer /var/lib/dpkg/status,
  • trouver le paquet avec les dépendances cassées
  • editez la ligne Depends: pour que le paquet ne se plaint pas.

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

25
andrew lorien

Ce que vous essayez de faire va à l’encontre du but 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 est de construire votre propre paquet avec les dépendances qui vous conviennent. Il y a la manière officielle (très impliquée: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) et la méthode rapide en utilisant apt-build, ou pour les packages qui ne sont pas dans la source de distribution, checkinstall. Tous les paquets produits apt-get seront installés avec plaisir.

Sur une note finale, vous pouvez mettre en doute la sagesse du responsable d’esl-erlang d’inclure certaines dépendances, mais vous ne pouvez pas reprocher au gestionnaire de packages le comportement souhaité. Si vous pensez que ces dépendances sont incorrectes, vous devriez créer un bogue avec le paquet.

2
bjanssen

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

Généralement, si vous utilisez un proxy, votre /etc/apt/apt.conf ressemblera à ceci:

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
parasrish