gdebi vs dpkg: Comment gdebi obtient-il automatiquement les dépendances manquantes? Puis-je utiliser gdebi pour toutes les autres installations de packages .deb?

15

J'ai récemment réinstallé mon Ubuntu dans Lubuntu 15.04. Je cherchais donc l'installation de Skype et j'ai obtenu ce joli tutoriel .

C'était vraiment cool. Il a téléchargé le package officiel de skype deb à partir d' ici

Comme je n'ai pas gdebidéjà installé, j'ai installé en utilisantsudo su -c apt-get install gdebi

Puis installé skype-ubuntu-precise_4.3.0.37-1_i386.debà l'aide de la commande gdebisudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi a tout fait pour moi, quelle chose sans tracas sans utiliser l'ajout manuel traditionnel de liens Apt PPA qui brisera probablement mes mises à jour système / installations logicielles aussi.

Mais si j'essaie de l'installer en utilisant 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

Tant de problèmes de dépendances. Oh, je viens de googler GDebi et wikipedia a

GDebi est un outil APT qui peut être utilisé en ligne de commande et sur l'interface graphique. [44] GDebi peut installer un fichier .deb local via la ligne de commande comme la commande dpkg, mais avec accès aux référentiels pour résoudre les dépendances

Ma merveille est

(1) Comment gdebi installe-t-il des packages .deb avec des dépendances sans utiliser de liens Apt PPA ajoutés manuellement dans les fichiers de configuration?

(2) Puis-je utiliser la même commande gdebi ( sudo su -c gdebi my.deb) pour installer tous les autres packages .deb sans ajouter Apt PPA ou dois-je changer le format comme ceci: sudo su -c my*n*.deboù n est la version du logiciel, etc.?

Veuillez expliquer en termes simples afin que je puisse l'obtenir.

user879
la source

Réponses:

10

En fait, ce gdebin'est qu'une interface dpkgavec les fonctionnalités supplémentaires qui peuvent vérifier les packages de dépendance dans les référentiels et les installer en une seule opération, tout en dpkg -inécessitant deux opérations manuellement (plus tard apt-get -f install).

Question 1:

1) Comment gdebi fait-il cela? installer des packages .deb avec des dépendances sans utiliser de liens Apt PPA ajoutés manuellement dans les fichiers de configuration?

Étant un dpkgfrontal, il peut utiliser toutes les fonctionnalités de dpkg. Étant donné que chaque .debfichier de package contient (à condition qu'ils ne soient pas corrompus) des métadonnées sur ce fichier deb (comme le nom du package, le responsable, les dépendances, etc.), il peut facilement vérifier la dépendance de ce fichier.

Par exemple, vous pouvez vérifier les métadonnées d'un fichier .deb à l'aide de dpkg --info package-name.deb

Et puis il utilise ces informations pour construire une carte de dépendances et marquer les fichiers .deb disponibles localement comme déjà téléchargés et télécharger d'autres .debfichiers depuis Internet.

Notez que ces packages supplémentaires nécessaires doivent être disponibles (avec la bonne version) dans au moins l'un des référentiels, qui sont configurés dans le système.

Ensuite, il procède à une installation normale d'apt. La différence est qu'il ne télécharge pas à nouveau le fichier .deb principal

Question 2:

(2) Puis-je utiliser la même commande gdebi ( sudo su -c gdebi my.deb) pour installer tous les autres paquets deb sans ajouter de PPA? ou dois-je changer le format sudo su -c myn.deboù n est la version du logiciel, etc.?

Les AAE existent pour une raison. La raison principale est qu'ils fournissent les dernières versions des packages. Et ces packages à version supérieure dépendent généralement de versions supérieures de sous-packages également, qui sont également normalement servis à partir du PPA, et non à partir du référentiel Ubuntu standard.

Exemple de scénario:

Supposons, un paquet nommé -paquet mère a la version la plus récente de 2.0dans des référentiels standard Ubuntu, et cette mère paquet dépend d'un paquet nommé enfant package de la version 2. Supposons également, une PPA fournit mère package de la version 3.0qui nécessite sur child-packagedes 3.0, les deux sont disponibles via ce référentiel PPA.

Le problème est que si vous téléchargez maintenant mother-package-3.0.deb à partir de la page du référentiel et essayez de l'installer avec gdebi, vous échouerez (ou gdebi).

Parce que, en vérifiant le fichier mother-package-3.0.deb , on gdebisavait que ce package mère avait besoin d'un package enfant de version 3.0ou supérieure, mais il ne connaissait que l'emplacement de la version 2.0. Il ne sait pas où récupérer la version 3.0de child-package . Ceci est attendu car, Vous n'avez pas dit au système où vous obtenez ce dernier paquet mère . En d'autres termes, vous n'avez pas configuré la liste des référentiels pour inclure ce PPA.

Donc, la réponse évidente est de cette question: cela dépend . Si les dépendances nécessaires peuvent être trouvées dans des référentiels déjà configurés, l'installation réussira . Sinon, il échouera à installer ce package versionné supérieur. C'est pourquoi vous avez toujours besoin de PPA et c'est le moyen le plus simple sans faire manuellement tout cela.

La deuxième partie de la deuxième question n'avait pas de sens pour moi .

Anwar
la source
5

J'ai eu le même problème avec quelques applications, avec skype étant l'une d'entre elles, celles-ci dépendent de packages externes ou de fichiers de bibliothèque qui doivent être installés manuellement.

Pour résoudre le problème que j'ai utilisé:

sudo dpkg -i skype.deb

Et puis après avoir été invité pour les bibliothèques externes comme vous l'avez dans votre sortie, j'ai tapé:

sudo apt-get install -f

Cela a téléchargé les packages requis et installé skype tout seul.

Moithil Biswas
la source
2

Dans chaque package .deb, il y a une liste de dépendances (avec le numéro de version compatible).

Je ne suis pas un lecteur Python mais le code source semble appeler aptpour obtenir cette liste. Il faut évidemment descendre récursivement pour trouver les dépendances des dépendances mais aptpeut évidemment le faire aussi.

Une fois que les dépendances sont toutes élaborées et placées dans le bon ordre (certaines dépendances doivent être installées avant que d'autres dépendances puissent être installées), il aptsuffit simplement d'installer les dépendances. Ensuite, le paquet qui a été donné comme argument à Gdebi est installé.

Les dépendances et le package cible sont installés en deux opérations pour deux raisons. Tout d'abord, le format d'un appel apt pour installer un .deb local est différent d'un appel apt pour installer des dépendances à partir d'un référentiel. Deuxièmement, la séparation des appels garantit que les dépendances sont toutes installées avant le package cible.

James
la source