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:
dpkg
;
os detalhes são dados em sua página de manual.
.dsc
que descreve o pacote (incluindo os nomes dos arquivos
seguintes), um arquivo .orig.tar.gz
que contém o código fonte
original sem modificações, em formato tar comprimido com gzip, e normalmente
um arquivo .diff.gz
que contém as mudanças específicas para a Debian
em relação ao código fonte original. O utilitário dpkg-source
empacota e desempacota pacotes de código fonte Debian; os detalhes são
dados em sua página de manual.
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:
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
.
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:
dpkg --info foo_VVV-RRR.deb
. Isso envia uma
mensagem para STDOUT (saída padrão) que informa, entre outras coisas, o Nome do Pacote
correspondente ao arquivo sendo desempacotado.
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.
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.
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
.
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:
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').
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.
Este script geralmente pára quaisquer daemons que estejam associados a um pacote. É executado antes da remoção de arquivos associados ao pacote.
Este script normalmente modifica links (ligações)
ou outros arquivos associados a foo
. (Veja notas sobre
pacotes virtuais.)
/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.)
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:
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).
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.
"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.
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:
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).
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.
Veja o manual do programador do dpkg e o manual de políticas da Debian