terça-feira, 1 de março de 2011

Como criar um pacote .deb da maneira correta

É grande o número de tutoriais disponíveis na Internet, principalmente em sites nacionais, que ensinam a criar pacotes .deb, utilizados pelas distros derivadas do Debian, de uma forma totalmente incorreta e desatualizada. A maioria ensina que devemos criar uma pasta com a estrutura de arquivos do pacote em questão junto a uma pasta DEBIAN com um arquivo de controle, ou mencionam o uso de ferramentas como CheckInstall. Segundo o site WebUpd8, tais procedimentos estão já desatualizados: o CheckInstall, por exemplo, segundo o site, não criará links para as dependências, significando que o pacote em questão apenas funcionará na máquina local. Mais assustador ainda é o número de "mantenedores" das distros nacionais que utilizam estas formas ultrapassadas de empacotamento, mostrando que eles não possuem o conhecimento técnico necessário para levar adiante um projeto de grande porte. O The Debian New Maintainers' Guide mostra uma nova maneira de se criar pacotes .deb, que é seguida pelas distros atuais e, neste post, vamos aprender esta maneira correta de se criar um pacote .deb, de acordo com o tutorial do site webupd8.


Neste exemplo, o autor do artigo empacotou o plugin x264.


Para criar um pacote .deb, primeiramente certifique-se de que você tem todas as dependências requeridas para compilar o pacote. Basicamente, tente compilá-lo primeiro e, se você puder fazê-lo, isto significa que tudo está instalado corretamente e você pode criar o pacote .deb.


1. Instale todos os pacotes necessários para criar um pacote .deb


Para fazer isso, digite:


sudo apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder


2. Preparação da pasta e do código-fonte


Extraia o arquivo (geralmente .tar.gz) da aplicação cuja qual você deseja criar o pacote .deb e renomeie a pasta que foi criada no processo com algo similar a nomedopacote-versaodopacote. Cabe lembrar que o nome da pasta deve estar em letras minúsculas.


Por exemplo: se você estiver compilando uma versão do pacote x264 que você baixou do SVN, digamos a versão 0.1+svn20100107, você deve renomear a pasta como 0.1+svn20100107.


Importante: Você deve começar empacotando com um diretório completamente limpo (puro), ou simplesmente com fontes recém descompactado.


Depois disso, coloque o pacote .tar.gz com os fontes um diretório acima de onde os arquivos fontes foram extraídos. Por exemplo: Se você deseja compilar X264, você pode colocar a pasta "x264-0.1 + svn20100107" contendo os arquivos de origem na sua pasta pessoal (/home/yourusername/x264-0.1+svn20100107) e o arquivo tar.gz também em sua pasta home, o que significa que ele não deve estar dentro da pasta x264_0.1+svn20100107. (Em outras palavras: a pasta com os arquivos extraídos e o arquivo .tar.gz devem estar no mesmo nível de pastas. N. do T.) Caso você não tenha o arquivo .tar.gz com os fontes, simplesmente crie um com o conteúdo da pasta.


3. Comece a "Debianização"


Eu usarei os arquivos do X264 em meu exemplo, para explicações mais fáceis. (você deve adaptá-los de acordo com o que estiver empacotando. N. do T.) Para começar a "Debianização", rode os seguintes comandos:



cd x264-0.1+svn20100107
dh_make -e youremail@address -f ../x264-0.1+svn20100107.tar.gz


Onde x264-0.1+svn20100107 é a pasta dos arquivos do aplicativo que você deseja criar o pacote .deb, x264-0.1+svn20100107.tar.gz é o arquivo tar.gz dos arquivos fonte originais e youremail@address é o seu endereço de email.


Isto deve ser exibido após rodar o comando acima:



Type of package: single binary, indep binary, multiple binary, library, kernel
module, kernel patch or cdbs?
[s/i/m/l/k/n/b]


Nós não vamos entrar em coisas complicadas agora, então selecione "s" (binário simples). Em seguida, aperte "Enter" para confirmar.


Por favor, note que você deve rodar dh_make apenas uma vez e que ele não irá se comportar corretamente se você executá-lo novamente no mesmo, já "debianizado", diretório.


4. O arquivo de Controle


Provavelmente o passo mais importante é como você edita o arquivo de controle. Esse arquivo contém vários valores que dpkg, dselect e outras ferramentas de gerenciamento de pacotes vão utilizar para gerenciar o pacote.


Este arquivo será criado após completar-se o passo 3 e você poderá encontrá-lo na pasta "debian" na pasta contendo seus arquivos fonte. Ele inicialmente se parece com:



1 Source: x264
2 Section: unknown
3 Priority: extra
4 Maintainer: andrei
5 Build-Depends: debhelper (>= 7), autotools-dev
6 Standards-Version: 3.8.1
7 Homepage:
8
9 Package: x264
10 Architecture: any
11 Depends: ${shlibs:Depends}, ${misc:Depends}
12 Description:



Eu numerei as linhas para facilitar as explicações. Não vou explicar o que já está evidente, porém.


Por agora, introduza um homepage (linha 7) e uma descrição (linha 12) para o pacote e também uma seção, como "X11", na linha 2.


Agora, um passo muito importante: nós precisamos entrar com as dependências de construção na linha 5. Para saber quais arquivos nosso pacote precisa, execute o seguinte comando:



dpkg-depcheck -d ./configure


No fundo, a saída deste comando deve ser algo como isto:



Packages needed:
libc6-i686
libldap-2.4-2
libsasl2-2
libtasn1-3
yasm
libgpg-error0
libgcrypt11
libkeyutils1
libidn11
libgnutls26
libk5crypto3
locales
libcurl3-gnutls
libkrb5support0
libkrb5-3
libgssapi-krb5-2
gawk


Entre com todos estes pacotes na linha 5 do arquivo de controle, separadas por uma vírgula e um espaço. Não remova os pacotes já existentes na linha 5!


Aqui está como o meu arquivo de controle se parece agora:



Source: x264
Section: X11
Priority: extra
Maintainer: Andrew
Build-Depends: debhelper (>= 7), autotools-dev, libc6-i686, libldap-2.4-2, libsasl2-2, libtasn1-3, yasm, libgpg-error0, libgcrypt11, libkeyutils1, libidn11, libgnutls26, libk5crypto3, locales, libcurl3-gnutls, libkrb5support0, libkrb5-3, libgssapi-krb5-2, gawk
Standards-Version: 3.8.1
Homepage: http://www.videolan.org/developers/x264.html

Package: x264
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: x264 is a free library for encoding H264/AVC video streams.


Depois disso, salve o arquivo.


5. O arquivo "copyright"


Na mesma pasta "debian", você encontrará um arquivo "copyright" que você precisa editar. As coisas importantes a adicionar neste arquivo são o lugar de onde você obteve o pacote e a nota de copyright e licença atuais. Você precisa incluir a licença completa, a menos que seja uma das licenças de software livre comum, como GNU GPL ou LGPL, BSD ou the Artistic license, onde você pode apenas referir ao arquivo apropriado no diretório /usr/share/common-licenses/, que existe em cada sistema Debian.


6. O arquivo "changelog"


Também na mesma pasta "debian", este arquivo é muito importante, especialmente para assinar o seu .deb com sua chave GPG. Importante: o nome do mantenedor no arquivo de changelog deve ser exatamente o mesmo como foi entrado para a chave GPG; então, edite-o e insira seu nome. Aqui está o exemplo de como se parece o meu:



x264 (0.1+svn20100107-1) unstable; urgency=low

* Initial release (Closes: #nnnn)

-- andrei Sat, 09 Jan 2010 22:40:24 +0200


Se você inserir o nome incorreto, você obterá uma mensagem de erro.


7. Construindo o pacote .deb atual


Para construir o pacote, rode o seguinte comando:


dpkg-buildpackage -rfakeroot


Se você completou o passo 6 com sucesso, você deve ser perguntado pela sua chave GPG. Digite-a e continue. O arquivo deb. deve agora ser criada em seu diretório home, juntamente aos arquivos .dsc, .changes, .diff.gz e .orig.tar.gz.

Um comentário:

  1. Obrigado,

    Estou estudando o assunto e suas dicas são realmente muito boas.

    Parabéns

    ResponderExcluir