Página seguinte Página anterior Índice

7. Fundamentos do Sistema de Gerenciamento de Pacotes Debian

7.1 O que é um pacote Debian?

De modo geral, pacotes contêm todos os arquivos necessários para implementar

um conjunto de recursos ou comandos relacionados. Existem dois tipos de pacotes Debian:

A instalação de software pelo sistema de pacotes usa "dependências"

que são cuidadosamente designadas pelos mantenedores dos pacotes. Essas dependências são documentadas no arquivo control associado a cada pacote. Por exemplo, o pacote que contém o compilador GNU C (gcc) "depende" do pacote binutils, que inclui o "linker" e o montador (assembler). Se um usuário tentar instalar o gcc sem antes instalar o binutils, o sistema de pacotes da Debian mostrará uma mensagem de erro indicando que o usuário também precisa do binutils, e instalará o gcc apenas se o usuário concordar em instalar o binutils antes. (Apesar disso, esse recurso pode

ser desativado pelo usuário insistente.) Veja mais detalhes sobre dependências de pacotes abaixo.

As ferramentas de empacotamento da Debian podem ser usadas para:

7.2 Qual é o formato de um pacote de binários Debian?

Um "pacote" Debian, ou um arquivo Debian, contém os arquivos executáveis, bibliotecas e documentação associados com um conjunto particular de programas. Normalmente, o nome de um arquivo Debian termina em .deb.

O formato interno do pacote de binários Debian é descrito na página de manual deb(5). Esse formato interno está sujeito a mudanças, portanto use sempre dpkg-deb para manipular arquivos .deb.

7.3 Por que os nomes de pacotes Debian são tão longos?

Os nomes de pacotes de binários Debian seguem a seguinte convenção: <foo>_<NúmerodeVersão>-<NúmerodaRevisãoDebian>.deb

Note que foo é supostamente o nome do pacote. Para verificação, pode-se descobrir o nome do pacote associado a um arquivo Debian particular (.deb) através de um dos seguintes meios:

O componente VVV é o número de versão especificado pelo desenvolvedor original do programa. Não existem padrões aqui, então o número de versão pode ter formatos tão diferentes quanto "960428" e "2.7.2.l.3".

O componente RRR é o número da revisão Debian, e é especificado pelo desenvolvedor Debian (ou um usuário individual, se ele decidir construir o pacote para si). Esse número corresponde ao nível de revisão do pacote Debian (o que inclui o Makefile específico da Debian, chamado debian/rules, além do arquivo de controle Debian, normalmente chamado debian/control). Então, um novo nível de revisão normalmente significa mudanças no Makefile da Debian, no arquivo de controle Debian, nos scripts de instalação ou remoção ou nos arquivos de configuração usados com o pacote.

7.4 O que é um arquivo de controle Debian?

Detalhes sobre o conteúdo de um arquivo de controle Debian podem ser encontrados no manual do programador do dpkg. Resumidamente, um arquivo de controle de exemplo é mostrado abaixo para o pacote Debian hello:

Package: hello
Version: 1.3-13
Architecture: i386
Depends: libc5 (>= 5.2.18)
Installed-Size: 31
Maintainer: Ian Jackson <ian@chiark.greenend.org.uk>
Description: The classic greeting, and a good example
 The GNU hello program produces a familiar, friendly greeting.  It
 allows nonprogrammers to use a classic computer science tool which
 would otherwise be unavailable to them.
 .
 Seriously, though: this is an example of how to do a Debian package.
 It is the Debian version of the GNU Project's `hello world' program
 (which is itself an example for the GNU Project).

O campo Package indica o nome do pacote. Esse é o nome pelo qual o pacote pode ser manipulado pelas ferramentas para pacotes, e é normalmente similar, mas não necessariamente o mesmo, à primeira parte do nome do arquivo do pacote Debian.

O campo Version indica tanto o número de versão do desenvolvedor original quanto o nível de revisão (na última parte) do pacote Debian deste programa, como explicado em pkgname .

O campo Architecture especifica o processador para o qual este binário em particular foi compilado.

O campo Depends mostra uma lista de pacotes que devem estar instalados para se conseguir instalar este pacote com sucesso.

O campo Installed-Size indica quanto espaço em disco o pacote instalado consumirá. Este campo foi colocado para uso dos programas de instalação, a fim de mostrar se há espaço suficiente disponível para instalar o programa.

O campo Maintainer indica o endereço eletrônico da pessoa responsável pela manutenção deste pacote.

O campo Description mostra um breve resumo das características do pacote.

7.5 O que é um conffile Debian?

Conffiles são listas de arquivos de configuração, normalmente colocados em /etc, que o sistema de gerenciamento de pacotes não sobrescreverá quando um pacote for atualizado. Isso garante que valores locais para os conteúdos desses arquivos serão preservados, e isso é uma qualidade crítica que permite a atualização de pacotes enquanto o sistema está funcionando.

Para determinar exatamente que arquivos são preservados durante uma atualização, execute dpkg --status pacote.

7.6 O que são os scripts Debian preinst, postinst, prerm e postrm?

Esses arquivos são scripts executáveis que são rodados automaticamente antes ou depois de um pacote ser instalado. Juntamente com um arquivo chamado control, todos esses arquivos são parte da seção "control" de um arquivo Debian.

Os arquivos individuais são:

preinst

este script é executado antes que o pacote seja descompactado de seu arquivo Debian (".deb"). Muitos scripts 'preinst' páram serviços de pacotes que estejam sendo atualizados até que sua instalação ou atualização esteja completa (após a execução correta do script 'postinst').

postinst

Este script normalmente completa qualquer configuração necessária do pacote foo depois que foo seja descompactado de seu arquivo Debian (".deb"). Muitas vezes, scripts 'postinst' pedem informações ao usuário, e/ou avisam-no que se ele aceitar valores padrão, deve lembrar-se de reconfigurar o pacote conforme a necessidade. Muitos scripts 'postint' executam quaisquer comandos necessários para iniciar ou reiniciar um serviço uma vez que o novo pacote tenha sido instalado ou atualizado. É uma boa idéia checar o conteúdo do script 'postinst' para qualquer aviso sobre a configuração quando estiver experimentando um pacote pela primeira vez.

prerm

Este script geralmente pára quaisquer daemons que estejam associados a um pacote. É executado antes da remoção de arquivos associados ao pacote.

postrm

Este script normalmente modifica links (ligações) ou outros arquivos associados a foo. (Veja notas sobre pacotes virtuais.)

Atualmente todos os arquivos de controle podem ser encontrados em /var/lib/dpkg/info. Os arquivos relevantes ao pacote foo começam com o nome "foo", e têm as extensões "preinst", "postinst", etc., conforme apropriado. O arquivo foo.list naquele diretório lista todos os arquivos que foram instalados com o pacote foo. (Perceba que a localização desses arquivos é um aspecto interno do dpkg; você não deve depender disso.)

7.7 O que é um pacote Required/Important/Standard/Optional/Extra (Obrigatório/Importante/Padrão/Opcional/Extra)?

A cada pacote Debian é atribuída uma prioridade designada pelos mantenedores da distribuição, para auxiliar o sistema de gerenciamento de pacotes. As prioridades são:

7.8 O que é um pacote virtual?

Um pacote virtual é um nome genérico que se aplica a qualquer elemento de um grupo de pacotes, onde todos oferecem funcionalidade básica similar. Por exemplo, ambos os programas tin e trn são leitores de news, e devem então satisfazer qualquer dependência de um programa que exija um leitor de news em um sistema para funcionar ou ser útil. Diz-se que ambos oferecem o "pacote virtual" chamado news-reader (leitor de news).

Analogamente, smail e sendmail oferecem a funcionalidade de um MTA ("mail transport agent", ou agente de transporte de correio). Diz-se então que ambos oferecem o pacote virtual "agente de transporte de correio". Se qualquer um deles está instalado, programas que dependam de um mail-transport-agent (agente de transporte de correio) serão satisfeitos pela existência deste pacote virtual.

A Debian fornece um mecanismo tal que, se mais de um pacote oferecendo o mesmo pacote virtual estiver instalado em um sistema, então os administradores podem selecionar um deles como o pacote preferencial. O comando relevante é update-alternatives, que é descrito adiante na seção sobre diversions (desvios).

7.9 O que significa dizer que um arquivo Depends/Recommends/Suggests/Conflicts/Replaces/Provides (Depende/Recomenda/Sugere/Entra_em_conflito_com/Substitui/Oferece) outro pacote?

O sistema de pacotes Debian tem uma gama de "dependências" entre

pacotes que são planejadas para indicar (em um único campo) o nível no qual o Programa A pode operar independentemente da existência do Programa B em um dado sistema:

Informações mais detalhadas sobre o uso desses termos podem ser encontradas no manual do programador Debian.

7.10 O que significa Pré-Dependência?

"Pré-Dependência" é uma dependência especial.

No caso da maioria dos pacotes, o dpkg descompactará seu arquivo (ou seja, seu arquivo .deb) mesmo que os arquivos dos quais ele depende não existam no sistema. De forma simples, descompactar significa que o dpkg irá extrair o conteúdo do arquivo que deveria ser instalado em seu sistema de arquivos, e o colocará no seu lugar correto. Se aquele pacote depende da existência de outros pacotes no seu sistema, o dpkg se negará a completar a instalação executando sua ação "configure" até que os outros pacotes sejam instalados.

Entretanto, para alguns pacotes, o dpkg se negará mesmo a descompactá-los até que certas dependências sejam resolvidas. Diz-se que tais pacotes "pré-dependem" ("Pre-Depends") da presença de outros pacotes. O projeto Debian criou este mecanismo para dar suporte a atualização segura de sistema a partir do formato a.out para o formato ELF, onde a ordem em que os pacotes eram descompactados era crítica.

Mais informações detalhadas sobre o uso desses termos podem ser encontradas no manual do programador Debian.

7.11 O que significa unknown/install/remove/purge/hold (desconhecido/instalar/remover/apagar/conservar) no estado do pacote?

Essas indicações mostram o que o usuarios quis fazer com um pacote (conforme indicado pelas ações do usuário na seção de "Seleção" do dselect, ou pelas invocações diretas do dpkg). Seus significados são:

7.12 Como instalo um pacote de código fonte?

Pacotes Debian de código fonte não são "instalados", eles são apenas descompactados no diretório em que você quiser construir os pacotes de binários que eles produzem. Pacotes de código fonte são distribuídos em um diretório chamado source, e você deve baixá-los manualmente (ou seja, não há uma ferramenta como dselect ou dpkg-ftp para pegar pacotes de código fonte).

7.13 Como construo pacotes de binários a partir de um pacote de código fonte?

Você precisará dos arquivos .dsc, .tar.gz e .diff.gz para compilar o código fonte (não há .diff.gz para um pacote Debian nativo). Uma vez que você os tenha, se você tem o pacote dpkg-dev instalado, o comando

dpkg-source -x foo_versão-versãodeb.dsc

extrai o pacote em um diretório chamado foo-versão. Se você quer apenas compilar o pacote, pode entrar em foo-versão e digitar o comando

debian/rules binary

como root.

7.14 Onde posso encontrar informações detalhadas sobre como criar pacotes Debian?

Veja o manual do programador do dpkg e o manual de políticas da Debian


Página seguinte Página anterior Índice