Download de pacotes .deb com todas suas dependências

Apesar do mundo estar cada vez mais conectado à Internet, às vezes enfrentamos alguns problemas que nos impossibilitam de ter o acesso à rede. Um exemplo interessante seria a mudança de casa e o pedido de transferência de um serviço ADSL para um novo endereço, por exemplo.

Vivendo este problema necessitava instalar o pacote gphpedit no computador em casa. Porém não encontrava nenhuma maneira fácil de fazê-lo devido à quantidade de depedências que eu precisava copiar através da rede de um amigo e levá-las em um dispositivo móvel de armazenamento qualquer: um pendrive, cd ou algo do tipo.

Poderia até utilizar o Synaptic para procurar o devido pacote e gerar através dele um script para fazer o download das dependências, mas o objetivo era fazer diretamente pelo console.

Cheguei até a improvisar um shell script para fazer isso, mas a solução era limitada, pois o script pegava somente as dependências do gphpedit. Se alguma biblioteca necessária para a instalação do gphpedit precisasse também de uma outra biblioteca ou pacote, o script não a pegava.

Foi daí que recebi uma dica do Theo para usar o apt-rdepends e conseguir listar recursivamente todas as dependências. O único problema é que ele não tem a capacidade de fazer o download destes pacotes diretamente. E novamente tive que montar um script para fazer isso.

Uma  nota é que o apt-cache também proporciona a listagem de dependências do pacote, mas não de maneira recursiva.

Caso queira ver as dependências pelo apt-cache apenas rode:

# apt-cache depends nomedopacote

Não conhecia o apt-rdepends pois não vem instalado por padrão no Debian/Ubuntu. Para instalá-lo rode:

# aptitude install apt-rdepends

Bom, depois ainda resta um trabalhinho sujo para criar o script, mas é bem fácil. Antes de começar crie um diretório para que na inicialização dos downloads os pacotes não fiquem espalhados.

# mkdir gphpedit

# cd gphpedit

Para criar o script faça:

# apt-rdpends gphpedit > depends.sh

# chmod u+x depends.sh

# vi depends.sh

Na primeira linha do arquivo adicione o interpretador: #!/bin/bash

Substitua o nome dos pacotes que possuem dependências com o seguinte comando no vi:

ESC +  :%s/^[a-z]/#\1/g

Note que agora todos os pacotes ficaram com um comentário na frente. O próximo passo é alterar o valor dos termos “Pré-Depende:” ou “Pre-Depends:” para “aptitude download”. Novamente no vi faça:

ESC + :%s/Pré-Depende:/aptitude download/g

(Se seu sistema estiver na língua inglesa utilize “Pre-Depends”:).

Agora altere somente os termos “Depende:”  da mesma maneira:

ESC + :%s/Depende:/aptitude download/g

(Se seu sistema estiver na língua inglesa utilize Depends:).

Ficou faltando apenas um detalhe. Apagar as informações sobre versões delimitadas entre parênteses. Nada que uma pequena expressão regular não ajude:

ESC + %s/\((.\+\)//g

Bom, agora é só executar seu script e esperar pelo download.

# ./depends.sh

3 comentários até agora

  1. hugomaia on

    Opa!
    Rapaz, utilizei sua ideia desse post como base para a criação de um script.
    Seu post me ajudou bastante!!!
    Depois dá uma olhada: http://hugomaia.wordpress.com/2009/04/11/faca-download-de-pacotes-deb-e-de-todas-suas-dependencias-diretas-e-indiretas/

    []’s

    • thiagoribeiro on

      aowpa.. tudo é válido… :)

  2. Luiz Gavaza on

    Muito bom!

    Excelente dica.


Leave a reply