/[ddp]/manuals/trunk/maint-guide/maint-guide.pt-br.sgml
ViewVC logotype

Contents of /manuals/trunk/maint-guide/maint-guide.pt-br.sgml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 7481 - (show annotations) (download) (as text)
Fri Aug 20 18:59:29 2010 UTC (2 years, 9 months ago) by osamu
File MIME type: text/x-sgml
File size: 79102 byte(s)
UTF-8 conversion and script update
1 <!DOCTYPE debiandoc PUBLIC "-//DebianDoc//DTD DebianDoc//EN" [
2
3 <!-- textual data entities -->
4 <!-- first definition wins in SGML -->
5 <!ENTITY % default SYSTEM "default.ent"> %default;
6
7 ]>
8 <!-- CVS revision of this document "$Revision: 1.20 $" -->
9 <!-- CVS revision of original english document "*.**" -->
10
11
12 <debiandoc>
13
14 <book>
15
16 <titlepag>
17
18 <title>Guia do Novo Mantenedor Debian</title>
19
20 <author>Josip Rodin <email/joy-mg@debian.org/
21 </author>
22 <author>Traduzido por: Mahdi <email/mahdi@dcc.ufmg.br/
23 </author>
24 <author>Revisado por: Priscilla Pimenta <email/priscilla@minaslivre.org/
25 </author>
26
27 <version>version 1.2, 6 April 2002.</version>
28
29 <copyright>
30 <copyrightsummary>Copyright &copy; 1998-2002 Josip Rodin.</copyrightsummary>
31
32 <p>Este documento pode ser utilizado sob os termos do GNU General Public License versão 2 ou superior.
33 <p>Este documento foi criado utilizando os seguintes documentos como exemplos:
34
35 <p>Making a Debian Package (AKA the Debmake Manual), copyright &copy;
36 1997 Jaldhar Vyas.
37
38 <p>The New-Maintainer's Debian Packaging Howto, copyright &copy; 1997
39 Will Lowe.
40 </copyright>
41
42 </titlepag>
43
44 <toc sect>
45
46 <chapt id="start">Começando do jeito certo:
47
48 <p>O intuito deste documento é descrever a construção de um pacote Debian para o usuário comum do Debian,aspirante desenvolvedor. Ele utiliza uma linguagem bastante informal e é bem ilustrado com exemplos funcionais.
49 Existe um velho ditado Romano,<em>Longum iter est per preaecepta, breve et efficax per exempla!</em> (É um longo caminho o das regras, mas curto e eficiente se exemplificado!).
50
51 <p>Um dos fatores que fazem do Debian uma distribuição diferenciada é o seu sistema de pacotes. Mesmo já existindo uma vasta quantidade de programas já distribuídos no formato Debian, as vezes é necessário instalar programas que não o são.
52 Você deve estar imaginando como criar seus próprios pacotes, e talvez pense que seja uma tarefa um tanto difícil. Bem, se você é realmente um iniciante no Linux, é complicado, mas se você já tivesse alguma experiência você nem estaria lendo esta documentação agora; :-)
53 Você precisa saber algo sobre programação em Unix, mas certamente não precisa ser um especialista.
54
55 <p> Uma coisa é certa, entretanto: para criar e manter pacotes Debian você precisa de bastante tempo. Não cometa erros. Para o nosso sistema funcionar corretamente, os mantenedores precisam ser tanto tecnicamente competentes como aplicados.
56
57 <p> Este documento irá explicar passo a passo (mesmo os que a princípio alguns pareçam irrelevantes) e irá ajudá-lo a criar um primeiro pacote e ganhar alguma experiência na criação das próximas distribuições desse mesmo pacote ou até mesmo de outros pacotes.
58
59 <p>Novas versões deste documento deverão estar sempre disponíveis em
60 <url name="http://www.debian.org/doc/maint-guide/" id="http://www.debian.org/doc/maint-guide/">
61 e no pacote `<package/maint-guide-pt/'.
62 <!-- Translation in <this language> is also available in the
63 `<package/maint-guide-xy/' package. -->
64
65 <sect id="needprogs">Programas que você precisa para o desenvolvimento:
66
67 <p> Antes de mais nada, você deve estar certo de que tem instalado alguns pacotes adicionais necessários para o desenvolvimento. Note que a lista não contém nenhum pacote marcado 'essential' ou 'required' - supomos que você já tenha tais pacotes instalados.
68
69 <p> Esta revisão deste documento foi atualizada para os pacotes no Debian ('sid')
70
71 <p> Os seguintes pacotes vêm na instalação padrão do Debian, e você provavelmente já os tem. Mesmo assim, é prudente conferir com`dpkg -s &lt;package&gt;`.
72
73 <list>
74 <item><package/dpkg-dev/ - este pacote contém ferramentas necessárias para desempacotar, construir e enviar arquivos-fonte do Debian. (veja
75 <manref name="dpkg-source" section="1">)
76
77 <item><package/file/ - este prático programa pode determinar o tipo de um arquivo.
78 (veja <manref name="file" section="1">)
79
80 <item><package/gcc/ - O Compilador C GNU, necessário se o seu programa, como muitos outros, foi escrito em C.
81 (veja <manref name="gcc" section="1">)
82 Este pacote irá também instalar vários outros pacotes, como
83 <package/binutils/ que contém programas utilizados para compilar e montar
84 arquivos-objeto.(veja `info binutils` no pacote <package/binutils-doc/ )
85 e <package/cpp/, o preprocessador C. (veja <manref name="cpp" section="1">)
86
87 <item><package/g++/ - O Compilador C++ GNU, necessário se o seu programa foi escrito em C++. (veja <manref name="g++" section="1">)
88
89 <item><package/libc6-dev/ - as bibliotecas para o C e arquivos de header que o gcc precisa criar arquivos-objeto.(veja `info libc` no pacote <package/glibc-doc/ )
90
91 <item><package/make/ - normalmente a criação de um programa é feito em várias etapas, e assim sendo é melhor utilizar este programa para automatizar as etapas criando um Makefile ao invés de executar os comandos sempre. (veja `info make`)
92
93 <item><package/patch/ - esta ferramenta é muito útil para analisar um arquivo contendo uma lista de diferenças (criado pelo programa diff) e aplica-la no arquivo original, produzindo uma versão "patcheada".
94 (veja <manref name="patch" section="1">)
95
96 <item><package/perl/ - Perl é uma das linguagens de scripting interpretadas mais utilizadas nos sistemas baseados em Unix atuais. (veja <manref name="perl" section="1">)
97 </list>
98
99 <p> Você provavelmente vai querer instalar os seguintes pacotes também:
100
101 <list>
102 <item><package/autoconf/ e <package/automake/ - muitos dos programas atuais utilizam scripts de configuração e Makefiles preprocessados com ajuda desses programas. (veja `info autoconf`, `info automake`)
103
104 <item><package/dh-make/ and <package/debhelper/ - dh-make é necessário para criar o esqueleto do nosso pacote-exemplo e vai utilizar algumas ferramentas do debhelper para criação de pacotes. Elas não são essenciais para a criação de pacotes, mas são <strong>fortemente</strong> recomendadas para novos mantenedores. Elas tornam todo o processo muito mais fácil de começar e controlar, no final das contas. (veja <manref name="dh_make" section="1">,
105 <manref name="debhelper" section="1">, /usr/share/doc/debhelper/README)
106
107 <item><package/devscripts/ - este pacote contém alguns scripts muito úteis que podem ser de interesse para os mantenedores, mas não são necessários para a criação de pacotes. (veja /usr/share/doc/devscripts/README.gz)
108
109 <item><package/fakeroot/ - este utilitário permite que você emule ser usuário root, o que é necessário em algumas etapas do processo de criação. (veja <manref name="fakeroot" section="1">)
110
111 <item><package/gnupg/ - uma ferramenta que permite que você <em>assine</em> digitalmente seus pacotes.
112 Isto é especialmente importante se você quer distribui-los para outras pessoas, e você certamente o fará quando seu trabalho for incluído na distribuição Debian. (veja <manref name="gpg" section="1">)
113
114 <item><package/g77/ - o compilador Fortran 77 GNU, necessário se o seu programa foi escrito em Fortran.
115 (see <manref name="g77" section="1">)
116
117 <item><package/gpc/ - o compilador Pascal GNU, necessário se o seu programa foi escrito em Pascal. É bom notar também o pacote <package/fp-compiler/, o compilador Pascal gratuito, que exerce a mesma função igualmente bem. (veja <manref name="gpc" section="1">, <manref name="ppc386" section="1">)
118
119 <item><package/xutils/ - alguns programas, normalmente os criados para o X11, também utilizam esses programas para gerar Makefiles de conjuntos de funções de macro.(see <manref name="imake" section="1">,
120 <manref name="xmkmf" section="1">)
121
122 <item><package/lintian/ - este é o testador de pacotes Debian. Ele permite que você saiba se cometeu alguns dos erros mais comuns, depois de criado o pacote, e explica os erros encontrados. (veja <manref name="lintian" section="1">,
123 /usr/share/doc/lintian/lintian.html/index.html)
124 </list>
125
126 <p>O seguinte pacote é uma documentação <em>muito</em> importante que você deve ler junto com este documento:
127
128 <list>
129 <item><package/debian-policy/ - o Policy contém explanações sobre a estrutura e conteúdo do repositório Debian, muitas questões sobre arquitetura de sistemas operacionais, a hierarquia padrão do sistema de arquivos (que diz onde cada arquivo e diretório deve ficar) etc.
130 Para você, o importante é que ele descreve os pre-requisitos que cada pacote deve satisfazer para ser incluído na distribuição. (veja /usr/share/doc/debian-policy/policy.html/index.html)
131
132 <item><package/developers-reference/ - para todos os casos não especificamente sobre detalhes técnicos de empacotamento, como a estrutura do repositório, como renomear, tornar órfão adotar pacotes, como fazer NMUs, como tratar de bugs, onde e quando enviar os pacotes, etc.
133 (veja /usr/share/doc/developers-reference/developers-reference.html/index.html)
134 </list>
135
136 <p>As curtas descrições que são dadas acima servem apenas para apresentar-lhe o que cada pacote faz. Antes de continuar, por favor leia cuidadosamente a documentação de cada programa, pelomenos na parte do uso padrão. Pode parecer muita coisa para estudar, mas isto lhe será de <em>enorme</em> valia no final.
137
138 <p>Nota: <package/debmake/ é um pacote que contém alguns programas similares ao dh-make, mas seu uso específico <strong>não é</strong>
139 tratado neste documento, porque ele é <em>obsoleto</em>. Para mais informações, veja
140 <url name="the Debmake manual" id="http://www.debian.org/~jaldhar/">
141
142 <sect id="otherinfo">Outras informações:
143
144 <p>Existem dois tipos de pacotes que você pode criar: fonte e binários.
145 Um pacote fonte contém um código-fonte que você possa compilar.
146 Um pacote binário contém somente o programa pronto. Não confunda os termos, como o código-fonte do programa e o pacote-fonte do programa. Por favor leia outros manuais se você precisa de maiores informações sobre essa terminologia.
147
148 <p>No Debian, o termo 'mantenedor' é usado para uma pessoa que cria pacotes, 'autor' para a pessoa que criou o programa e 'mantenedor superior' para a pessoa que atualmente mantém o programa fora do Debian. Normalmente o autor e o mantenedor superior são a mesma pessoa - e as vezes até mesmo o mantenedor é a mesma pessoa. Se você criou um programa, e que colocá-lo no Debian, sinta-se a vontade para enviar-nos sua aplicação para se tornar um mantenedor.
149
150 <p>Depois que você criou o seu pacote (ou enquanto o faz), você terá de se tornar um mantenedor oficial da Debian para que seu programa seja colocado na proxima distribuição do Debian (se o seu programa é realmente útil, por que não?). Esse processo é tratado na Referência do Desenvolvedor (Developer's Reference). Por favor leia-o.
151
152 <chapt id="first">Primeiros passos
153
154 <sect id="choose">Escolha seu programa
155
156 <p>Você provavelmente escolheu o pacote que quer criar. A primeira coisa que você precisa fazer é conferir se o pacote já não está na distribuição. Se você usa a distribuição 'stable', talvez seja melhor vc ir na
157 <url name="página de busca de pacotes Debian" id="http://www.debian.org/distrib/packages">.
158 Se você usa a distribuição 'unstable' <strong>atual</strong> confira com os seguintes comandos:
159 <example>
160 dpkg -s program
161 dpkg -l '*program*'
162 </example>
163
164 <p>Se o pacote já existe, bem, é só instalar! :-) Se ele estiver órfão -- se seu mantenedor estiver marcado no "Grupo QA do Debian", você pode adotá-lo. Consulte a
165 <url name="lista de pacotes órfãos" id="http://www.debian.org/devel/wnpp/orphaned">
166 e a
167 <url name="lista de pacotes para adoção" id="http://www.debian.org/devel/wnpp/rfa_bypackage">
168 para verificar se o pacote está realmente disponível.
169
170 <p>Se você pode adotar o pacote, pegue o seu código-fonte (com algo como,
171 <tt/apt-get source packagename/) e analise-o. Este documento infelizmente não inclui informações sobre adoção de pacotes. Felizmente você não deve ter problemas descobrindo como o pacote funciona uma vez que alguém já fez todo o trabalho inicial para você. Mesmo assim continue lendo, muito do que vem a seguir ainda será aplicável para você.
172
173 <p>Se o pacote ainda não existe, e você gostaria de vê-lo no Debian, prossiga como seguinte:
174
175 <list>
176 <item>Confira se ninguém mais está trabalhando no pacote na
177 <url name="lista de pacotes em desenvolvimento" id="http://www.de.debian.org/devel/wnpp/being_packaged">.
178 Se alguém já está criando-o, entre em contato com essa pessoa se você achar desejável. Senão - procure outro programa interessante que ninguém mantém ainda.
179 </item>
180
181 <item>Programas <strong>têm</strong> de ter uma licença, se possível gratuita como descrito no
182 <url name="Guia Debian de Software Livre" id="http://www.debian.org/social_contract#guidelines">.
183 Se o programa não concorda com alguma dessas regras, mas ainda assim pode ser distribuído, ele ainda pode ser incluído nas seções 'contrib' ou 'non-free'. Se você ainda não tem certeza sobre onde ele deve ser incluído, envie o texto da licença para <email/debian-legal@lists.debian.org/ e peça ajuda.
184 </item>
185
186 <item>Programas certamente <strong>não</strong> devem ser executados com privilégios de root (setuid root), ou ainda melhor - eles não devem precisar depender de nenhum privilégio específico (nem setuid nem setgid)
187 </item>
188
189 <item>Programas não devem ser daemons, nem nada que tenha de ir para diretórios */sbin, nem abrir portas como root.</item>
190
191 <item>Programas devem estar na forma executável, bibliotecas são mais difíceis de lidar.</item>
192
193 <item>Tudo deve ser bem documentado, e/ou o código tem de ser bem legível e inteligível.</item>
194
195 <item>Você deve entrar em contato com o(s) autor(es) do programa para confirmar se eles concordam com o seu empacotamento. É importante ser possível o contato com o(s) autor(es) no caso de quaisquer problemas específicos do programa, então não faça pacotes de software sem suporte. </item>
196
197 <item>E por último, mas não menos importante, você deve ter certeza que o tudo funciona corretamente, utilizando algum tempo.</item>
198 </list>
199
200 <p>Obviamente tudo isso são medidas de segurança, e têm como intuito evitar usuários zangados com você, se você fez algo errado em algum daemon setuid root...
201 Quando você tiver mais experiência na criação de pacotes, você poderá criar tais pacotes, mas mesmo os desenvolvedores mais experientes consultam a lista debian-mentors quando em dúvida. E as pessoas lá ficarão felizes em poder ajudar.
202
203 <p>Para mais ajuda sobre isso, leia a Referência do Desenvolvedor (Developer's Reference).
204
205 <sect id="getit">Pegue o programa e teste
206
207 <p>A primeira coisa a ser feita é encontrar e baixar o pacote original. Eu presudo que você já tem o código-fonte pego na página do autor. Códigos-fonte para software livre em Unix normalmente vêm no formato tar/gzip, com a extensão .tar.gz, e normalmente contém um subdiretório com o nome nome_do_programa-versão e todos os códigos-fonte dele dentro. Se o código-fonte do seu programa vem em outro tipo de arquivamento (como por exemplo um arquivo de extensão ".Z" ou ".zip"), desempacote-o com as ferramentas adequadas ou peça ajuda na lista debian-mentors se você não tem certeza de como desempacota-lo corretamente (dica: execute 'file arquivo.extensão').
208
209 <p>Como exemplo, eu usarei um programa chamado 'gentoo', um manipulador de arquivos para o X em GTK+. Note que o programa já está empacotado, e mudou bastante desde a última versão em que este texto foi escrito.
210
211 <p>Crie um subdiretório no seu home chamado 'debian' ou 'deb' ou algo que você ache mais apropriado (ex: ~/gentoo/ seria suficiente neste caso). Coloque o arquivo baixado dentro dele, e descompacte-o (com 'tar zxf gentoo-0.9.12.tar.tz'). Certifique-se que não ocorreram erros, mesmo os mais "irrelevantes", pois provavelmente poderão ocorrer erros nos sistemas de outras pessoas, que têm ferramentas de desempacotamento que podem ou não ignorar tais anomalias.
212
213 <p>Agora você tem outro subdiretório, chamado 'gentoo-0.9.12'. Mude para esse diretório e leia <strong>cuidadosamente</strong> a documentação fornecida. Normalmente existem arquivos chamados README*, INSTALL*, *.lsm ou *.html. Você deve encontrar instruções de como compilar e instalar o programa corretamente (provavelmente eles irão assumir que você quer instalar o programa no diretório /usr/local/bin , mas você não fará isso. Mais sobre isso será dito em <ref id="destdir">).
214
215 <p>O processo varia de programa para programa, mas vários programas atuais vem com um script 'configure' que configura o código-fonte de acordo com o seu sistema e garante que seu sistema tem condições de compilar o programa. Após configurar o código-fonte com './configure', os programas são normalmente compilados com 'make'. Alguns deles suportam 'make check', para rodar incluindo auto-testes. A instalação nos devidos diretórios de destino são normalmente feitos com 'make install'.
216
217 <p>Agora tente compilar e executar seu programa, para garantir que ele funciona corretamente e não interfere em nada enquanto ele está sendo instalado ou executado.
218
219 <p>Normalmente você também pode executar 'make clean' (ou melhor ainda 'make distclean') para limpar o diretório de compilação. Algumas vezes você pode inclusive executar um 'make uninstall' para remover todos os arquivos instalados.
220
221 <sect id="namever">Nome do pacote e versão
222
223 <p>Você deve começar empacotando com um diretório de código-fonte completamente limpo, ou simplesmente com um código-fonte recém descompactado.
224
225 <p>Para que o pacote seja criado corretamente, você deve tornar o nome do programa caixa-baixa (se já não for), e deve mover o diretório fonte para &lt;nome_do_pacote&gt;-&lt;versão&gt;.
226
227 <p>Se o nome do programa utiliza mais de uma palavra, reduza-o para uma palavra ou abrevie-o. Por exemplo, o programa "Pequeno Editor do John para X" pode ser nomeado "xpedjohn", ou "xeditorjohn" ou qualquer outra coisa que você decidir, desde que o nome tenha um nome razoável, como 20 caracteres.
228
229 <p>Verifique também a versão exata do programa (para ser incluída na versão do pacote). Se este software não utiliza versões numeradas tipo X.Y.Z, mas algo como uma data, sinta-se a vontade para utilizar essa data como a versão, sufixada com "0.0." (para o caso de alguem superior na manutenção do programa resolver um dia distribuir uma versão tipo 1.0). Dessa forma, se a distribuição ou imagem do programa é do dia 19/12/1998, você pode utilizar a versão como sendo 0.0.19981219.
230
231 <p>Alguns programas nem têm uma versão definida, caso o qual você deve entrar em contado com o mantenedor superior para certificar-se de algum outro eventual sistema de revisão por ele utilizado.
232
233 <sect id="dh_make">"Debianização" inicial
234
235 <p>Certifique-se que você está no diretório do código-fonte do programa e execute:
236
237 <p><example>
238 dh_make -e seu.endereço@de.mantenedor -f ../gentoo-0.9.12.tar.gz
239 </example>
240
241 <p>Obviamente você deve substituir "seu.endereço@de.mantenedor" com o seu endereço de e-mail a ser incluído no changelog, outros arquivos e no nome do arquivo com o nome do seu código-fonte. Veja <manref name="dh_make" section="1"> para maiores informações.
242
243 <p>Algumas informações serão mostradas. Vai ser perguntado que tipo de pacote você quer criar. O gentoo é um pacote de um único binário - ele só cria um arquivo binário, e logo um arquivo .db -, logo, vamos selecionar a primeira opção utilizando a tecla 's'. Confira a informação impressa na tela e confirme pressionando &lt;enter&gt;.
244
245 <p>Novamente, como novo mantenedor, não é recomendável que você crie pacotes de múltiplos binários ou bibliotecas. Não é muito complicado, mas exige um pouco mais de conhecimento, e assim sendo não será descrito aqui.
246
247 <p>Note que você deve executar o dh_make <strong>somente uma vez</strong>, e que ele não se comportará corretamente se você executá-lo novamente num diretório já "debianizado". Isso também significa que você irá utilizar um método diferente para criar uma nova revisão ou versão do seu pacote no futuro. Leia mais sobre isso em <ref id="update">
248
249 <chapt id="modify">Modificando o código-fonte
250
251 <p>Normalmente, os programa são instalados em subdiretórios em /usr/local , mas os pacotes do Debian não devem utilizar esse diretório, uma vez que ele é reservado ao uso privado dos administradores do sistema. Isto significa que você terá de dar uma lhada no sistema de construção do seu programa, normalmente começando com o Makefile. Este é o script <manref name="make" section="1"> que você irá utilizar para automatizar a compilação do seu programa. Para maiores informações sobre Makefiles, leia <ref id="rules">.
252
253 <p>Note que se o seu programa utiliza o GNU <manref name="automake" section="1"> e/ou <manref name="autoconf" section="1">, o código-fonte incluirá os arquivos Makefile.am e/ou Makefile.in, respectivamente, e você terá de modificar esses arquivos também. Isto acontece pois cada execução do automake irá reescrever o makefile.in com alguma informação gerada a partir do Makefile.am, e cada execução do ./configure irá fazer o mesmo com os Makefiles, com informações do Makefile.in. Editando arquivos Makefile.am exigem algum conhecimento sobre o automake, que você pode adquirir no info do automake; ao passo que editar arquivos Makefile.in são mais ou menos a mesma coisa que editar Makefiles, tomando cuidado com as variáveis (ex: qualquer string entre '@'s, como @CFLAGS@ ou @LN_S@, que são substituídos com a informação propriamente dita de cada execução do ./configure).
254
255 <p>Note também que foge ao nosso escopo aqui descrever <em>todos</em> os detalhes sobre correção de códigos, mas existem alguns problemas que normalmente são encontrados.
256
257 <sect id="destdir">Instalação em um subdiretório
258
259 <p>A maioria dos programas tem algum modo de ser instalados na estrutura de diretório existente do seu sistema, de modo que seus binários são incluídos no seu $PATH e sua documentação se encontre em lugares comuns. Se você fizer isso, entretanto, seu programa será instalado junto com tudo o mais que já esteja no seu sistema. Isso tornaria difícil para que as ferramentas de empacotamento descobrissem quais arquivos pertencem ou não ao seu pacote.
260
261 <p>Portanto você precisa fazer algo mais: instalar o programa dentro num subdiretório temporário de onde as ferramentas de mantenedor irão trabalhar no pacote .deb. Tudo que estiver nesse diretório irá ser instalado no sistema do usuário quando eles instalarem o pacote. A única diferença é que o dpkg vai estar instalando os arquivos no diretório raiz.
262
263 <p>Este diretório temporário é normalmente criado dentro do seu diretório debian/, na árvore de diretórios e código-fonte descompactada. Ele é normalmente chamado <file>debian/nome_do_pacote</file>.
264
265 <p>Tenha em mente que mesmo que você tenha que fazer o programa ser instalado em debian/nome_do_pacote, ele ainda precisa se comportar corretamente quando colocado no diretório raiz (ex: quando instalado do pacote .deb. Logo, você não deve deixar que o sistema de construção utilize strings como <tt>/home/me/gentoo-0.9.12/usr/share/gentoo</tt> nos arquivos do pacote.
266
267 <p>Com programas que utilizam o GNU autoconf, isto será bastante fácil. A maioria destes programas tem Makefiles que são como padrão definidos para permitir que a instalação seja feita num diretório aleatório, tendo em mente que /usr (por exemplo) é o prefixo canônico. O dh_make, quando detectar que seu programa utiliza o autoconf, irá definir os comandos para fazer tudo isso automaticamente, de forma que você pode inclusive saltar a leitura desta seção, mas com outros programas, você provavelmente terá de analisar e editar os Makefiles.
268
269 <p>Eis a parte relevante do Makefile do gentoo:
270
271 <p><example>
272 # Onde colocar o binário durante o 'make install'?
273 BIN = /usr/local/bin
274
275 # Onde colocar os ícones durante o 'make install'?
276 ICONS = /usr/local/share/gentoo
277 </example>
278
279 <p>Nota-se que os arquivos estão definidos para serem instalados em <file>/usr/local</file>. Mude tais caminhos para:
280 <p><example>
281 # Onde colocar o binário durante o 'make install'?
282 BIN = $(DESTDIR)/usr/bin
283
284 # Onde colocar os ícones durante o 'make install'?
285 ICONS = $(DESTDIR)/usr/share/gentoo
286 </example>
287
288 <p>Mas porque em tal diretório, e não algum outro? Porque os pacotes debian nunca instalam pacotes em <file>/usr/local</file> -- essa árvore de diretórios é reservada ao uso do administrados do sistema. Tais arquivos, no Debian, devem ser colocados em <file>/usr</file>.
289
290 <p>A localização mais exata para binários, ícones, documentação, etc, é especificada na Hierarquia Padrão de Sistemas de Arquivos (Filesystem Hierarchy Stanrdart - FHS - veja /usr/share/doc/debian-policy/fhs). Eu recomendo que você procure e leia as seções que podem insteressar ao seu pacote.
291
292 <p>Então nós devemos instalar o binário em /usr/bin no lugar de /usr/local/bin, os manuais em /usr/share/man/man1 ao invés de /usr/local/man/man1, etc. Note que, como o gentoo não fornece um manual em seu Makefile, e o Debian-Policy exige que todo programa tenha um, nós faremos um, mais tarde, e o instalaremos em/usr/share/man/man1.
293
294 <p>Alguns programas não usam variáveis no Makefile para definir caminhos como estes. Isto significa que você talvez tenha de editar alguns arquivos-fonte em C para que eles utilizem os caminhos adequados. Mas onde procurar, e exatamente o que procurar? Você pode resolver isso executando:
295
296 <p><example>
297 grep -nr -e 'usr/local/lib' --include='*.[c|h]' .
298 </example>
299
300 <p>O Grep irá executar recursivamente por toda a árvore do código e dizer-lhe o nome e a linha do arquivo quando encontrar uma ocorrência.
301
302 <p>Edite esses arquivos e substitua /usr/local/* com usr/* e pronto. Tome cuidado para não mexer no resto do código! :-)
303
304 <p>Depois disso você deve encontrar o alvo de instalação (procure pela linha começa com 'install:', o que normalmente funciona) e renomeie todas as referências a diretórios que não aqueles definidos no topo do Makefile. Antes, o alvo de instalação do gentoo continha:
305
306 <p><example>
307 install: gentoo
308 install ./gentoo $(BIN)
309 install icons/* $(ICONS)
310 install gentoorc-example $(HOME)/.gentoorc
311 </example>
312
313 <p>Depois da mudança, passou a conter:
314 <example>
315 install: gentoo-target
316 install -d $(BIN) $(ICONS) $(DESTDIR)/etc
317 install ./gentoo $(BIN)
318 install -m644 icons/* $(ICONS)
319 install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
320 </example>
321
322 <p>Você certamente notou que agora tem um comando <tt>install -d</tt> antes dos outros comandos semelhantes. O Makefile original não tinha isso porque normalmente o diretório /usr/local/bin e outros diretórios já existiam no sistema onde alguém executasse o 'make install'. Entretante, como nós vamos instalar o programa em nosso próprio diretório vazio (ou não existente), nós teremos de criar cada um desses diretórios.
323
324 <p>Nós podemos inclusive adicionar outras coisas no final da regra, como a instalação de documentação adicional, que os autores algumas vezes omitem:
325
326 <p><example>
327 install -d $(DESTDIR)/usr/share/doc/gentoo/html
328 cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
329 </example>
330
331 <p>Um leitor atento notará que eu troquei 'gentoo' para 'gentoo-target' na linha de 'install:'. Isto é chamado de correção de bug não-relacionado. :-)
332
333 <p>Sempre que você fizer mudanças que não são especificamente relacionado ao pacote Debian, certifique-se de manda-las para o mantenedor superior para que elas possam ser incluídas na próxima revisão do programa e serem úteis para todo mundo. Lembre-se também de fazer suas mudanças de modo não específico ao Debian ou Linux (ou até mesmo Unix!) antes de enviá-las -- faça-as portáveis. Isto tornará suas correções mais fáceis de serem aplicadas.
334
335 <p>Note que você não tem de enviar os arquivos de debian/* ao mantenedor superior.
336
337 <sect id="difflibs">Mudando bibliotecas
338
339 <p>Existe um outro problema comum: bibliotecas muitas vezes variam de plataforma para plataforma. Por exemplo, um Makefile faz referência a uma biblioteca que não existe em sistemas Debian. Neste caso, nós precisamos muda-la para uma biblioteca que existe no Debian, e serve pra mesma coisa.
340
341 <p>Assim sendo, se existe alguma linha no Makefile do seu programa (ou Makefile.in) que tenha algo como isto (e o seu programa não compile):
342
343 <p><example>
344 LIBS = -lcurses -lalgumacoisa -lalgumaoutracoisa
345 </example>
346
347 <p>Mude-a para isso, e provavelmente funcionará:
348 <p><example>
349 LIBS = -lncurses -lalgumacoisa -lalgumaoutracoisa
350 </example>
351
352 <p>(o autor percebe que este não é um bom exemplo, considerando que nosso pacote libncurses agora cria um symlink para libcurses.so, mas ele não pode encontrar nada melhor. Sugestões são muito bem vindas :-)
353
354 <chapt id="dreq">Coisas necessárias no debian/
355
356 <p>Agora existe um novo subdiretório no diretório-fonte do programa chamado 'debian'. Existem alguns arquivos nesse diretório que nós devemos editar para personalizar o comportamento do nosso pacote. Os mais importantes deles são 'control', 'changelog', 'copyright' e 'rules', que são necessários para todos os pacotes.
357
358 <sect id="control">arquivo 'control'
359
360 <p>Este arquivo contém vários valores que o <prgn/dpkg/, <prgn/dselect/ e outras ferramentas de controle de pacotes irão utilizar para administrar o pacote.
361
362 <p>Eis o arquivo de controle que o dh_make criou para nós:
363
364 <p><example>
365 1 Source: gentoo
366 2 Section: unknown
367 3 Priority: optional
368 4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
369 5 Build-Depends: debhelper (>> 3.0.0)
370 6 Standards-Version: 3.5.2
371 7
372 8 Package: gentoo
373 9 Architecture: any
374 10 Depends: ${shlibs:Depends}
375 11 Description: &lt;insert up to 60 chars description&gt;
376 12 &lt;insert long description, indented with spaces&gt;
377 </example>
378 (eu adicionei os números das linhas)
379
380 <p>As linhas 1-6 são as informações de controle para o pacote.
381
382 <p>A linha 1 é o nome do pacote.
383
384 <p>A linha 2 é a seção da distribuição em que o pacote será incluído.
385
386 <p>Como você deve ter notado, o Debian é dividido em seções: main (a seção de software livre), non-free (os softwares gratuitos, mas não-livres) e contrib (software livre que depende de software não-livre). Dentro dessas, existem subseções lógicas que descrevem brevemente o tipo de pacote guardam. Então temos 'admin' para ferramentas de administradores, 'base' para ferramentas básicas, 'devel' para ferramentas de programação, 'doc' para documentação, 'libs' para bibliotecas, 'mail' para clientes e daemons de email, 'net' para aplicativos e daemons de rede, 'x11' para programas gráficos que não se enquadram em outras categorias, e muitas outras.
387
388 <p>Então vamos alterá-lo para x11. (um prefixo 'main/' é implícito, e logo podemos omiti-lo.)
389
390 <p>A linha 3 descreve o quão importante que o usuário instale este pacote. Leia o Debian-Policy para orientação no preenchimento desta lacuna. A prioridade 'optional' normalmente caberá para novos pacotes.
391
392 <p>Seção e prioridade são utilizados por frontends como o <prgn/dselect/ quando eles ordenam e selecionam os pacotes padrão. Assim que você enviar o pacote para o Debian, o valor dessas duas lacunas poderá ser alterada pelos mantenedores do repositório, caso o qual você será notificado por email.
393
394 <p>Como este pacote é de prioridade normal e não entra em conflito com nada, nós deixaremos a lacuna preenchida como 'optional'.
395
396 <p>A linha 4 é o nome e endereço de email do mantenedor. Certifique-se que este campo contenha um cabeçalho 'To:' válido para um email, porque depois que você enviar o pacote, o sistema de procura de bugs utilizará ele para enviar emails de bugs para você. evite utilizar vírgulas, '&'s e parênteses.
397
398 <p>A 5ª linha contém a lista dos pacotes necessários para construir o seu pacote. Alguns pacotes, como o gcc e o make são implícitos, veja o pacote <package/build-essential/ para detalhes. Se algum compilador ou ferramenta não-padrão for necessária para construir o seu pacote, você deve adicioná-lo à linha 'Build-Depends'. Múltiplas entradas são separadas por vírgulas; leia a seguir para uma explicação das dependências binárias para saber mais sobre a sintaxe deste campo.
399
400 <p>Você também pode ter Build-depends-Indep, Build-Conflicts e outros campos aqui. Estas informações serão utilizadas pelo software de criação automática de pacotes do Debian para criar os pacotes binários para outras plataformas de computadores. Veja o Debian-Policy para mais informações sobre as dependências de compilação e a Referência do Desenvolvedor para mais informações sobre outras plataformas (arquiteturas) e como portar software para elas.
401
402 <p>Eis um hack que você pode utilizar para descobrir quais pacotes o seu pacotes precisa para ser compilado:
403 <example>
404 strace -f -o /tmp/log ./configure
405 # or make instead of ./configure, if the package doesn't use autoconf
406 for x in `dpkg -S $(grep open /tmp/log|\
407 perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
408 grep "^/"| sort | uniq|\
409 grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
410 cut -f1 -d":"| sort | uniq`; \
411 do \
412 echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
413 done
414 </example>
415
416 <p>O gentoo precisa dos pacotes <package/xlibs-dev/,<package/libgtk1.2-dev/ e <package/libglib1.2-dev/ para ser compilado, portanto vamos adiciona-los após o pacote <package/debhelper/.
417
418 <p>A linha 6 é a versão do padrão do Debian-Policy que este pacote segue. As verões do Debian-Policy que você lê enquanto cria seu pacote.
419
420 <p>A linha 8 é o nome do seu pacote binário. Isto normalmente é a mesma coisa que o nome do pacote-fonte, mas não precisa ser necessariamente desta forma.
421
422 <p>A linha 9 descreve as arquiteturas de CPU para que o pacote binário pode ser compilado. Nós deixaremos este como 'any' pois <manref name="dpkg-gencontrol" section="1"> preencherá este campo com o valor adequado para qualquer máquina em que este pacote seja compilado.
423
424 <p>Se o seu pacote é independente de arquitetura (por exemplo, um script shell ou Perl, ou um documento), mude este para 'all', e leia mais tarde em <ref id="rules"> sobre a utilização da regra 'binary-indep' ao invés da 'binary-arch' para construir o pacote.
425
426 <p>A linha 10 mostra uma das funcionalidades mais poderosas do sistema de empacotamento do Debian. Os pacotes podem relacionar-se uns com os outros de várias formas. Além da 'Depends:', outros campos relacionais são 'Recommends:', 'Suggests:', 'Pre-Depends:', 'Conflicts:', 'Provides:', e 'Replaces:'.
427
428 <p>As ferramentas de manutenção de pacotes normalmente se comportam da mesma maneira quando lidando com essas relações; se não, será explicado.
429 (veja <manref name="dpkg" section="8">, <manref name="dselect" section="8">,
430 <manref name="apt" section="8">, <manref name="aptitude" section="1"> etc.)
431
432 <p>Eis o que as dependencias significam:
433
434 <p><list>
435 <item>Depends:
436 <p>O pacote não será instalado a menos que os pacotes de que ele depende estejam instalados. Use isso se o seu programa não rodará de forma alguma (ou terá sérias implicações) a menos que um pacote em particular esteja presente.</item>
437
438 <item>Recommends:
439 <p>Os Frontends como o dselect ou o aptitude irão perguntar-lhe se você deseja instalar os pacotes recomendados junto com o seu pacote; o dselect vai inclusive insistir. O dpkg e o apt-get vão ignorar este campo. Use isso para pacotes que não são estritamente necessários, mas são tipicamente utilizados com o seu programa.</item>
440
441 <item>Suggests:
442 <p>Quando um usuário instala o seu programa, todos os frontends vão pergutar-lhe se ele deseja instalar os pacotes sugeridos. O dpkg e o apt-get não vão. use isso para pacotes que vão funcionar bem com o seu programa, mas não são de forma alguma necessários.</item>
443
444 <item>Pre-Depends:
445 <p>Este é mais forte que o 'Depends:'. O pacote não será instalado a menos que os pacotes de que ele "pre-depende" estejam instalados <em>e corretamente configurados</em> use isso <strong>muito</strong> pouco e somente após discutir isso na lista do debian-devel. Leia-se: não use isso. :-)</item>
446
447 <item>Conflicts:
448 <p>O pacote não será instalado até que todos os pacotes com que ele conflite sejam removidos. Use isso se o seu programa absolutamente não rodará ou causará sérios problemas se um pacote em particular esteja presente.</item>
449
450 <item>Provides:
451 <p>para alguns tipos de pacotes existem muitos nomes virtuais que podem ser definidos. Você pode obter a lista completa no arquivo /usr/share/doc/debian-policy/virtual-package-name-list.txt.gz . Use isso se o seu programa fornece uma função existente em um pacote virtual. </item>
452
453 <item>Replaces:
454 <p>Use isso quando o seu programa substitui arquivos de outro pacote, ou substitui competamente outro pacote (utilizado juntamente com 'Conflicts'). Arquivos de outros pacotes listados serão sobreescritos com os arquivos do seu pacote.
455 </item>
456 </list>
457
458 <p>Todos estes campos tem uma sintaxe uniforme. Eles são uma lista de nomes de pacotes separados por vírgulas. Estes nomes de pacotes podem inclusive ser listas de nomes de pacotes alternativos, serados por simbolos de pipe (barras verticais '<tt>|</tt>).
459
460 <p>Os campos podem restringir sua aplicabilidade a versões particulares de cada pacote listado. Essas versões são listadas entre parênteses após cada nome de pacote individualmente, e devem conter uma relação da seguinte lista seguida pelo número da versão. As relações permitidas são:
461 <tt>&lt;&lt;</tt>, <tt>&lt;=</tt>, <tt>=</tt>, <tt>&gt;=</tt> e
462 <tt>&gt;&gt;</tt> para anterior, anterior ou igual, exatamente igual, mais nova ou igual e igual, respectivamente. Por exemplo,
463
464 <p><example>
465 Depends: foo (>= 1.2), libbar1 (= 1.3.4)
466 Conflicts: baz
467 Recommends: libbaz4 (>> 4.0.7)
468 Suggests: quux
469 Replaces: quux (<< 5), quux-foo (<= 7.6)
470 </example>
471
472 <p>Finalmente, a última funcionalidade que você precisa saber é ${shlibs:Depends}. Depois que seu pacote for compilado e instalado no diretório temporário, <manref name="dh_shlibdeps" section="1"> irá procurar por binários e bibliotecas nesse diretório, determinar as dependências de bibliotecas compartilhadas e detectar em quais pacotes elas estão, como libc6 ou xlib6g. Ele irá passar a lista para o <manref name="dh_gencontrol" section="1"> que irá preencher o campo adequadamente, e você não terá de se precupar mais com isso.
473
474 <p>Dito tudo isto, podemos deixar a linha 'Depends:' exatamente como ela está agora, e inserir outra linha após ela com <tt>Suggests: file</tt>, pois o gentoo pode utilizar algumas funcionalidade fornecidas por este programa/pacote.
475
476 <p>A linha 11 é uma breve descrição. A maioria das telas das pessoas são de 80 colunas de largura, então esta descrição não deve ser maior que 60 caracteres. Eu mudarei este campo para "mantenedor de arquivos com interface completamente configurável para X utilizando GTK+".
477 <!-- quoted should not have been translated. osamu -->
478
479 <p>A linha 12 é onde a descrição detalhada entra. Este deve ser um parágrafo que fornece maiores informações sobre o pacote. A coluna 1 de cada linha deve estar vazia. Não podem haver linhas em branco, mas você pode colocar um único '.' (ponto) numa coluna para simular isto. Além disso, não pode haver mais de uma linha em branco após a descrição detalhada.
480
481 <p>Finalmente, eis o arquivo de controle atualizado:
482
483 <p><example>
484 1 Source: gentoo
485 2 Section: x11
486 3 Priority: optional
487 4 Maintainer: Josip Rodin &lt;joy-mg@debian.org&gt;
488 5 Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
489 6 Standards-Version: 3.5.2
490 7
491 8 Package: gentoo
492 9 Architecture: any
493 10 Depends: ${shlibs:Depends}
494 11 Suggests: file
495 12 Description: mantenedor de arquivos com interface completamente configurável para X utilizando GTK+
496 13 o gentoo é um mantenedor de arquivos para Linux escrito totalmente em C puro. Ele
497 14 utiliza o toolkit GTK+ para todas as suas necessidades de interface. O gentoo fornece
498 15 uma interface 100% configurável; sem necessidade de editar arquivos de configuração manualmente ou
499 16 reiniciar o programa. O gentoo suporta a identificação do tipo de vários
500 17 arquivos (utilizando extensão, expressões regulares, ou o comando 'file'),
501 18 e pode exibir arquivos de diferentes tipos com diferentes cores e ícones.
502 19 .
503 20 O gentoo adota alguns temas do clássico mantenedor de arquivos do Amiga
504 21 "Directory OPUS" (escrito por Jonathan Potter).
505 </example>
506 (Eu adicionei os números das linhas.)
507 <!-- Description: should not have been translated. osamu -->
508
509 <sect id="copyright">O arquivo `copyright'
510
511 <p>Este arquivo contém informação sobre os recursos superiores do pacote, informações de copyright e licença. Seu formato não é tratado no Debian-Policy, mas seu conteúdo é (seção 12.5 "Informações de Copyright").
512
513 <p>O dh_make criou o seguinte arquivo padrão:
514
515 <p><example>
516 1 This package was debianized by Josip Rodin &lt;joy-mg@debian.org&gt; on
517 2 Wed, 11 Nov 1998 21:02:14 +0100.
518 3
519 4 It was downloaded from &lt;fill in ftp site&gt;
520 5
521 6 Upstream Author(s): &lt;put author(s) name and email here&gt;
522 7
523 8 Copyright:
524 9
525 10 &lt;Must follow here&gt;
526 </example>
527 (Eu coloquei os números das linhas)
528
529 <p>As coisas importantes a serem adicionadas a este arquivo são o lugar de onde você pegou o pacote, as informações de copyright e a licença do pacote. Você deve incluir a licença completa, a menos que seja um software livre de licença comum, como GNU GPL ou LPL, ou a licença artística do BSD, onde você pode simplesmente fazer referência à licença adequada ao diretório /usr/share/common-licenses/ que existe em todo sistema Debian.
530
531 <p>Eis como o arquivo de copyright do gentoo ficaria:
532
533 <p><example>
534 1 This package was debianized by Josip Rodin &lt;joy-mg@debian.org&gt; on
535 2 Wed, 11 Nov 1998 21:02:14 +0100.
536 3
537 4 It was downloaded from: ftp://ftp.obsession.se/gentoo/
538 5
539 6 Upstream author: Emil Brink &lt;emil@obsession.se&gt;
540 7
541 8 Este software é copyright (c) 1998-99 por Emil Brink, Obsession
542 9 Development.
543 10
544 11 Você é livre para distribuir este software sob os termos da
545 12 GNU General Public License.
546 13 Em sistemas Debian, o texto completo da GNU General Public
547 14 License pode ser encontrado em '/usr/share/common-licenses/GPL'
548 </example>
549 (Eu adicionei os números das linhas.)
550
551 <sect id="changelog">O arquivo `changelog'
552
553 <p>Este arquivo é necessário, e tem um formato especial descrito no Debian-Policy seção 4.4 'debian/changelog'. Este formato é utilizado pelo dpkg e outros programas para obter o número da versão, revisão, distribuição e urgência do seu pacote.
554
555 <p>Para você, também é importante, desde que é bom ter documentadas todas as mudanças que você fez. Este arquivo ajudará as pessoas que baixam o seu pacote a ver se existem questões sobre o pacote que eles devam saber. Ele será salvo como `/usr/share/doc/gentoo/changelog.Debian.gz' no pacote binário.
556
557 <p>O dh_make criou o seguinte arquivo padrão:
558
559 <p><example>
560 1 gentoo (0.9.12-1) unstable; urgency=low
561 2
562 3 * Initial Release.
563 4
564 5 -- Josip Rodin &lt;joy-mg@debian.org&gt; Wed, 11 Nov 1998 21:02:14 +0100
565 6
566 </example>
567 (Eu adicionei os números das linhas.)
568
569 <p>A linha 1 é o nome do pacote, versão, distribuição e urgência. O nome deve ser o mesmo nome do pacote-fonte, a distribuição pode ser ou 'unstable' (ou até mesmo 'experimental'), e a urgência não deve ser mudada para nada acima de 'low'. :-)
570
571 <p>As linhas 3-5 são a entrada de log, onde você deve documentar as mudanças feitas nessa revisão do pacote (não as mudanças superiores - existe um arquivo especial para este propósito, criado pelos autores, que você instalará depois em /usr/share/doc/gentoo/changelog.gz). Novas linhas devem ser inseridas logo antes da linha mais alta que começa com um asterisco ('*'). Você pode faze-lo com o <manref name="dch" section="1">, ou manualmente com um editor de texto.
572
573 <p>Você terá algo como isso, no final das contas:
574 You will end up with something like this:
575
576 <p><example>
577 1 gentoo (0.9.12-1) unstable; urgency=low
578 2
579 3 * Initial Release.
580 4 * Este é o meu primeiro pacote Debian.
581 5 * Ajustado o Makefile para corrigir problemas de $DESTDIR.
582 6
583 7 -- Josip Rodin &lt;joy-mg@debian.org&gt; Wed, 11 Nov 1998 21:02:14 +0100
584 8
585 </example>
586 (Eu inseri os números das linhas.)
587
588 <p>Você pode ler mais sobre a atualização do arquivo de changelog mais tard em
589 <ref id="update">.
590
591 <sect id="rules">O arquivo `rules'
592
593 <p>Nós precisamos dar uma olhada nas regras exatas que o <manref name="dpkg-buildpackage" section="1"> irá seguir para criar efetivamente o pacote. Este arquivo é, na verdade, outro Makefile, mas diferente do fornecido pelo autor do código-fonte. Diferentemente dos outros arquivos no debian, este arquivo tem de ser executável.
594
595 <p>Todo arquivo 'rules', como qualquer outro Makefile, consiste em várias regras que especificam como tratar do código-fonte. Cada regra consistem em alvos, nomes de arquivos ou nomes de ações que devem ser seguidas (ex: 'build:' ou 'install:'). Regras que você quer que sejam invocadas como argumentos de linhas de comando (por exemplo, './debian/rules build' ou 'make -f rules install'). Depois do nome do alvo, você pode listar as dependências, programas ou arquivos de que a regra depende. Depois disso, podem haver quantos comandos forem necessários, indentados com &lt;tab&gt;. Uma nova regra começa com a declaração do alvo na primeira coluna. Linhas vazias e começadas com '#'s (hashs) são tratadas como comentários e são ignoradas.
596
597 <p>Você provavelment está confuso agora, mas isso tudo ficará mais claro com a análiso do arquivo 'rules' que o dh_make nos dá como padrão. Você deve também ler a info do 'make' para maiores informações.
598
599 <p>A parte importante de saber sobre o arquivo 'rules' criado pelo dh_make, é que ele é somente uma sugestão. Ele funcionará para pacotes simples, mas para os mais complicados, não tenha medo de adicionar ou retirar coisas para satisfazer às suas necessidades. A única coisa que não deve mudar são os nomes das regras, pois todas as ferramentas usam estes nomes, que são exigidos no Debian-Policy.
600
601 <p> Eis (aproximadamente) como o debian/rules padrão que o dh_make gerou para nós é:
602
603 <p><example>
604 &makefile;
605 </example>
606 (Eu adicionei os números das linhas.)
607
608 <p>Você provavelmente já tem intimidade com linhas como a linha 1 de scripts shell e Perl. Ela diz ao sistema operacional que esse arquivo é para ser processado com o /usr/bin/make.
609
610 <p>O significado das variáveis DH_* mencionadas nas linhas 8 e 9 deve ser evidente para a breve descrição. Para maiores informações sobre o DH_COMPAT leia a seção 'Níveis de compatibilidade do Debhelper' no manual <manref name="debhelper" section="1">.
611
612 <p>As linhas 11-16 são o esqueleto do suporte para parâmetros do DEB_BUILD_OPTIONS, descritos no Debian-Policy seção 10.1 'Binários'. Basicamente, essas coisas controlam se os binários devem ser construídos com a tabela de símbolos, ou se eles devem ser retirados na instalação. Novamente, este é somente um esqueleto, uma dica de que você deve faze-lo. Você deve conferir como os sistemas de construçao superiores tratam da inclusão da tabela de símbolos e da sua retirada na instalação, ou implementar isso você mesmo.
613
614 <p>Normalmente, você podedizer ao gcc para compilar com '-g' usando a variável CFLAGS -- se este é o caso do seu pacote, extenda a variável <em>concatenando</em> <tt>CFLAGS="$(CFLAGS)"</tt> à invocação do $(MAKE) na regra de construção (veja abaixo). Alternativamente, se o seu pacote usa um script de configuração do autoconf, você pode passá-lo <em>concatenando antes</em> do string acima na invocação do './configure' na regra de construção.
615
616 <p>Para a remoção, os programas são normalmente configurados para se instalarem sem a remoção da tabela de símbolos, e normalmente sem uma opção para mudar isso. Felizmente, você ainda tem o <manref name="dh_strip" section="1"> que irá detectar quando o flag DEB_BUILD_OPTIONS=nostrip está definido e sair silenciosamente.
617
618 <p>As linhas 18-26 descrevem a regra 'build' (e sua regra-filho 'build-stamp'), que executa o make com a o Makefile próprio do programa para compila-lo. Vamos falar sobre o comentado exemplo docbook-to-man mais tardem em <ref id="manpage">.
619
620 <p>A regra 'clean', como especificado nas linhas 28-36, limpa qualquer binário não mais necessário ou coisas geradas automaticamente, deixadas após a construção do pacote. Esta regra deve funcionar todas as vezes (mesmo quando a árvore do código-fonte <em/is/ cleaned up!), portanto use as opções para forçar (ex: para o rm, é '-f'), ou faça o make ignorar valores de retorno (falhas) utilizando um '-' na frente do nome do comando.
621
622 <p>O processo de instalação , a regra 'install', começa na linha 38. Basicamente, ela executa a regra 'install' do Makefile do programa, mas instala ele no diretório <tt>$(CURDIR)/debian/gentoo</tt> - por isso especificamos $(DESTDIR) como a a raiz do diretório de instalação no Makefile do gentoo.
623
624 <p>Como os comentários sugerem, a regra 'binary-indep', na linha 48, é usada para construir pacotes independentes de arquitetura. Como nós não temos nenhum, nada será feito aqui.
625
626 <p>Na próxima regra - 'binary-arch', nas linhas 52-79, nas quais nós executamos muitos utilitários pequenos do pacote debhelper para executar várias operações nos arquivos do seu pacote para fazer o pacote concordante com o Debian-Policy.
627
628 <p>Se o seu pacote é um 'Architecture: all', você precisa incluir todos os comandos para construir o pacote na regra 'binary-indep', e deixar a regra 'binary-arch' vazia.
629
630 <p>Os nomes dos programas do debhelper começam com 'dh_', e o resto é a descrição do que o utilitário faz em particular. E bastante auto-explicativo, mas eis algumas explicações adicionais:
631
632 <list>
633 <item><manref name="dh_testdir" section="1"> confere se você está no diretório correto (ex: o diretório superior do código-fonte),
634 <item><manref name="dh_testroot" section="1"> confere se você tem permissões de root necessárias para os alvos 'binary-arch', 'binary-indep' e 'clean',
635 <item><manref name="dh_installman" section="1"> copiará os manuais para os devidos lugares no diretório de destino. Você só precisa dizer onde eles estão, relativamente ao diretório superior do código-fonte,
636 <item><manref name="dh_strip" section="1"> retira as tabelas de símbolos dos arquivos executáveis e bibliotecas, para torná-los menores.
637 <item><manref name="dh_compress" section="1"> compacta os manuais e documentações maiores que 4kb com o <manref name="gzip" section="1">,
638 <item><manref name="dh_installdeb" section="1"> copia os arquivos relacionados com o pacote (ex: os scripts de mantenedor) para o diretório <file>debian/gentoo/DEBIAN</file>,
639 <item><manref name="dh_shlibdeps" section="1"> calcula as dependências de bibliotecas compartilhadas das bibliotecas e arquivos executáveis.
640 <item><manref name="dh_gencontrol" section="1"> instala uma versão com ajuste-fino do arquivo de controle em <file>debian/gentoo/DEBIAN</file>,
641 <item><manref name="dh_md5sums" section="1"> gera um MD5 checksum para todos os arquivos do pacote.
642 </list>
643
644 <p>Para informações mais completas sobre o que todos esses scripts dh_* fazem, e quais são suas opções, por favor leia seus respectivos manuais. Existem alguns outros (possivelmente muito úteis) scripts dh_* que não são mencionados aqui. Se você precisar deles, leia a documentação do debhelper.
645
646 <p>A seção binary-arch é onde você realmente deve comentar ou remover quaisquer linhas que chamem funcionalidades que você não precisa. Para o gentoo, eu comentarei as linhas sobre exemplos, cron, init, man e info, simplesmente porque o gentoo não precisa delas. Além disso, na linha 68, eu irei substituir 'Changelog' com 'FIXES', porque esse é o nome real do arquivo de changelog superior.
647
648 <p>As últimas duas linhas (junto com quaisquer outras não explicadas) são somente algumas coisas mais ou menos necessárias, considerando que você pode ler o manual do make, e o Debian-Policy. Por enquanto, elas não são importantes de se conhecer.
649
650 <chapt id="dother">Outros arquivo no debian/
651
652 <p>Você pode notar que existem vários outros arquivos no subdiretório debian/, a maioria deles com o sufixo '.ex', o que significa que eles são exemplos. Dê uma olhada em todos eles. Se você deseja, ou precisa, utilizar alguma de suas funcionalidades,
653
654 <list>
655 <item>olhe também sua documentação (dica: leia o Debian-Policy),
656 <item>se necessário, modifique os arquivos para satisfazer suas necessidades,
657 <item>renomeie-os para remover o sufixo '.ex', se eles o tiverem,
658 <item>modifique o arquivo 'rules', se necessário.
659 </list>
660
661 <p>Alguns desses arquivos, os mais utilizados, são explicados nas seções seguintes:
662
663 <sect id="readme">README.Debian
664
665 <p>Quaiquer outros detalhes ou discrepâncias entre o pacote original e a sua versão debianizada deve ser documentada aqui.
666
667 <p>O dh_make criou um arquivo padrão, como seguinte:
668
669 <p><example>
670 gentoo for Debian
671 -----------------
672
673 &lt;notas possíveis acerca deste pacote - se nenhuma, apague este arquivo.&gt;
674
675 -- Josip Rodin &lt;joy-mg@debian.org&gt;, Wed, 11 Nov 1998 21:02:14 +0100
676 </example>
677
678 <p>Como não temos nada para colocar aqui, apagaremos o arquivo.
679
680 <sect id="conffiles">conffiles.ex
681
682 <p>Uma das coisas mais irritantes em software é quando você gasta muito tempo e esforço personalizando o seu programa, e uma nova versão dele desfaz todas as suas mudanças. O Debian resolve esse problema marcando os arquivos de configurações de forma que, quando você atualiza um pacote, você será perguntado se quer manter sua configuração antiga ou não.
683
684 <p>O modo se fazer isso num pacote é colocando o caminho completo de cada arquivo de configuração (normalmente em /etc), um por linha, num arquivo chamado <tt/conffiles/. O gentoo tem um arquivo de configuração, /etc/gentoorc, enós vaos adicioná-lo no arquivo <tt/conffiles/.
685
686 <p>Se o seu programa utiliza arquivos de configuração mas também os sobrescreve por conta própria, é melhor não marcá-los nos 'conffiles' pois senão o dpkg irá perguntar aos usuários se eles querem verificar as mudanças o tempo todo.
687
688 <p>Se o programa que você está empacotando precisa que todo usuário modifique o arquivo para funcionar, considere também não marcar o arquivo no 'conffiles'.
689
690 <p>Você pode pode utilizar exemplos de arquivos de configuração dos 'scripts de mantenedor'. Para maiores informações veja <ref id="maintscripts">.
691
692 <p>Se o seu programa não tem arquivos de configurações, você pode apagar o arquivo <tt/conffiles/ do diretório debian/.
693
694 <sect id="crond">cron.d.ex
695
696 <p>Se o seu pacote precisa agendar tarefas regularmente para funcionar adequadamente, você pode usar este arquivo para definir isso.
697
698 <p>Note que isso não inclui rotação de logs; para isso, veja
699 <manref name="dh_installlogrotate" section="1"> e
700 <manref name="logrotate" section="8">.
701
702 <p>Se não, remova este arquivo.
703
704 <sect id="dirs">dirs
705
706 <p>Este arquivo especifica os diretórios que nós precisamos mas o processo de instalação normal (make install), por algum motivo, não cria.
707
708 <p>Por padrão, ele é como seguinte:
709
710 <p><example>
711 usr/bin
712 usr/sbin
713 </example>
714
715 <p>Note que a barra precedente não é incluída. Nós normalmente teríamos alterado para ficar como seguinte:
716
717 <p><example>
718 usr/bin
719 usr/man/man1
720 </example>
721
722 <p>mas estes diretórios já são criados no Makefile, e portanto não precisamos deste arquivo e vamos então apagá-lo.
723
724 <sect id="docs">docs
725
726 <p>Este arquivo especifica os nomes dos arquivos de documentação que o dh_installdocs irá instalar no diretório temporário para nós.
727
728 <p>Por padrão, ele incluirá todos os arquivos existentes no topo do diretório-fonte que são chamados 'BUGS', 'README*', 'TODO', etc.
729
730 <p>Para o gentoo, eu também incluí mais coisas:
731
732 <p><example>
733 BUGS
734 CONFIG-CHANGES
735 CREDITS
736 ONEWS
737 README
738 README.gtkrc
739 TODO
740 </example>
741
742 <p>Nós podemos também remover este arquivo e listas estes arquivo no comando <tt/dh_installdocs/ do arquivo <tt/rules/, como seguinte:
743
744 <p><example>
745 dh_installdocs BUGS CONFIG-CHANGES CREDITS ONEWS README \
746 README.gtkrc TODO
747 </example>
748
749 <p>Entretando, infelizmente você pode não ter arquivos deste tipo no código-fonte do seu pacote. Neste caso, você pode remover este arquivo. Mas não remova a invocação do <tt/dh_installdocs/ do arquivo <tt/rules/ pois ele é utilizado para instalar o arquivo de <tt/copyright/ e outras coisas.
750
751 <sect id="emacsen">emacsen-*.ex
752
753 <p>Se o seu pacote fornece arquivos do Emacs que pode ser 'bytecompilados' no momento da instalação do pacote, você pode utilizar estes arquivos para definir isso.
754
755 <p>Eles são instalados no diretório temporário pelo <manref name="dh_installemacsen" section="1">, portanto não se esqueça de descomentar essa linha no arquivo <tt/rules/ se você quer utilizar isso.
756
757 <p>Se você não precisa destes, remova-os.
758
759 <sect id="initd">init.d.ex
760
761 <p>Se o seu pacote é um daemon que precisa ser executado na inicialização do sistema, você obviamente desobedeceu minha recomendação inicial, não é mesmo? :-)
762
763 <p>Isto é meramente um esqueleto genérico para um script <file>/etc/init.d/</file>, e você provavelmente terá de editá-lo muito. Ele é instalado no diretório temporário pelo <manref name="dh_installinit" section="1">.
764
765 <p>Se você não precisa disto, remova o arquivo.
766
767 <sect id="manpage">manpage.1.ex, manpage.sgml.ex
768
769 <p>Seu(s) programa(s) devem ter manuais. Se não têm, cada um destes arquivos são modelos que você pode preencher.
770
771 <p>Manuis são normalmente escritos em <manref name="nroff" section="1">. O exemplo <tt/manpage.1.ex/ é escrito em nroff também. Você o manual <manref name="man" section="7"> para uma breve descrição de como editar um destes arquivos.
772
773 <p>Se, por outro lado, você prefere escrever em sgml ao invés de nroff, você pode usar o modelo <tt/manpage.sgml.ex/. Se você for fazer isso, você tem de:
774 <list>
775 <item>instalar o pacote <package/docbook-to-man/
776 <item>adicionar o <tt/docbook-to-man/ á linha <tt/Build-Depends/ do arquivo <tt/control/
777 <item>remover a o comentário da invocação do docbook-to-man na regra 'build' do seu arquivo <tt/rules/
778 </list>
779
780 <p>E lembre-se de renomear o arquivo para algo como <tt/gentoo.sgml/!
781
782 <p>O nome do arquivo final do maual deve incluir o nome do programa que está documentando, e portanto nós iremos renomeá-lo de 'manpage' para 'gentoo'. O nome do arquivo também inclui '.1' como o primeiro sufixo, o que significa que é um manual para um comando de usuário. Certifique-se de verificar que seção é, de fato, a correta. Eis uma pequena lista de seções de manuais.
783
784 <p><example>
785 Section | Description | Notes
786 1 Comandos de usuário Comando executáveis ou scripts.
787 2 Chamadas de sistema Funções fornecidas pelo kernel.
788 3 Chamadas de biblioteca Funções dentro de bibliotecas do sistema.
789 4 Arquivos especiais Normalmente encontrados em /dev
790 5 Formatos de arquivo Ex: o formato do /etc/passwd
791 6 Jogos Ou outros programas frívolos
792 7 Pacotes de Macro Como macros.
793 8 Administração de sistema Programas típicamente executados como root.
794 9 Rotinas de Kernel Chamadas internas e não-padronizadas.
795 </example>
796
797 <p>Então o manual do gentoo deve ser chamado <tt/gentoo.1/. Não existia um manual gentoo.1 no fonte original, então eu o escrevi utilizando a informação do exemplo e da documentação.
798
799 <sect id="menu">menu.ex
800
801 <p>Usuários de sistemas X-Window normalmente tem um manipulador de janelas com um menu que pode ser personalizado para executar programas. Se eles tiverem o pacote do Debian <package/menu/, um conjunto de menus para programa no sistema será criado para eles.
802
803 <p>Eis o arquivo <tt/menu.ex/ padrão que o dh_make criou:
804
805 <p><example>
806 ?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
807 title="gentoo" command="/usr/bin/gentoo"
808 </example>
809
810 <p>O primeiro campo após o caractere de dois-pontos é 'needs', e especifica que tipo de interface o programa precisa. Mude isto para uma das alternativas listadas, como 'text' ou 'X11'.
811
812 <p>O seguinte é 'section', onde as entradas de menu e submenus devem aparecer. A lista atual de seções está em:
813 <file>/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1</file>
814
815 <p>O campo 'title' é o nome do programa. Você pode começar este em caixa alta, se quiser, desde que seja curto.
816
817 <p>Finalmente, o campo 'command' é o comando que executa o programa.
818
819 <p>Agora nós iremos mudar a entrada de menu para o seguinte:
820
821 <p><example>
822 ?package(gentoo): needs=X11 section=Apps/Tools title="Gentoo" command="gentoo"
823 </example>
824
825 <p>Você pode também adicionar outros campos como 'logtitle', 'icon', 'hints', etc.
826 Veja <manref name="menufile" section="5">,
827 <manref name="update-menus" section="1">
828 e <file>/usr/share/doc/debian-policy/menu-policy.html/</file> para maiores informações.
829
830 <sect id="watch">watch.ex
831
832 <p>Este arquivo é utilizado para configurar os programas <manref name="uscan" section="1">
833 e <manref name="uupdate" section="1"> (no pacote <package/devscripts/). Estes são utilizados para monitorar o site de onde você pegou o código-fonte original.
834
835 <p>Eis o que eu coloco nele:
836
837 <p><example>
838 # Arquivo de controle de monitoramento para o uscan
839 # Site Diretório Padrão Versão Script
840 ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate
841 </example>
842
843 <p>Dica: conecte à internet, e tente rodar o 'uscan' no diretório do programa assim que você criar o arquivo. E leia os manuais! :)
844
845 <sect id="doc-base">ex.package.doc-base
846
847 <p>Se o seu pacote tem outra documentação fora o manual e info, você deve utilizar o arquivo '<package/doc-base/' para registrá-lo, de forma que o usuário possa encontrá-la com, por exemplo, <manref name="dhelp" section="1">, <manref name="dwww" section="1"> ou <manref name="doccentral" section="1">.
848
849 <p>Isto normalmente inclui arquivos HTML, PS ou PDF, distribuídos em <file>/usr/share/doc/nome_do_pacote/</file>
850
851 <p>Eis como ficaria o arquivo do doc-base do gentoo:
852
853 <p><example>
854 Document: gentoo
855 Title: Manual do Gentoo
856 Author: Emil Brink
857 Abstract: Este manual descreve o que o Gentoo é, e como pode ser utilizado.
858 Section: Apps/Tools
859
860 Format: HTML
861 Index: /usr/share/doc/gentoo/html/index.html
862 Files: /usr/share/doc/gentoo/html/*.html
863 </example>
864
865 <p>Para maiores informações sobre esse formato, veja
866 <manref name="install-docs" section="8"> e o manual do <package/doc-base/,
867 em <file>/usr/share/doc/doc-base/doc-base.html/</file>.
868
869 <sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex, prerm.ex
870
871 <p>Estes arquivos são chamados scripts de mantenção. Eles são scripts que são postos na área de controle do pacote e executados pelo <prgn/dpkg/ quando seu pacote é instalado, atualizado ou removido.
872
873 <p>Por enquanto, você deve evitar qualquer edição manual dos scripts de manutenção se você puder, pois eles tendem a ficar complexos. Para maiores informações leia o capítulo 6 do Debian-Policy e analise estes arquivos de exemplo fornecidos pelo dh_make.
874
875 <chapt id="build">Construíndo o pacote
876
877 <p>Agora devemos estar prontos para construir o pacote.
878
879 <sect id="completebuild">Reconstrução completa
880
881 <p>Mude para o diretório principal do programa e execute o seguinte comando:
882
883 <p><example>
884 dpkg-buildpackage -rfakeroot
885 </example>
886
887 <p>Isto fará tudo para você. Ele irá:
888 <list>
889 <item>limpar a árvore do código-fonte (debian/rules clean), utilizando o <prgn/fakeroot/
890 <item>construir o pacote-fonte (dpkg-source -b)
891 <item>compilar o programa (debian/rules build)
892 <item>construir o pacote-binários (debian/rules binary), utilizando <prgn/fakeroot/
893 <item>validar o código-fonte arquivo <tt/.dsc/, utilizando <prgn/gnupg/
894 <item>criar e validar o arquivo <tt/.changes/ para ser enviado, utilizando <prgn/dpkg-genchanges/ e <prgn/gnupg/
895 </list>
896
897 <p>A única entrada sua que será necessária será a sua frase-senha de GPG, duas vezes.
898
899 <p>Feito tudo isso, você verá os seguintes arquivos no diretório acima (<tt>~/debian/</tt>):
900
901 <p><list>
902 <item><em>gentoo_0.9.12.orig.tar.gz</em>
903
904 <p>Este é o código-fonte original, compactado, meramente renomeado para o acima de forma a seguir o padrão Debian. Note que este foi criado utilizando a opção '-f' no <prgn/dh_make/ quando nós o executamos inicialmente.
905
906 <item><em>gentoo_0.9.12-1.dsc</em>
907
908 <p>Este é o resumo do conteúdo do código-fonte. O arquivo é gerado do seu arquivo 'control', e será utilizado quando o código-fonte for desempacotado com o <manref name="dpkg-source" section="1">. Este arquivo é validado com o PGP, de forma que as pessoas podem ter certeza que ele é realmente o seu.
909
910 <item><em>gentoo_0.9.12-1.diff.gz</em>
911
912 <p>Este arquivo compactado contém cada uma das modificações que você fez no código-fonte, no formato conhecido como "diff unificado". Ele é feito e utilizado pelo <manref name="dpkg-source" section="1">. ATENÇÃO: se você não nomear o pacote compactado (tarball) orignal como nomedopacote_versao.orig.tar.gz, o <prgn/dpkg-source/ irá falhar na geração do arquivo .diff.gz!
913
914 <p>Se alguém quiser recriar o seu pacote desde o início, eles podem facilmente faze-lo utilizando os três arquivos acima. O procedimento de extração é trivial: copie os três arquivos em algum lugar e execute <tt>dpkg-source -x gentoo_0.9.12-1.dsc</tt>.
915
916 <item><em>gentoo_0.9.12-1_i386.deb</em>
917
918 <p>Este é o seu pacote binário completo. Você pode utilizar o <prgn/dpkg/ para instalá-lo e removê-lo como qualquer outro pacote.
919
920 <item><em>gentoo_0.9.12-1_i386.changes</em>
921
922 <p>Este arquivo descreve todas as modificações feitas na revisão atual do pacote, e é utilizado pelo programa de manutenção do arquivo FTP da Debian para instalar os pacotes binário e fonte. Ele é parcialmente gerado a partir do arquivo 'changelog' e do arquivo '.dsc'. Este arquivo é validado utilizando PGP, de forma que as pessoas podem ter certeza que ele é realmente seu.
923
924 <p>A medida que você for trabalhando no pacote, o seu comportamento irá mudar e novas funcionalidades serão adicionadas. As pessoas que baixarem o seu pacote poderão olhar neste arquivo e rapidamente ver o que foi alterado. Os programas de manutenção do arquivo da Debian também irão enviar o conteúdo deste arquivo para a lista debian-devel-changes.
925 </list>
926
927 <p>Os longos strings numéricos nos arquivos .dsc e .changes são as validações MD5 para os arquivos mencionados.
928 Uma pessoa que baixar os seus arquivos podem testá-los com <manref name="md5sum" section="1"> e se os números não coincidirem, eles saberão que o arquivo está corrompido ou que alguém mexeu nele sem autorização.
929
930 <sect id="quickrebuild">Reconstrução rápida
931
932 <p>Quando o pacote for grande, você pode não querer reconstruí-lo completamente toda vez que você mudar alguma coisa no arquivo <file>debian/rules</file>. Para fins de testes, você pode criar um arquivo .deb sem ter de reconstruir todo o código e pacote-fonte da seguinte forma:
933
934 <p><example>
935 fakeroot debian/rules binary
936 </example>
937
938 <p>Assim que você terminar suas modificações, lembre-se de reconstruir o pacote como descrito anteriormente, o procedimento correto. Você pode não conseguir enviá-lo corretamente se você simplesmente enviar os arquivos .deb construídos dessa forma.
939
940 <chapt id="checkit">Procurando por erros no pacote
941
942 <p>Execute o <manref name="lintian" section="1"> no seu arquivo .changes ; este programa irá verificar o pacote procurando por uma série de erros comuns de empacotamento. O comando é:
943
944 <p><example>
945 lintian -i gentoo_0.9.12-1_i386.changes
946 </example>
947
948 <p>Obviamente você deve substituir o nome do arquivo .changes pelo gerado para o seu pacote. Se forem mostrados erros (linhas começadas com E:), leia a descrição (as linhas N:), corrija os erros, e reconstrua o pacote como descrito em <ref id="completebuild">. Se aparecerem linhas começadas com W:, são advertências, e você deve "afinar" o seu pacote ou certificar-se que as advertências são desnecessárias (e fazer objeções no Lintian; veja a documentação para mais detalhes.).
949
950 <p>Note que você pode construir o pacote com o <prgn/dpkg-buildpackage/ e executar o <prgn/lintian/ ao mesmo tempo com um só comando com <manref name="debuild" section="1">.
951
952 <p>Olhe dentro do pacote utilizando um manipulador de arquivos como o <manref name="mc" section="1">, ou desempacote-o num diretório temporário utilizando o <manref name="dpkg-deb" section="1">. Procure por arquivos desnecessários, tanto no pacote binário quanto no fonte. Muitas vezes o lixo não é eliminado corretamente; ajuste o seu arquivo 'rules' para compensar isso. Dicas: 'zgrep ^+++ ../gentoo_0.9.12-1.dif.gz' lhe dará uma lista de modificações/adições nos arquivos-fonte, e 'dpkg-deb -c gentoo_0.9.12-1_i386.deb' irá listar os arquivos no pacote binário.
953
954 <p>Instale o pacote e teste-o, ex: utilizando o comando <manref name="debi" section="1"> como root. Tente instalar e executa-lo em outras máquinas diferentes e observe com atenção as advertências e/ou erros durante a instalação e execução.
955
956 <chapt id="upload">Enviando o pacote
957
958 <p>Agora que você já testou completamente o seu novo pacote, você está pronto para começar a preencher o formulário de novo mantenedor do Debian, descrito em <url id="http://www.debian.org/devel/join/newmaint">
959
960 <p>Assim que você se tornar um desenvolvedor oficial, você precisará enviar o pacote para o arquivo da Debian. Você pode fazer isso manualmente, mas é mais fácil usar as ferramentas de automatização fornecidos, como o
961 <manref name="dupload" section="1"> ou <manref name="dput" section="1">.
962 Vamos descrever como é feito com o <prgn/dupload/.
963
964 <p>Primeiro você tem de configurar o dupload. Você pode tanto editar o arquivo de configuração global <file>/etc/dupload.conf</file>, ou ter o seu próprio arquivo <file>~/.dupload.conf</file> com as configurações que você deseja personalizar. Coloque algo como o seguinte neste arquivo:
965
966 <p><example>
967 package config;
968
969 $default_host = "ftp-master";
970
971 $cfg{"ftp-master"}{"login"} = "seunomedeusuariodebian";
972
973 $cfg{"non-us"}{"login"} = "seunomedeusuariodebian";
974
975 1;
976 </example>
977
978 <p>Obviamente você deve substituir minhas configurações pessoais pelas suas, e ler o manual
979 <manref name="dupload.conf" section="5"> para entender o que cada uma dessas opções significa.
980
981 <p>A opção $default_host é a que precisa de mais atenção -- ela determina qual file de upload será usada como padrão. "ftp-master" é a primária, mas é possível que você queira usar outra mais rápida. Para mais informações sobre files de upload, leia a Referência do Desenvolvedor (Developer's Reference), na seção "Uploading a package", em <file>/usr/share/doc/developers-reference/developers-reference.html/ch-upload.en.html#s-uploading</file>
982
983 <p>Conecte então ao seu provedor de internet e execute o comando:
984
985 <p><example>
986 dupload gentoo_0.9.12-1_i386.changes
987 </example>
988
989 <p>O <prgn/dupload/ verifica se as validações MD5 dos arquivos coincidem com aquelas do arquivo .changes, e irá advertí-lo a reconstruir o pacote como descrito em <ref id="completebuild">, caso não coincidam, para que o pacote possa ser devidamente enviado.
990
991 <p>Se você enviar para o "ftp-master", o <prgn/dupload/ irá pedir pela sua senha nas máquinas da Debian, e então irá enviar os pacotes.
992
993 <chapt id="update">Atualizando o pacote
994
995 <sect id="newrevision">Nova revisão Debian
996
997 <p>Digamos que um relatório de bug foi preenchido contra o seu pacote, #54321, e descreve um problema que você pode solucionar. Para criar uma nova revisão de pacote Debian você precisa:
998
999 <list>
1000 <item>Corrigir o problema no pacote-fonte, é claro.
1001
1002 <item>Adicionar uma nova revisão no topo do arquivo de changelog, por exemplo com "dch -i', ou explícitamente com "dch -v &lt;versão&gt;-&lt;revisão&gt;' e então inserir os comentário utilizando o seu editor de textos favorito.
1003
1004 <p>Dica: Como obter a data no formato adequado?
1005 Use `822-date`, ou `date -R`.
1006
1007 <item>Inclua uma breve descrição do bug e sua solução na entrada do changelog, seguido por "Closes: #54321". Dessa forma, o relatório de bug será "automágicamente" fechado pelo software de manutenção do arquivo no momento em que seu pacote for aceito no arquivo Debian.
1008
1009 <item>Repita o que você fez em <ref id="completebuild">, <ref id="checkit">,e <ref id="upload">. A diferença é que, desta vez, o arquivo-fonte não será incluído, uma vez que ele não mudou e já existe no arquivo da Debian.
1010 </list>
1011
1012 <sect id="newupstream">Nova distribuição do programa
1013
1014 <p>Agora vamos considerar uma situação diferente, um pouco mais complicada - uma nova versão do software foi lançada, e obviamente você a quer empacotada. Você precisa fazer o seguinte:
1015
1016 <list>
1017 <item>Baixar o novo código-fonte e colocar o arquivo compactado (tarball) (ex: chamado 'gentoo-0.9.13.tar.gz') no diretório acima da árvore do código fonte antigo (ex: ~/debian/).
1018
1019 <item>Entre no diretório do código-fonte antigo e execute:
1020
1021 <example>
1022 uupdate -u gentoo-0.9.13.tar.gz
1023 </example>
1024
1025 <p>Obviamente, substitua esse nome de arquivo com o nome do seu novo código-fonte do programa. O <manref name="uupdate" section="1"> irá renomear o arquivo devidamente, tentar aplicar todas as diferenças do arquivo .diff.gz antigo e atualizar o novo arquivo debian/changelog.
1026
1027 <item>Mude para o diretório '../gentoo-0.9.14', a nova árvore de código-fonte, e repita o que você fez em <ref id="completebuild">, <ref id="checkit">, e <ref id="upload">.
1028 </list>
1029
1030 <p>Note que se você definiu um arquivo 'debian/watch' como descrito em <ref id="watch">, você pode executar o <manref name="uscan" section="1"> para "automágicamente" procurar por novos códigos-fonte, baixar eles, e executar o <prgn/uupdate/.
1031
1032 <sect id="upgrading">Verificando atualizações de pacotes
1033
1034 <p>Quando você constrói uma nova versão de um pacote, você deve fazer o seguinte para verificar que o pacote pode ser atualizado de forma segura:
1035
1036 <list>
1037 <item>atualizar o pacote antigo
1038 <item>reinstalar o pacote antigo, e então removê-lo
1039 <item>instalar o novo pacote
1040 <item>removê-lo e o reinstalar novamente,
1041 <item>executar um "purge" nele.
1042 </list>
1043
1044 <p>Tenha em mente que se o seu pacote já foi previamente distribuído no Debian, as pessoas irão atualizar para o seu pacote a partir da última versão do Debian com frequência. Lembre-se de testar as atualizações a partir dessas versões também.
1045
1046 <chapt id="helpme">Onde pedir ajuda
1047
1048 <p>Antes de decidir pedir ajuda em algum lugar público, por favor leia toda a documentação disponível. Isso inclui
1049 a os arquivos em <file>/usr/share/doc/dpkg</file>, <file>/usr/share/doc/debian</file>, <file>/usr/share/doc/package/*</file>, os manuais e infos de todos os programas mencionados nesse documento.
1050
1051 <p>Se você tem perguntas sobre o empacotamento e não pode encontrar respostas na documentação, você pode faze-las na lista Debian Mentors em <email/debian-mentors@lists.debian.org/. Os desenvolvedores Debian mais experientes ficarão felizes em poder ajudar, mas leia a documentação antes de fazer perguntas!
1052
1053 <p>Veja <url id="http://lists.debian.org/debian-mentors/"> para maiores informações sobre essa lista.
1054
1055 <p>Quando você receber relatórios de bugs (sim, relatórios de bugs de verdade!), você saberá que é hora de entrar no <url name="Debian Bug Tracking System" id="http://www.debian.org/Bugs/"> e ler a documentação de lá, para poder lidar com os relatórios eficientemente. Eu recomendo fortemente que você leia a Referência do Desenvolvedor (Developers Reference) no capítulo "Tratando de Bugs" (Handling Bugs", em <file>/usr/share/doc/developers-reference/developers-reference.html/ch-bug-handling.en.html</file>
1056
1057 <p>Se você ainda tem perguntas, faça-as na lista do Debian Developers em <email/debian-devel@lists.debian.org/. Veja <url id="http://lists.debian.org/debian-devel/"> para maiores informações sobre esta lista.
1058
1059 <p>Mesmo se você fez um bom trabalho, é hora de começar a rezar. Porque? Porque em poucas horas (ou dias) os usuários de todo o mundo começarão a usar o seu pacote, e se você cometeu algum erro grave será bombardeado por milhares de usuários Debian irritados... Brincadeira! :-)
1060
1061 <p>Relaxe e se prepare para relatórios de bugs, pois ainda tem muito trabalho a ser feito antes que seu pacote esteja completamente de acordo com a política do Debian (novamente, leia a <em>documentação de verdade</em> para detalhes.). Boa sorte!
1062
1063 </book>
1064
1065 </debiandoc>

  ViewVC Help
Powered by ViewVC 1.1.5