gdebi vs dpkg: ¿Cómo gdebi obtiene automáticamente las dependencias faltantes? ¿Puedo usar gdebi para todas las demás instalaciones de paquetes .deb?

15

Hace poco volví a instalar mi Ubuntu en Lubuntu 15.04. Así que estaba buscando la instalación de Skype y obtuve este bonito tutorial .

Fue realmente genial. Se descargó el paquete oficial de skype deb desde aquí

Como todavía no lo he gdebiinstalado, lo instalé usandosudo su -c apt-get install gdebi

Luego se instala skype-ubuntu-precise_4.3.0.37-1_i386.debutilizando el comando gdebisudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi hizo todo por mí, qué cosa sin problemas sin usar la adición tradicional de enlaces manuales Apt PPA que probablemente también rompa las actualizaciones de mi sistema / instalaciones de software.

Pero si trato de instalarlo usando dpkg -i

dpkg -i skype-ubuntu-precise_4.3.0.37-1_i386.deb
Selecting previously unselected package skype.
(Reading database ... 86449 files and directories currently installed.)
Preparing to unpack skype-ubuntu-precise_4.3.0.37-1_i386.deb ...
Unpacking skype (4.3.0.37-1) ...
dpkg: dependency problems prevent configuration of skype:
 skype depends on libc6 (>= 2.3.6-6~).
 skype depends on libc6 (>= 2.7).
 skype depends on libgcc1 (>= 1:4.1.1).
 skype depends on libqt4-dbus (>= 4:4.5.3).
 skype depends on libqt4-network (>= 4:4.8.0).
 skype depends on libqt4-xml (>= 4:4.5.3).
 skype depends on libqtcore4 (>= 4:4.7.0~beta1).
 skype depends on libqtgui4 (>= 4:4.8.0).
 skype depends on libqtwebkit4 (>= 2.2~2011week36).
 skype depends on libstdc++6 (>= 4.2.1).
 skype depends on libx11-6.
 skype depends on libxext6.
 skype depends on libxss1.
 skype depends on libxv1.
 skype depends on libssl1.0.0.
 skype depends on libpulse0.
 skype depends on libasound2-plugins.

dpkg: error processing package skype (--install):
 dependency problems - leaving unconfigured
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for mime-support (3.55ubuntu1.1) ...
Processing triggers for desktop-file-utils (0.22-1ubuntu2) ...
Processing triggers for dbus (1.8.8-1ubuntu2.1) ...
Errors were encountered while processing:
 skype

Gran parte de los problemas de dependencias. Oh, acabo de buscar en Google GDebi y Wikipedia tiene

GDebi es una herramienta APT que se puede utilizar en la línea de comandos y en la GUI. [44] GDebi puede instalar un archivo .deb local a través de la línea de comando como el comando dpkg, pero con acceso a repositorios para resolver dependencias

Mi maravilla es

(1) ¿Cómo instala gdebi paquetes .deb con dependencias sin utilizar enlaces Apt PPA agregados manualmente en los archivos de configuración?

(2) ¿Puedo usar el mismo comando gdebi ( sudo su -c gdebi my.deb) para instalar todos los demás paquetes .deb sin agregar Apt PPA o tengo que cambiar el formato de esta manera: sudo su -c my*n*.debdonde n es la versión del software, etc.

Por favor explique en términos simples para que pueda obtenerlo.

usuario879
fuente

Respuestas:

10

En realidad, gdebies solo un front-end para la dpkgfuncionalidad adicional que puede verificar si hay paquetes de dependencia en los repositorios y puede instalarlos en una sola operación, mientras que dpkg -irequiere dos operaciones manualmente (más adelante apt-get -f install).

Pregunta 1:

1) ¿Cómo hace esto Gdebi? instalar paquetes .deb con dependencias sin usar enlaces Apt PPA agregados manualmente en los archivos de configuración?

Al ser un dpkgfront-end, puede usar toda la funcionalidad de dpkg. Dado que cada .debarchivo de paquete contiene (siempre que no estén corruptos) metadatos sobre ese archivo deb (como nombre del paquete, mantenedor, dependencias, etc.), puede verificar fácilmente la dependencia de este archivo.

Por ejemplo, puede verificar los metadatos de un archivo .deb usando dpkg --info package-name.deb

Y luego usa esta información para construir un mapa de dependencia y marcar los archivos .deb disponibles localmente como ya descargados y descargar otros .debarchivos de Internet.

Tenga en cuenta que esos paquetes adicionales necesarios deben estar disponibles (con la versión adecuada) en al menos uno de los repositorios, que están configurados en el sistema.

Luego se procede a una instalación apt normal. La diferencia es que no vuelve a descargar el archivo .deb principal

Pregunta 2:

(2) ¿Puedo usar el mismo comando gdebi ( sudo su -c gdebi my.deb) para instalar todos los demás paquetes deb sin agregar un PPA? ¿o tengo que cambiar el formato sudo su -c myn.debdonde n es la versión del software, etc.?

Los PPA existen por una razón. La razón principal es que proporcionan las últimas versiones de paquetes. Y estos paquetes con versiones superiores generalmente también dependen de versiones superiores de subpaquetes, que también se sirven normalmente desde el PPA, no desde el repositorio estándar de Ubuntu.

Escenario de ejemplo:

Supongamos que un paquete llamado paquete madre tiene la versión más alta de los 2.0repositorios estándar de Ubuntu, y este paquete madre depende de un paquete llamado paquete hijo de la versión 2. Además, suponga que algunos PPA proporcionan un paquete madre de versión 3.0que requiere child-packagede 3.0, ambos están disponibles a través de ese repositorio de PPA.

El problema es que si ahora descarga mother-package-3.0.deb desde la página del repositorio e intenta instalarlo gdebi, gdebifallará (o ).

Porque, al comprobar el archivo mother-package-3.0.deb , gdebisabía que este paquete madre necesita un paquete secundario de versión 3.0o superior, pero solo conoce la ubicación de la versión 2.0. No sabe de dónde obtener la versión 3.0del paquete secundario . Esto se espera porque no le dijiste al sistema dónde obtuviste este último paquete madre . En otras palabras, no configuró la lista de repositorios para incluir ese PPA.

Entonces, la respuesta obvia es esta pregunta: depende . Si las dependencias necesarias se pueden encontrar en repositorios ya configurados, la instalación será exitosa . Pero si no, entonces fallará al instalar este paquete versionado superior. Es por eso que todavía necesita PPA y esa es la forma más fácil sin hacer todo esto manualmente.

La segunda parte de la segunda pregunta no tenía sentido para mí .

Anwar
fuente
5

Tuve el mismo problema con pocas aplicaciones, con skype como una de ellas, estas dependen de paquetes externos o archivos de biblioteca que deben instalarse manualmente.

Para solucionar el problema que utilicé:

sudo dpkg -i skype.deb

Y luego, después de que me pidieran las bibliotecas externas como las que tienes en tu salida, escribí:

sudo apt-get install -f

Esto descargó los paquetes requeridos e instaló Skype por sí mismo.

Moithil Biswas
fuente
2

En cada paquete .deb hay una lista de dependencias (con el número de versión compatible).

No soy un lector de Python, pero el código fuente parece hacer una llamada aptpara obtener esa lista. Obviamente, debe descender recursivamente para encontrar las dependencias de las dependencias, pero aptobviamente también puede hacerlo.

Una vez que todas las dependencias se resuelven y se colocan en el orden correcto (algunas dependencias deben instalarse antes de que se puedan instalar otras dependencias), aptsimplemente se le pide que instale las dependencias. Luego se instala el paquete que se le dio como argumento a Gdebi.

Las dependencias y el paquete de destino se instalan en dos operaciones por dos razones. Primero, el formato de una llamada de apt para instalar un .deb local es diferente de una llamada de apt para instalar dependencias desde un repositorio. En segundo lugar, la separación de las llamadas garantiza que todas las dependencias estén instaladas antes del paquete de destino.

James
fuente