gdebi vs dpkg: in che modo gdebi ottiene automaticamente le dipendenze mancanti? Posso usare gdebi per tutte le altre installazioni di pacchetti .deb?


15

Di recente mi è capitato di reinstallare Ubuntu su Lubuntu 15.04. Quindi stavo cercando l'installazione di Skype e ho avuto questo bel tutorial .

E 'stato davvero bello. E 'scaricato pacchetto ufficiale di Skype deb da qui

Dal momento che non ho gdebigià installato, ho installato utilizzandosudo su -c apt-get install gdebi

Quindi installato skype-ubuntu-precise_4.3.0.37-1_i386.debutilizzando il comando gdebisudo su -c gdebi skype-ubuntu*4*.deb

Wow, gdebi ha fatto tutto per me, che cosa senza problemi senza usare la tradizionale aggiunta di collegamenti manuali Apt PPA che probabilmente romperà anche gli aggiornamenti di sistema / le installazioni di software.

Ma se provo a installarlo 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

Tante questioni legate alle dipendenze. Oh, ho appena cercato su Google GDebi e Wikipedia

GDebi è uno strumento APT che può essere utilizzato nella riga di comando e nella GUI. [44] GDebi può installare un file .deb locale tramite la riga di comando come il comando dpkg, ma con accesso ai repository per risolvere le dipendenze

La mia meraviglia è

(1) In che modo gdebi installa i pacchetti .deb con dipendenze senza utilizzare i collegamenti APA PPA aggiunti manualmente nei file di configurazione?

(2) Posso usare lo stesso comando gdebi ( sudo su -c gdebi my.deb) per installare tutti gli altri pacchetti .deb senza aggiungere APA PPA o devo cambiare il formato in questo modo: sudo su -c my*n*.debdove n è la versione del software, ecc?

Per favore, spiegalo in termini laici in modo che io possa ottenerlo.

Risposte:


10

In realtà gdebiè solo un front-end dpkgcon funzionalità aggiuntive che può controllare i pacchetti di dipendenza nei repository e può installarli in un'unica operazione, mentre dpkg -irichiede due operazioni manualmente (in seguito apt-get -f install).

Domanda 1:

1) Come fa Gdebi? installare pacchetti .deb con dipendenze senza usare i collegamenti APA PPA aggiunti manualmente nei file di configurazione?

Essendo un dpkgfront-end, può utilizzare tutte le funzionalità di dpkg. Poiché ogni .debfile di pacchetto contiene metadati (a condizione che non siano corrotti) su quel file di deb (come nome del pacchetto, manutentore, dipendenze ecc.), Può facilmente controllare la dipendenza di questo file.

Ad esempio, puoi controllare i metadati di un file .deb usando dpkg --info package-name.deb

Quindi utilizza queste informazioni per costruire una mappa delle dipendenze e contrassegnare i file .deb disponibili localmente come già scaricati e scaricare altri .debfile da Internet.

Si noti che, quei pacchetti extra necessari devono essere disponibili (con la versione corretta) in almeno uno dei repository, che sono configurati nel sistema.

Quindi procede come una normale installazione apt. La differenza è che non scarica nuovamente il file .deb principale

Domanda 2:

(2) Posso usare lo stesso comando gdebi ( sudo su -c gdebi my.deb) per installare tutti gli altri pacchetti deb senza aggiungere un PPA? o devo cambiare formato sudo su -c myn.debdove n è la versione del software ecc?

I PPA esistono per un motivo. Il motivo principale è che forniscono le ultime versioni dei pacchetti. E questi pacchetti con versioni più alte di solito dipendono anche dalle versioni più alte dei sotto-pacchetti, che sono normalmente serviti dal PPA, non dal repository Ubuntu standard.

Scenario di esempio:

Supponiamo che un pacchetto chiamato pacchetto madre abbia la versione più alta 2.0nei repository Ubuntu standard, e questo pacchetto madre dipende da un pacchetto chiamato pacchetto figlio della versione 2. Supponiamo inoltre che alcuni PPA forniscano un pacchetto madre della versione 3.0che richiede child-packagedi 3.0, entrambi sono disponibili tramite quel repository PPA.

Il problema è che se ora scarichi mother-package-3.0.deb dalla pagina del repository e provi a installarlo con gdebi, fallirai (o gdebi).

Perché, controllando il file mother-package-3.0.deb , gdebisapeva che questo pacchetto madre necessita di un pacchetto figlio della versione 3.0o successiva, ma conosce solo il percorso della versione 2.0. Non sa da dove scaricare la versione 3.0del pacchetto figlio . Ciò è dovuto al fatto che, non hai detto al sistema dove si trova questo pacchetto madre più recente . In altre parole, non hai configurato l' elenco di repository per includere quel PPA.

Quindi, la risposta ovvia è di questa domanda : dipende . Se le dipendenze necessarie si trovano nei repository già configurati, l'installazione avrà esito positivo . In caso contrario, non riuscirà a installare questo pacchetto con versione superiore. Ecco perché hai ancora bisogno di PPA e questo è il modo più semplice senza fare tutto manualmente.

La seconda parte della seconda domanda non aveva senso per me .


5

Ho avuto lo stesso problema con poche applicazioni, tra cui skype è una di queste, queste dipendono da pacchetti esterni o file di libreria che devono essere installati manualmente.

Per risolvere il problema che ho usato:

sudo dpkg -i skype.deb

E poi, dopo aver richiesto le librerie esterne come quelle che hai nel tuo output, ho digitato:

sudo apt-get install -f

Questo ha scaricato i pacchetti richiesti e installato skype da solo.


2

In ogni pacchetto .deb è presente un elenco di dipendenze (con il numero di versione compatibile).

Non sono un lettore Python ma il codice sorgente sembra effettuare una chiamata aptper ottenere tale elenco. Ovviamente deve essere ricorsivamente discendente per trovare le dipendenze delle dipendenze, ma aptovviamente può farlo anche.

Una volta che tutte le dipendenze sono state elaborate e posizionate nell'ordine corretto (alcune dipendenze devono essere installate prima di poter installare altre dipendenze), aptviene semplicemente richiesto di installarle. Quindi viene installato il pacchetto che è stato fornito come argomento a Gdebi.

Le dipendenze e il pacchetto di destinazione vengono installati in due operazioni per due motivi. Innanzitutto il formato di una chiamata apt per installare un .deb locale è diverso da una chiamata apt per installare dipendenze da un repository. In secondo luogo, la separazione delle chiamate garantisce che tutte le dipendenze siano installate prima del pacchetto di destinazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.