Passo a Passo como Criar um Pacote no DEB

Este post tem intenção de auxiliar as pessoas que queira criar um pacote deb. Um dia estavo em uma entrevista de uma empresa, e o responsável me perguntou se eu sabia criar um pacote deb. Por curiosidade , dei uma pesquisada .

A finalidade de um pacote deb é realizar tarefas como: instalação de aplicativos, instalação de ferramentas, codecs, plugins, fazer configurações, etc.

Veja como é simples criar um pacote deb seguindo este exemplo passo-a-passo:

Passo 1 – Definir exatamente o objetivo do pacote é uma das etapas mais importante de todo processo. Para este simples exemplo será criado um pacote deb, que irá automaticamente colocar um arquivo chamado script-rlc, dentro diretório /usr/lib/cups/filter.

Passo 2 – Para dar início a criação de um pacote precisamos criar um diretório base onde toda a estrutura do pacote será montada, lembrando-se que é aconselhável que o nome deste diretório seja sugestivo em relação à funcionalidade do pacote. Para este exemplo o diretório base será chamado de “pacteste”, e este será criado dentro do diretório /tmp.

Comando necessário:

Criando o diretório pacteste:

# mkdir /tmp/pacteste

Passo 3 – Após criar o diretório pacteste, vamos criar dentro dele o diretório principal do pacote, que obrigatoriamente deverá ser chamado de DEBIAN (o nome do diretório deverá ser escrito em maiúsculo). Este é o diretório que conterá os arquivos de controle do pacote.

Comandos necessários:

Criando o diretório principal chamado DEBIAN:

# mkdir /tmp/pacteste/DEBIAN

Passo 4 – O arquivo de controle chamado “control” é de extrema importância para cada pacote deb, pois este traz informações como: nome do pacote, versão do pacote, nome do mantenedor, dependências relacionadas, descrições sobre a finalidade, entre muitas outras características.

Devido à grande importância deste arquivo, vou descrever rapidamente abaixo alguns dos campos que você poderá encontrar ao abrí-lo.

Package: (Obrigatório) – Este campo descreve o nome do pacote binário. O nome do pacote deve ser composto somente por letras minúsculas (a-z), dígitos (0-9), sinais de mais (+) e menos (-), e pontos (.). Deve ser formado por pelo menos dois caracteres e deve começar com um caráter alfanumérico.

Source: Especifica o nome do pacote fonte, mas este campo pode ser omitido de um arquivo de controle do pacote quando o pacote da fonte tem o mesmo nome e versão que o pacote binário.

Version: (Obrigatório) – Neste campo você obrigatoriamente deverá inserir a versão do pacote o qual você esta criando.

Section: (Recomendado) – Este campo especifica uma área de aplicação em que o pacote foi classificado.

Architecture: (Obrigatório) – Especifica a lista arquitetura(s) para a qual, o pacote é destinado. Exemplo de arquiteturas:

i386 ia64 alpha amd64 armeb arm hppa m32r m68k mips mipsel powerpc ppc64 s390 s390x sh3 sh3eb sh4 sh4eb sparc darwin-i386 darwin-ia64 darwin-alpha darwin-amd64 darwin-armeb darwin-arm darwin-hppa darwin-m32r darwin-m68k darwin-mips darwin-mipsel darwin-powerpc darwin-ppc64 darwin-s390 darwin-s390x darwin-sh3 darwin-sh3eb darwin-sh4 darwin-sh4eb darwin-sparc freebsd-i386 freebsd-ia64 freebsd-alpha freebsd-amd64 freebsd-armeb freebsd-arm freebsd-hppa freebsd-m32r freebsd-m68k freebsd-mips freebsd-mipsel freebsd-powerpc freebsd-ppc64 freebsd-s390 freebsd-s390x freebsd-sh3 freebsd-sh3eb freebsd-sh4 freebsd-sh4eb freebsd-sparc kfreebsd-i386 kfreebsd-ia64 kfreebsd-alpha kfreebsd-amd64 kfreebsd-armeb kfreebsd-arm kfreebsd-hppa kfreebsd-m32r kfreebsd-m68k kfreebsd-mips kfreebsd-mipsel kfreebsd-powerpc kfreebsd-ppc64 kfreebsd-s390 kfreebsd-s390x kfreebsd-sh3 kfreebsd-sh3eb kfreebsd-sh4 kfreebsd-sh4eb kfreebsd-sparc knetbsd-i386 knetbsd-ia64 knetbsd-alpha knetbsd-amd64 knetbsd-armeb knetbsd-arm knetbsd-hppa knetbsd-m32r knetbsd-m68k knetbsd-mips knetbsd-mipsel knetbsd-powerpc knetbsd-ppc64 knetbsd-s390 knetbsd-s390x knetbsd-sh3 knetbsd-sh3eb knetbsd-sh4 knetbsd-sh4eb knetbsd-sparc netbsd-i386 netbsd-ia64 netbsd-alpha netbsd-amd64 netbsd-armeb netbsd-arm netbsd-hppa netbsd-m32r netbsd-m68k netbsd-mips netbsd-mipsel netbsd-powerpc netbsd-ppc64 netbsd-s390 netbsd-s390x netbsd-sh3 netbsd-sh3eb netbsd-sh4 netbsd-sh4eb netbsd-sparc openbsd-i386 openbsd-ia64 openbsd-alpha openbsd-amd64 openbsd-armeb openbsd-arm openbsd-hppa openbsd-m32r openbsd-m68k openbsd-mips openbsd-mipsel openbsd-powerpc openbsd-ppc64 openbsd-s390 openbsd-s390x openbsd-sh3 openbsd-sh3eb openbsd-sh4 openbsd-sh4eb openbsd-sparc hurd-i386 hurd-ia64 hurd-alpha hurd-amd64 hurd-armeb hurd-arm hurd-hppa hurd-m32r hurd-m68k hurd-mips hurd-mipsel hurd-powerpc hurd-ppc64 hurd-s390 hurd-s390x hurd-sh3 hurd-sh3eb hurd-sh4 hurd-sh4eb hurd-sparc

Depends: Campo onde são declaradas todas as dependências necessárias para se fazer à instalação do pacote. O pacote não será configurado a menos que todos os pacotes alistados neste campo sejam configurados corretamente.

Installed-Size: Descreve a quantidade total de espaço em disco requerida para instalar o pacote nomeado. O espaço em disco é representado em kilobytes como número decimal simples.

Maintainer: (Obrigatório) – Contém o nome e/ou email do mantenedor do pacote.

Description: (Obrigatório) – Contém a descrição do pacote.

Passo 5 – Neste passo vamos utilizar um editor de texto qualquer (ex: vi ,mcedit, gedit, etc) para criar o arquivo control referente ao exemplo.

Estou usando gedit
Comandos necessários:

# mcedit /tmp/pacteste/DEBIAN/control

Após aberto no editor de texto mcedit, vou criar as seguintes linhas no arquivo control:

Package: pacote-rlc
Priority: optional
Version: 0.1
Architecture: i386
Maintainer: Ricardo Liyushiro Chikasawa
Depends:
Description: Este é um pacote gerado com o intuito de elucidar a criação de um pacote deb.

Passo 6 – Depois de criado o diretório DEBIAN e o arquivo de controle necessário, podemos agora começar a criar dentro do diretório base (pacteste) a estrutura de diretório exatamente igual à que desejamos após a instalação do pacote.

Opaaa…!!!, Neste ponto podem surgir algumas dúvidas, mas basta entender a idéia principal que tudo ficará claro, veja:

Conforme mencionado no passo 1, o objetivo deste pacote ao ser instalado é colocar o arquivo script-raf, dentro do diretório /usr/lib/cups/filter.

Como devo proceder?

A resposta é simples, basta criar esta estrutura de diretório (/usr/lib/cups/filter) dentro do diretório base e colocar o arquivo desejado no local onde ele deverá ser copiado após a instalação.

Lembrando que o diretório base “representa” o diretório raiz (/) do sistema.

Na prática eu entraria no diretório base e criaria o diretório usr, dentro de usr eu criaria o lib, dentro de lib o cups, dentro cups o diretório filter, e finalmente dentro de filter eu colocaria o arquivo script-rlc.

Ou simplesmente, entre no diretório base e digite o seguinte comando:

# mkdir -p usr/lib/cups/filter

OBS: Note que na frente do usr não tem o /.

No momento da instalação do pacote ele fará automaticamente a seguinte verificação partindo da raiz (/) do sistema:

Tem diretório usr na raiz (/)?

* Se sim, então entre no diretório usr;
* Senão, crie o diretório usr e entre;

Dentro de usr, tem o diretório lib?

* Se sim, então entre no diretório lib;
* Senão, crie o diretório lib e entre;

Dentro de lib, tem o diretório cups?

* Se sim, então entre no diretório cups;
* Senão, crie o diretório cups e entre;

Dentro de cups, tem o diretório filter?

* Se sim, então entre no diretório filter;
* Senão, crie o diretório filter e entre;

Dentro do diretório filter, tem o arquivo script-raf?

* Se sim, sobrescreva o arquivo;
* Senão, copie o arquivo script-raf para este diretório.

Passo 7 – Após ter criado toda a estrutura indicada no passo anterior, finalmente podemos aplicar ao diretório raiz (pacteste), o comando necessário para que, a partir deste diretório, seja gerado o pacote deb que é o nosso objetivo principal.

Sintaxe do comando:

dpkg-deb -b

Comando para gerar o pacote do exemplo:

# dpkg-deb -b /tmp/pacteste /tmp

O resultado deste comando será um arquivo chamado pacote-rlc_0.1_i386.deb dentro do diretório /tmp.

Para testar se o pacote realmente funciona, basta utilizar o seguinte comando:

Sintaxe do comando:

dpkg -i

Uma outra dica interessante é você pegar um pacote já criado, desmontá-lo e analisar como a estrutura foi criada. Para isso veja os seguinte comandos:

Comando para extrair o conteúdo de um pacote deb para dentro de um diretório:

# dpkg-deb -x /tmp/pacote

Comando para extrair o arquivo de controle de um pacote deb:

# dpkg-deb -e /tmp/pacote/DEBIAN