Gerenciamento de pacotes

Gerenciamento de pacotes

Package management
Autor original: John Frey
Publicado originalmente no:
http://distrowatch.com/
Tradução: Roberto Bechtlufft

Há poucas semanas tivemos um debate no DistroWatch sobre gerenciadores de pacotes. Acho que você vai concordar comigo quando eu digo que sempre há algo a se aprender sobre gerenciamento de pacotes. Eu dei uma pesquisada sobre o assunto e gostaria de compartilhar com vocês um pouco do que aprendi.

O que é um pacote?

A primeira coisa que precisamos saber é: o que é um pacote? Há duas maneiras de se instalar um programa. A primeira é compilando o código fonte.

# ./configure
# make
# make install

A segunda é instalando um pacote. Um pacote contém o código fonte pré-compilado e empacotado como um arquivo binário de instalação (executável). Nele podem estar ícones, bibliotecas, arquivos de configuração, binários, man pages, atalhos de desktop, headers, fontes etc. Além disso, um pacote pode conter metadados, como informações sobre versão, mantenedor do pacote, autor do software, informações de contato, licenciamento, alterações, READMEs e o site do projeto e do código fonte. Cada formato de pacote tem sua estrutura de arquivos para armazenar dados e é compactado. Quando o pacote é executado, seus dados são descompactados e copiados para o sistema de arquivos do sistema operacional, criando links simbólicos onde for necessário, atalhos no menu e no desktop e, às vezes, oferecendo opções de configuração ao usuário.

Os pacotes são criados para uma versão específica de uma determinada distribuição, pois as dependências podem variar entre distribuições e versões de uma distribuição. Às vezes é possível baixar e instalar programas como no Windows, bastando clicar no pacote, desde que ele seja compatível com o sistema operacional. Por exemplo, eu baixei e instalei o RPM do plugin do Flash da Adobe no meu Mandriva Linux. daqui a pouco eu falo mais sobre isso.

Há muitos formatos de pacotes. Os mais comuns são .tgz, .deb e .rpm. Dentre os menos comuns, .pup, .pisi, .tazpkg e .mo. O código fonte costuma ser distribuído como um arquivo tar.gz ou tar.bz2, mas algumas distribuições também distribuem seus pacotes nesses formatos. A maioria de nós usa pacotes .deb ou .rpm.

pisi

Um exemplo de ferramenta gráfica para gerenciamento de pacotes: o PiSi, do Pardus Linux

Gerenciadores de pacotes

Muito bem, agora que já sabemos o que é um pacote, o que é um gerenciador de pacotes? Resumindo, um gerenciador de pacotes instala, remove e atualiza pacotes. Essa é uma definição simples, mas um gerenciador de pacotes moderno pode fazer bem mais do que isso. Ele pode se conectar automaticamente a um repositório, baixar um programa, verificar e resolver suas dependências, listar pacotes, listar dependências, fazer buscas na lista de pacotes, ordenar a lista e adicionar e remover repositórios. Pode ainda especificar um repositório para um pacote específico e bloquear atualizações de outros pacotes, verificar os checksums e as assinaturas digitais para garantir a integridade dos pacotes, fazer atualizações automáticas e remover dependências ao desinstalar programas.

Nem todos os gerenciadores de pacotes fazem tudo isso, ou se saem bem em todas essas tarefas. Isso levou ao surgimento de diferentes gerenciadores de pacotes e, ao contrário do que se imagina, eles não fazem todos as mesmas coisas, a não ser em um nível muito superficial. Conforme você for lendo sobre eles, isso vai ficando mais claro.

Repositórios e sistemas de gerenciamento de pacotes

Os repositórios são coleções de pacotes tipicamente armazenados em um servidor remoto, mas que também podem residir localmente em um HD, CD-ROM, DVD e outras mídias de armazenamento. O importante é saber que os repositórios armazenam dados sobre pacotes em um formato específico, dependendo do gerenciador de pacotes. Por exemplo, o urpmi do Mandriva não consegue ler o repositório yum do Fedora, embora ambos contenham pacotes .rpm, e o APT do Debian não lê os repositórios do Mandriva e do Fedora. O gerenciador de pacotes, o formato dos pacotes e o repositório compõem um sistema de gerenciamento de pacotes.

pkgtool

O Slackware e seus derivados usam esse sistema. Os pacotes estão no formato tar.gz, com extensão .tgz. Ou seja, trata-se de um arquivo tar (tape archive) compactado com o gzip (gz). Na verdade, ele não é bem um gerenciador de pacotes. É só um formato de pacote e algumas ferramentas de linha de comando para criar, exibir, instalar, remover e atualizar. O sistema de empacotamento permite que scripts de instalação sejam embutidos no arquivo. Esses scripts são a única diferença entre a instalação de uma tarball (um pacote tar compactado) e a instalação um pacote do Slackware. Não há verificação de dependências, nem conexão automática a repositórios, atualizações automáticas do sistema ou verificação de checksums. Com o pkgtool, é possível acessar uma lista de pacotes instalados e removê-los, instalar pacotes ou executar scripts de instalação. Os pacotes são baixados manualmente de um repositório. Esse era o sistema que todos os gerenciadores de pacotes tentavam aperfeiçoar na época em que o Slackware Linux era a distribuição Linux dominante. O Slackware permite navegar entre os pacotes pela internet, além de oferecer feeds RSS. Os dois recursos parecem ter sido adicionados recentemente. Há também ferramentas desenvolvidas por terceiros, como SWareT, slapt-get, slackpkg e o pkgsrc do NetBSD, que ajudam no gerenciamento de pacotes do Slackware e de seus derivados. Todas essas ferramentas oferecem resolução de dependências e algumas funções avançadas.

gslapt

O Gslapt é uma interface GTK+ para o slapt-get, um sistema de gerenciamento de pacotes no estilo do APT, só que para o Slackware Linux.

Advanced Packaging Tool (APT)

O APT é usado principalmente no Debian e em seus derivados. O APT é uma biblioteca de rotinas que agem como uma interface para o dpkg, que é um gerenciador de pacotes de baixo nível (no sentido de programação, e não de qualidade) que permite instalar, desinstalar e atualizar pacotes .deb. O APT traz funções avançadas ao dpkg, dentre as quais está a resolução de dependências. O APT de hoje trilhou um longo caminho desde suas origens, mas manteve seu parentesco com o dpkg. Todos os derivados do Debian usam o APT por padrão. O desenvolvimento de novas capacidades tem se mantido num ritmo semelhante ao de outros gerenciadores de pacotes mais recentes. Não há como duvidar que o APT é um dos melhores e mais completos gerenciadores de pacotes. O APT já foi portado para o OpenSolaris e o Mac OS X, e pode ser usado em distribuições baseadas em RPM por meio do apt4rpm ou do apt-rpm.

synaptic

O Synaptic, uma popular ferramenta de gerenciamento de pacotes para distribuições baseadas no Debian, mas que também pode ser usado em outras distribuições.

RPM Package Manager (RPM)

O RPM é um formato e um gerenciador de pacotes. É tão popular quanto o APT. Embora muitas funções de alto nível tenham sido implementadas diretamente no RPM desde o início, como a verificação de dependências (mas não sua resolução), parece que não é tão fácil adicionar ao padrão RPM os recursos encontrados em outros sistemas de gerenciamento de pacotes modernos. Isso levou ao surgimento de novas ferramentas de gerenciamento de pacotes, como o YUM, urpmi, YaST, up2date e o apt-rpm, que oferecem resolução de dependências e outros recursos avançados, deixando as rotinas de baixo nível por conta do RPM. Essas rotinas são por vezes chamadas de Meta Package Managers, ou metagerenciadores de pacotes, porque gerenciam o RPM que já é um gerenciador de pacotes. O RPM foi portado para a arquitetura AIX da IBM e é o formato de pacotes padrão da LSB (a Linux Standard Base).

urpmi

O Mandriva é a única distribuição a usar o urpmi, assim como só o openSUSE usa o ZYpp. O formato do pacote é o .rpm. O urpmi é um dos primeiros (talvez o primeiro) gerenciador de pacotes RPM. Ele consiste de vários utilitários diferentes que realizam funções diversão: o urpme desinstala programas, o urpmq faz consultas ao banco de dados em busca de arquivos, o urpmi instala pacotes e por aí vai. Uma função interessante do urpmi é que ele adiciona metadados aos RPMs instalados a partir de diretórios locais. Você deve se lembrar que eu mencionei a instalação do plugin do Flash da Adobe. Eu só tive que clicar no pacote RPM, e uma caixa de diálogo surgiu perguntando se eu queria instalar, salvar ou cancelar. Eu escolhi instalar, e o urpmi adicionou o RPM a minha lista de software instalado. Com isso, eu posso usar o urpmi para desinstalar ou atualizar o plugin, desde que eu mantenha o arquivo RPM original.

mandriva

O Rpmdrake do Mandriva é uma interface gráfica para o urpmi, que é o gerenciador de pacotes padrão da distribuição.

Yellow Dog Updater Modified (YUM)

Nascido do Yellow Dog Updater (YUP), o YUM é o gerenciador de pacotes dos sistemas baseados no Red Hat e no Fedora, e usa pacotes RPM. Ele se tornou o gerenciador de pacotes padrão do Red Hat Enterprise Linux 5 e é usado por boa parte dos sistemas baseados no Red Hat e no Fedora. A modularidade é um dos principais recursos do YUM. Novos recursos podem ser adicionados ao YUM por meio de plugins e do pacote yum-utils. Há quem critique, afirmando que o YUM não é uma ferramenta suficientemente integrada, e que o desempenho e a maturidade dos módulos varia. O fato é que sua ampla adoção atesta a boa qualidade desse sistema de gerenciamento de pacotes. Há tempos a Red Hat oferece um serviço de assinatura, a RHN (Red Hat Networks), que fornece atualizações e patches . A assinatura é um serviço importante para o plano de negócios da Red Hat, e por isso ela não dedicou muito tempo ao desenvolvimento de um serviço de gerenciamento de pacotes para não assinantes. Assim, o YUM foi desenvolvido por terceiros, antes de ser adotado pela Red Hat. O RPM é o gerenciador de pacotes tradicional da Red Hat, sucedido pelo up2date e agora substituído pelo YUM.

yumex

O YumEx (Yum Extender) é uma poderosa ferramenta gráfica de gerenciamento de pacotes para distribuições baseadas no Fedora.

ZYpp

O openSUSE oferece um amplo cardápio de utilitários para o gerenciamento de pacotes. Entram-se os dados pelo rug (uma ferramenta de linha de comando) ou pelo zen-updater (uma interface gráfica), e eles são direcionados ao Zenworks Management Daemon (ZMD). O ZMD espera os comandos e os transmite aos assistentes ZMD do libzypp, que se comunicam com o banco de dados de software, processam os metadados e os transmitem ao libzypp. O libzypp resolve dependências, instala, remove e atualiza pacotes, usando o utilitário de gerenciamento de pacotes RPM. O YaST e o zipper (este último pela linha de comando) podem ser usados para comunicação direta com o libzypp. É o extremo oposto do pkgtool do Slackware. Três interfaces, dois sistemas de gerenciamento de pacotes e dois repositórios. O sistema zen-updater também acrescenta o daemon e uma camada de auxiliares (que nenhum outro sistema possui) até que o gerenciador de pacotes entre em ação para resolver as dependências e rotinas de instalação. Eu usei o sistema quando ele estreou no openSUSE 10.0. Muitos devem se lembrar que ele era bem lento, mas relatos recentes dão conta de um notável aumento na velocidade.

yast2

O YaST2 é o utilitário de administração de sistema do openSUSE, que inclui um avançado gerenciador gráfico de pacotes.

Os BSDs e as distribuições baseadas nos fontes

Nesses sistemas, um repositório contém scripts de instalação ao invés de binários pré-compilados, e a compilação é feita localmente. O Portage do Gentoo usa scripts chamados ebuilds que linkam para os fontes e contêm instruções para o compilador e as rotinas de instalação. O sistema funciona de forma semelhante a um gerenciador de pacotes, incluindo instalação, remoção, atualização e acompanhamento do software instalado, resolução de dependências etc. O Ports do BSD funciona mais ou menos assim, com scripts de instalação ao invés de pacotes. O apelo desse tipo de gerenciamento é óbvio. Os scripts de instalação são menores que os pacotes, o que exige menos dos repositórios. Trabalhar com os fontes originais geralmente significa código mais limpo e com menos “otimizações” de terceiros, embora os scripts de instalação possam conter patches. A compilação local significa que não haverá código adicional para suportar hardware que não faça parte do seu sistema, e podem ser feitas otimizações específicas para o hardware disponível. Ainda existem outras vantagens, que você pode conferir na documentação do Gentoo ou do BSD.

dbsd

O gerenciador de pacotes do DesktopBSD, o dbsd-pkgmgr, é uma ferramenta gráfica inovadora que permite a instalação de pacotes fontes e binários.

Resumo

Estes são alguns do gerenciadores de pacotes disponíveis. Espero que a leitura deste artigo tenha deixado claras as diferenças entre eles. Os primeiros gerenciadores de pacotes eram grupos de rotinas simples de instalação, remoção e atualização. Enquanto o APT foi desenvolvido para ser cheio de recursos, os gerenciadores de pacotes feitos por terceiros para o Slackware Linux são em sua maioria programas simples que adicionam resolução de dependências e um ou outro recurso. O RPM é uma evolução do gerenciador de pacotes, mais próximo de ser um sistema completo de gerenciamento de pacotes. Ele acrescentou recursos como a verificação de dependências, acompanhamento e instalação automática de pacotes e verificação de checksum. O RPM tem muito mais funções que o dpkg e menos funções que o APT. Por uma série de motivos, ao invés de adicionar funções ao RPM, os desenvolvedores criaram “metagerenciadores de pacotes” como o YUM, urpmi, Smart e o YaST. Por fim, temos o gerenciamento de pacotes baseado em scripts que usa código fonte original compilado no momento da instalação. Os repositórios baseados em scripts são menores que os repositórios de pacotes, além de exigirem menos recursos para serem mantidos quando o software é atualizado. Por outro lado, eles exigem um monitoramento cuidadoso das fontes de software para que os links dos scripts sejam válidos.

Há muitos gerenciadores de pacotes que não foram descritos aqui. Eles vão de ferramentas cheias de recursos, como o Smart, a outras mais ágeis como o Pacman do Arch Linux. Esses gerenciadores geralmente são desenvolvidos quando não há um gerenciador de pacotes que se enquadre na filosofia ou na base da distribuição. O Smart e o YUM, dentre outros, são desenvolvidos para que possam ler vários tipos de repositórios. Novos gerenciadores e metagerenciadores de pacotes não param de ser lançados. Até o Puppy tem o seu, com foco no tamanho reduzido. E existem muitas interfaces gráficas. Elas não trazem novas funções, mas aumentam a usabilidade. Eu, particularmente, prefiro uma interface gráfica para navegar pelos pacotes, da mesma forma que prefiro uma interface gráfica para navegar pelos arquivos.


Créditos a John Freyhttp://distrowatch.com/
Tradução por Roberto Bechtlufft <robertobech at gmail.com>

Sobre o Autor

Redes Sociais:

Deixe seu comentário

X