How to create Debian packages (draft)

Documentos:

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

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s