gdebi vs dpkg: Wie bekommt gdebi automatisch fehlende Abhängigkeiten? Kann ich gdebi für alle anderen Installationen von .deb-Paketen verwenden?

14

Kürzlich habe ich mein Ubuntu in Lubuntu 15.04 neu installiert. Also suchte ich nach einer Skype-Installation und bekam dieses nette Tutorial .

Es war wirklich cool. Es heruntergeladen offizielles Paket von skype deb von hier

Da ich noch nicht gdebiinstalliert habe, habe ich mit installiertsudo su -c apt-get install gdebi

Dann skype-ubuntu-precise_4.3.0.37-1_i386.debmit dem Befehl gdebi installiertsudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi hat alles für mich getan, was für eine stressfreie Sache ohne die Verwendung der traditionellen manuellen Apt PPA-Links, die wahrscheinlich auch meine Systemupdates / Softwareinstallationen beschädigen werden.

Aber wenn ich versuche es mit zu installieren 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

So viele Probleme mit Abhängigkeiten. Oh, ich habe gerade GDebi gegoogelt und Wikipedia hat

GDebi ist ein APT-Tool, das in der Befehlszeile und auf der GUI verwendet werden kann. [44] GDebi kann eine lokale .deb-Datei über die Befehlszeile wie den Befehl dpkg installieren, jedoch mit Zugriff auf Repositorys, um Abhängigkeiten aufzulösen

Mein Wunder ist

(1) Wie installiert gdebi .deb-Pakete mit Abhängigkeiten, ohne Apt PPA-Links zu verwenden, die manuell in Konfigurationsdateien hinzugefügt wurden?

(2) Kann ich denselben gdebi-Befehl ( sudo su -c gdebi my.deb) verwenden, um alle anderen .deb-Pakete zu installieren, ohne Apt PPA hinzuzufügen, oder muss ich das Format wie sudo su -c my*n*.debfolgt ändern: Wo ist n die Softwareversion usw.?

Bitte erkläre es in Laienbegriffen, damit ich es bekommen kann.

user879
quelle

Antworten:

9

Tatsächlich gdebihandelt es sich nur um ein Front-End dpkgmit zusätzlichen Funktionen, mit denen in den Repositorys nach Abhängigkeitspaketen gesucht und diese in einem Vorgang installiert werden können, während dpkg -izwei Vorgänge manuell (später apt-get -f install) erforderlich sind .

Frage 1:

1) Wie macht gdebi das? .deb-Pakete mit Abhängigkeiten installieren, ohne Apt-PPA-Links zu verwenden, die manuell in Konfigurationsdateien hinzugefügt wurden?

Als dpkgFrontend kann es die gesamte Funktionalität von nutzen dpkg. Da jede .debPaketdatei Metadaten zu dieser Deb-Datei enthält (sofern diese nicht beschädigt sind) (wie Paketname, Betreuer, Abhängigkeiten usw.), kann sie auf einfache Weise die Abhängigkeit dieser Datei überprüfen.

Beispielsweise können Sie die Metadaten einer .deb-Datei mit überprüfen dpkg --info package-name.deb

Anschließend werden diese Informationen verwendet, um eine Abhängigkeitskarte zu erstellen und die lokal verfügbaren .deb-Dateien als bereits heruntergeladen zu markieren und andere .debDateien aus dem Internet herunterzuladen .

Beachten Sie, dass die benötigten zusätzlichen Pakete (mit der richtigen Version) in mindestens einem der Repositorys verfügbar sein müssen, die im System konfiguriert sind.

Dann geht es weiter wie bei einer normalen Apt-Installation. Der Unterschied besteht darin, dass die .deb-Hauptdatei nicht erneut heruntergeladen wird

Frage 2:

(2) Kann ich denselben gdebi-Befehl ( sudo su -c gdebi my.deb) verwenden, um alle anderen deb-Pakete zu installieren, ohne einen PPA hinzuzufügen? Oder muss ich das Format ändern, sudo su -c myn.debin dem n die Softwareversion usw. ist?

Die PPAs bestehen aus einem bestimmten Grund. Der Hauptgrund ist, dass sie die neuesten Versionen von Paketen bereitstellen. Und dieses höher versionierte Paket hängt normalerweise auch von höheren Versionen von Unterpaketen ab, die normalerweise auch über PPA und nicht über das Standard-Ubuntu-Repository bereitgestellt werden.

Beispielszenario:

Nehmen wir an , ein Paket mit dem Namen Mutter-Paket hat die höchste Version 2.0in Standard - Ubuntu - Repositories, und diese Mutter-Paket ist abhängig von einem Paket mit dem Namen Kind-Paket der Version 2 wird auch angenommen, bietet einige PPA Mutter-Paket der Version , 3.0die auf erfordert child-packagevon 3.0sind beide über dieses PPA-Repository verfügbar.

Das Problem ist, wenn Sie jetzt Mother-Package-3.0.deb von der Repository-Seite herunterladen und versuchen, es mit zu installieren gdebi, werden Sie (oder gdebi) scheitern.

Da beim Überprüfen der Datei mother-package-3.0.deb festgestellt wurde gdebi, dass für dieses Mutterpaket ein untergeordnetes Paket der Version 3.0oder höher erforderlich ist , jedoch nur der Speicherort der Version bekannt ist 2.0. Es ist nicht bekannt, woher die Version 3.0des untergeordneten Pakets bezogen werden soll . Dies wird erwartet, weil Sie dem System nicht mitgeteilt haben, wo Sie dieses neueste Mutterpaket erhalten haben . Mit anderen Worten, Sie haben die Repository-Liste nicht so konfiguriert , dass sie diese PPA enthält.

Die offensichtliche Antwort auf diese Frage lautet: Es kommt darauf an . Wenn die erforderlichen Abhängigkeiten in bereits konfigurierten Repositorys gefunden werden, ist die Installation erfolgreich . Andernfalls kann dieses Paket mit höheren Versionen nicht installiert werden. Deshalb benötigen Sie immer noch PPAs, und das ist der einfachste Weg, ohne all diese manuell auszuführen.

Der zweite Teil der zweiten Frage ergab für mich keinen Sinn .

Anwar
quelle
5

Ich hatte das gleiche Problem mit wenigen Anwendungen, darunter auch Skype. Diese hängen von externen Paketen oder Bibliotheksdateien ab, die manuell installiert werden müssen.

So beheben Sie das von mir verwendete Problem:

sudo dpkg -i skype.deb

Und nachdem ich nach den externen Bibliotheken gefragt wurde, die Sie in Ihrer Ausgabe haben, gab ich Folgendes ein:

sudo apt-get install -f

Dadurch wurden die erforderlichen Pakete heruntergeladen und Skype selbst installiert.

Moithil Biswas
quelle
2

In jedem .deb-Paket gibt es eine Liste von Abhängigkeiten (mit der kompatiblen Versionsnummer).

Ich bin kein Python-Leser, aber der Quellcode scheint einen Anruf zu tätigen apt, um diese Liste zu erhalten. Es muss offensichtlich rekursiv herabgesetzt werden, um die Abhängigkeiten der Abhängigkeiten zu finden, aptkann dies aber natürlich auch.

Nachdem alle Abhängigkeiten ermittelt und in der richtigen Reihenfolge platziert wurden (einige Abhängigkeiten müssen installiert werden, bevor andere Abhängigkeiten installiert werden können), aptwerden Sie einfach aufgefordert, die Abhängigkeiten zu installieren. Dann wird das Paket installiert, das Gdebi als Argument übergeben wurde.

Die Abhängigkeiten und das Zielpaket werden aus zwei Gründen in zwei Vorgängen installiert. Erstens unterscheidet sich das Format eines apt-Aufrufs zum Installieren einer lokalen .deb-Datei von einem apt-Aufruf zum Installieren von Abhängigkeiten aus einem Repository. Zweitens wird durch das Trennen der Aufrufe sichergestellt, dass alle Abhängigkeiten vor dem Zielpaket installiert sind.

James
quelle