Diversos lugares na internet explicam de maneira complicada de como criar um pacote debian, vou passar um resumo de como fazer um pacote de forma simples.
Seguindo a estrutura do nosso aplicativo de testes:
aplicativo
aplicativo\meu_arquivo
Primeiro vamos instalar tudo que é necessário:
sudo apt-get install dh-make and debhelper devscripts dpkg-dev cdbs lintian
Vamos alterar o nome da pasta do aplicativo ou criar um link simbolico para ele:
mv aplicativo aplicativo-1.0
ou
ln -s aplicativo aplicativo-1.0
Dessa forma já conseguimos acessar o diretório com a versão do nosso aplicativo.
cd aplicativo-1.0
Agora precisamos criar os arquivos básicos, para isso usamos o dh_make que fará toda a mágica:
dh_make -e [email protected] -s --createorig
O dh_make vai criar o básico do pacote, -e irá colocar o email informado nas descrições do pacote ( facilita o/ ), -s é a opção de pacote single ou seja, será gerado somente um pacote para o aplicativo mas isso não impede de futuramente criar mais de um pacote e por fim o --createorig que é o cara que cria o tar pra gente, dessa forma mesmo sem ter feito um tar com o código fonte ele já fará isso para nós. Esse passo é conhecido com “debianização” do pacote.
Nesse ponto já podemos fazer um teste com o comando de build do pacote:
dpkg_buildpackage
Também podemos conferir o conteúdo do nosso pacote:
dpkg -c ../aplicativo_1.0-1_i386.deb
Ele não irá mostrar nenhum conteúdo, afinal não colocamos nada dentro do pacote só criamos a estrutura básica.
Toda a estrutura básica do pacote foi criada dentro de uma pasta aplicativo-1.0/debian onde vamos ver rápidamente sobre alguns dos arquivos chaves.
Alem do dh_make existem diversos outros dh_* que fazem diversas ações dos pacotes, segue alguns:
dh_install -> instala os arquivos informados pelos arquivos .install seguindo o formato: ORIG -> DESTdh_installdirs -> cria os diretórios informados seguindo o formato: DEST/DEST2
dh_fixperms -> ajusta as permissões dos arquivos do pacote nos diretórios debuild.
Sobre a edição desses arquivos recomendo utilizar o VIM com highlights habilitado, quem não tiver o VIM:
Como root, instale o pacote vim-runtime, ou apenas digite:
$ cd ~ $ sudo apt-get install vimDepois de instalado, precisamos criar um arquivo no diretório home do usuário.
$ echo ":syntax enable" >> .vimrcCom isso seu VIM já estará ok.
Tanto no changelog quando nos outros arquivos é bom tomar muito cuidado ao editar, pois ele pode "quebrar" e não irá empacotar.
Nesse arquivo colocamos o histórico de alteração
Exemplo do arquivo:
aplicativo (1.0-1) unstable; urgency=low * Initial release (Closes: #nnnn) <nnnn is the bug number of your ITP>
-- seu nome < [email protected]> Tue, 09 Aug 2011 14:54:06 -0300
A data é algo que muita gente erra e quebra o pacote, então altere com cuidado seguindo o padrão já existente.
O arquivo control tem a seguinte estrutura padrão:
Source: aplicativo Section: unknown Priority: extra Maintainer: Seu Nome Completo < [email protected] > Build-Depends: debhelper (>= 6) Standards-Version: 3.9.1 Homepage: http://www.aplicativo.com.br/Nesse arquivo, Source contém as informações do código fonte, Package pra baixo são informações referentes aos pacotes que serão construidos. Por exemplo, ao invés de somente um pacote quisermos criar mais de um com conteúdos distintos:Package: aplicativo Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends} Description: Descrição resumida do pacote Descrição extendida do pacote.
Source: aplicativo Section: unknown Priority: extra Maintainer: Seu Nome Completo < [email protected] > Build-Depends: debhelper (>= 6) Standards-Version: 3.9.1 Homepage: http://www.aplicativo.com.br/ Package: aplicativo Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends} Description: Descrição resumida do pacote Descrição extendida do pacote.
Package: aplicativo-extras Architecture: all Depends: ${shlibs:Depends}, ${misc:Depends} Description: Descrição resumida do pacote que tem os extras Descrição extendida do pacote de extras...
O arquivo de copyright contém a licença utilizada neste software e no seu empacotamento. O arquivo rules é o arquivo que vai controlar a construção do pacote. Ele possui o formato de um Makefile e deve ser editado para atender às nossas necessidades ao gerar o pacote, por padrão ele não vem quase nada:#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # # Modified to make a template file for a multi-binary package with separated # build-arch and build-indep targets by Bill Allombert 2001Porém com isso ele irá executar todos os dh_* padrões, então é melhor sempre criar seu próprio rules com sómente o básico do seu pacote, exemplo:#export DH_VERBOSE=1
export DH_OPTIONS
%: dh $@
#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. export DH_VERBOSE=1 DESTDIR=$(CURDIR)/debian/tmp LIBDIR=$(DESTDIR)/conteudo clean: dh_clean rm -rf $(DESTDIR) build: dh_testdir dh_prep dh_installdirs install: binary-indep: build install dh_testdir dh_testroot dh_install -X/usr/share/man --fail-missing dh_installman dh_installchangelogs dh_installdocs dh_lintian dh_link dh_compress dh_fixperms dh_makeshlibs dh_installdeb dh_shlibdeps dh_gencontrol dh_md5sums dh_builddeb binary: binary-indep
Cuidado ao criar seu próprio rules já que "Com grandes poderes vem grandes responsabilidades", pois ele é um makefile e você pode colocar vários comandos la dentro mas de forma a não destruir os padrões do debian.
Se precisar utilizar algum comando do sh para pegar alguma variável ou até mesmo o describe do git, pode se utilizar $$ para fazer referência à comandos do sh e não variáveis do makefile:
echo $$(git describe) > debian/nome_pacote/version.txt
Pra facilitar, não vamos mexer nesse cara e usar o padrão.
OBS.: Esse arquivo é identado com TAB e não com espaços, para facilitar a edição é melhor usar o VIM pois ele já mostra se está com erro ou não.Lembra dos dh_* ? Hora de usar esses poderes!
Vamos criar um arquivo aplicativo.install dentro do diretório debian que irá conter os arquivos que vamos copiar da nossa aplicação para o computador com o seguinte conteúdo:
meu_arquivo /opt/local/aplicativo
Vamos criar um arquivo aplicativo.dirs dentro do diretório debian que irá conter os diretórios da nossa aplicação com o seguinte conteúdo:
/opt/local/aplicativo
Com isso já podemos realizar o build do pacote:
dpkg_buildpackage
E finalmente podemos conferir o conteúdo do nosso pacote:
dpkg -c ../aplicativo_1.0-1_i386.deb
Pacote criado! o/
Excelente!
Eu ajustei algumas coisas de sintaxe em um fork:
https://gist.github.com/guicruzzs/af08c53f1aa34897f624
Abração