ti-enxame.com

Como instalar um arquivo deb, pelo dpkg -i ou pelo apt?

Eu tenho um pacote deb para instalação.

Devo instalar por dpkg -i my.deb, ou pelo apt?

Os dois lidarão bem com o problema de dependência de software?

Se pelo apt, como posso instalar a partir da deb pelo apt?

728
Tim

Quando você usa apt para instalar um pacote, sob o capô ele usa dpkg. Quando você instala um pacote usando o apt, ele primeiro cria uma lista de todas as dependências e o baixa do repositório.

Quando o download é concluído, ele chama dpkg para instalar todos esses arquivos, satisfazendo todas as dependências.

Portanto, se você tiver um arquivo .deb, Poderá instalá-lo:

  1. Usando:

    Sudo dpkg -i /path/to/deb/file
    Sudo apt-get install -f
    
  2. Usando:

    Sudo apt install ./name.deb
    

    Ou

    Sudo apt install /path/to/package/name.deb
    

    Com versões antigas de apt-get, Você deve primeiro mover seu arquivo deb para o diretório /var/cache/apt/archives/. Para ambos, após executar este comando, ele fará o download automaticamente de suas dependências.

  3. Primeiro instale gdebi e, em seguida, abra o arquivo .deb usando-o ( Clique com o botão direito do mouse -> Abra com). Ele instalará o pacote .deb com todas as suas dependências.

    Nota : APT mantém o índice do pacote, que é um banco de dados de pacotes disponíveis disponíveis no repo definido em /etc/apt/sources.list e no diretório /etc/apt/sources.list.d Todos esses métodos falharão em satisfazer a dependência do software se as dependências requeridas pela deb não estiverem presentes no índice do pacote.


Por que usar Sudo apt-get install -f Após Sudo dpkg -i /path/to/deb/file (Conforme mencionado no método 1)?

A partir de man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Quando dpkg instala um pacote e uma dependência do pacote não é satisfeita, ele deixa o pacote em um estado "não configurado" e esse pacote é considerado quebrado.

O comando Sudo apt-get install -f Tenta corrigir este pacote quebrado instalando a dependência ausente.

939
g_p

Instale seu foo.deb arquivo com dpkg -i foo.deb. Se houver alguns erros com dependências não resolvidas, execute apt-get install -f mais tarde.

95
ihor_dvoretskyi

Aqui está a melhor maneira de instalar um .deb no Ubuntu na linha de comando:

Sudo gdebi skype.deb

Se você ainda não tem gdebi instalado, instale-o usando Sudo apt install gdebi-core.

Por que gdebi?

gdebi procurará todas as dependências do .deb e instalá-los-á antes de tentar instalar o .deb Arquivo. Acho isso muito preferível do que Sudo dpkg -i skype.deb && Sudo apt install -f. O último está muito ansioso para remover dependências em determinadas situações. Por exemplo, quando tentei instalar o Skype, ele tentou remover 96 (!) Pacotes, incluindo pacotes como compiz e unity! gdebi deu uma mensagem de erro muito mais clara:

 $ Sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(Aqui está a solução para esse problema em particular , a propósito.)

66
Flimm

Você pode instalar um pacote .deb local:

Sudo apt install ./foo.deb

Certifique-se de especificar um caminho local ou absoluto local (./ se no dir atual), caso contrário, ele procurará foo.deb nos repositórios remotos e falha.

60
wisbucky

Verifique as dependências com dpkg -I my.deb e apt-get install as dependências anteriores dpkg -i my.deb.

Pode ser que você possa copiar o my.deb no /var/cache/apt/archives e instale-o diretamente com apt-get mas eu nunca tentei. Não funciona, apt-get e dpkg estão procurando pacotes listados nos arquivos.

15
Alex

A resposta mais simples seria usar o dpkg executando dpkg -i packagename.deb. Você pode desinstalá-lo executando dpkg -r packagename.deb.
apt-get é um instalador de nível superior baseado no dpkg e, como tal, você pode apt-get install packagename.deb.
Seria benéfico adicioná-lo ao seu diretório de arquivos do apt-get (/var/cache/apt/archives) para que você possa fazer referência a ele como um pacote com dependências e não como um arquivo .deb independente.
Além disso, adicionando-o ao diretório de arquivos do apt-get, você tem a oportunidade de usar dependências com apt-get install packagename. Isso permitiria que você o instalasse com quaisquer dependências adicionadas manualmente, em vez do sistema autônomo baseado em arquivamento do dpkg.

6
Interesting...

O apt-get moderno pode ser usado para instalar um pacote simplesmente com apt-get install /path/to/package/name.deb.

(deve ser feito como editar a resposta principal, mas foi rejeitado - consulte https://unix.stackexchange.com/posts/159114/edit )

5
reducing activity