Pesquisa em LivreSocial

domingo, 9 de março de 2008

Conversa sobre repositórios no Debian

Introdução
O Linux levanta muitas opiniões, algumas favoráveis, outras nem tanto. Ao longo da história dos SO baseados no kernel Linux surgiram muitas distribuições, e caíram muitas também. Na plataforma PC, das mais antigas e que resistem ao tempo, lembro de:
  • Debian
  • RedHat
  • Slackware
Destas derivaram muitas, destas muitas se foram. Nunca experimentei o Slackware, ainda vou o experimentar, o RedHat foi meu princípio, meu primeiro SO de kernel Linux instalado em uma máquina, e resisti muito ao Debian .

Aliás foi muito interessante instalar o RH5.4 (se não me engano) que acompanhava o livro Linux para Leigos. Como a maioria, eu me achava um técnico por andar com um monte de cópias não autorizadas de softwares em uns trocentos disquetes. Quase 4 meses depois, quando eu consegui finalmente instalar aquilo, depois de ter digitado a senha de root, um cursor pisca à minha frente, e eu me perguntava: E agora ? Nada de mouse, GUI, enfim, apenas linha de comando.

A partir deste martírio, o César da SEF/RJ me apresenta a uma caixa ORIGINAL do SuSE. MUITO melhor, achei eu, pois havia uma GUI. Agora podia experimentar muito mais coisas visuais. Logo eu, do tempo do Wordstar, Lotus 1-2-3, Prince of Persia (nunca consegui passar de fase nenhuma neste jogo), me via rendido e dependente do ambiente gráfico. Não que fosse ou seja ruim. É um ganho de produtividade inegável. Mas eu queria fazer valer meus tempos de CP/M (poucos), CP500, Apple ][ e MSDOS nos XTs. Assim tirei minha certificação Conectiva (alguém lembra?).

Depois disto tudo, comecei a olhar para o projeto Debian, cheio de má impressão, o querendo minimizar (nem sei por qual motivo) frente ao mercado com suas contrapartes: Red Hat e Conectiva. E de cara, o que se destacou foi o sistema de atualização de pacotes.

- Vocês, que vivem afundados em linhas de comando, são loucos. instalar qualquer software nestes SO é uma loucura, por conta destas dependências. Me diga, como vocês conseguem viver com isto ?

Pacotes
No princípio, para instalar qualquer software, todas as dependências teriam que ser resolvidas na mão. Terrível isto. No Debian, eu li aqui sobre pacotes, e que quem realmente gerencia os pacotes é o comando dpkg. Então, para instalar o ytree, basta digtar o seguinte comando:

# dpkg -i ytree.deb

O comando dpkg usa a opção -i para instalar o arquivo ytree.deb, que é o pacote de instalação do ytree.

Como todo curioso, dei uma olhada nas opções básicas do dpkg:

# dpkg --help

Não vou reproduzir aqui esta lista monstruosa, mas vou lhes dar uma dimensão do tamanho da listagem, para os que não estão usando Debian:

# dpkg --help | wc -l
79

Ou seja, esta telinha de help tem 79 linhas. Não acreditei nisso, mas me chamou a atenção uma linha no final do arquivo:

Use `dselect' ou `aptitude' para gerenciamento de pacotes amigável.

Nem tudo está perdido. Definitivamente dpkg não é amigável. Então, dei uma olhada no man do aptitude, na parte do "Veja também", e achei o apt-get. Como eu já havia lido sobre esta ferramenta no Manual Foca, fui dar uma olhada rápida nele e achei o seguinte:

# apt-get --help | wc -l
41

Bom, 41 linhas de help parecem mais amigáveis que as 79.

- Amigável ? 41 linhas de texto de "ajuda" ? fala sério !!!!

Repositórios
É preciso entender alguns conceitos antes. Repositório é um site de onde o apt-get vai buscar o pacote a ser instalado. Assim é possível instalar qualquer software em qualquer lugar que eu esteja, bastando apenas me conectar à internet.

- Mas que raio de site é este ? como o apt-get vai saber dele?

Os repositórios são organizados pelo pessoal do Debian. De fato, todo Linux que usa a idéia de repositórios tem a responsabilidade de manter uma ordem ou organização dentro desta "caixa de pacotes" virtual. E no site do Debian, encontro a lista atualizada dos repositórios primários e secundários.

- Agora que entornou o caldo mesmo ... que troço é isso ?

Um repositório primário tem (em geral) boa velocidade de acesso, disponibilidade 24/7 e um nome no padrão ftp.PAÍS.debian.org. Vejam um exemplo de parte da lista dos repositórios primários:

Austria ftp.at.debian.org/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
Belgium ftp.be.debian.org/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
Brazil ftp.br.debian.org/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
Bulgaria ftp.bg.debian.org/debian/ alpha amd64 arm armel hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
Canada ftp.ca.debian.org/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc

É interessante confirmar que nem todas as arquiteturas disponíveis em um repositório estão disponíveis em outro.

Já as secundárias são mais restritas no que disponibilizam. Vejam um exemplo:

Brazil
ftp.br.debian.org
(debian.c3sl.ufpr.br)
/debian/ /debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
debian.das.ufsc.br /pub/debian/
amd64 i386
debian.las.ic.unicamp.br /debian/ /debian/ amd64 i386 powerpc sparc
debian.pop-sc.rnp.br
/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
download.unesp.br
/linux/debian/ alpha amd64 arm armel hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
ftp.pucpr.br /debian/
amd64 hurd-i386 i386
linorg.usp.br /debian/ /debian/ i386
linux.iq.usp.br
/debian/ amd64 i386
sft.if.usp.br
/debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc

Bulgaria
ftp.bg.debian.org
(debian.spnet.net)
/debian/ /debian/ alpha amd64 arm armel hppa i386 ia64 m68k mips mipsel powerpc s390 sparc
debian.ludost.net /debian/ /debian/ i386
debian.mnet.bg /debian/ /debian/ i386
debian.networx-bg.com /debian/ /debian/ amd64 i386
debian.telecoms.bg /debian/ /debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc
ftp.uni-sofia.bg /debian/ /debian/ alpha amd64 arm armel hppa hurd-i386 i386 ia64 m68k mips mipsel powerpc s390 sparc

São apresentadas aqui tanto as URL baseadas em http como as baseadas em FTP. Repare a participação das instituições de ensino aqui no Brasil.

- Até agora muita falação. Mas afinal, como o tal do apt vai saber quem acessar ?

Configurando o apt
Agora que os endereços são conhecidos, posso "ensinar" ao meu apt qual repositório usar. É interessante que não se configure o apt para pegar pacotes de muitos repositórios, o que vai aumentar o tempo do processo, uma vez que cada um deles serão "consultados". Além disso, as consultas serão realizadas do primeiro repositório para o último.

O apt usa o arquivo /etc/apt/sources.list para relacionar os repositórios. A seguir um exemplo:

# cat /etc/apt/sources.list
deb http://ftp.br.debian.org/debian/ etch main non-free contrib
deb http://ftp.br.debian.org/debian/ testing main non-free contrib
deb http://security.debian.org/ etch/updates main contrib non-free

O arquivo é em texto plano, não sendo necessário editor especial. Cada linha do arquivo é dividida em componentes, como demonstrado aqui.

- Eta trabalho danado, quero ver se isso funciona mesmo.

Apesar de tudo que foi falado até aqui, apenas fizemos a edição de um único arquivo. Mas vamos agora deixar os conceitos para começar a prática.

Listas
Imagine uma revenda de auto-peças, que trabalhe com diversos distribuidores. Se o ono da revenda não receber catálogos atualizados de cada fornecedor, ele pode vender algo que saiu de linha ou deixar de vender algo novo. Com repositórios, é exatamente o que acontece. Quando uma atualização de pacote ocorre, é preciso baixar a lista atualizada de cada fornecedor. Então, sempre antes de instalar ou atualizar algo, é preciso pegar as listas atualizadas:

# apt-get update

O apt vai em cada repositório descrito no /etc/apt/sources.list buscar uma cópia da lista disponível. Esta lista é um arquivo em texto plano, que pode ser lida normalmente:

# ls /var/lib/apt/lists/
ftp.br.debian.org_debian_dists_etch_contrib_binary-i386_Packages
ftp.br.debian.org_debian_dists_etch_main_binary-i386_Packages
ftp.br.debian.org_debian_dists_etch_non-free_binary-i386_Packages
ftp.br.debian.org_debian_dists_etch_Release
ftp.br.debian.org_debian_dists_etch_Release.gpg
ftp.br.debian.org_debian_dists_testing_contrib_binary-i386_Packages
ftp.br.debian.org_debian_dists_testing_contrib_binary-i386_Packages.IndexDiff
ftp.br.debian.org_debian_dists_testing_main_binary-i386_Packages
ftp.br.debian.org_debian_dists_testing_main_binary-i386_Packages.IndexDiff
ftp.br.debian.org_debian_dists_testing_non-free_binary-i386_Packages
ftp.br.debian.org_debian_dists_testing_non-free_binary-i386_Packages.IndexDiff
ftp.br.debian.org_debian_dists_testing_Release
ftp.br.debian.org_debian_dists_testing_Release.gpg
lock
partial
security.debian.org_dists_etch_updates_contrib_binary-i386_Packages
security.debian.org_dists_etch_updates_main_binary-i386_Packages
security.debian.org_dists_etch_updates_non-free_binary-i386_Packages
security.debian.org_dists_etch_updates_Release
security.debian.org_dists_etch_updates_Release.gpg

Vamos conferir o conteúdo de um destes arquivos:

# cat /var/lib/apt/lists/ftp.br.debian.org_debian_dists_etch_contrib_binary-i386_Packages

Package: atari800
Priority: optional
Section: contrib/otherosfs
Installed-Size: 1192
Maintainer: Antonin Kral
Architecture: i386
Version: 2.0.2-1
Depends: libc6 (>= 2.3.6-6), libncurses5 (>= 5.4-5), libpng12-0 (>= 1.2.8rel), libsdl1.2debian (>= 1.2.
10-1), libx11-6, zlib1g (>= 1:1.2.1)
Filename: pool/contrib/a/atari800/atari800_2.0.2-1_i386.deb
Size: 466840
MD5sum: 31fff148c23ab9aff7c99b7cdc9dbd08
SHA1: d949b61bb3e9c6e9a68e9fe6f41261991d83252b
SHA256: a2ca6ccaa4d839d33abcddf905bf9369f4fd3a35488bbaf571409fa685d5d084
Description: Atari emulator for X/curses/SDL
This is an Atari emulator that can use X, plain curses or SDL.
It can emulate the Atari 800, 800XL, 130XE, and 5200 systems.
.
The Atari Operating System ROMs are not available with this package, due to
copyright. You'll have to either make copies of them from an old Atari
computer, or see README.Debian for other ways to obtain them.
Tag: hardware::emulation, uitoolkit::ncurses, uitoolkit::sdl

Package: autorespond
Priority: optional
Section: contrib/net
Installed-Size: 32
Maintainer: Sam Johnston
Architecture: i386
Version: 2.0.5-1
Depends: libc6 (>= 2.3.5-1)
Suggests: qmail
Filename: pool/contrib/a/autorespond/autorespond_2.0.5-1_i386.deb
Size: 9698
MD5sum: 341434bc04cab6dea3d570964c2dcb38
SHA1: c91ea5f14d6b2f4b1db52ad6ada9c45456a678c7
SHA256: 9c7aed5f08027febb36dd9de3ba81af006b35c4ccb9e4f41d66e99976ef613b8
Description: email autoresponder for qmail
autorespond sends an automatically generated response to emails for given
address(es). It catches simple situations such as mail from a mailer-daemon,
empty envelope sender, bulk precedence headers, etc.
Tag: works-with::mail
Package: autorespond
Priority: optional
Section: contrib/net
Installed-Size: 32
Maintainer: Sam Johnston
Architecture: i386
Version: 2.0.5-1
Depends: libc6 (>= 2.3.5-1)
Suggests: qmail
Filename: pool/contrib/a/autorespond/autorespond_2.0.5-1_i386.deb
Size: 9698
MD5sum: 341434bc04cab6dea3d570964c2dcb38
SHA1: c91ea5f14d6b2f4b1db52ad6ada9c45456a678c7
SHA256: 9c7aed5f08027febb36dd9de3ba81af006b35c4ccb9e4f41d66e99976ef613b8
Description: email autoresponder for qmail
autorespond sends an automatically generated response to emails for given
address(es). It catches simple situations such as mail from a mailer-daemon,
empty envelope sender, bulk precedence headers, etc.
Tag: works-with::mail

Claro que esta lista contêm muito mais do que apenas a descrição destes dois pacotes.

# grep -i package\: /var/lib/apt/lists/ftp.br.debian.org_......_binary-i386_Packages| wc -l
248

Nesta lista estão relacionados 248 pacotes. Observe que o passo acima é apenas para demonstrar o conteúdo de uma lista. Esta procedimento é completamente desnecessário.

- Coisa "pá" caramba. Mas até agora nada foi instalado. Demora muito ainda ?

Instalação de pacotes
Agora tudo fica fácil. Se eu quiser instalar o ytree, basta digitar o seguinte:

# apt-get install ytree

Os detalhes da instalação foram relatados aqui.

- Agora estou entendendo ... Ele instalou direto do reositório, né ?

Cache de pacotes
Não. A instalação segue este passo a passo:
  1. Instala pacote do cache, se existir
  2. Se não, copia do repositório para o cache, e o instala.
Antes de ser instalado, todo pacote passa para o cache, que fica no diretório /var/cache/apt/archives, como se pode ver aqui (apenas um trecho):

# ls /var/cache/apt/archives/
acpid_1.0.4-7.1_i386.deb
adduser_3.102_all.deb
adduser_3.105_all.deb
akregator_4%3a3.5.8-1_i386.deb
alacarte_0.11.3-1_all.deb
alsa-base_1.0.15-3_all.deb
alsa-utils_1.0.15-1_i386.deb
amor_4%3a3.5.8-1_i386.deb
amsn_0.97-1_i386.deb
amule_2.1.3-1_i386.deb
amule_2.1.3-4+b1_i386.deb
amule_2.1.3-4_i386.deb
amule-common_2.1.3-1_all.deb
amule-common_2.1.3-4_all.deb
amule-utils_2.1.3-1_i386.deb
amule-utils_2.1.3-4+b1_i386.deb
amule-utils_2.1.3-4_i386.deb

Pode ser interessante copiar estes arquivos, além dos arquivos de lista para uma mídia RW e copiar para outras estações. Assim, reduziríamos o tempo de download dos pacotes.

- Agora eu sei que é uma coisa mal-feita mesmo. Daqui a pouco, meu HD vai estar entupido com isto !!!

Manutenção do cache
Com certeza isto pode acontecer. Por isso podemos limpar versões mais antigas ou mesmo zerar o cache por completo.

# apt-get autoclean

Pacotes ultrapassados, que porventura estejam ocupando espaço para nada, serão apagados. Podemos ver isso no exemplo do amule:

~# ls /var/cache/apt/archives/amule*
/var/cache/apt/archives/amule_2.1.3-1_i386.deb
/var/cache/apt/archives/amule_2.1.3-4+b1_i386.deb
/var/cache/apt/archives/amule-common_2.1.3-1_all.deb
/var/cache/apt/archives/amule-common_2.1.3-4_all.deb
/var/cache/apt/archives/amule-utils_2.1.3-1_i386.deb
/var/cache/apt/archives/amule-utils_2.1.3-4+b1_i386.deb

Mas pode ser que todo o cache tenha que ser apagado, por algum motivo.

# apt-get clean

- Ah sim ... acho que então entendi ...

Depois poderemos estar vendo alguns macetes na administração de pacotes.

2 comentários:

Wallacy disse...

Olá!!

Bem, até te enviei um email, creio que você não recebeu.

Você enviou essa noticia para o meibit, e como a regra lá é exclusividade, não publicaram pois já tinha em seu blog.

Mesmo assim, se você me permitir gostaria de fazer um tutorial sobre repositórios e se possível aproveitar as informações que você já colocou no seu sobre o debian.

Gilberto Martins disse...

Olá Wallacy.

No dia 15/03 lhe mandei um email, até mesmo acabei de repetir este email.

Mas pode aproveitar este texto sim, sem problemas.

Security Fix

Dicas-L: Dicas técnicas de Linux e Software Livre

 
Creative Commons License
Blog Livre e Social by Gilberto Martins is licensed under a Creative Commons Atribuição 2.5 Brasil License.