Come lasciare che `dpkg -i` installi dipendenze per me?


325

Dì, ho foo-1.2.3.debquale dipende perle python, tuttavia, eseguendo il comando:

dpkg -i ./foo-1.2.3.deb

non installerà queste dipendenze. Quindi devo farlo apt-get install perl pythona mano.

Come dpkg -iposso installare automaticamente queste dipendenze per me?



5
@ pd12: Evviva i riferimenti circolari! MrGreen
David Foerster,

eh, ho deciso di collegare entrambi e vedere quale le mod avrebbero selezionato.
pd12,

Risposte:


417

Dopo l'utilizzo dpkg, l'esecuzione del comando seguente mi ha aiutato a installare le dipendenze richieste:

sudo apt-get -f install

In tutto, il tuo terminale dovrebbe apparire così:

$ sudo dpkg -i package_with_unsatisfied_dependencies.deb
dpkg: dependency problems prevent ... 
[additional messages]

$ sudo apt-get -f install
[apt messages]
Setting up [dependency]...
Setting up package_with_unsatisfied_dependencies...

Si noti la riga circa Setting up package_with_unsatisfied_dependencies. Questo risolve (e completa) l'installazione di package_with_unsatisfied_dependencies.deb.


8
Dovrei correre di sudo dpkg -i mypackage.debnuovo?
Muhammad Gelbana,

23
Dopo aver eseguito il sudo apt-get -f installmio pacchetto e le sue dipendenze sono state tutte installate. L'esecuzione sudo dpkg -i my_package.debnon è necessaria e installerà nuovamente il pacchetto.
Gus E

5
A seguito di lavori su Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. La prima dpkg -iesecuzione contrassegna le dipendenze, apt-get -f installinstalla le dipendenze richieste e la seconda dpkg -iinstalla correttamente il pacchetto. Si noti che apt-get install -fè un comando totalmente diverso.
Mikko Rantalainen,

1
@ysth no, non farlo dpkg -i --force; che forzerà l'installazione di un pacchetto rotto! L'esecuzione dpkg/ senza / --forcerenderà la voce necessaria nel database dei pacchetti in modo da apt-get -f installfare la cosa giusta.
Brian A. Henning,

@Lotharyx: non posso provarlo adesso, ma non pensavo che il dpkg senza forzatura (che fallisce a causa di dipendenze mancanti) sarebbe entrato nel database dei pacchetti
ysth

111

È possibile installare gdebi-core, che è la versione da riga di comando del programma di installazione del pacchetto GDebi dalla 10.04 in poi. Nelle versioni più recenti di Ubuntu, il Software Center viene utilizzato per installare debs, che non ha un equivalente della riga di comando.

Per installare un pacchetto deb usando gdebi, basta eseguire:

sudo gdebi my_package_1.0.deb

64

a partire da apt 1.1 (disponibile in Xenial (16.04), stretch) apt installconsente anche i file locali:

sudo apt install ./foo-1.2.3.deb

Molto più semplice e pulito.

Vedi l' annuncio di rilascio


4
È ora che questo sia disponibile
Mike

Questa soluzione non ha funzionato. Tutto ciò che è accaduto è stato un elenco di errori.
Billy S,

@BillyS mi dispiace sapere che non ha funzionato per te, ma senza la versione di distro che stai utilizzando e quali errori hai riscontrato non è affatto attuabile.
texthell

Il comando non ha funzionato per me ma ha apt ./install foo-1.2.3.debfunzionato.
Cenk Alti,

1
Corretto il comando, i commenti sopra si riferivano alla versione precedente della risposta che mancava il necessario ./o il percorso
Zanna

38

Gdebi

gdebiinstalla un pacchetto deb e le sue dipendenze. Per usarlo eseguire:

sudo gdebi package.deb

Nelle versioni più recenti di Ubuntu, questo non è installato per impostazione predefinita, quindi sarà necessario installarlo dai repository.

Vedi man gdebiper un elenco completo di opzioni.

gdebiè la riga di comando equivalente allo strumento grafico con lo stesso nome che era incluso di default in Ubuntu. Il comando per lo strumento grafico è gdebi-gtke ha funzionalità simili:

GDebi-gtk


gdebi-gtk non mostrerà i deps richiesti (almeno la versione che ho qui, e sembra un bug), ma la riga di comando lo farà! Se abbiamo un'altra macchina con i pacchetti che possiamo usare dpkg-repackin base a tale elenco di deps :)
Aquarius Power il

21

in esecuzione

sudo apt-get install -f

dopo aver installato il pacchetto con dpkg potrebbe risolvere le dipendenze rotte (almeno man apt-get dirlo ...). Ill aggiornamento quando lo controllerò.


Dovrei correre di sudo dpkg -i mypackage.debnuovo?
Muhammad Gelbana,

3
apt-get -f installfunziona, ma apt-get install -fnon è lo stesso.
200_successo

9

dpkg non ha supporto per le dipendenze. C'è un modo per aggirarlo, ma ciò richiederebbe di creare un database locale (e quindi si conoscono già le dipendenze) ed è considerato obsoleto (...).

Deve essere la riga di comando? (installazione del server?) Se è così anche dare un'occhiata apt-get -fma attenzione: risolvere le dipendenze dopo l'installazione potrebbe farti finire con un sistema guasto.

gdebi (gui frontend) era in grado di farlo, ma è stato sostituito con USC.

Come hai scaricato il .deb. Alcune delle nuove funzionalità di 11.04 è la gestione di .deb scaricato da un sito Web: viene aperto in USC, quindi le dipendenze verranno risolte dall'installatore.

EDIT basato sul commento di andrew: sudo gdebi foo-1.2.3.deb farebbe il trucco !!


gdebi può ancora essere usato per questo. Software Center ora è solo l'app predefinita. Inoltre, come osserva Chen Xiao-Long, gdebi può anche essere usato sulla riga di comando.
andrewsomething

freddo! allora la domanda ha una risposta perché gdebi può essere usato anche dalla riga di comando.
Rinzwind,

Questa dovrebbe essere la risposta accettata.
prosti,

3

In alternativa a gdebi-gtkte puoi usare Ubuntu Software Center.

Fare doppio clic sul pacchetto e dovrebbe essere disponibile un pulsante di installazione.


3

È possibile creare un file dpkg-dep-instcon il seguente contenuto.

#!/bin/bash

DEBIAN_FILE1=$1
dpkg -i $DEBIAN_FILE1 || apt-get --fix-broken install

Presumo che tu abbia creato il file nella tua cartella home. Renderlo eseguibile con chmod +x dpkg-dep-inste spostarlo /usr/local/bincon sudo cp dpkg-dep-inst /usr/local/bin.

Ora puoi installare automaticamente il pacchetto debian con dipendenze con:

sudo dpkg-dep-inst foo-1.2.3.deb

1
Utilizzare apt-get --yes --fix-broken installe rendere automatico il fissaggio.
Lucas

@ysth No, non in generale.
BuZZ-dEE,

1

Ho appena incontrato questo problema. Calling apt-get install -fverrà non installare consigliati dipendenze, però! L'unica soluzione alternativa sarebbe quella di creare un repository locale e aggiungerlo /etc/apt/sources.list, ad esempio:

apt-ftparchive packages . > Packages && gzip < Packages > Packages.gz
sudo echo "deb file://$PWD /" >> /etc/apt/sources.list
sudo apt-get update

0

In realtà la risposta è che il dpkggestore pacchetti non può installare le dipendenze immediatamente. Cam man dpkge l' hai scoperto. Quindi è necessario utilizzare strumenti come apt, apt-get, aptitude, ..., sulla base dpkg.

Direi che lo stesso caso vale per il rpmgestore dei pacchetti sull'altro emisfero Linux. rmpnon è pensato per eseguire installazioni basate sulla dipendenza. Si può installare i pacchetti singoli, e per l'installazione dei dipendenze che si utilizzano yum, urpmi, up2datequeste sono tutte basate su RPM.

Come notato, c'è un leggero pericolo nell'installare i pacchetti dpkgdirettamente, perché la risoluzione successiva della risoluzione delle dipendenze potrebbe finire con un sistema rotto, come delineato da @Rinzwind.

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.