[wml] webwml/portuguese/devel/cvs_packages.wml
Segue em anexo arquivo para commit.
--
++++++++++++++++++++++++++++++++++++++++++
+ Raphael Barreto (rrb-lists@bol.com.br) +
++++++++++++++++++++++++++++++++++++++++++
#use wml::debian::template title="Using CVS together with Debian packages"
#use wml::debian::translation-check translation="1.5"
<p>Esse pequeno documento é apenas para dar uma pequena ajuda a
converter pacotes para gerenciamento CVS. É provavelmente apenas
interessante para umas poucas pessoas que não são muito familiarizadas
com o CVS e gerenciamento de versões. Também, há um script em
<code>/usr/doc/cvs-buildpackage</code>
chamado <code>cvs-pkginit</code> (ambos o script e a página de manual estão
gzipados), que irá imprimir uma sinopse desse documento HOWTO.
<p>Por exemplo, para converter um pacote foo, versão bar1, revisão Debian 3,
tente:
<pre>
% cvs-pkginit foo bar1 3
</pre>
e olhe a sinopse.
<pre>
Oldenburg, 6/2/97 Joey (joey@debian.org)
/ Martin Schulze /
Mobile, Manoj Srivastava
srivasta@debian.org
</pre>
<p>Nota: na discussão a seguir, as entidades dentro de sinais de menor e
maior <> serão mudados para cada caso, todo o resto deve ser tomado
literalmente. Por exemplo, se você está falando sobre um pacote com versão
externa 2.1.82, então <$versão> significa 2.1.82, e
upstream_version_<$versão | tr . _> significa upstream_version_2_1_82.
<ol>
<li>Configurar o CVS
<pre>
$ CVSROOT=/onde/seu/repositório/estará
$ export CVSROOT
$ cvs init
$ mkdir $CVSROOT/debian
</pre>
<p>Isso permite que você separe seus pacotes Debian de qualquer outra
coisa no seu repositório, atualmente ou no futuro. Mesmo se você
pensa que não precisa do CVS para nada mais, é mais fácil classificar
seu repositório agora do que sentir muito depois (é uma bagunça
mover as coisas no repositório depois).
<p>Se mais de uma pessa irá usar o CVS, você deve ter certeza de que
elas possam modificar o repositório usando o CVS. Escolha um
grupo (ou um conjunto de grupos) que tem acesso à parte do
repositório e defina as permissões:
<pre>
\# chgrp <arquivo> $CVSROOT/debian
\# chmod g+ws $CVSROOT/debian
</pre>
<p>Isso assegura que os membros do grupo arquivo estarão permitidos
a configurar o repositório. Agora que você deve se assegurar
de que os grupos corretos de pessoas estão aptos a modificar partes
do repositório.
<pre>
\# mkdir $CVSROOT/debian/<package1>
\# chgrp <grupo1> $CVSROOT/debian/<pacote1>
\# chmod g+ws $CVSROOT/debian/<pacote1>
\# mkdir $CVSROOT/debian/<pacote2>
\# chgrp <grupo2> $CVSROOT/debian/<pacote2>
\# chmod g+ws $CVSROOT/debian/<pacote2>
</pre>
<p>Como usuário normal você deve tornar seu repositório CVS público
ou usando <kbd>"-d /onde/seu/repositório/estará"</kbd> ou colocando
um fragmento como esse no seu profile.
<pre>
$ CVSROOT=/where/your/repository/will/be
$ export CVSROOT
</pre>
<li>Use Módulos
<pre>
\# cvs checkout CVSROOT
\# cd CVSROOT
\# vi modules
</pre>
<p>No seguinte, <pacote> deve ser o nome do pacote como está
no arquivo debian/changelog.
<p>Adicione as linhas a seguir, a primeira é essencial, a segunda pode
ser duplicada e é auto-explicativa:
<pre>
modules CVSROOT modules
<pacote> debian/<pacote>
</pre>
<pre>
\# cvs commit -m 'Definidos primeiros módulos'
</pre>
<li>Prepare para usar o CVS
<p>Insira sua árvore de fonte com os comandos a seguir (assumindo que
você já a tenha debianizado e que haja arquivo orig.tar.gz).
Note que os fontes externos são importados com um -ko (tome
cuidado com os arquivos binários), mas não mudanças locais
que fazemos. Por favor note que números de época são ignorados
enquanto determinando o nome da tag CVS (eles são normalmente
usados para mudar a opnião do dpkg sobre ordem dos pacotes,
e não são relevantes para as tags CVS normalmente).
<p>Mude para o diretório para onde você tem sua árvore fonte de desenvolvimento
debianizada fora do cvs, que é o que estamos tentando injetar no
CVS (isso não está no CVSROOT, normalmente).
<p>Eu REPITO: A seguir, <pacote> deve ser o nome do pacote assim
como no arquivo debian/changelog.
<pre>
$ cd /onde/sua/árvore/fonte/reside/
$ tar zvfx <pacote>_<versão>.orig.tar.gz
$ cd <pacote>_<versão>.orig
$ cvs import -ko -m 'Importação de código' \
debian/<pacote> source-dist upstream_version_<versão|tr . _>
</pre>
<p>Você pode mudar a tag do galho source-dist para qualquer coisa que
quiser. (O mantenedor do cvs-buildpackage usa habitualmente a
tag upstream (que é um estudo em redundância ;)).
<p>Se você configurou o CVS como root, e não configurou a escribilidade
do grupo, você precisa criar $CVSROOT/debian/<pacote> como root
e mudar o usuário e grupo dono no repositório para o usuário ou
grupo respectivamente. A importação do CVS irá imprimir um
aviso que não pode criar o diretório debian/<pacote>, mas
está tudo bem.
<p>O próximo passo é checar a árvore inteira e incorporar todas as suas
mudanças.
<pre>
$ cd /onde/sua/árvore/fonte/reside
$ cvs checkout <pacote>
</pre>
<p>Se você já criou uma versão debianizada mas não usou o CVS antes você
deve querer rodar os comandos a seguir para mudar suas mudanças.
Depois disso você deve definir esse lançamento para estar apto a
checá-lo algum tempo depois.
<pre>
$ cd /onde/sua/árvore/fonte/reside/<pacote>-<versão>
$ diff -qrBbw . /onde/sua/árvore/fonte/reside/<pacote>/ | grep -v CVS
$ FILES_CHANGED_LOCALLY="<saída do acima>"
$ tar cf - $FILES_CHANGED_LOCALLY | \
tar -C /onde/sua/árvore/fonte/reside/<pacote> -xvpf -
$ cd /onde/sua/árvore/fonte/reside/<pacote>
</pre>
<p>Por favor assegure-se de que o arquivo debian/rules esteja executável,
já que desse jeito ele deve estar executável quando exportado e
não haverá problemas rodando dpkg-buildpackage nos fontes exportados.
Em geral, assegure-se de que <b>todos</b> os arquivos têm as
permissões certas antes de adicioná-las ao repositório CVS.
<pre>
$ cd /onde/sua/árvore/fonte/reside/<pacote>
$ cvs add debian <qualquer outro arquivo adicionado também>
</pre>
<p>Também, por favor note que você tem de adicionar todos os arquivos
adicionais que devem ser colocados no repositório, especialmente
todos os arquivos no subdiretório debian. Também, por favor note que
o comando cvs add <i>não</i> funciona recursivamente, então você deve ter de
adicionar manualmente quaisquer subdiretórios que você tenha.
(cd debian ; cvs add *)
<p>Uma boa coisa é que rodar cvs update irá mostrar o estado de todos os
arquivos no diretório.
<pre>
$ cd /onde/sua/árvore/fonte/reside/<pacote>
$ cvs update
</pre>
<p>A saída se parece com:
<pre>
cvs update: Updating .
M Makefile
cvs update: Updating debian
A rules
? example1
</pre>
M significa modificado (foi enviado), A significa Adicionado (tem de ser
enviado), ? significa que o CVS não sabe nada do arquivos (precisa
ser adicionado, talvez?). Quando você está satisfeito que nada está
faltando e todos os arquivos têm as permissões requeridas, você
está pronto para enviar (commitir).
<pre>
$ cd /onde/sua/árvore/fonte/reside/<pacote>
$ cvs commit -m 'Fiz todas as mudanças debian'
$ cvs tag debian_version_<versão|tr . _>-<revisão-debian|tr . _> .
</pre>
<p>A nova árvore fonte residirá num diretório que não contém o número
de versão. Não é esse o problema como veremos depois.
<p>Se ao invés de criar o diretório debian do início (pode ser mais
simples, apesar de menos automatizado):
<pre>
$ mkdir debian
</pre>
<p>Crie todos os arquivos debian e adicione todos eles no controle de fonte.
<pre>
$ cvs add debian
$ cd debian
$ cvs add *
</pre>
<p>Depois disso o próximo envio incluirá todos os arquivos.
<pre>
$ cd /onde/sua/árvore/fonte/reside/<pacote>
$ cvs commit -m <alguma mensagem>
</pre>
<li>Preparar uma release
<p>Antes você pode rodar alguns dos comandos Debian que construirão um
pacote, você tem de buscar o módulo sem todos os subdiretórios
do CVS. Isso é feito com o comando `<kbd>export</kbd>'. Mas antes de tudo
você precisa enviar todas as suas modificações e marcá-las com
um número de release.
<pre>
$ cvs commit -m <mensagem>
$ cvs tag debian_version_<versão|tr . _>-<revisão-debian|tr . _>
</pre>
<li>Faça uma release
<p>Você pode ou usar o mecanismo do cvs-buildpackage (preferido) ou um
export manual. Primeiro teste o do cvs-buildpackage com uma execução
limpa (assegure0se de que as tags batem) assim (Deve-se ter configurado
o /etc/cvsdeb.conf):
<pre>
$ cvs-buildpackage -d -n -rsudo
</pre>
<p>Então faça a execução real com, esperando que o sudo seja um
programa com o qual você possa ganhar acesso root.
<pre>
$ cvs-buildpackage -rsudo
</pre>
<p>Ou para fazer isso manualmente:
<p>Baixe o pacote.
<pre>
$ cvs export -d <pacote>-<versão> \
-r debian_version_<versão|tr . _>-<revisão-debian|tr . _> \
<package>
</pre>
<p>Agora você pode ir em frente com o mecanismo normal de export de release.
<hr>
<p>Pronto! Parabéns! Aqui estão algumas tarefas que você pode executar em
sua árvore fonte:
<hr>
<li>Remover ou renomear um arquivo
<p>O jeito normal de mover um arquivo é copiar VELHO para NOVO e então
executar os comandos normais de CVS para remover VELHO do repositório
e adicionar NOVO a ele. (Ambos VELHO e NOVO poderiam conter caminhos
relativos, por exemplo `<kbd>foo/bar.c</kbd>').
<pre>
$ mv VELHO NOVO
$ cvs remove VELHO
$ cvs add NOVO
$ cvs commit -m "Renomeei VELHO para NOVO" VELHO NOVO
</pre>
<p>Esse é o modo mais simples de se mover um arquivo, não é passível de
erros e preserva a história do que foi feito. Note que para acessar
a história do arquivo você deve especificar o novo nome ou o velho
nome, dependendo de qual porção da história vai acessar. Por exemplo
`<kbd>cvs log VELHO</kbd>' dará o log até a hora da renomeação.
<li>Atualizando um módulo com o comando import
<p>Quando uma nova release do fonte chega, você o importa para o
repositório com o mesmo comando `import' que você usou para
configurar o repositório em primeiro. A única diferença é que
você especifica uma tag diferente de release dessa vez, e uma
mensagem diferente.
<pre>
$ cd /onde/sua/árvore/fonte/reside/<novo diretório fonte>
$ cvs import -m 'importa nova release' debian/<pacote> source-dist \
upstream_version_<versão|tr . _>
</pre>
<p>Agora, nós temos que incorporar as mudanças que fizemos à nova
revisão. O melhor jeito de fazer isso é mover nossa cópia para
outro local (baseado no velho fonte externo) e buscar uma nova
cópia do pacote <b>incorporando</b> as mudanças feitas no fonte
externo. Isso é como fazê-lo:
<pre>
$ cd /onde/sua/árvore/fonte/reside
$ mv <pacote> <pacote>.old
$ cvs checkout -jsource-dist:yesterday -jsource-dist <pacote>
$ cd /onde/sua/árvore/fonte/reside/<pacote>
</pre>
<p>O comando acima irá enviar a última revisão do <pacote>,
juntando as mudanças feitas no galho do distribuidor `source-dist'
desde ontem em uma nova cópia. Se quaisquer conflitos aparecerem
durante a junção eles devem ser resolvidos do modo normal. Então
os arquivos modificados podem ser commitidos.
<p>Usar uma data, como sugerido acima, assume que você não importe mais
que uma release de um produto por dia. Se você fizer, você pode
sempre usar algo como isso:
<pre>
$ cvs checkout -jupstream_version_<versão_antiga|tr . _> \
-jupstream_version_<versão_nova|tr . _> <pacote>
</pre>
<p>Nesse caso, os dois comandos acima são equivalentes.
<p>Para arquivos que não foram modificados localmente, a revisão
criada torna-se a revisão "cabeça".
<p>Então, cheque e veja se todos os arquios foram atualizados
corretamente. Especialmente lembre-se de mudar o arquivo
debian/changelog.
<p>Quando estiver satisfeito, você pode remover a versão velha do diretório
de trabalho. Esteja bem certo de remover o diretório correto.
<pre>
$ rm -rf ../<pacote>.old
</pre>
<p>Agora você está pronto para preparar um lançamento.
<li>Remova a árvore fonte para conservar espaço de disco
<p>Para remover o diretório atual da árvore fonte você não deve usar
<kbd>rm -rf</kbd> mas usar o comando CVS que também testa se você
fez alguma mudança local que não foi enviada ainda.
<pre>
$ cd /onde/sua/árvore/fonte/reside
$ cvs release -d <pacote>
</pre>
<li>Glossário
<pre>
Tags nomes simbólicos para revisões
Repositório Arquivo de arquivos fonte
</pre>
<li>Apêndice:
<p>A: CONVENÇÕES DE TAG CVS
<pre>
|======================================================================|
|Versão Externa | <versão> |
|Revisão Debian | <revisão> |
|Nome de arquivo Orig| package_<versão>.orig.tar.gz |
|Nome do pacote | package_<versão>-<revisão>_<arch>.deb |
|Tag de Distribuidor | upstream_version_<versão | tr . _> |
|Tag atual do CVS | debian_version_<revisão | tr . _> |
|======================================================================|
</pre>
<p>Exemplos:
<pre>
|======================================================================|
| | fontes externos | pacote Debian apenas |
|======================================================================|
|Versão Externa | 2.76 | 3.38 |
|Revisão Debian | 1.2 | |
|Nome de arquivo Orig| make_2.76.orig.tar.gz | |
|Nome do pacote | make_2.76-1.2_i386.deb | kpkg_3.38_i386.deb |
|Tag de Distribuidor | upstream_version_2_76 | upstream_version_3_38 |
|Tag atual do CVS | debian_version_2_76-1_2| debian_version_3_38 |
|======================================================================|
</pre>
<p>Note que números de época são ignorados enquanto determinando o nome
da tag CVS (eles são geralmente usados para mudar a opinião do dpkg sobre
ordem de paoctes e não são relevantes às tags CVS normalmente).
</ol>
Reply to: