Manual de Empacotamento de Debian
Lucas Nussbaum
packaging-tutorial@[Link]
versão 0.24 – 2019-03-13
Manual de Empacotamento de Debian 1 / 90
Acerca deste manual
I Objectivo: dizer o que você precisa mesmo saber sobre
empacotamento de Debian
I Modificar pacotes existentes
I Criar os seus próprios pacotes
I Interagir com a comunidade Debian
I Tornar-se um utilizador avançado de Debian
I Cobre os pontos mais importantes, mas não é completo
I Você irá precisar de ler mais documentação
I A maioria do conteúdo também se aplica a distribuições derivadas da
Debian
I Isso inclui Ubuntu
Manual de Empacotamento de Debian 2 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 3 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 4 / 90
Debian
I Distribuição de GNU/Linux
I 1a grande distribuição desenvolvida ”abertamente ao espírito de GNU”
I Não-comercial, construída em colaboração por mais de 1000 voluntários
I 3 funcionalidades principais:
I Qualidade – cultura de excelência técnica
Nós lançamos quando está tudo pronto
I Liberdade – desenvolvedores e utilizadores unidos pelo Contracto
Social
Promovendo a cultura do Software Livre desde 1993
I Independência – nenhuma (nem uma) companhia toma conta da
Debian
E processo de decisão-trabalho aberto (do-ocracy + democracy )
I Amador no melhor sentido: feito com amor
Manual de Empacotamento de Debian 5 / 90
Pacotes Debian
I ficheiros .deb (pacotes binários)
I Uma maneira muito poderosa e conveniente de distribuir software aos
utilizadores
I Um dos dois formatos de pacotes mais comuns (com o RPM)
I Universal:
I 30000 pacotes binários em Debian
→ a maioria do software livre disponível está empacotado em
Debian!
I Para 12 portes (arquitecturas), incluindo 2 não-Linux (Hurd;
KFreeBSD)
I Também usado por 120 distribuições derivadas de Debian
Manual de Empacotamento de Debian 6 / 90
O formato de pacotes Deb
I Ficheiro .deb: um arquivo ar
$ ar tv wget_1 .12 -2.1 _i386 . deb
rw -r - -r - - 0/0 4 Sep 5 15:43 2010 debian - binary
rw -r - -r - - 0/0 2403 Sep 5 15:43 2010 control . tar . gz
rw -r - -r - - 0/0 751613 Sep 5 15:43 2010 data . tar . gz
I debian-binary: versão do formato de ficheiro deb, "2.0\n"
I [Link]: meta-dados acerca do pacote
control, md5sums, (pre|post)(rm|inst), triggers, shlibs, . . .
I [Link]: ficheiros de dados do pacote
I Você poderia criar os seus ficheiros .deb manualmente
[Link]
I Mas a maioria das pessoas não o faz dessa maneira
Este manual: criar pacotes Debian, à maneira Debian
Manual de Empacotamento de Debian 7 / 90
Ferramentas que irá precisar
I Um sistema Debian (ou Ubuntu) (com acesso a root)
I Alguns pacotes:
I build-essential: tem dependências nos pacotes que irão ser
assumidas para estarem disponíveis na máquina do desenvolvedor
(não é preciso especificá-las no campo de controle Build-Depends:
do seu pacote)
I Inclui a dependência de dpkg-dev, a qual contém ferramentas
básicas específicas de Debian para criar pacotes
I devscripts: contém muitos scripts úteis para mantenedores de
Debian
Muitas outras ferramentas serão também mencionadas mais tarde, tais como
debhelper, cdbs, quilt, pbuilder, sbuild, lintian, svn-buildpackage,
git-buildpackage, . . .
instale-as quando precisar delas.
Manual de Empacotamento de Debian 8 / 90
Fluxo de trabalho de empacotamento geral
Debian mirror Web upstream source
apt-get source dget dh_make
onde a maio-
source package ria do trabalho
manual é feito
debuild (compilar e testar com lin-
tian) ou dpkg-buildpackage
um ou vários pacotes binários .deb
upload (dput) install (debi)
Manual de Empacotamento de Debian 9 / 90
Exemplo: recompilando o dash
1 Instale os pacotes necessários para compilar dash, e devscripts
sudo apt-get build-dep dash
(requer linhas deb-src em /etc/apt/[Link])
sudo apt-get install --no-install-recommends devscripts
fakeroot
2 Crie um directório de trabalho, e vá para ele :
mkdir /tmp/debian-tutorial ; cd /tmp/debian-tutorial
3 Obtenha o pacote fonte do dash
apt-get source dash
(Para isto precisa de ter linhas deb-src no seu /etc/apt/[Link])
4 Compile o pacote
cd dash-*
debuild -us -uc (-us -uc desactiva a assinatura do pacote com GPG)
5 Verifique que funcionou
I Existem alguns ficheiros .deb novos no directório pai
6 Observe o directório debian/
I É onde o trabalho de empacotamento é feito
Manual de Empacotamento de Debian 10 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 11 / 90
Pacote fonte
I Um pacote fonte pode gerar vários pacotes binários
ex, a fonte libtar gera pacotes binários libtar0 e libtar-dev
I Dois tipos de pacotes: (em caso de dúvida, use não-nativo)
I Pacotes nativos: normalmente para software específico de Debian (dpkg,
apt)
I Pacotes não-nativos: software desenvolvido fora de Debian
I Ficheiro principal: .dsc (meta-dados)
I Outros ficheiros que dependem da versão do formato fonte
I 1.0 or 3.0 (nativo): package_version.[Link]
I 1.0 (não-nativo):
I pkg_ver.[Link]: fonte da autoria (upstream)
I pkg_debver.[Link]: patch para adicionar alterações
específicas de Debian
I 3.0 (quilt):
I pkg_ver.[Link]: fonte da autoria (upstream)
I pkg_debver.[Link]: tarball com as alterações de
Debian
(Veja dpkg-source(1) para detalhes exactos)
Manual de Empacotamento de Debian 12 / 90
Exemplo de pacote fonte (wget_1.[Link])
Format : 3.0 ( quilt )
Source : wget
Binary : wget
Architecture : any
Version : 1.12 -2.1
Maintainer : Noel Kothe < noel@debian . org >
Homepage : http :// www . gnu . org / software / wget /
Standards - Version : 3.8.4
Build - Depends : debhelper ( > > 5.0.0) , gettext , texinfo ,
libssl - dev ( >= 0.9.8) , dpatch , info2man
Checksums - Sha1 :
50 d4ed2441e67 [..]1 ee0e94248 2464747 wget_1 .12. orig . tar . gz
d4c1c8bbe431d [..] dd7cef3611 48308 wget_1 .12 -2.1. debian . tar . gz
Checksums - Sha256 :
7578 ed0974e12 [..] dcba65b572 2464747 wget_1 .12. orig . tar . gz
1 e9b0c4c00eae [..]89 c402ad78 48308 wget_1 .12 -2.1. debian . tar . gz
Files :
141461 b9c04e4 [..]9 d1f2abf83 2464747 wget_1 .12. orig . tar . gz
e93123c934e3c [..]2 f380278c2 48308 wget_1 .12 -2.1. debian . tar . gz
Manual de Empacotamento de Debian 13 / 90
Obtendo um pacote fonte existente
I Do arquivo Debian:
I apt-get source pacote
I apt-get source pacote=vers~ ao
I apt-get source pacote/lançamento
(Você precisa de linhas deb-src em [Link])
I Da Internet:
I dget [Link]
I dget [Link]
20090802T004153Z/debian/dists/bo/main/source/web/
wget_1.[Link]
(snapshot.d.o disponibiliza todos os pacotes de Debian desde 2005)
I Do sistema de controlo de versão (declarado):
I debcheckout pacote
I Após a descarga, extraia com dpkg-source -x [Link]
Manual de Empacotamento de Debian 14 / 90
Criar um pacote fonte básico
I Descarregue a fonte do autor (upstream)
(upstream source = aquela dos desenvolvedores originais do software)
I Renomeie para <source_package >_<upstream_version >.[Link]
(exemplo: simgrid_3.[Link])
I Descompacte-o
I Renomeie o directório para <source_package >-<upstream_version >
(exemplo: simgrid-3.6)
I cd <source_package >-<upstream_version > && dh_make
(do pacote dh-make)
I Existem algumas alternativas ao dh_make para conjuntos específicos de
pacotes: dh-make-perl, dh-make-php, . . .
I Directório debian/ criado, com muitos ficheiros lá dentro
Manual de Empacotamento de Debian 15 / 90
Ficheiros em debian/
Todo o trabalho de empacotamento deve ser feito ao modificar ficheiros em
debian/
I Ficheiros principais:
I control – meta-dados acerca do pacote (dependências, etc)
I rules – especifica como compilar o pacote
I copyright – informação de copyright para o pacote
I changelog – história do pacote Debian
I Outros ficheiros:
I compat
I watch
I dh_install* targets
*.dirs, *.docs, *.manpages, . . .
I scripts do mantenedor
*.postinst, *.prerm, . . .
I fonte/formato
I patches/ – se você precisar de modificar as fontes do autor
I Vários ficheiros usam um formato baseado em RFC 822 (cabeçalhos de
mail)
Manual de Empacotamento de Debian 16 / 90
debian/changelog
I Lista as alterações de empacotamento Debian
I Dá a versão actual do pacote
[Link]-5
Upstream Debian
version revision
I Editado manualmente ou com dch
I Crie uma entrada no changelog para um novo lançamento: dch -i
I Formato especial para fechar automaticamente bugs de Debian ou
Ubuntu
Debian: Closes: #595268; Ubuntu: LP: #616929
I Instalado como /usr/share/doc/pacote /[Link]
mpich2 ([Link] -5) unstable ; urgency = low
* Use / usr / bin / python instead of / usr / bin / python2 .5. Allow
to drop dependency on python2 .5. Closes : #595268
* Make / usr / bin / mpdroot setuid . This is the default after
the installation of mpich2 from source , too . LP : #616929
+ Add corresponding lintian override .
-- Lucas Nussbaum < lucas@debian . org > Wed , 15 Sep 2010 18:13:44 +0200
Manual de Empacotamento de Debian 17 / 90
debian/control
I Meta dados do pacote
I Para o próprio pacote fonte
I Para cada pacote binário compilado desta fonte
I Nome do pacote, secção, prioridade, mantenedor, quem faz os uploads,
dependências de compilação, dependências, descrição, página do
projecto, . . .
I Documentação: Politica Debian capítulo 5
[Link]
Source : wget
Section : web
Priority : important
Maintainer : Noel Kothe < noel@debian . org >
Build - Depends : debhelper ( > > 5.0.0) , gettext , texinfo ,
libssl - dev ( >= 0.9.8) , dpatch , info2man
Standards - Version : 3.8.4
Homepage : http :// www . gnu . org / software / wget /
Package : wget
Architecture : any
Depends : $ { shlibs : Depends } , $ { misc : Depends }
Description : retrieves files from the web
Wget is a network utility to retrieve files from the
Manual Web
de Empacotamento de Debian 18 / 90
Arquitectura: todas ou uma qualquer
Dois tipos de pacotes binários:
I Pacotes com conteúdos diferentes para cada arquitectura Debian
I Exemplo: programa C
I Architecture: any em debian/control
I Ou, se apenas funcionar num sub-conjunto de arquitecturas:
Architecture: amd64 i386 ia64 hurd-i386
I [Link]: compila todas as outras arquitecturas para si ao
submeter
I Chamado pacote _vers~ ao _arquitectura.deb
I Pacotes com o mesmo conteúdo para todas as arquitecturas
I Exemplo: biblioteca Perl
I Architecture: all em debian/control
I Chamado pacote _vers~ ao _todas.deb
Um pacote fonte pode gerar uma mistura de pacotes binários de
Arquitectura: any e Arquitectura: all
Manual de Empacotamento de Debian 19 / 90
debian/rules
I Makefile
I Interface usada para compilar pacotes Debian
I Documentado em Politica Debian, capitulo 4.8
[Link]
I Alvos necessários:
I build, build-arch, build-indep: deve executar toda a
configuração e compilação
I binary, binary-arch, binary-indep: compila os pacotes binários
I dpkg-buildpackage irá chamar binary para compilar todos os
pacotes, ou binary-arch para compilar apenas os pacotes de
Arquitectura: any
I clean: limpa o directório fonte
Manual de Empacotamento de Debian 20 / 90
Ajudantes de empacotamento – debhelper
I Você podia escrever código de shell directamente em debian/rules
I Veja o pacote rsync como exemplo
I Melhor prática (usada pela maioria dos pacotes): use um Ajudante de
Empacotamento
I O mais popular deles: debhelper (usado por 98% dos pacotes)
I Objectivos:
I Factoriza as tarefas comuns em ferramentas standard usadas por
todos os pacotes
I Corrige alguns bugs de empacotamento de uma vez para todos os
pacotes
dh_installdirs, dh_installchangelogs, dh_installdocs, dh_installexamples, dh_install,
dh_installdebconf, dh_installinit, dh_link, dh_strip, dh_compress, dh_fixperms, dh_perl,
dh_makeshlibs, dh_installdeb, dh_shlibdeps, dh_gencontrol, dh_md5sums, dh_builddeb, . . .
I Chamado de debian/rules
I Configurável usando parâmetros de comandos ou ficheiros em
debian/
[Link], [Link], [Link], [Link], ...
I python-support,
Ajudantes de terceiros para conjuntos de pacotes:Manual de Empacotamento de Debian 21 / 90
debian/rules usando debhelper (1/2)
#!/ usr / bin / make -f
# Uncomment this to turn on verbose mode .
# export DH_VERBOSE =1
build :
$ ( MAKE )
# docbook - to - man debian / packagename . sgml > packagename .1
clean :
dh_testdir
dh_testroot
rm -f build - stamp configure - stamp
$ ( MAKE ) clean
dh_clean
install : build
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Add here commands to install the package into debian / package
$ ( MAKE ) DESTDIR = $ ( CURDIR )/ debian / packagename install
Manual de Empacotamento de Debian 22 / 90
debian/rules usando debhelper (2/2)
# Build architecture - independent files here .
binary - indep : build install
# Build architecture - dependent files here .
binary - arch : build install
dh_testdir
dh_testroot
dh_installchangelogs
dh_installdocs
dh_installexamples
dh_install
dh_installman
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_shlibdeps
dh_gencontrol
dh_md5sums
dh_builddeb
binary : binary - indep binary - arch
. PHONY : build clean binary - indep binary - arch binary install configure
Manual de Empacotamento de Debian 23 / 90
CDBS
I Com o debhelper, ainda muita redundância entre pacotes
I Ajudantes de segundo-nível que factorizam funcionalidades comuns
I Ex. compilando com ./configure && make && make install ou
CMake
I CDBS:
I Introduzido em 2005, baseado na magia avançada do GNU make
I Documentação: /usr/share/doc/cdbs/
I Suporte para Perl, Python, Ruby, GNOME, KDE, Java, Haskell, . . .
I Mas algumas pessoas detestam-o:
I Por vezes é difícil personalizar compilações de pacotes:
"labirinto distorcido de makefiles e variáveis de ambiente"
I Mais lento que o debhelper simples (muitas chamadas
desnecessárias a dh_*)
#!/ usr / bin / make -f
include / usr / share / cdbs /1/ rules / debhelper . mk
include / usr / share / cdbs /1/ class / autotools . mk
# add an action after the build
build / mypackage ::
/ bin / bash debian / scripts / foo . sh
Manual de Empacotamento de Debian 24 / 90
Dh (aka Debhelper 7, ou dh7)
I Introduzido em 2008 como o matador do CDBS
I dh comando que chama dh_*
I debian/rules simples, listando apenas as sobreposições
I Mais fácil de personalizar que o CDBS
I Documentos: manpages (debhelper(7), dh(1)) + slides da reunião
DebConf9
[Link]
#!/ usr / bin / make -f
%:
dh $@
override_dh_auto_configure :
d h _ a u t o _ c o n f i g u r e -- -- with - kitchen - sink
override_dh_auto_build :
make world
Manual de Empacotamento de Debian 25 / 90
debhelper clássico contra CDBS contra dh
I Mind shares:
debhelper clássico: 15% CDBS: 15% dh: 68%
I Qual deles devo aprender?
I Provavelmente um pouco de todos eles
I Você precisa de conhecer o debhelper para usar o dh e o CDBS
I Você poderá ter que modificar pacotes CDBS
I Qual deles devo usar para um pacote novo?
I dh (solução apenas com um aumento da mind share)
80 debhelper
Market share (%)
dh
60 CDBS
40
20
0
2005 2007 2010 2013 2016
Time
Manual de Empacotamento de Debian 26 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 27 / 90
Compilando pacotes
I apt-get build-dep mypackage
Instala as build-dependencies (para um pacote já em Debian)
Ou mk-build-deps -ir (para um pacote ainda não submetido)
I debuild: compila, testa com lintian, assina com GPG
I Também possível chamar directamente dpkg-buildpackage
I Normalmente com dpkg-buildpackage -us -uc
I É melhor compilar os pacotes num ambiente limpo & mínimo
I pbuilder – ajudante para compilar pacotes em chroot
Boa documentação: [Link]
(optimização: cowbuilder ccache distcc)
I schroot e sbuild: usados nos daemons de compilação de Debian
(não tão simples como pbuilder, mas permite instantâneos LVM
veja: [Link] )
I Gera ficheiros .deb e um ficheiro .changes
I .changes: descreve o que foi compilado; usado para fazer o upload
do pacote
Manual de Empacotamento de Debian 28 / 90
Instalando e testando pacotes
I Instale o pacote localmente: debi (irá usar .changes para saber o que
instalar)
I Liste o conteúdo do pacote: debc ../mypackage<TAB>.changes
I Compara o pacote com a versão anterior:
debdiff ../mypackage_1_*.changes ../mypackage_2_*.changes
ou para comparar as fontes:
debdiff ../mypackage_1_*.dsc ../mypackage_2_*.dsc
I Verifique o pacote com lintian (analisador estático):
lintian ../mypackage<TAB>.changes
lintian -i: dá mais informação acerca de erros
lintian -EviIL +pedantic: mostra mais problemas
I Faça o upload do pacote para Debian (dput) (precisa de configuração)
I Faça gestão de um arquivo Debian privado com reprepro ou aptly
Documentação:
[Link]
Manual de Empacotamento de Debian 29 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 30 / 90
Sessão prática 1: modificar o pacote grep
1 Vá a [Link] e
descarregue a versão 2.12-2 do pacote
I Se o pacote fonte não descompactar automaticamente,
descompacte-o com dpkg-source -x grep_*.dsc
2 Observe os ficheiros em debian/.
I Quantos pacotes binários são gerados por este pacote fonte?
I Qual o ajudante de empacotamento este pacote usa?
3 Compile o pacote
4 Agora você vai modificar o pacote. Adicione uma entrada changelog e
incremente o número da versão.
5 Agora desactive o suporte a perl-regexp (é uma opção de ./configure)
6 Re-compile o pacote
7 Compare os pacotes original e novo com o debdiff
8 instale o pacote compilado recentemente
Manual de Empacotamento de Debian 31 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 32 / 90
debian/copyright
I Informação de copyright e licença para a fonte e o empacotamento
I Tradicionalmente escrito num ficheiro de texto
I Novo formato máquina-legível:
[Link]
Format : https :// www . debian . org / doc / packaging - manuals / copyright - format /1.0/
Upstream - Name : X Solitaire
Source : ftp :// ftp . example . com / pub / games
Files : *
Copyright : Copyright 1998 John Doe < jdoe@example . com >
License : GPL -2+
This program is free software ; you can redistribute it
[...]
.
On Debian systems , the full text of the GNU General Public
License version 2 can be found in the file
‘/ usr / share / common - licenses / GPL -2 ’.
Files : debian /*
Copyright : Copyright 1998 Jane Smith < jsmith@example . net >
License :
[ LICENSE TEXT ]
Manual de Empacotamento de Debian 33 / 90
Modificar a fonte do autor
Muitas vezes necessário:
I Corrigir bugs ou adicionar personalizações que são específicas de Debian
I Correcções a versões anteriores (backport) a partir de lançamento mais
recente do autor
Vários métodos para o fazer:
I Modificar os ficheiros directamente
I Simples
I Mas sem modo de acompanhar e documentar as alterações
I utilizando sistemas de patch
I Facilita a contribuição das suas alterações para o autor original
(upstream)
I Ajuda a partilhar as correcções com os derivados
I Dá melhor exibição às alterações
[Link] (presentemente fora de
serviço)
Manual de Empacotamento de Debian 34 / 90
Sistemas de patch
I Princípio: as alterações são guardadas como patches em
debian/patches/
I Aplicado e "des-aplicado" durante a compilação
I Passado: várias implementações – simple-patchsys (cdbs), dpatch, quilt
I Cada um suporta dois alvos debian/rules:
I debian/rules patch: aplica todas as patches
I debian/rules unpatch: retira as alterações de todas as patches
I Mais documentação: [Link]
I Novo formato de pacote fonte com sistema de patch integrado: 3.0
(quilt)
I Solução recomendada
I Você precisa de aprender quilt
[Link]
I Ferramenta patch-system-agnostic em devscripts: edit-patch
Manual de Empacotamento de Debian 35 / 90
Documentação de patches
I Cabeçalhos standard no inicio da patch
I Documentado em DEP-3 - Patch Tagging Guidelines
[Link]
Description : Fix widget frobnication speeds
Frobnicating widgets too quickly tended to cause explosions .
Forwarded : http :// lists . example . com /2010/03/1234. html
Author : John Doe < johndoe - guest@users . alioth . debian . org >
Applied - Upstream : 1.2 , http :// bzr . foo . com / frobnicator / revision /123
Last - Update : 2010 -03 -29
--- a / src / widgets . c
+++ b / src / widgets . c
@@ -101 ,9 +101 ,6 @@ struct {
Manual de Empacotamento de Debian 36 / 90
Fazer coisas durante a instalação e remoção
I Descomprimir o pacote por vezes não é suficiente
I Criar/remover utilizadores do sistema, iniciar/para serviços, gerir
alternativas
I Feito nos scripts do mantenedor
preinst, postinst, prerm, postrm
I Podem ser gerados fragmentos para acções comuns pelo debhelper
I Documentação:
I Manual de politicas Debian, capítulo 6
[Link]
I Referência dos Desenvolvedores de Debian, capítulo 6.4
[Link]
I [Link]
I Questionando o utilizador
I Tem de ser feito com debconf
I Documentação: debconf-devel(7) (pacote debconf-doc)
Manual de Empacotamento de Debian 37 / 90
Monitorizando versões do autor (upstream)
I Especifica onde procurar em debian/watch (veja uscan(1))
version =3
http :// tmrc . mit . edu / mirror / twisted / Twisted /(\ d \.\ d )/ \
Twisted -([\ d \.]*)\. tar \. bz2
I Existem seguidores automatizados de novas versões do autor, que
notificam o mantenedor em vários quadros de instrumentos incluindo
[Link] e [Link]
I uscan: corre uma verificação manual
I uupdate: tenta actualizar o seu pacote para a versão do autor mais
recente
Manual de Empacotamento de Debian 38 / 90
Empacotar com um Sistema de Controlo de Versão
I Várias ferramentas para ajudar a gerir ramos e etiquetas para o seu
trabalho de empacotamento:
svn-buildpackage, git-buildpackage
I Exemplo: git-buildpackage
I upstream ramo para acompanhar a autoria com as etiquetas
upstream/version
I master ramo que acompanha o pacote Debian
I debian/version etiquetas para cada envio (upload)
I pristine-tar ramo para ser possível recompilar o tarball do autor
Documento: [Link]
manual-html/[Link]
I Vcs-* campos em debian/control para localizar o repositório
I [Link]
I [Link]
Vcs - Browser : http :// anonscm . debian . org / gitweb /? p = collab - maint / devscripts . git
Vcs - Git : git :// anonscm . debian . org / collab - maint / devscripts . git
Vcs - Browser : http :// svn . debian . org / viewsvn / pkg - perl / trunk / libwww - perl /
Vcs - Svn : svn :// svn . debian . org / pkg - perl / trunk / libwww - perl
Manual de Empacotamento de Debian 39 / 90
Portar pacotes para trás (backporting)
I Objectivo: usar uma nova versão de um pacote num sistema mais antigo
ex. usar mutt de Debian unstable em Debian stable
I Ideia geral:
I Obtenha o pacote fonte de Debian unstable
I Modifique para que compile e funcione bem em Debian stable
I Às vezes é trivial (sem alterações necessárias)
I Às vezes é difícil
I Às vezes é impossível (muitas dependências não disponíveis)
I Alguns "backports" são disponibilizados e suportados pelo projecto
Debian
[Link]
Manual de Empacotamento de Debian 40 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 41 / 90
Arquivo e suites Debian
security team developer
experimental
unstable
testing-proposed-updates
stable-proposed-updates
testing preparation of
stable next release
release stable-new
stable
management stable release
point
release
security stable-updates stable backports
package uploads oldstable
package migrations between suites
archive.d.o
development test internal production
Baseado em graph por Antoine Beaupré. [Link] cycle
Manual de Empacotamento de Debian 42 / 90
Suites para desenvolvimento
I Novas versões de pacotes são enviadas para unstable (sid)
I Pacotes migram de unstable para testing com base em vários critérios
(ex. esteve em unstable por 10 dias, e nenhuma regressão)
I Os novos pacotes também podem ser enviados para:
I experimental (para mais pacotes experimental, tais como quando
uma nova versão não está pronta para substituir aquela
presentemente em unstable)
I testing-proposed-updates, para actualizar a versão em testing
sem ter que passar por unstable (isto é raramente usado)
Manual de Empacotamento de Debian 43 / 90
Congelar e lançamento
I A determinada altura durante o ciclo de lançamento, a equipa de
lançamento decide freeze testing: as migrações automáticas de unstable
para testing são paradas, e substituídas por revisões manuais.
I Quando a equipa de lançamento considera testing pronta para
lançamento:
I A suite testing torna-se a nova suite stable
I De modo semelhante, a antiga stable torna-se oldstable
I Os lançamentos não suportados são movidos para
[Link]
I Veja [Link]
Manual de Empacotamento de Debian 44 / 90
Gestão do lançamento de stable
I Várias suites são usadas para disponibilizar pacotes de lançamento de
stable:
I stable a suite principal
I security suite de actualizações fornecidas em
[Link], usado pela equipa de segurança. As
actualizações são anunciadas na lista de mail
debian-security-announce
I stable-updates: actualizações que não estão relacionadas com
segurança, mas que devem ser instalados urgentemente (sem
esperar pelo próximo lançamento pontual): bases de dados de
antivirus, pacotes relacionados com o fuso horário, etc. Anunciadas
na lista de mail debian-stable-announce
I backports: novas versões do autor, com base na versão em testing
I A suite stable é actualizada sempre após alguns meses por stable point
releases (que incluem apenas correcções de bugs).
I Os pacotes que visam o próximo lançamento pontual de stable são
enviados para stable-proposed-updates e revisados pela equipa de
lançamento
Manual de Empacotamento de Debian 45 / 90
Várias maneiras de contribuir para Debian
I Pior maneira de contribuir:
1 Empacote a sua própria aplicação
2 Entre para a Debian
3 Desapareça
I Melhores maneiras de contribuir:
I Envolva-se com as equipas de empacotamento
I Muitas equipas que se focam em conjuntos de pacotes, e
precisam de ajuda
I Lista disponível em [Link]
I uma excelente maneira de aprender a partir de contribuintes
mais experientes
I Adoptar pacotes não mantidos existentes (pacotes órfãos)
I Traga novo software para Debian
I Apenas se for suficientemente interessante/útil, por favor
I Existem alternativas já empacotadas em Debian?
Manual de Empacotamento de Debian 46 / 90
Adoptando pacotes órfãos
I Muitos pacotes não mantidos em Debian
I Lista completa + processo: [Link]
I Instalado na sua máquina: wnpp-alert
Ou melhor: how-can-i-help
I Estados diferentes:
I Orphaned: o pacote não é mantido
Sinta-se livre para o adoptar
I RFA: Request Fou Adopter
O mantenedor procura quem adopte, mas entretanto continua a trabalhar
Sinta-se livre para adoptar. É cortês enviar um mail ao actual mantenedor
I ITA: Intent To Adopt
Alguém tenciona adoptar o pacote
Você pode propor-se a ajudar!
I RFH: Request For Help
O mantenedor procura ajuda
I Alguns pacotes não mantidos e não detectados → ainda não estão órfãos
I Quando em dúvidas, pergunte a debian-qa@[Link]
ou #debian-qa em [Link] Manual de Empacotamento de Debian 47 / 90
Adoptando um pacote: exemplo
From : You < you@yourdomain >
To : 640454 @bugs . debian . org , control@bugs . debian . org
Cc : Francois Marier < fran coi s@de bian . org >
Subject : ITA : verbiste -- French conjugator
retitle 640454 ITA : verbiste -- French conjugator
owner 640454 !
thanks
Hi ,
I am using verbiste and I am willing to take care of the package .
Cheers ,
You
I Seja cortês ao contactar o anterior mantenedor (especialmente se o
pacote estava em RFA, não órfão)
I É uma boa ideia contactar a autoria do projecto
Manual de Empacotamento de Debian 48 / 90
Colocando o seu pacote na Debian
I Você não precisa de nenhum estado oficial para ter o seu pacote na
Debian
1 Submeter um ITP bug (Intent To Package) usando reportbug wnpp
2 Preparar um pacote fonte
3 Encontre um Desenvolvedor Debian que patrocine o seu pacote
I Estado oficial (quando você é um mantenedor de pacotes experiente)
I Mantenedor Debian (DM):
Permissão para submeter os seus próprios pacotes
Veja [Link]
I Desenvolvedor Debian (DD):
Membro do projecto Debian; pode votar e submeter (upload)
qualquer pacote
Manual de Empacotamento de Debian 49 / 90
Coisas a verificar antes de pedir patrocínio
I Debian tem muita atenção à qualidade
I Geralmente, os patrocinadores são difíceis de encontrar e ocupados
I Certifique-se que o seu pacote está pronto antes de pedir
patrocinador
I Coisas a verificar:
I Evite dependências de compilação em falta: certifique-se que o seu
pacote compila bem num chroot de sid limpo
I É recomendado usar o pbuilder
I Corra lintian -EviIL +pedantic no seu pacote
I Os erros têm de ser corrigidos, todos os outros problemas
devem ser corrigidos
I E claro, faça testes intensivos do seu pacote
I Em dúvidas, peça ajuda
Manual de Empacotamento de Debian 50 / 90
Onde encontrar ajuda?
Ajuda que irá precisar:
I Conselhos e respostas para as suas questões, revisões de código
I Patrocinador para os seus envios (uploads), assim que o seu pacote
esteja pronto
Você pode obter ajuda de:
I Outros membros de uma equipa de empacotamento
I Lista de equipas: [Link]
I O Debian Mentors group (se o seu pacote não encaixar numa equipa)
I [Link]
I Lista de mail: debian-mentors@[Link]
(também uma boa maneira de aprender por acaso)
I IRC: #debian-mentors em [Link]
I [Link]
I Documentação: [Link]
I Listas de mail localizadas (obtenha ajuda na sua linguagem)
I debian-devel-{french,italian,portuguese,spanish}@lists.d.o
I Lista completa: [Link]
I Ou listas de utilizadores: [Link]
Manual de Empacotamento de Debian 51 / 90
Mais documentação
I O Cantinho dos Desenvolvedores de Debian
[Link]
Links para muitos recursos acerca do desenvolvimento de Debian
I Guia para Mantenedores de Debian
[Link]
I Referência dos Desenvolvedores de Debian
[Link]
Maioritariamente acerca dos procedimentos de Debian, mas também algumas
das melhores práticas de empacotamento (parte 6)
I Politica de Debian
[Link]
I Todos os requerimentos que cada pacote deve satisfazer
I Politicas específicas para Perl, Java, Python, . . .
I Guia de Empacotamento de Ubuntu
[Link]
Manual de Empacotamento de Debian 52 / 90
Bancadas Debian para mantenedores
I Central do pacote fonte:
[Link]
I Central do mantenedor/equipa: Visão Geral de Pacotes de
Desenvolvedores (DDPO)
[Link]
pkg-ruby-extras-maintainers@[Link]
I Lista-A-FAZER orientada: Bancada do Mantenedor Debian (DMD)
[Link]
Manual de Empacotamento de Debian 53 / 90
Usando o Debian Bug Tracking System (BTS)
I Uma maneira muito única de gerir os bugs
I Interface web para ver os bugs
I Interface de email para fazer alterações aos bugs
I Adicionar informação aos bugs:
I Escreva para 123456@[Link] (não inclui a pessoa que
submeteu, você precisa adicionar
123456-submitter@[Link])
I Alterar o estado do bug:
I Envie comandos para control@[Link]
I Interface de linha de comandos: comando bts em devscripts
I Documentação: [Link]
I Reportar bugs: use reportbug
I Normalmente usado com um servidor de mail local: instale ssmtp ou
nullmailer
I Ou use reportbug --template, depois envie (manualmente) para
submit@[Link]
Manual de Empacotamento de Debian 54 / 90
Usando o BTS: exemplos
I Enviar um email para o bug e para quem o submeteu:
[Link]
I Etiquetar e alterar a severidade:
[Link]
I Re-atribuir, alterar a severidade, mudar o título . . . :
[Link]
I notfound, found, notfixed, fixed são para version-tracking
Veja [Link]
I Usando usertags: https:
//[Link]/cgi-bin/[Link]?msg=42;bug=642267
Veja [Link]
I Documentação de BTS:
I [Link]
I [Link]
Manual de Empacotamento de Debian 55 / 90
Mais interessado em Ubuntu?
I Ubuntu maioritariamente gere a divergência com Debian
I Nenhuma focagem real em pacotes específicos
Em vez disso, colaboração com as equipas de Debian
I Normalmente é recomendado enviar primeiro os novos pacote para
Debian
[Link]
I Possivelmente um plano melhor:
I Envolva-se numa equipa de Debian e actue como uma ponte com
Ubuntu
I Ajuda reduz divergência, triagem de bugs no Launchpad
I Muitas ferramentas de Debian podem ajudar:
I Coluna do Ubuntu na visão geral de pacotes de
Desenvolvedores
I Caixa do Ubuntu no Sistema de Acompanhamento de Pacotes
I Recebe bugmail do launchpad via PTS
Manual de Empacotamento de Debian 56 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 57 / 90
Conclusões
I Agora você uma visão geral completa do empacotamento de Debian
I Mas você irá precisar de ler mais documentação
I As melhores práticas evoluíram com os anos
I Em dúvida, use o ajudante de empacotamento dh, e o formato 3.0
(quilt)
Feedback: packaging-tutorial@[Link]
Manual de Empacotamento de Debian 58 / 90
Matérias legais
Copyright c 2011–2019 Lucas Nussbaum – lucas@[Link]
This document is free software: you can redistribute it and/or modify it under either
(at your option):
I The terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version.
[Link]
I The terms of the Creative Commons Attribution-ShareAlike 3.0 Unported License.
[Link]
Manual de Empacotamento de Debian 59 / 90
Contribua para este manual
I Contribuir:
I apt-get source packaging-tutorial
I debcheckout packaging-tutorial
I git clone
git://[Link]/collab-maint/[Link]
I [Link]
I Bugs abertos: [Link]/src:packaging-tutorial
I Forneça comentários de retorno (Feedback):
I [Link]
I o que deve ser adicionado a este manual?
I O que deve ser melhorado?
I reportbug packaging-tutorial
Manual de Empacotamento de Debian 60 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 61 / 90
Sessão prática 2: empacotar o GNUjump
1 Faça o download de GNUjump 1.0.8 de
[Link]
2 Crie um pacote Debian para ele
I Instale as dependências de compilação para que possa compilar o
pacote
I Corrigir bugs
I Obtenha um pacote funcional básico
I Acabe de preencher debian/control e outros ficheiros
3 Aprecie
Manual de Empacotamento de Debian 62 / 90
Sessão prática 2: empacotar o GNUjump (dicas)
I Para obter um pacote básico funcional, use dh_make
I Para começar, criar um pacote fonte 1.0 é mais fácil que um 3.0 (quilt)
(mude isso em debian/source/format)
I Para procurar dependências de compilação em falta, encontre um ficheiro
em falta, e use o apt-file para encontrar um pacote em falta.
I Se você encontrar esse erro:
/ usr / bin / ld : SDL_rotozoom . o : undefined reference to symbol ’ ceil@@GLIBC_2 .2.5 ’
// lib / x86_64 - linux - gnu / libm . so .6: error adding symbols : DSO missing from command line
collect2 : error : ld returned 1 exit status
Makefile :376: recipe for target ’ gnujump ’ failed
Você precisa de adicionar -lm à linha do comando linker: Edite
src/[Link] e substitua
gn ujum p_LD FLAG S = $ ( all_libraries )
por
gn ujum p_LD FLAG S = -Wl , - - as - needed
gnujump_LDADD = $ ( all_libraries ) - lm
Depois corra autoreconf -i
Manual de Empacotamento de Debian 63 / 90
Sessão prática 3: empacotando uma biblioteca Java
1 Faça uma leitura rápida a alguma documentação sobre empacotamento
de Java:
I [Link]
I [Link]
I [Link]
I /usr/share/doc/javahelper/[Link]
2 Descarregue o IRClib de [Link]
3 Empacote-o
Manual de Empacotamento de Debian 64 / 90
Sessão prática 4: empacotar uma gema Ruby
1 Dê uma leitura rápida a alguma documentação acerca de
empacotamento de Ruby:
I [Link]
I [Link]
I [Link]
I gem2deb(1), dh_ruby(1) (no pacote gem2deb)
2 Crie um pacote fonte Debian básico a partir da gema peach:
gem2deb peach
3 Melhore-o para que se torne num pacote Debian apropriado
Manual de Empacotamento de Debian 65 / 90
Sessão prática 5: empacotar um módulo Perl
1 Faça uma leitura rápida a alguma documentação sobre empacotamento
de Perl:
I [Link]
I [Link]
I dh-make-perl(1), dpt(1) (in the pkg-perl-tools package)
2 Crie um pacote fonte Debian básico a partir da Acme distribuição CPAN:
dh-make-perl --cpan Acme
3 Melhore-o para que se torne num pacote Debian apropriado
Manual de Empacotamento de Debian 66 / 90
Esboço
1 Introdução
2 Criar pacotes fonte
3 Compilando e testando pacotes
4 Sessão prática 1: modificar o pacote grep
5 Tópicos de empacotamento avançados
6 Mantendo pacotes em Debian
7 Conclusões
8 Sessões práticas adicionais
9 Respostas às sessões práticas
Manual de Empacotamento de Debian 67 / 90
Respostas para
sessões práticas
Manual de Empacotamento de Debian 68 / 90
Sessão prática 1: modificar o pacote grep
1 Vá a [Link] e
descarregue a versão 2.12-2 do pacote
2 Observe os ficheiros em debian/.
I Quantos pacotes binários são gerados por este pacote fonte?
I Qual o ajudante de empacotamento este pacote usa?
3 Compile o pacote
4 Agora você vai modificar o pacote. Adicione uma entrada changelog e
incremente o número da versão.
5 Agora desactive o suporte a perl-regexp (é uma opção de ./configure)
6 Re-compile o pacote
7 Compare os pacotes original e novo com o debdiff
8 instale o pacote compilado recentemente
Manual de Empacotamento de Debian 69 / 90
Obtendo a fonte
1 Vá a [Link] e
descarregue a versão 2.12-2 do pacote
I Use o dget para descarregar o ficheiro .dsc:
dget [Link]
I Se você tiver deb-src para um lançamento Debian que tem grep versão
2.12-2 (descubra em [Link] você pode
usar apt-get source grep=2.12-2
ou apt-get source grep/release (ex. grep/stable)
ou, se se sentir com sorte apt-get source grep
I O pacote fonte do grep é composto por três ficheiros:
I grep_2.[Link]
I grep_2.[Link].bz2
I grep_2.[Link].bz2
Isto é típico do formato "3.0 (quilt)".
I Se necessário, descomprima a fonte com
dpkg-source -x grep_2.[Link]
Manual de Empacotamento de Debian 70 / 90
Observando e compilando o pacote
2 Observe os ficheiros em debian/
I Quantos pacotes binários são gerados por este pacote fonte?
I Qual o ajudante de empacotamento este pacote usa?
I De acordo com debian/control, este pacote apenas gera um pacote
binário, chamado grep.
I De acordo com debian/rules, este pacote é típico de empacotamento
classic debhelper, sem usar CDBS ou dh. Pode-se ver as várias
chamadas a comandos dh_* em debian/rules.
3 Compile o pacote
I Use apt-get build-dep grep para obter as dependências de
compilação
I Depois debuild ou dpkg-buildpackage -us -uc (Demora cerca de 1
minuto)
Manual de Empacotamento de Debian 71 / 90
Editando o registo de alterações (changelog)
4 Agora você vai modificar o pacote. Adicione uma entrada changelog e
incremente o número da versão.
I debian/changelog é um ficheiro de texto Você pode editá-lo e adicionar
uma nova entrada manualmente.
I Ou você pode usar dch -i, que irá adicionar uma entrada e abrir o editor
I O nome e email podem ser definidos usando as variáveis de ambiente
DEBFULLNAME e DEBEMAIL
I Após isso, recompile o pacote: é compilada uma nova versão do pacote
I O "versionamento" do pacote está detalhado na secção 5.6.12 da politica
Debian
[Link]
Manual de Empacotamento de Debian 72 / 90
Desactivando suporte regexp de Perl e recompilando
5 Agora desactive o suporte a perl-regexp (é uma opção de ./configure)
6 Re-compile o pacote
I Verifique com ./configure --help: a opção para desactivar Perl regexp
é --disable-perl-regexp
I Edite debian/rules e encontre a linha ./configure
I Adicione --disable-perl-regexp
I Recompile com debuild ou dpkg-buildpackage -us -uc
Manual de Empacotamento de Debian 73 / 90
Comparar e testar os pacotes
7 Compare os pacotes original e novo com o debdiff
8 instale o pacote compilado recentemente
I Compare os pacotes binários: debdiff ../*changes
I Compare os pacotes fonte: debdiff ../*dsc
I Instale o pacote recentemente compilado: debi
Ou dpkg -i ../grep_<TAB>
I grep -P foo não funciona mais!
Reinstale a versão anterior do pacote:
I apt-get install --reinstall grep=2.6.3-3 (= previous version)
Manual de Empacotamento de Debian 74 / 90
Sessão prática 2: empacotar o GNUjump
1 Faça o download de GNUjump 1.0.8 de
[Link]
2 Crie um pacote Debian para ele
I Instale as dependências de compilação para que possa compilar o
pacote
I Obtenha um pacote funcional básico
I Acabe de preencher debian/control e outros ficheiros
3 Aprecie
Manual de Empacotamento de Debian 75 / 90
Passo a passo. . .
I wget [Link]
I mv [Link] gnujump_1.[Link]
I tar xf gnujump_1.[Link]
I cd gnujump-1.0.8/
I dh_make -f ../[Link]
I Tipo de pacote: binário simples (por agora)
gnujump -1.0.8 $ ls debian /
changelog gnujump . default . ex preinst . ex
compat gnujump . doc - base . EX prerm . ex
control init . d . ex README . Debian
copyright manpage .1. ex README . source
docs manpage . sgml . ex rules
emacsen - install . ex manpage . xml . ex source
emacsen - remove . ex menu . ex watch . ex
emacsen - startup . ex postinst . ex
gnujump . cron . d . ex postrm . ex
Manual de Empacotamento de Debian 76 / 90
Passo a passo. . . (2)
I Observe debian/changelog, debian/rules, debian/control
(auto-preenchido por dh_make)
I In debian/control:
Build-Depends: debhelper (>= 7.0.50 ), autotools-dev
Lista as build-dependencies = pacotes necessários para compilar o
pacote
I Tenta compilar o pacote como está com debuild (graças à magia do dh)
I E adicione as dependências de compilação, até que compile
I Dica: use apt-cache search e apt-file para encontrar os pacotes
I Exemplo:
checking for sdl - config ... no
checking for SDL - version >= 1.2.0... no
[...]
configure : error : *** SDL version 1.2.0 not found !
→ Adicione libsdl1.2-dev às Build-Depends e instale-o.
I Melhor: use pbuilder para compilar num ambiente limpo
Manual de Empacotamento de Debian 77 / 90
Passo a passo. . . (3)
I As dependências de compilação necessárias são libsdl1.2-dev,
libsdl-image1.2-dev, libsdl-mixer1.2-dev
I Depois, você irá provavelmente ao encontro de outro erro:
/ usr / bin / ld : SDL_rotozoom . o : undefined reference to symbol ’ ceil@@GLIBC_2 .2.5 ’
// lib / x86_64 - linux - gnu / libm . so .6: error adding symbols : DSO missing from command line
collect2 : error : ld returned 1 exit status
Makefile :376: recipe for target ’ gnujump ’ failed
I Este problema é causado pelo bitrot: O gnujump não foi ajustado
seguindo as alterações do linker.
I Se você estiver a usar a versão de formato fonte 1.0 você pode mudar
directamente as fontes do autor.
I Edite src/[Link] e substitua
gn ujum p_LD FLAG S = $ ( all_libraries )
por
gn ujum p_LD FLAG S = -Wl , - - as - needed
gnujump_LDADD = $ ( all_libraries ) - lm
I Depois corra autoreconf -i
Manual de Empacotamento de Debian 78 / 90
Passo a passo. . . (4)
I Se estiver a usar formato fonte de versão 3.0 (quilt), use quilt para
preparar uma patch. (veja [Link]
I export QUILT_PATCHES=debian/patches
I mkdir debian/patches
quilt new [Link]
quilt add src/[Link]
I Edite src/[Link] e substitua
gn ujum p_LD FLAG S = $ ( all_libraries )
por
gn ujum p_LD FLAG S = -Wl , - - as - needed
gnujump_LDADD = $ ( all_libraries ) - lm
I quilt refresh
I Desde que o src/[Link] mudou, o autoreconf tem de ser
chamado durante a compilação. Para o fazer automaticamente com
dh, altere a chamada dh em debian/rules de: dh $ --with
autotools-dev
para: dh $ --with autotools-dev --with autoreconf
Manual de Empacotamento de Debian 79 / 90
Passo a passo. . . (5)
I O pacote deverá agora compilar sem problemas.
I Use debc para listar o conteúdo do pacote gerado, e debi para o instalar
e testar.
I Teste o pacote com lintian
I Embora não seja um requerimento estrito, é recomendado que os
pacotes enviados para Debian sejam lintian-clean (passaram o teste
do lintian)
I Mais problemas podem ser listados usando lintian -EviIL
+pedantic
I Algumas dicas:
I Remova os ficheiros que você não precisa em debian/
I Preencha debian/control
I Instale o executável para /usr/games ao sobrepor
dh_auto_configure
I Use flags de compilador hardening para aumentar a segurança.
Veja [Link]
Manual de Empacotamento de Debian 80 / 90
Passo a passo. . . (6)
I Compare o seu pacote com aquele já empacotado em Debian:
I Divide os ficheiros de dados para um segundo pacote, que é o
mesmo para todas as arquitecturas (→ poupa espaço no arquivo de
Debian)
I Instala um ficheiro .desktop (para os menus de GNOME/KDE) e
também o integra no menu Debian
I Corrige alguns problemas menores usando patches
Manual de Empacotamento de Debian 81 / 90
Sessão prática 3: empacotando uma biblioteca Java
1 Faça uma leitura rápida a alguma documentação sobre empacotamento
de Java:
I [Link]
I [Link]
I [Link]
I /usr/share/doc/javahelper/[Link]
2 Descarregue o IRClib de [Link]
3 Empacote-o
Manual de Empacotamento de Debian 82 / 90
Passo a passo. . .
I apt-get install javahelper
I Crie um pacote fonte básico: jh_makepkg
I Biblioteca
I Nenhum
I Compilador/executor em tempo real Livre Predefinido
I Observe e corrija debian/*
I dpkg-buildpackage -us -uc ou debuild
I lintian, debc, etc.
I Compare o seu resultado com o pacote fonte libirclib-java
Manual de Empacotamento de Debian 83 / 90
Sessão prática 4: empacotar uma gema Ruby
1 Dê uma leitura rápida a alguma documentação acerca de
empacotamento de Ruby:
I [Link]
I [Link]
I [Link]
I gem2deb(1), dh_ruby(1) (no pacote gem2deb)
2 Crie um pacote fonte Debian básico a partir da gema peach:
gem2deb peach
3 Melhore-o para que se torne num pacote Debian apropriado
Manual de Empacotamento de Debian 84 / 90
Passo a passo. . .
gem2deb peach:
I Descarrega a gema de [Link]
I Cria um arquivo .[Link] apropriado e descompacta-o
I Inicializa um pacote fonte Debian baseado nos meta-dados da gema
I Chamado ruby-gemname
I Tenta compilar o pacote binário Debian (isto pode falhar)
dh_ruby (incluído em gem2deb) faz as tarefas específicas de Ruby:
I Compila extensões de C para cada versão de Ruby
I Copie os ficheiros para o sue directório de destino
I Actualiza shebangs nos scripts executáveis
I Corra os testes definidos em debian/[Link],
debian/[Link], ou debian/[Link], assim
como várias outras verificações
Manual de Empacotamento de Debian 85 / 90
Passo a passo. . . (2)
Melhore o pacote gerado
I Corra debclean para limpar a árvore fonte. Veja em debian/.
I changelog e compat devem estar correctos
I Edite debian/control: melhore Description
I Escreva um ficheiro copyright apropriado com base nos ficheiros do
autor
I Compile o pacote
I Compare o seu pacote com o pacote ruby-peach no arquivo Debian
Manual de Empacotamento de Debian 86 / 90
Sessão prática 5: empacotar um módulo Perl
1 Faça uma leitura rápida a alguma documentação sobre empacotamento
de Perl:
I [Link]
I [Link]
I dh-make-perl(1), dpt(1) (in the pkg-perl-tools package)
2 Crie um pacote fonte Debian básico a partir da Acme distribuição CPAN:
dh-make-perl --cpan Acme
3 Melhore-o para que se torne num pacote Debian apropriado
Manual de Empacotamento de Debian 87 / 90
Passo a passo. . .
dh-make-perl --cpan Acme:
I Descarrega o tarball a partir de CPAN
I Cria um arquivo .[Link] apropriado e descompacta-o
I Inicializa um pacote fonte Debian baseado nos meta-dados da
distribuição
I Chamado libdistname -perl
Manual de Empacotamento de Debian 88 / 90
Passo a passo. . . (2)
Melhore o pacote gerado
I debian/changelog, debian/compat, debian/[Link], e
debian/watch devem estar correctos
I Edita debian/control: melhora Description, e remove a "boilerplate" no
fundo
I Edita debian/copyright: remove o parágrafo "boilerplate" no topo,
adiciona anos e copyright à estrofe de extttFiles: *
Manual de Empacotamento de Debian 89 / 90
Tradução
Américo Monteiro
Se encontrar algum erro na tradução deste documento, por favor comunique
para <a_monteiro@[Link]>. ou <traduz@[Link]>.
Manual de Empacotamento de Debian 90 / 90