Como deixar o `dpkg -i` instalar dependências para mim?

325

Digamos, eu tenho o foo-1.2.3.debque depende perle python, no entanto, executando o comando:

dpkg -i ./foo-1.2.3.deb

não instalará essas dependências. Então eu devo apt-get install perl pythonà mão.

Como fazer para dpkg -iinstalar essas dependências automaticamente para mim?

Xiè Jìléi
fonte
5
@ pd12: Viva as referências circulares! :-D
David Foerster
heh, decidi ligar os dois e ver qual deles os mods selecionariam.
Pd12 02/11/2015

Respostas:

417

Após o uso dpkg, a execução do seguinte comando me ajudou a instalar as dependências necessárias:

sudo apt-get -f install

Ao todo, seu terminal deve ficar assim:

$ 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...

Observe a linha sobre Setting up package_with_unsatisfied_dependencies. Isso corrige (e completa) a instalação do package_with_unsatisfied_dependencies.deb.

Arindom
fonte
8
Devo correr de sudo dpkg -i mypackage.debnovo?
Muhammad Gelbana
23
Depois de executar sudo apt-get -f installmeu pacote e suas dependências foram instaladas. A execução sudo dpkg -i my_package.debé desnecessária e apenas instalará o pacote novamente.
Gus E
5
Após obras sobre Ubuntu 14.04: sudo dpkg -i package.deb; sudo apt-get -f install; sudo dpkg -i package.deb. A primeira dpkg -iexecução marca dependências, apt-get -f installinstala as dependências necessárias e a segunda dpkg -iinstala com êxito o pacote. Observe que apt-get install -fé um comando totalmente diferente.
Mikko Rantalainen
1
@ysth não, não faça dpkg -i --force; que forçará a instalação de um pacote quebrado! Executar dpkg/ sem / --forcefará a entrada necessária no banco de dados do pacote, para que apt-get -f installfaça a coisa certa.
Brian A. Henning
@Lotharyx: eu não posso tentar isso agora, mas eu não acho que o dpkg sem força (que falhar devido a dependências não existentes) faria uma entrada no banco de dados do pacote
ysth
111

Você pode instalar gdebi-core, que é a versão da linha de comando do instalador do pacote GDebi da 10.04 e versões anteriores. Nas versões mais recentes do Ubuntu, o Software Center é usado para instalar debs, que não possui uma linha de comando equivalente.

Para instalar um pacote deb usando o gdebi, basta executar:

sudo gdebi my_package_1.0.deb
Andrew Gunnerson
fonte
64

começando com o apt 1.1 (disponível no Xenial (16.04), stretch) apt installtambém permite arquivos locais:

sudo apt install ./foo-1.2.3.deb

Muito mais simples e limpo.

Veja o comunicado de lançamento

texthell
fonte
4
É sobre o tempo isso está disponível
Mike
Esta solução não funcionou. Tudo o que aconteceu foi uma lista de erros.
Billy S
A @BillyS lamenta saber que não funcionou para você, mas sem a versão de distribuição que você está usando e quais erros você obteve, isso não é acionável.
textshell
O comando não funcionou para mim, mas apt ./install foo-1.2.3.debfuncionou.
Cenk Alti
1
Corrigido o comando, os comentários acima referidos versão anterior do resposta que perdeu o necessário ./caminho ou
Zanna
38

Gdebi

gdebiinstala um pacote deb e suas dependências. Para usá-lo, execute:

sudo gdebi package.deb

Nas versões mais recentes do Ubuntu, isso não é instalado por padrão; portanto, você precisará instalá-lo a partir dos repositórios.

Veja man gdebipara uma lista completa de opções.

gdebié a linha de comando equivalente à ferramenta gráfica de mesmo nome que costumava ser incluída por padrão no Ubuntu. O comando para a ferramenta gráfica é gdebi-gtke tem uma funcionalidade semelhante:

gdebi-gtk

dv3500ea
fonte
O gdebi-gtk não mostrará os deps necessários (a versão que tenho aqui pelo menos e parece um bug), mas a linha de comando exibirá! Se tivermos outra máquina com os pacotes, podemos usá dpkg-repack-la com base nessa lista de deps :) #
Aquarius Power
21

corrida

sudo apt-get install -f

depois de instalar o pacote com o dpkg pode resolver dependências quebradas (pelo menos man apt-get diga isso ...). Ill atualizar quando vou verificar.

Denwerko
fonte
Devo correr de sudo dpkg -i mypackage.debnovo?
Muhammad Gelbana
3
apt-get -f installfunciona, mas apt-get install -fnão é o mesmo.
200_success
9

O dpkg não tem suporte a dependências. Existe uma maneira de contornar isso, mas isso exigiria a criação de um banco de dados local (e, portanto, você já saberia as dependências) e isso é considerado obsoleto (...).

Tem que ser linha de comando? (instalação do servidor?) Nesse caso, observe, apt-get -fmas tenha cuidado: resolver dependências após a instalação pode resultar em um sistema danificado.

O gdebi (interface gráfica do usuário ) costumava fazer isso, mas era substituído pelo USC.

Como você baixou o .deb. Alguns dos novos recursos do 11.04 são o manuseio do .deb baixado de um site: ele é aberto no USC para que as dependências sejam resolvidas pelo instalador.

EDIT baseado no comentário de andrew: sudo gdebi foo-1.2.3.deb faria o truque !!

Rinzwind
fonte
O gdebi ainda pode ser usado para isso. Agora, o Software Center é apenas o aplicativo padrão. Além disso, como observa Chen Xiao-Long, o gdebi também pode ser usado na linha de comando.
andrewsomething
legal! então a pergunta tem uma resposta, porque o gdebi também pode ser usado na linha de comando.
Rinzwind
Essa deve ser a resposta aceita.
Prosti
3

Como alternativa, gdebi-gtkvocê pode usar o Ubuntu Software Center.

Clique duas vezes no pacote e um botão de instalação deve estar disponível.

Henrique
fonte
3

Você pode criar um arquivo dpkg-dep-instcom o seguinte conteúdo.

#!/bin/bash

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

Suponho que você criou o arquivo na sua pasta pessoal. Torne-o executável com chmod +x dpkg-dep-inste mova-o para /usr/local/binwith sudo cp dpkg-dep-inst /usr/local/bin.

Agora você pode instalar o pacote debian com dependências automaticamente com:

sudo dpkg-dep-inst foo-1.2.3.deb
BuZZ-dEE
fonte
1
Use apt-get --yes --fix-broken installe torne a fixação automática.
Lucas
@ysth Não, não em geral.
BuZZ-dEE
1

Acabei de encontrar este problema. Chamada apt-get install -fserá não instalar recomendadas dependências, embora! A única solução alternativa para isso seria criar um repositório local e adicionar a /etc/apt/sources.list, ou seja:

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

Na verdade, a resposta é que o dpkggerenciador de pacotes não pode instalar dependências imediatamente. Você cam man dpkge descobriu isso. Então, você precisa usar ferramentas como apt, apt-get, aptitude, ..., com base em dpkg.

Eu diria que o mesmo caso é para o rpmgerenciador de pacotes no outro hemisfério Linux. rmpnão se destina a fazer instalações baseadas em dependência. Ele pode instalar pacotes individuais, e para instalar as dependências que você usa yum, urpmi, up2dateestes são todos baseados em RPM.

Como observado, há um pequeno risco de instalar pacotes dpkgdiretamente, porque a resolução posterior da resolução de dependências pode acabar com um sistema quebrado, conforme descrito em @Rinzwind.

prosti
fonte