web-dev-qa-db-fra.com

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

Récemment, il m'est arrivé de réinstaller mon Ubuntu dans Lubuntu 15.04. Je cherchais donc une installation de Skype et je l’ai obtenu Tutoriel intéressant .

C'était vraiment cool. Il a téléchargé le paquet officiel de skype deb de ici

Puisque je n'ai pas gdebi déjà installé, j'ai installé avec Sudo su -c apt-get install gdebi

Puis installé skype-ubuntu-precise_4.3.0.37-1_i386.deb en utilisant la commande gdebi Sudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi a tout fait pour moi, quelle chose sans tracas sans utiliser l’ajout traditionnel de liens manuels APA PPA, ce qui va probablement casser mes mises à jour système/installations logicielles aussi ..

Mais si j'essaie de l'installer avec 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 googlé GDebi et Wikipédia 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 un accès aux référentiels pour résoudre les dépendances.

Mon émerveillement est

(1) Comment gdebi installe-t-il les paquets .deb avec dépendances sans utiliser les 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 PPA apte ou dois-je changer le format de la manière suivante: Sudo su -c my*n*.deb où n est la version du logiciel, etc.?

S'il vous plaît expliquer en termes simples afin que je puisse l'obtenir.

14
user879

En fait, gdebiest simplement un serveur frontal de dpkgavec une fonctionnalité supplémentaire lui permettant de vérifier les packages de dépendance dans les référentiels et de les installer en une seule opération, tandis que dpkg -i requiert deux opérations manuellement (ultérieurement appelé apt-get -f install).

Question 1:

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

Étant un serveur dpkgname__, il peut utiliser toutes les fonctionnalités de dpkgname__. Étant donné que chaque fichier de package .deb contient (à condition qu'il ne soit pas corrompu) 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 ensuite, il utilise ces informations pour construire une carte de dépendance et marquer les fichiers .deb disponibles localement comme déjà téléchargés et télécharger d’autres fichiers .deb à partir d’Internet.

Notez que les packages supplémentaires nécessaires doivent être disponibles (avec la version appropriée) dans au moins un des référentiels configurés dans le système.

Ensuite, il s’agit d’une installation normale d’apt. La différence est qu'il ne re-télécharge pas le fichier principal .deb

Question 2:

(2) Puis-je utiliser la même commande gdebi (Sudo su -c gdebi my.deb) pour installer tous les autres packages deb sans ajouter de PPA? ou dois-je changer le format Sudo su -c myn.deb où 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 paquets versionnés plus élevés dépendent généralement de versions plus élevées de sous-paquets également, qui sont aussi normalement servis par le PPA, pas par le référentiel Ubuntu standard.

Exemple de scénario:

Supposons qu'un paquet nommé mother-package possède la version la plus récente de 2.0 dans les référentiels Ubuntu standard, et que mère-package dépend d'un paquet nommé child-package de la version 2. Supposons également que certains PPA fournissent mère-package de la version 3.0 qui requiert le child-package de 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 gdebiname__, vous échouerez (ou gdebiname__).

En vérifiant le fichier mother-package-3.0.deb, gdebisavait que cela mother-package a besoin de child-package de la version 3.0 ou une version ultérieure , mais il ne connait que l'emplacement de la version 2.0. Il ne sait pas où chercher la version 3.0 de paquet-enfant. Ceci est attendu car, vous n'avez pas indiqué au système où vous obtenez ce dernier package-mère. En d'autres termes, vous n'avez pas configuré le liste de référentiels pour inclure ce PPA.

Donc, la réponse évidente est de cette question est Cela dépend. Si les dépendances nécessaires peuvent être trouvées dans des référentiels déjà configurés, l'installation sera réussie. Mais sinon, il ne sera pas possible d'installer ce paquet versionné plus haut. C'est pourquoi vous avez toujours besoin d'APP et c'est le moyen le plus simple de ne pas le faire manuellement.

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

9
Anwar

J'ai eu le même problème avec peu d'applications, Skype étant l'une d'entre elles. Celles-ci dépendent de packages externes ou de fichiers de bibliothèque à installer 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 avez dans votre sortie, j'ai tapé dans:

Sudo apt-get install -f

Cela a téléchargé les paquets requis et installé Skype tout seul.

5
Moithil Biswas

Chaque paquet .deb contient 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 toutes les dépendances ont été définies et placées dans le bon ordre (certaines dépendances doivent être installées avant que d’autres ne puissent être installées), aptest simplement invité à installer les dépendances. Ensuite, le paquet qui a été donné en 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 fichier .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.

2
james