Como contribuir com os overlays do Gentoo-BR

Pessoal, estamos finalizando a estruturação dos overlays do projeto Gentoo-BR, após a fusão com o antigo grupo. e estamos finalmente abrindo os overlays para contribuições.

Atualmente os overlays disponiveis são:

Os overlays são identificados pelos identificadores acima, e receberemos contribuições para todos através da mailing-list:

gentoo-br-overlay@googlegroups.com

É necessário que você se cadastre na mailing-list para poder enviar patches.

Considerações

Obviamente só serão aceitos pacotes de softwares com licenças livres, quaisquer que sejam as licenças, e de pacotes que ainda não estejam disponíveis na árvore do Portage.

Caso deseje disponibilizar um pacote encontrado na bugzilla do Gentoo Linux (http://bugs.gentoo.org/), comente no bug a respeito da inclusão, informe ao autor do ebuild e agradeça ao autor na mensagem de commit e no Changelog.

Todos os ebuilds devem conter apenas KEYWORDS instaveis, como ~x86 ~amd64, etc.

Criem seus ebuilds e testem em overlays locais. Em breve publicarei um tutorial sobre isso também.

Configurações iniciais

Para trabalhar com os overlays do Gentoo-BR você precisará do Git (dev-util/git), e de outras duas ferramentas: o echangelog (disponivel no pacote app-portage/gentoolkit-dev) e o repoman (distribuido com o Portage).

Listarei abaixo os comandos necessários para configuração da sua maquina para trabalhar com os repositórios, criar patches e nos envia-los por email (para a mailing-list).

Configuração do usuário

Os seguintes comandos irão configurar o seu nome e email, para constarem nos patches, mensagens nos repositórios e Changelog's.

$ git config --global user.name "Seu nome completo"
$ git config --global user.email "seu.email@dominio.com"
$ echo 'export ECHANGELOG_USER="Nome <email@dominio.com>"' >> ~/.bashrc
$ source ~/.bashrc

Para o penúltimo comando, simplesmente adicione a variável de ambiente ECHANGELOG_USER, com seu nome e email para o arquivo de inicialização de seu shell favorito. Caso use o comando acima, nao se esqueça de utilizar 2 setas >>, ou o antigo conteudo de seu arquivo será perdido.

Configuração do envio de emails

Demonstrarei a configuração para envio direto de patches via email, utilizando o SMTP do Gmail (ou Google Apps). Caso deseje utilizar um servidor de SMTP local ou usar algum outro, procure as instruções de configuração na internet. :)

$ git config --global sendemail.from "Nome <seu.email@dominio.com>"
$ git config --global sendemail.cc "seu.email@dominio.com"
$ git config --global sendemail.confirm "always"
$ git config --global sendemail.smtpserver "smtp.gmail.com"
$ git config --global sendemail.smtppass "sua_senha"
$ git config --global sendemail.smtpserverport "587"
$ git config --global sendemail.smtpencryption "tls"
$ git config --global sendemail.smtpuser "seu.email@dominio.com"

Clonando o repositório Git

Você precisará de uma cópia local do repositório Git para adicionar seu pacote e gerar o patch que será enviado para nós.

$ git clone git://gitorious.org/gentoo-br/nome-do-overlay.git

Agora vamos setar o destinatário padrão para os patches deste overlay:

$ cd nome-do-overlay/
$ git config sendemail.to "gentoo-br-overlay+nome-do-overlay@googlegroups.com"

Note o "+nome-do-overlay" no último comando. Este é o identificador que usaremos para saber com qual overlay você está contribuindo. Este identificador presente no endereço de email não afeta em nada o envio do mesmo.

Após este passo, você já possui uma cópia apropriada para trabalhar, no diretório nome-do-overlay, dentro do diretório em que você rodou o comando anterior.

Este passo só será executado na primeira vez que você for contribuir com cada um dos overlays do projeto, seja o principal ou os pessoais.

Adicionando seu pacote

Inicialmente, atualize o seu repositório local. Para isso, entre no diretório dele e execute:

$ git pull

Crie um novo branch para trabalhar (branch working, por exemplo).

$ git checkout -b working

Crie o diretório da sua categoria (caso seja necessário), e entre nele.

$ mkdir categoria
$ cd categoria/

Crie o diretório do seu pacote (caso seja necessário). e entre nele.

$ mkdir pacote
$ cd pacote

Copie seu ebuild para este diretorio. É importante que vocẽ tenha testardo o seu ebuild em um overlay local para ter certeza que tudo está funcionando corretamente e seu patch não seja rejeitado.

$ cp /caminho/para/pacote-1.0.ebuild .

Agora crie o arquivo metadata.xml, que contém informações sobre o herd responsável pelo pacote, o mantenedor, uma descrição longa e as use flags locais do pacote. Os pacotes gentoo-syntax contém templates de arquivos como ebuilds, metadata.xml, entre outros. É interessante instalar o pacote referente ao seu editor. No meu caso, utilizo o Vim, e tenho instalado o app-vim/gentoo-syntax.

$ vim metadata.xml

No campo herd insira o valor "no-herd". No campo long-description adicione uma descrição mais completa que a do ebuild. Se seu pacote possuir USE flags locais, adicione um campo use, no seguinte formato:

<use>
    <flag name="flag1">What flag1 do</flag>
    <flag name="flag2">What flag2 do</flag>
</use>

Seu arquivo deverá ficar parecido com este:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
<pkgmetadata>
    <herd>no-herd</herd>
    <maintainer>
        <email>your-mail@domain.com</email>
        <name>Your Name</name>
    </maintainer>
    <longdescription lang="en">
        Some long description.
    </longdescription>
    <use>
        <flag name="flag1">What flag1 do</flag>
        <flag name="flag2">What flag2 do</flag>
    </use>
</pkgmetadata>

Se seu pacote precisa de patches, copie-os para o diretório files, dentro do diretório atual.

$ cp /caminho/para/patches/* files/

Adicione os arquivos ao repositório git.

$ git add .

Agora que já possuimos todos os arquivos no repositório, podemos criar o Changelog.

$ echangelog "Added package categoria/pacote-1.0"

A mensagem deve ser curta, explicativa e em inglês.

Agora, rode o seguinte comando, para criar o arquivo Manifest, e procurar por erros triviais.

$ repoman fix

Cheque os itens com o aviso em vermelho, e corrija-os, se possível. Em caso de dúvidas, entre em contato. Consulte também o help e a manpage do repoman.

Agora, faremos uma checagem mais profunda, utilizando o profile developer e procurando por erros mais sérios.

$ repoman -d full

Resolva os erros (em vermelho) e rode novamente. Quando não tiver mais erro, ou restarem apenas warnings triviais, como o aviso de que todas as arquiteturas estão com mask, rode o seguinte comando:

$ repoman commit -m "Added package categoria/pacote-1.0"

Seja claro na mensagem de commit, pois este será o assunto do email enviado com o patch para a mailing-list.

Se você não corrigiu os erros, o repoman vai se recusar a commitar as mudanças.

ATENÇÃO: Jamais commite mudanças sem utilizar o repoman!

Após isto, seu pacote está pronto!

Criando o patch e enviando via email

Para criar o patch, volte para o branch master e atualize o repositório novamente, pois algum outro pacote pode ter sido inserido no repositório durante seu desenvolvimento.:

$ cd ../../
$ git checkout master
$ git pull

Volte para o branch working.

$ git checkout working
$ git rebase master

Seu repositório está pronto para gerar patches a partir do inicio de seu trabalho no branch working.

Para enviar o email com o patch é muito simples.

$ git send-email master

O Git lhe dará algumas instruções e pedirá confirmação. Se tudo correr bem, em pouco tempo seu patch estará em nossa mailing-list, e você receberá uma cópia em seu email.

Caso o seu patch seja em resposta a algum email (por exemplo: você mandou um patch, que foi rejeitado, e você precisou re-enviar), você precisa indicar a qual email está respondendo. Para isto, abra o email original (opção "Mostrar original" do Gmail) e veja a linha:

Message-Id: ...

Copie tudo que estiver a direita dos :, este é o id do email. E então envie o email com o seguinte comando:

$ git send-email master --in-reply-to=id_do_email

Caso algo dê errado com o envio via Git, rode o seguinte comando, e nos envie o patch para a mailing-list manualmente, em anexo.

$ git format-patch master

Este comando criará um arquivo .patch no seu diretório atual. Envie anexado para a lista e remova, para não afetar o repositório.

Agora você pode deletar seu branch working.

$ git checkout master
$ git branch -D working

Pronto!

Sua contribuição foi enviada e será analisada por algum dos desenvolvedores do projeto. Acompanhe o desenrolar da thread na mailing-list.

Caso seu patch não seja aceito, continue o desenvolvimento no seu overlay local e refaça os passos para a criação do patch.

Da próxima vez não precisará repetir as configurações. Apenas será necessário reconfigurar algo se for contribuir com outro overlay do projeto. :)

Eu e os outros desenvolvedores agradecemos a colaboração de todos!

blog comments powered by Disqus