| 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 © 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 ©
|
| 36 |
1997 Jaldhar Vyas.
|
| 37 |
|
| 38 |
<p>The New-Maintainer's Debian Packaging Howto, copyright © 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 <package>`.
|
| 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 <nome_do_pacote>-<versão>.
|
| 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 <enter>.
|
| 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 <joy-mg@debian.org>
|
| 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: <insert up to 60 chars description>
|
| 376 |
12 <insert long description, indented with spaces>
|
| 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><<</tt>, <tt><=</tt>, <tt>=</tt>, <tt>>=</tt> e
|
| 462 |
<tt>>></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 <joy-mg@debian.org>
|
| 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 <joy-mg@debian.org> on
|
| 517 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 518 |
3
|
| 519 |
4 It was downloaded from <fill in ftp site>
|
| 520 |
5
|
| 521 |
6 Upstream Author(s): <put author(s) name and email here>
|
| 522 |
7
|
| 523 |
8 Copyright:
|
| 524 |
9
|
| 525 |
10 <Must follow here>
|
| 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 <joy-mg@debian.org> 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 <emil@obsession.se>
|
| 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 <joy-mg@debian.org> 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 <joy-mg@debian.org> 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 <tab>. 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 |
<notas possíveis acerca deste pacote - se nenhuma, apague este arquivo.>
|
| 674 |
|
| 675 |
-- Josip Rodin <joy-mg@debian.org>, 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 <versão>-<revisão>' 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>
|