terça-feira, 17 de setembro de 2013

Gerenciamento de pacotes com o APT


Introdução


"No princípio era o .tar.gz. Usuários tinham que compilar cada programa que quisessem usar em seus sistemas GNU/Linux. Quando o Debian nasceu, uma nova forma de gerenciamento de pacotes tornou-se necessário. Para este sistema, foi dado o nome dpkg. Este famoso 'pacote' foi o primeiro a chegar nos sistemas GNU/Linux, enquanto antes a Red Hat decidiu criar seu próprio sistema 'RPM'.
Um novo dilema rapidamente tomou conta das mentes dos criadores do GNU/Linux. Eles precisavam de um método rápido, prático e eficiente para instalar pacotes, que deveriam gerenciar automaticamente as dependências e cuidar dos arquivos de configuração ao atualizá-los. Aqui novamente, o Debian mostrou o caminho e deu vida ao APT, o 'Advanced Packaging Tool', que posteriormente foi portado pela Conectiva para uso com o RPM e foi adotado por outras distribuições."

Comandos


A maioria destes comandos requer sudo!
Substitua "nome_pacote" ou "termo" pelo programa que você quer instalar ou procurar.
  • apt-get update - Execute este comando se você mudou o /etc/apt/sources.list ou /etc/apt/preferences. Também execute-o periodicamente para ter a certeza que sua lista de fontes fique sempre atualizada.
  • apt-get install nome_pacote - instala um novo pacote (veja também aptitude, abaixo)
  • apt-get remove nome_pacote - remove um pacote (os arquivos de configuração não são excluídos)
  • apt-get --purge remove nome_pacote - remove um pacote (os arquivo de configuração também sçao excluídos)
  • apt-get upgrade - atualiza todos os pacotes instalados
  • apt-get dist-upgrade - atualiza o sistema todo para uma nova versão
  • apt-cache search termo - procura por "termo" na lista de pacotes disponíveis
  • dpkg -l nome_pacote - lista os pacotes instalados que casam com "nome_pacote". Na prática use '*nome_pacote*', a não ser que você saiba o nome completo do pacote.
  • aptitude - O Aptitude é uma interface em modo texto para o sistema de pacotes Debian GNU/Linux e derivados. Assim como o apt-get, permite ver a lista de pacotes e realizar operações como instalação, atualização e remoção de pacotes, porém parece tratar um tanto quanto melhor a questão das dependências.
  • apt-cache showpkg pacotes - mostra informações sobre os pacotes
  • apt-cache dumpavail - mostra uma lista de pacotes disponíveis.
  • apt-cache show pacotes - mostra registros dos pacotes, igual a dpkg --print-avail.
  • apt-cache pkgnames - rápida listagem de todos os pacotes instalados no sistema.
  • dpkg -S nome_arquivo - qual foi o pacote que instalou este arquivo?
  • dpkg -L pacote - Mostra os arquivos instalados pelo pacote.
  • apt-file search NomeArquivo - Este comando procura por um pacote, não necessariamente precisa estar instalado, que inclua o arquivo passado junto a linha de comando (NomeArquivo. Ou seja, muito útil para localizar facilmente arquivos individuais dentro de pacotes que ainda nem se encontram instalados no seu sistema.
  • apt-get autoclean - Execute este comando periodicamente para excluir os arquivos .deb que não estão mais instalados no seu sistema. Pode-se ganhar uma grande quantidade de espaço em disco fazendo isso. Se você está desesperado por espaço em disco, apt-get clean é mais radical, e removerá todos os arquivos .deb, mesmo de pacotes instalados. Como na maioria dos casos você não precisa destes arquivos .deb, não hesite em usar este comando quando precisar de uns megas extras.
  • apt-cdrom add - Comando utilizado para adicionar um CD ao arquivo /etc/apt/sources.list do APT, fazendo assim com que o apt-get procure também neste CD por pacotes.

Usos típicos


Eu quero sentir o vento no meu cabelo, quero a adrenalina da velocidade. Então vamos instalar um jogo de corrida. Mas quais jogos de corrida estão disponíveis para mim?
apt-cache search racing game

Ele me dá um monte de respostas. Vejo um jogo chamado "torcs". Quero mais informações sobre este jogo.
apt-cache show torcs

Hummm, parece interessante. Mas será que este jogo já está instalado no meu computador? E qual é a versão disponível? Está no repositório main ou universe?
apt-cache policy torcs

Tá bem, vamos instalá-lo!
apt-get install torcs

Qual é o comando que eu devo digitar no terminal para iniciar este jogo? Neste exemplo, parece óbvio o nome do comando ("torcs"), mas nem sempre é assim, fácil descobrir. Uma forma de achar o comando que deve ser executado é olhando quais arquivos este pacote instalou em "/usr/bin". Jogos ficam em "/usr/games". Programas administrativos ficam em "/usr/sbin".
dpkg -L torcs|grep /usr/games/

A primeira parte deste comando mostra todos os arquivos instalados pelo pacote "torcs" (experimente). Na segunda parte, nós dizemos que só quero que ele mostre os arquivos dentro de "/usr/games/".
Uau, esse jogo é legal. Será que existem outras pistas/caminhos pra ele?
apt-cache search torcs

But I'm running out of space. I will delete the apt cache!
apt-get clean

Oh não, minha mãe mandou eu remover todos os jogos deste computador. Mas eu quero manter os arquivos de configuração para o caso de uma futura reinstalação.
apt-get remove torcs

Se eu quisesse remover tudo, inclusive os arquivos de configuração:
apt-get remove --purge torcs

Pacotes adicionais


deborphan e debfoster são ótimos para encontrar pacotes órfãos e não necessários que podem ser removidos.

Configurando o apt-get para funcionar através de proxy


Existem três métodos para usar o apt-get através de proxy.
Método 1.
Este é um método temporário que você pode usar manualmente cada vez que precisar usar o apt-get através de um proxy. Use este método para situações temporárias.
Digite esta linha em um terminal imediatamente antes de usar o apt-get (substitua servidor_proxy e porta_proxy pelos dados reais).
export http_proxy=http://servidor_proxy:porta_proxy

Método 2.
Este método usa o arquivo apt.conf, encontrado no diretório /etc/apt. Use-o se você quer que somente o apt-get (e não outras aplicações) use um proxy HTTP permanentemente.
Nota: Em algumas instalações pode ser que não exista ainda do arquivo apt.conf. Se for este o caso, você deve cria-lo.
sudo gedit /etc/apt/apt.conf

Adicione esta linha ao seu arquivo apt.conf, substituindo obviamente o servidor_proxy e porta_proxy pelos dados necessários:
Acquire::http::Proxy "http://servidor_proxy:porta_proxy";



Acquire::http::Proxy "http://usuario:senha@servidor_proxy:porta_proxy";

Salve o arquivo. Para maiores detalhes sobre as configurações do apt.conf consulte seu manual com o comando abaixo.
man apt.conf

Método 3.
Este método adiciona duas linhas no seu arquivo .bashrc, no seu diretório $HOME. Ele é útil se você quer que o apt-get e outras aplicações (por exemplo: wget) usem um proxy http.
gedit ~/.bashrc

adicione estas linhas no final do seu arquivo .bashrc (substitua servidor_proxy e porta_proxy pelos dados reais):
http_proxy=http://servidor_proxy:porta_proxy
export http_proxy

Salve o arquivo. Feche o terminal e abra outro.
Teste o funcionamento do proxy com sudo apt-get update ou com qualquer outro programa que desejar.
se você cometeu algum erro e alterou o arquivo novamente, lembre-se de fechar o terminal e abri-lo novamente. As alterações não entrarão em vigor até que você faça isso.

Resolvendo problemas


O apt-get é uma ferramenta desenvolvida para ser usada em servidores e outras aplicações importantes. Isto significa que ele foi desenvolvido para ser o mais confiável possível e nunca realizar nenhuma modificação potencialmente perigosa para o sistema, a menos que autorizado por você. Quando qualquer coisa inesperada acontece, ele para e fica esperando sua confirmação antes de fazer qualquer outra coisa.
O problema desta abordagem é que às vezes um defeito em algum pacote ou um download corrompido pode fazer com que o APT fique "travado", sem concluir a instalação de um determinado pacote por causa de um erro qualquer e sem aceitar instalar outros antes que o problema inicial seja resolvido.
Basicamente, quando encontrar este tipo de problema, você deve:
  1. Rodar o apt-get update para ter certeza de que a lista de pacotes do APT se encontra atualizada.
  2. Execute o comando apt-get -f install para usar o sistema de resolução de problemas do APT.
  3. Caso ele não resolva, experimente usar o dpkg -i --force-all para forçar a instalação do pacote com problemas, ou use o dpkg -r nome_do_pacote caso prefira desistir da instalação.
  4. Execute o comando dpkg --configure -a, para verificar todas pendências na configuração dos pacotes.
  5. Rode novamente o apt-get -f install. Caso ele não resolva, experimente o apt-get -f remove, que tem uma função similar à do "-f install", mas dá preferência a remover os pacotes com problemas, ao invés de tentar corrigir a instalação.

  • Debian Apt-howto também disponível em forma de pacote: *apt-howto*

Dicas e Truques


1. Definindo prioridade entre os repositórios
Por vezes se faz necessário definirmos determinadas prioridades entre os repositórios para que o APT possa sempre baixar algum pacote de determinado repositório desejado. Para conseguirmos esta condição devemos editar o arquivo /etc/apt/preferences de modo a incluir no mesmo o pacote desejado, a fonte do repositório e o número que irá definir o grau de prioridade respeitando a sintaxe do exemplo abaixo.


Vejamos um exemplo:
Package: nome_pacote
Pin: origin http://www.debian-multimedia.org
Pin-Priority: 620

Package: nome_pacote
Pin: origin http://www.ibiblio.org
Pin-Priority: 610

Package: nome_pacote
Pin: origin http://www.argon.org
Pin-Priority: 600

Desta forma o pacote (nome_pacote) será atualizado pelo repositório que tiver maior prioridade, mesmo que um repositório de menor prioridade tenha uma versão mais recente do mesmo, no caso, será atualizado a partir dos repositórios em http://www.debian-multimedia.org.
2. Prender versão do pacote
Em determinadas ocasiões pode se fazer necessário prender algum pacote em uma versão especifica, impedindo que o mesmo seja atualizado em seu sistema mesmo que o tenha sido em algum repositório que tenhamos configurado.
Vamos imaginar a seguinte situação, temos um determinado programa que funciona muitíssimo bem e o mesmo é atualizado nos repositórios. Porém sabemos que esta nova versão não funciona corretamente em nosso sistema, então como proceder para mantermos a versão funcional do pacote sem sermos importunados pelo update-notifier com a nova versão disponível.
Como na dica anterior basta editarmos o arquivo /etc/apt/preferences de modo a informar no mesmo qual versão queremos manter para determinado pacote. A sintaxe é semelhante a da dica anterior, porém se fazendo respeitar o exemplo abaixo.
Package: nome_pacote
Pin: version 0.5.3*
Pin-Priority: 600
Desta forma o pacote nome_pacote cuja versão desejada é a 0.5.3* não será atualizado e nem notificado para atualização, independente de uma nova versão estar disponível em seus repositórios. Notar que podemos incluir vários pacotes desejados neste arquivo, bastando apenas disponibiliza-los um-a-um abaixo do outro parecido com o que fizemos no exemplo da dica anterior.
Related Posts Plugin for WordPress, Blogger...