Como criar pacotes deb através do checkinstall e do dpkg

De Fórum Debian Wiki



Criando pacotes .deb com extrema facilidade e rapidez.

Muitas pessoas nem imaginam como se cria pacotes .deb, outras conhecem várias maneiras que são complicadas, mas apenas alguns conhecem a maneira que vou falar aqui.

A criação de um pacote .deb pode ser uma das coisas mais fáceis de serem feitas no Linux.

Mas antes de ensinar como criar, vou explicar do que se trata um pacote .deb.

1 - O que são pacotes .deb?

Nada mais são do que pacotes com arquivos compactados como se fossem um .gz ou .zip, mas com funcionalidades inteligentes.

Suas principais funcionalidades são:

  1. Auto instalação;
  2. Configuração inicial automática dos programas instalados;
  3. Resolução automatica de dependências.

As dependências são programas ou bibliotecas necessárias para o funcionamento do programa que você está instalando. Se você estiver instalando um programa baseado em GTK, você terá que ter a biblioteca GTK instalada em seu sistema, caso não tenha, o pacote deb não será instalado antes que você instale a GTK. Nas distros baseadas em Debian, a resolução é feita de maneira mais automatizada ainda, porque o sistema procura em seus repositórios e já baixa e instala as dependências e o conteúdo do pacote.

Na verdade, sistemas baseados em Debian são todos construídos na base dos pacotes .deb.

2 - Criando pacotes .deb com o checkinstall.

A criação dos pacotes .deb, antes um tanto trabalhosa, torna-se bem mais fácil quando se usa o checkinstall para criá-los.

A criação é feita durante a instalação do programa escolhido para ser 'empacotado'.

Para iniciar, você terá que baixar o source do programa, depois descompactá-lo em uma pasta e fazer todo o processo de compilação com os comandos comuns como ./configure e make.

Quando você terminar de rodar os dois comandos descritos, se fosse instalar o programateria de rodar o make install, mas como você vai apenas criar um pacote .deb, em vez de rodá-lo, irá digitar checkinstall -D, que o próprio checkinstall, se encarregará de criar o pacote, o processo é simples, após rodar o comando, ele fará algumas perguntas sobre as características do pacote, como versão, arquitetura, etc. Este processo serve para quem queira apenas criar pacotes simples.

Após todo o processo deverá surgir o .deb gerado no mesmo diretório onde você digitou o comando, Pronto! Seu pacote .deb foi criado em poucos minutos e está pronto para ser usado. Simples, não é? :)

3 - Onde encontrar o checkinstall

No Debian, basta o comando aptitude install checkinstall para ter o checkinstall instalado em seu sistema.



Criando seus próprios pacotes .deb pelo próprio dpkg

Os pacotes do Debian, nada mais são do que arquivos compactados, que contém a árvore de arquivos e diretórios que serão instalados e um conjunto de arquivos de controle, que contém informações sobre o pacote e (opcionalmente) scripts que são executados antes e depois da instalação ou remoção. Quando o pacote é instalado, o apt-get ou dpkg simplesmente descompacta o arquivo e copia os arquivos para o diretório raiz, mantendo a mesma estrutura de pastas usada no pacote.

Ao criar seus pacotes, o primeiro passo é criar uma pasta contendo a estrutura de diretórios e arquivos que fazem parte do pacote. Ferramentas como o checkinstall e o dpkg-deb fazem isso automaticamente.

Ao incluir arquivos preste atenção para que estes não façam parte de outros pacotes, pois certamente será exibida uma mensagem de erro ao instalar e ao remover este pacote todos os arquivos referentes a ele serão deletados deixando o sistema com muitas dependências não satisfeitas. Caso o seu programa precise de outros arquivos como dependências aconselha-se sempre colocar os pacotes que os têm como dependências, está informação será feita num arquivo chamado "control".

Dentro da pasta com os arquivos do pacote, deve existir também uma pasta chamada DEBIAN (maiúsculas), que armazenará os arquivos de controle. O principal é o arquivo "control" onde vão as informações de controle do pacote e é obrigatória em todos pacotes .deb..

Este é o arquivo "control" do pacote frostwire:

Imagem:Exemplo2.jpg

Destes campos, os únicos realmente obrigatórios são "Package" (que contém o nome do pacote, que não pode conter pontos ou outros caracteres especiais), "Version" (a versão), "Archteture" (a plataforma a que se destina, geralmente i386), Maintainer (o nome e e-mail do mantenedor do pacote, no caso você), "Depends" (a lista de dependências do pacote, com os nomes dos pacotes separados por vírgula e espaço) e "Description", onde você coloca um texto dizendo resumidamente o que ele faz.

O campo "version" é um dos campos importantes, pois é por ele que o apt-get vai se orientar na hora de instalar o pacote. Se você lançar uma atualização do pacote mais tarde, o campo deve ser alterado. Um pacote com versão "1.1" é visto como uma atualização para o pacote de versão "1.0", por exemplo.

Tome cuidado ao usar o campo "Depends", pois marcar as dependências incorretamente pode trazer problemas para quem vai utilizar seu pacote. Deixar de marcar pacotes que são necessários, vai fazer com que muita gente instale seu pacote sem ter alguns dos outros componentes necessários, fazendo com que ele não funcione. Por outro lado, incluir um número grande de dependências vai fazer com que seu pacote seja problemático de instalar, ou mesmo seja removido em futuras atualizações do sistema, quando algum dos outros pacotes de que depende ficar indisponível, ou mudar de nome.

Ao indicar uma dependência, você pode exigir uma versão mínima, como em:

Depends: Opera: libc6 (>= 2.1.3)

Neste exemplo, o pacote exige a presença do Opera 9.63 ou mais recente, junto com qualquer versão do libc6.

Agora se você usar:

Depends: Opera: (9.63), libc6 (= 2.1.3) Aqui está exigindo versões específicas dos dois pacotes, o que faz com que seu pacote seja automaticamente removido caso um dos dois seja atualizado para uma versão mais recente.

Se o usuário realmente precisar do seu pacote, vai acabar forçando a reinstalação, ou vai tentar reinstalar as versões antigas do Opera o que vai acabar levando a problemas muito mais graves. Ou seja, a menos que absolutamente necessário, jamais exija uma versão específica; use sempre o ">=" para indicar uma versão mínima, ou apenas o nome do pacote, para deixar a versão em aberto.

Você pode adicionar também os campos "Section" (que diz a seção, dentro do gerenciador de pacotes em que o pacote será classificado) e "Priority" (o nível de prioridade do pacote, entre extra, optional, standard, important e required). Normalmente, qualquer pacote "não essencial" é marcado como "extra" ou "optional".

Este é mais um exemplo de arquivo control, usado no pacote unrar (programa que faz descompactação de arquivos):

Imagem:Exemplo3.jpg

Para criar um pacote manualmente, contendo, scripts, firmwares, documentação ou arquivos diversos, crie uma pasta contendo todos os arquivos que serão copiados, reproduzindo a estrutura de pastas da forma como serão copiadas para o diretório raiz, crie a pasta "DEBIAN" e inclua o arquivo control com as informações sobre ele.

Imagem:Exemplo.jpg


Depois de preencher o arquivo "DEBIAN/control" e verificar se todos os arquivos estão nos lugares corretos, use o comando "dpkg-deb -b" para gerar o pacote. Basta fornecer o diretório onde estão os arquivos do pacote e o nome do arquivo que será criado, como em:

# dpkg-deb -b unrar/ unrar-3.8.5-1.deb Ao examinar o arquivo gerado usando o Kpackage ou outro gerenciador, você verá que a descrição os arquivos correspondem justamente ao que você colocou dentro da pasta.

Você pode também alterar um pacote já existente, o que é especialmente útil para "arrumar" pacotes gerados automaticamente através do checkinstall, corrigindo a localização de arquivos ou alterando a descrição ou lista de dependências do pacote.

Para extrair um pacote, use o comando "dpkg -x", informando o pacote e a pasta destino, como em:

# dpkg -x unrar-3.8.5-1.deb unrar/

Este comando extrai apenas os arquivos do programa, sem incluir os arquivos de controle. Para extraí-los também, crie a pasta "DEBIAN" dentro da pasta destino e use o comando "dpkg -e", como em:

# dpkg -e unrar-3.8.5-1.deb unrar/DEBIAN/

A partir daí, você tem a árvore original do pacote dentro da pasta. Depois de fazer as alterações desejadas, gere o pacote novamente, usando o "dpkg -b":

# dpkg -b unrar/ unrar-3.8.5-1.deb

Ferramentas pessoais