Pesquisando, achei a função apt-cache depends. Porém ela lista apenas as dependências diretas do pacote. Mas precisava de uma função que listasse todas as dependências, inclusive as dependências das dependências. Foi quando encontrei o blog do Thiago Ribeiro. Lá encontrei a dica do apt-rdepends, que lista recursivamente todas as dependências de um dado pacote, e a ideia geral que usei para construir o meu script.
Como o apt-rdepends não vem instalado no Ubuntu, instale-o rodando no terminal:
sudo apt-get install apt-rdepends
Em seguida, rode o apt-rdepends para ver como é a sua saída. Assim, terá uma noção melhor de como funciona o script. Rode por exemplo:
apt-rdepends python
Serão listadas todas as dependências e as dependências das dependências, necessárias para a instalação do pacote python.deb, recursivamente.
O script na verdade é composto por dois scripts - um em shell script e o outro em python - e sua ideia básica de funcionamento é a seguinte:
- O script downloadDependencies.sh baixa o pacote informado e salva um arquivo depends.txt contendo a saída do atp-rdepends para este pacote. Em seguida é invocado o script downloadDependencies.py que, através de expressões regulares, trata o arquivo depends.txt gerando um shell script depends.sh que irá fazer o download de todas as dependências do pacote. Por existirem pacotes que são dependência de mais de um pacote, provavelmente este arquivo conterá entradas repetidas para baixar um mesmo pacote mais de uma vez. Porém esse não eh um problema, já que o apititude download não baixa pacotes já existentes na pasta.
- O script salva o pacote e suas dependências em uma pasta com o seu nome e apaga todos os arquivos gerados para o seu uso. O único arquivo que não é apagado é o depends.txt que contém a arvore de dependências e vai servir para saber qual a ordem dos pacotes a serem instalados.
Uma segunda etapa seria criar um script para instalar ordenadamente os pacotes. Mas isso fica para um outro post, quando tiver um outro feriado para ter um tempo livre para me divertir. =P
Nenhum comentário:
Postar um comentário