gdebi vs dpkg: Como o gdebi perde dependências automaticamente? Posso usar o gdebi para todas as outras instalações de pacotes .deb?

9

Recentemente aconteceu de reinstalar meu Ubuntu no Lubuntu 15.04. Então eu estava procurando por instalação do Skype e tenho este bom tutorial .

Foi muito legal. Ele baixou o pacote oficial do skype deb de aqui

Como não tenho gdebi instalado, instalei usando sudo su -c apt-get install gdebi

Em seguida, instale skype-ubuntu-precise_4.3.0.37-1_i386.deb usando o comando gdebi sudo su -c gdebi skype-ubuntu*4*.deb

Uau, gdebi fez tudo para mim, o que uma coisa livre de problemas sem usar o manual Apt PPA links adição tradicional que provavelmente vai quebrar minhas atualizações de sistema / instalações de software também.

Mas se eu tentar instalá-lo 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

Tantas questões de dependências. Oh, eu apenas pesquisei no GDebi e a Wikipedia tem

  

O GDebi é uma ferramenta APT que pode ser usada na linha de comando e na GUI. [44] O GDebi pode instalar um arquivo .deb local através da linha de comando, como o comando dpkg, mas com acesso a repositórios para resolver dependências

Minha maravilha é

(1) Como o gdebi instala os pacotes .deb com dependências sem usar links do PPA do Apt adicionados manualmente nos arquivos de configuração?

(2) Posso usar o mesmo comando gdebi ( sudo su -c gdebi my.deb ) para instalar todos os outros pacotes .deb sem adicionar o Apt PPA ou eu tenho que alterar o formato da seguinte forma: sudo su -c my*n*.deb onde n é a versão do software, etc ?

Por favor, explique em termos leigos para que eu possa obtê-lo.

    
por user879 09.05.2015 / 06:20

3 respostas

5

Na verdade, gdebi é apenas um front-end para o dpkg com funcionalidade adicionada que pode verificar pacotes de dependência nos repositórios e pode instalá-los em uma operação, enquanto dpkg -i requer duas operações manualmente (mais tarde sendo apt-get -f install ).

Pergunta 1:

  

1) Como o gdebi faz isso? instalar pacotes .deb com Dependências sem usar links PPA do Apt adicionados manualmente nos arquivos de configuração?

Sendo um front-end dpkg , ele pode usar todas as funcionalidades de dpkg . Como todo arquivo do pacote .deb contém (desde que não estejam corrompidos) metadados sobre esse arquivo deb (como nome do pacote, mantenedor, dependências, etc), ele pode facilmente verificar a dependência deste arquivo.

Por exemplo, você pode verificar os metadados de um arquivo .deb usando dpkg --info package-name.deb

E, em seguida, ele usa essas informações para construir o mapa de dependência e marcar os arquivos .deb disponíveis localmente como já baixados e baixar outros arquivos .deb da Internet.

Observe que os pacotes extras necessários devem estar disponíveis (com a versão apropriada) em pelo menos um dos repositórios, que estão configurados no sistema.

Em seguida, ele continua a gostar de uma instalação normal do apt. A diferença é que ele não faz o download do arquivo .deb principal

Pergunta 2:

  

(2) Posso usar o mesmo comando gdebi ( sudo su -c gdebi my.deb ) para instalar todos os outros pacotes deb sem adicionar um PPA? ou eu tenho que mudar o formato sudo su -c myn.deb onde n é a versão do software etc?

Os PPAs existem por um motivo. A principal razão é que eles fornecem versões mais recentes dos pacotes. E esses pacotes versionados geralmente dependem de versões superiores de sub-pacotes, que também são normalmente servidos pelo PPA, e não pelo repositório padrão do Ubuntu.

Exemplo de cenário:

Suponha que um pacote chamado mother-package tenha a versão mais alta de 2.0 nos repositórios Padrão do Ubuntu, e esse pacote-mãe depende de um pacote chamado child-package da versão 2. Suponha também que alguns PPA fornecem mother-package da versão 3.0 que requer em child-package de 3.0 , ambos disponíveis via esse repositório PPA.

O problema é que, se você baixar mother-package-3.0.deb da página do repositório e tentar instalá-lo com gdebi , você (ou gdebi ) falhará.

Porque, verificando o arquivo mother-package-3.0.deb , gdebi sabia que este pacote-mãe precisa filho-pacote da versão 3.0 ou superior, mas só conhece a localização da versão 2.0 . Não sabe onde buscar a versão 3.0 de pacote-infantil . Isto é esperado porque, você não disse ao sistema onde você conseguiu este último pacote-mãe . Em outras palavras, você não configurou a lista de repositórios para incluir esse PPA.

Então, a resposta óbvia desta questão é Depende . Se as dependências necessárias puderem ser encontradas em repositórios já configurados, a instalação será bem sucedida . Mas se não, então ele falhará ao instalar este pacote versionado aprimorado. É por isso que você ainda precisa de PPAs e essa é a maneira mais fácil sem fazer todos esses manualmente.

A segunda parte da segunda pergunta não fazia sentido para mim .

    
por Anwar 17.08.2016 / 18:12
4

Eu tive o mesmo problema com alguns aplicativos, com o Skype sendo um deles, eles dependem de pacotes externos ou arquivos de biblioteca que precisam ser instalados manualmente.

Para corrigir o problema que usei:

sudo dpkg -i skype.deb

E, depois de ser solicitado pelas bibliotecas externas, como você tem na sua saída, eu digitei:

sudo apt-get install -f

Isso baixou os pacotes necessários e instalou o Skype por si só.

    
por Moithil Biswas 09.05.2015 / 13:23
2

Em todo pacote .deb, há uma lista de dependências (com o número de versão compatível).

Eu não sou um leitor de Python, mas o código-fonte parece fazer uma chamada para apt para obter essa lista. É óbvio que tem que descer recursivamente para encontrar as dependências das dependências, mas apt pode obviamente fazer isso também.

Quando as dependências forem trabalhadas e colocadas na ordem correta (algumas dependências precisam ser instaladas antes que outras dependências possam ser instaladas), apt é simplesmente solicitado a instalar as dependências. Então o pacote que foi dado como um argumento para o Gdebi está instalado.

As dependências e o pacote de destino são instalados em duas operações por dois motivos. Primeiro, o formato de uma chamada apt para instalar um .deb local é diferente de uma chamada apt para instalar dependências de um repositório. Segundo, separar as chamadas garante que as dependências sejam todas instaladas antes do pacote de destino.

    
por james 15.08.2016 / 18:47