Documentos:
- Guia do novo mantenedor (pacote maint-guide-pt)
- Manual de políticas Debian (pacote debian-policy)
Algumas anotações de uma palestra/curso rápido sobre como criar pacotes para o Debian:
Criar chroot com debootstrap (sid)
– Copiar para dentro do chroot /etc/apt/sources.list /etc/resolv.conf /etc/hosts
– Edite o sources.list e mude para usar apenas sid
mount -t proc proc sid_directory/proc
chroot sid_directory
aptitude install debhelper devscripts dh-make build-essential emacs devscripts-el
# Ex: criando um pacote para o programa Hello
wget ftp.gnu.org/gnu/hello/hello-2.1.1.tar.gz
mkdir -p /var/tmp/pacotes
cp hello-2.1.1.tar.gz /var/tmp/pacotes/
cd /var/tmp/pacotes/
tar xzf hello-2.1.1.tar.gz
cd hello-2.1.1
# O diretorio deve seguir o padrao nomesoftware-versao
dh_make -f ../hello-2.1.1.tar.gz -c gpl
dh_make
- É bom usar as variáveis de ambiente DEBFULLNAME e DEBEMAIL para que o dh_make já configure automaticamente o nome e e-mail do mantenedor.
- Criará subdiretório debian
- Arquivos que podem ser editados possuem extensão .ex (de exemplo): cron.d.ex, init.d.ex, …
- Estes arquivos podem ser comentados/descomentados no arquivo debian/rules
Arquivos terminando em .ex, .EX – arquivos de exemplo. Caso sejam usados, deve-se retirar a extensão .ex, caso um arquivo não seja usado ele pode ser removido.
- nomedopacote.doc-base.EX: lista arquivos de documentação do pacote.
- nomedopacote-default.ex: Neste caso (hello-default.ex) ele pode ser apagado (arquivo de configuração em /etc/defaults)
- manpage.1.ex – Todo pacote debian deve ter uma manpage. Caso o original não tenha uma, você deverá escrevê-la. Se já houver uma, apague este arquivo.
- menu.ex – Entrada de menu para este programa.
- postinst.ex, preinst.ex – scripts de pós- e pré-instalação. Nem sempre usados. Manter marcação DEBHELPER.
- watch.ex – script para procurar uma nova versão do pacote na internet.
Arquivos não .ex
- compat: Versão do debhelper (man debhelper para mais detalhes).
- changelog: Log de mudanças do pacote. Manter o formato atual:
- nome (versao) unstable; urgency=x
- x é a urgência da atualização deste pacote; pacotes com correções de segurança deverão ser urgentes.
- control: descrição do pacote.
- Section: seção a que o pacote pertence (ver política).
- Description: primeira linha, descrição curta. Linhas subseqüentes devem começar com um espaço e contêm a descrição longa. Linhas em branco devem consistir de um ponto.
- Depends: Dependências. Ex: dependência de Python deve entrar como ${python:Depends}.
- copyright: quem criou este pacote, licença do pacote. Possui alguns campos que devem ser preenchidos.
- dirs: Lista de todos os diretórios onde este pacote irá criar arquivos.
- docs: Arquivos que este pacote irá acrescentar em /usr/share/doc/nomedopacote.
– rules: Este script possui seções para construir e instalar o pacote.
dh_compress: Comprime arquivos que, de acordo com a política, devem ficar compactados (ex: README, se maior que um certo tamanho).
dh_shlibdeps: Verifica, para cada binário, quais as libs utilizadas e portanto as dependências deste pacote.
dh_md5sums: Faz o MD5.
dh_builddeb: Finalmente, gera o pacote.
– conffiles: Lista os arquivos de configuração (geralmente vão pra /etc) usados por este programa.
debuild para construir o pacote.
Arquivo *.build registra as mensagens emitidas
Neste pacote (hello), houve a necessidade de se instalar o autotools-dev. Isto é uma exigência deste pacote, não necessariamente do processo de construção de pacotes (está no Build-Depends do debian/control).
Como saber se um pacote precisa do autotools? Tipicamente isto estará no configure.ac do pacote (dica empírica).
Testar pacotes .deb prontos:
lintian: testa o .deb ou o fonte (.dsc), ou o changes
linda
pbuilder: cria um ambiente (usa cdebootstrap) em /var/cache/pbuilder/base.tgz
pbuilder create
Cria o “ambiente”
pbuilder build hello_2.1.1-1.dsc
Constrói o pacote automagicamente. As saídas ficam em /var/cache/pbuilder/result
Regerar o diretório a partir do dsc (pode ser feito entre debuilds – preferencialmente fazer isto quando um debuild falhar, e antes de tentar novamente):
rm -rf pacote
dpkg-source -x pacote_xxx.dsc
rm debian/*~
Exemplo: criar pacote para o software isomaster-0.3
– Dependências: libgtk2.0-dev
– Exige edição do Makefile (motivo: instala por padrão em /usr/local)
– Usaremos o dpatch (vide abaixo). Neste caso específico é muito mais simples editar diretamente o Makefile. Mas isto servirá de exemplo para o dpatch.
Usando o dpatch
– Incluir no começo do debian/rules:
include /usr/share/dpatch/dpatch.make
– Mudar “build-stamp:” para “build-stamp: patch”
– Mudar a linha:
clean:
para:
clean: clean1 unpatch
clean1:
– dpatch-edit-patch fix-makefile
– Agora, editar o Makefile e depois sair do shell
– Depois, é preciso criar um arquivo debian/patches/00list com a lista de todos os patches naquele diretório que devem ser aplicados