gdebi vs dpkg: Como o gdebi obtém automaticamente dependências ausentes? Posso usar o gdebi para todas as outras instalações dos pacotes .deb?

14

Recentemente, eu reinstalei meu Ubuntu no Lubuntu 15.04. Então, eu estava procurando a instalação do Skype e recebi este bom tutorial .

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

Como ainda não tenho gdebiinstalado, instalei usandosudo su -c apt-get install gdebi

Em seguida, instalado skype-ubuntu-precise_4.3.0.37-1_i386.debusando o comando gdebisudo su -c gdebi skype-ubuntu*4*.deb

Uau, o gdebi fez tudo por mim, que coisa sem problemas, sem usar os tradicionais links de manual do Apt PPA, que provavelmente quebrarão 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

Muitos problemas de dependência. Oh, eu apenas pesquisei no GDebi e a Wikipedia tem

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 aos repositórios para resolver dependências

Minha maravilha é

(1) Como o gdebi instala pacotes .deb com dependências sem usar os links Apt PPA 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 preciso alterar o formato da seguinte forma: sudo su -c my*n*.debonde n é a versão do software, etc?

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

user879
fonte

Respostas:

9

Na verdade, gdebié apenas um front-end para a dpkgfuncionalidade adicionada, que pode verificar se há pacotes de dependência nos repositórios e pode instalá-los em uma operação, enquanto dpkg -irequer duas operações manualmente (posteriormente apt-get -f install).

Questão 1:

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

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

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

E, em seguida, usa essas informações para construir um mapa de dependência e marcar os arquivos .deb disponíveis localmente como já baixados e baixar outros .debarquivos 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 configurados no sistema.

Em seguida, continue como uma instalação normal do apt. A diferença é que ele não baixa novamente o arquivo .deb principal

Questão 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.debonde n é a versão do software etc?

Os CAE existem por um motivo. O principal motivo é que eles fornecem versões mais recentes dos pacotes. E esse pacote com versão superior geralmente depende também de versões superiores de subpacotes, que também são normalmente servidos pelo PPA, não pelo repositório padrão do Ubuntu.

Cenário de exemplo:

Suponha que, um pacote chamado de mãe pacote tem a maior versão do 2.0em repositórios do Ubuntu padrão, e esta mãe-pacote depende de um pacote chamado -pacote filho da versão 2. Também suponho, alguns PPA fornece mãe-pacote de versão 3.0que requer em child-packagede 3.0, os dois estão disponíveis nesse repositório PPA.

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

Porque, ao verificar o arquivo mother-package-3.0.deb , gdebisabia que esse pacote-mãe precisa de um pacote filho da versão 3.0ou superior, mas ele sabe apenas o local da versão 2.0. Ele não sabe de onde buscar a versão 3.0do pacote filho . Isso é esperado porque, você não disse ao sistema onde conseguiu esse último pacote-mãe . Em outras palavras, você não configurou a lista de repositórios para incluir esse PPA.

Portanto, a resposta óbvia é para essa pergunta: depende . Se as dependências necessárias puderem ser encontradas em repositórios já configurados, a instalação será bem-sucedida . Caso contrário, falhará ao instalar este pacote com versão superior. É por isso que você ainda precisa de PPAs e essa é a maneira mais fácil sem fazer manualmente tudo isso.

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

Anwar
fonte
5

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

Para corrigir o problema que eu usei:

sudo dpkg -i skype.deb

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

sudo apt-get install -f

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

Moithil Biswas
fonte
2

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

Eu não sou um leitor de Python, mas o código-fonte parece fazer uma chamada aptpara obter essa lista. Obviamente, é preciso descer recursivamente para encontrar as dependências das dependências, mas aptobviamente também é possível.

Depois que todas as dependências forem elaboradas e colocadas na ordem correta (algumas dependências precisam ser instaladas antes que outras dependências possam ser instaladas), aptbasta que você instale as dependências. Em seguida, o pacote que foi dado como argumento ao Gdebi é 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, a separação das chamadas garante que todas as dependências sejam instaladas antes do pacote de destino.

James
fonte