Ignorar todas las dependencias para un paquete específico con apt-get

16

Esta es una pregunta muy específica que Google no ayudó a responder.

Estoy ejecutando Ubuntu 13.04 con apt 0.9.7.7ubuntu4 for amd64 compiled on Oct 3 2013 15:25:56.

Quiero instalar Erlang desde un paquete .deb, pero no quiero extraer todas sus dependencias. El paquete en sí especifica que depende de las bibliotecas Java y wx, pero en realidad no son necesarias a menos que desee interactuar con Java o wxWidgets.

Puedo instalar Erlang así

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

Sin embargo, la instalación de cualquier otra cosa con apt-getposterioridad falla debido a dependencias insatisfechas. Entonces, si quiero instalar git después de Erlang, obtengo lo siguiente

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

¿Hay alguna manera de hacer que el esl-erlangpaquete se cierre sin ejecutarse apt-get install -f?

Quiero algo como esto:

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

o así:

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

o esto:

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

He encontrado una pregunta similar: /server/250224/how-do-i-get-apt-get-to-ignore-some-dependencies . Un par de respuestas proporcionan pasos manuales útiles para modificar las dependencias de ciertos paquetes.

Todavía estoy buscando un método robusto y automatizado.

androide
fuente
¿Has probado --nodeps( apt-get) o --ignore-dependscon dpkg?
Mike Koch

Respuestas:

27

Entiendo el punto de bjanssen, pero parece ridículo que un administrador de paquetes permita la instalación --force-dependsde un solo paquete, pero no permita la dependencia de forzar-depende-para-siempre-y-detener-advirtiéndome-sobre-esta-dependencia.

Tuve un problema similar con un paquete que dependía de una versión de libcairo ligeramente superior a la disponible actualmente en Debian. Para mis propósitos todavía funciona bien. Estoy feliz de seguir usándolo hasta que la actualización de libcairo aparezca en apt. No quiero compilar desde la fuente o construir mi propio paquete.

La solución que encontré:

  • editar /var/lib/dpkg/status,
  • encuentra el paquete con las dependencias rotas
  • edite la Depends:línea para evitar que el paquete se queje.

Supongo que se sobrescribirá la próxima vez que se actualice el paquete, pero eso es exactamente lo que quiero.

Andrew Lorien
fuente
2
Esto es perfecto, ¡justo lo que necesitaba para solucionar temporalmente una dependencia incorrecta de PPA!
Cas
2

Lo que intenta hacer es en contra del propósito de un administrador de paquetes, que trata de mantener un entorno sano, si está utilizando la herramienta incorrecta para el trabajo. No intentes romper apt-get.

La forma correcta de resolver su problema es crear su propio paquete con las dependencias que más le convengan. Existe la forma oficial (bastante involucrada: http://www.debian.org/doc/manuals/maint-guide/index.en.html ) y la forma rápida y sucia usando apt-build, o para paquetes que no están en la fuente de distribución, checkinstall. Todos los paquetes de producción apt-get se instalarán con gusto.

En una nota final, puede cuestionar la sabiduría del mantenedor de esl-erlang para incluir ciertas dependencias, pero no puede culpar al administrador de paquetes por el comportamiento previsto. Si cree que estas dependencias son incorrectas, debe presentar un error con el paquete.

bjanssen
fuente
Lo que ha dicho sobre el "propósito de un administrador de paquetes" es básicamente cierto, pero tampoco debe generalizar. Me gustaría dar un ejemplo: se necesita una aplicación libmng1. Pero había libmng2instalado Y un enlace simbólico establecido en libmng1.so. Trabajó una amenaza, nunca tuvo ningún problema. Pero apt-getsiempre se quejó de "dependencias insatisfechas". Así que definitivamente hay una buena razón para tratar de encontrar una manera de silenciar la aptitud a este respecto. Puesto que las cosas hacen el trabajo, sólo sigue quejándose de cosas que simplemente son ningún problema. Simplemente ve problemas donde no hay ninguno. Y eso es molesto.
syntaxerror
Esta es una situación curiosa. ¿Supongo que instaló un paquete desde un repositorio sin distribución? En tal caso, eche un vistazo a equivs"silenciar" apt-get sin romperlo.
bjanssen
Bueno, podría haber sido así. Pero en realidad no fue ... simplemente instalé el paquete anterior desde la misma distribución, por lo que en términos de Ubuntu estaba en 15.x, pero instalé libmng1 desde 12.04 LTS.
syntaxerror
0

Verifique si el "proxy utilizado" en el apt.confes correcto (es decir, de acuerdo con su red). Esto también causa estos problemas, ya que las URL no serían accesibles.

Por lo general, si usa proxy, su /etc/apt/apt.confaspecto sería el siguiente:

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