APT vs Portage
23 Jun, 2007 por esquiso
Bem, neste artigo vou por frente-a-frente dois pesos pesados de "Package Management": o Portage, manager por excelência do Gentoo Linux, e o APT, aquele com que a maioria está mais familiarizado, o manager dos sistemas Debian-based (Debian [obviamente], Ubuntu e derivados).
Introdução:
Actualmente, o APT (Advanced Packaging Tool) é um dos package managers mais utilizados. Arriscaria a dizer "o mais utilizado", graças à actual e crescente popularidade que o Ubuntu veio trazer ao GNU/Linux e, consequentemente, ao manager que vem por defeito no seu sistema, o APT.
Ele é nada mais, em termos de programação, uma library de funções escritas em C++ (conhecida como libapt).
O APT é descrito segundo a documentação oficial como "(…) a rapid, practical, and efficient way to install packages that would manage dependencies automatically and take care of their configuration files while upgrading.".
A verdade é que o APT (e tudo o que o rodeia) foi pioneiro. O dpkg foi o primeiro package manager do mundo GNU/Linux, ainda antes da Red Hat se ter lembrado das rpm's. O APT foi também o primeiro, e este sistema foi portado pela Conectiva para usar com as rpm's e adoptado por outras distros.
O Portage é o gestor de pacotes do Gentoo Linux e é idolatrado pelos seus utilizadores. E é provável que tenham razões para isso. Trabalha de forma semelhante ao APT, mas a forma como trata os pacotes (como iremos ver mais para a frente) faz toda a diferença.
Este manager é baseado, alias, completamente escrito, em duas linguagens de scripting, o Python e o Bash.
É constituído por duas partes principais, o ebuild (basicamente, é um script automatizado sobre a maneira como as compilações e os procedimentos de instalação se devem desenrolar) e o emerge ("o coração do Portage", a ferramenta que nos permite trabalhar com o Portage via consola)*
* side note: ambos os conceitos de ebuild e emerge vão ser desenvolvidos mais à frente
Vantagens:
Agora, chegou a altura de aprofundar-mos mais esta "estória", vendo efectivamente as maiores vantagens de cada package manager. Comecemos então pelo APT.
- Na minha opinião de parco entendedor, é perfeitamente acessível ao mais comum dos desentendidos (vulgarmente chamados n00bs neste mundo informática) sem andar a ler muita documentação.
- A ENORME variedade de .deb's nos repositórios. Só nos repositórios oficiais do Debian (e friso bem, só nos oficiais) ultrapassam os 17.000 pacotes.
- 4 front-end de elevada qualidade, quer usando libs GTK como libs QT, ou mesmo, no caso do aptitude, excelente para substituir o típico apt-get na consola. - Possibilidade de usar CD-ROM's como sources de software. - Com ajuda de uma aplicação (Alien), é extremamente fácil transformar .deb's em outros formatos, e vice-versa.
- A enorme userbase que as distros Debian-based têm, podem ajudar a uma mais rápida resolução de problemas.
Passemos então ao Portage:
- Devido a uma série de complexos (ou nem por isso) mecanismos que irei seguidamente tentar explicar, o Portage faz com que o Gentoo seja o expoente máximo da personalização e da optimização, senão vejamos:
- As USE flags são uma serie de "argumentos" que dizem ao Portage o que deve ser instalado ou não do código fonte. Bastante simples: se tivermos definida a USE flag "gtk", todos os programas passam a ser compilados com o suporte para GTK. Se usarmos a flag "-qt" todos os programas deixam de vir com libs QT. Isto faz com que as compilações sejam mais rápidas, o sistema mais rápido, pois tem menos "coisas" para carregar.
- A personalização de como a compilação ocorre é levada ao extremo. Podemos definir exactamente qual o nosso tipo de processador, as optimizações que queremos para os programas, o nosso tipo de sistema …
- Apesar de as USE flags serem globais, podemos definir USE flags para um só pacote. Fazendo USE="flag x" emerge <pacote y> irá fazer com que, apesar de não haver uma USE flag global, aquele pacote seja compilado com suporte para a flag x.
- Nos updates, é possível definir a que tipo de pacotes queremos fazer update: aos pacotes que foram expressamente instalados por nós ou a todos os pacotes ou mesmo a metapackages (conjunto de várias dependências [o Gnome, i.e., é um metapackage]).
- O emerge, anteriormente referido como o "coração do Portage", é uma ferramenta tão poderosa como costumizável. É possível ver que dependências é que o pacote precisa, quanto pesa o pacote, etc. Uma das features mais fascinantes do emerge é o que acontece durante a compilação de um pacote. A verdade, é que o pacote, após ter sido descarregado de um dos servidores anteriormente definidos, "ebuilda" (as in, utiliza o ebuild) num ambiente "caixa de areia" (em inglês, sandbox); isto faz com que, caso hajam erros no processo, os sistema não seja afectado com isso, e só após um ebuild completado com êxito neste ambiente sandbox, é que é feito merge com o nosso sistema.
- O ebuild, como já foi aqui anteriormente explicado, é um script que determina a maneira como as compilações correm, etc etc etc. Aprofundando um bocadinho isto, podemos facilmente perceber que isto não se fica por aqui. Existem cerca de 25.000 ebuilds disponíveis (lembram-se de terem ficado pasmados com os 17.000 .deb's do Debian?). O update dos ebuilds é feito com um simples emerge –sync na consola.
- Não me vou alongar mais, apesar de ainda haver mais por onde explorar, mas ainda me acusam de ser Portage fanatic (coisa que não acontece :P)
Desvantagens:
Nem tudo são rosas, por isso, vamos lá mostrar o reverso da moeda:
APT:
- Once again, na minha opinião, o apt esta a ficar pesado. É um facto, o search demora mais do que devia. As vezes, nota-se alguma lentidão aqui ou ali. Está na altura de haver uma limpeza.
- Ok, não consigo encontrar mais um defeito devidamente fundado, é tudo baseado nas minhas interpretações pessoais, e não quero estar a dar um toque demasiado pessoal ao artigo.
Portage:
- O Portage não é tão n00b-friendly como o APT. Envolve alguma leitura de documentação. A verdade, é que há documentação a dar com o pau.
- Apesar de haverem pacotes pré-compilados para algumas aplicações que demorem mais a fazer o emerge, como o OpenOffice e o Mozilla Firefox, tais aplicações só estão disponíveis para x86, deixando de fora sparc, ppc, ia64..
Front-ends
O que é um Front-end?
"At the OS level, the concept of a graphical user interface (GUI) can be thought of as a front-end for the system (for general users), while the command line or "TUI" is sufficiently technical to be considered a back-end. This often applies to software packages as well, which may have both graphical interfaces (front) as well as command-line scripts (back)."
Basicamente, e resumindo em português o que leram em cima, é uma GUI para os package managers. É verdade, eles existem, mas na verdade, não dão o poder inerente aos gestores em si, via CLI.
Tem então, alguns dos mais conhecidos/utilizados com uma breve descrição
APT:
- Synaptic - usa as libs do GTK, tendo sido inicialmente desenvolvido pela Conectiva para o seu sistema apt-rpm. Provavelmente, o mais conhecido dos front-ends. Também existe a opção KDE, o Kynaptic, mas fica um bocado atrás do original
- aptitude - quase tão antigo como o proprio APT, substitui o apt-get. A popularidade deste front-end de consola tem vindo a crescer ultimamente.
- KPackage - não exclusivo do APT, mas também funciona com tal gestor. Usa libraries QT
- Adept Package Manager - provavelmente, o Synaptic do KDE. Acho que não precisa de muitas descrições.
Portage:
- Porthole - GTK, muito versátil e flexível. Uma excelente opção.
- Kuroo - QT, oferece todas as opções do emerge, suporta a edição das USE flags
- KPackage - Sim, também funciona aqui
Links a Consultar:
Depois de ter aberto e fechado tantas tabs, é natural que se tenha perdido um ou outro link, mas os principais estão cá:
http://en.wikipedia.org/wiki/Advanced_Packaging_Tool
http://en.wikipedia.org/wiki/Portage_(software)
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=1
http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=3
http://www.debian.org/doc/manuals/apt-howto/
http://wiki.linuxquestions.org/wiki/Portage
http://wiki.linuxquestions.org/wiki/Apt


![Validate my RSS feed [Valid RSS]](http://validator.w3.org/feed/images/valid-rss.png)