# 5. Tutorial: corrigindo uma falha no Ubuntu

Apesar de a mecânica para corrigir um erro ser a mesma para todos os erros, todo problema com que você se depara é provavelmente diferente dos outros. Um exemplo de problema concreto pode ajudar a ter uma ideia do que deve ser considerado em geral.

Nota

No momento que este artigo estava sendo escrito, isto ainda não havia sido corrigido. Quando você estiver lendo o artigo, talvez já tenha sido corrigido. Tome isto como um exemplo e tente adaptá-lo ao problema específico que você está encarando.

## 5.1. Confirmando o problema

Digamos que o pacote “bumprace” não tenha uma página na Internet na sua descrição de pacote. Como primeiro passo, você iria verificar se o problema já esta solucionado. Isto é fácil de verificar, dê uma olhado na Central de Programas ou execute:

    apt-cache show bumprace

A saída deve ser similar a isto:

    Package: bumprace
    Priority: optional
    Section: universe/games
    Installed-Size: 136
    Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
    Original-Maintainer: Christian T. Steigies <cts@debian.org>
    Architecture: amd64
    Version: 1.5.4-1
    Depends: bumprace-data, libc6 (>= 2.4), libsdl-image1.2 (>= 1.2.10),
             libsdl-mixer1.2, libsdl1.2debian (>= 1.2.10-1)
    Filename: pool/universe/b/bumprace/bumprace_1.5.4-1_amd64.deb
    Size: 38122
    MD5sum: 48c943863b4207930d4a2228cedc4a5b
    SHA1: 73bad0892be471bbc471c7a99d0b72f0d0a4babc
    SHA256: 64ef9a45b75651f57dc76aff5b05dd7069db0c942b479c8ab09494e762ae69fc
    Description-en: 1 or 2 players race through a multi-level maze
     In BumpRacer, 1 player or 2 players (team or competitive) choose among 4
     vehicles and race through a multi-level maze. The players must acquire
     bonuses and avoid traps and enemy fire in a race against the clock.
     For more info, see the homepage at http://www.linux-games.com/bumprace/
    Description-md5: 3225199d614fba85ba2bc66d5578ff15
    Bugs: https://bugs.launchpad.net/ubuntu/+filebug
    Origin: Ubuntu

Um contra-exemplo seria o “gedit”, que tem uma página na Internet definida:

    $ apt-cache show gedit | grep ^Homepage
    Homepage: http://www.gnome.org/projects/gedit/
    $

Algumas vezes você ira descobrir que um problema em particular que você está analisando já está corrigido. Para evitar desperdiçar esforço e duplicar trabalho, faz sentido fazer um trabalho de detetive antes.

## 5.2. Pesquisar situação da falha

Primeiro temos que verificar um relatório de erro para o problema já existe no Ubuntu. Talvez alguém já esteja trabalhando em uma correção, ou que possamos contribuir para solução de alguma maneira. Para o Ubuntu, nós demos uma rápida olhada em https://bugs.launchpad.net/ubuntu/+source/bumprace e não há um relatório de erro ara o problema lá.

Nota

Para o Ubuntu a URL `https://bugs.launchpad.net/ubuntu/+source/<pacote>` deve sempre levar até a página de falhas do pacote fonte em questão.

Para o Debian, que é a maior fonte para os pacotes do Ubuntu, nós demos uma olhada em http://bugs.debian.org/src:bumprace e não achamos um relatório para o nosso problema também.

Nota

Para o Debian a URL `http://bugs.debian.org/src:<pacote>` deve sempre levar até a página de falhas do pacote fonte em questão.

The problem we are working on is special as it only concerns the packaging-related bits of `bumprace`. If it was a problem in the source code it would be helpful to also check the Upstream bug tracker. This is unfortunately often different for every package you have a look at, but if you search the web for it, you should in most cases find it pretty easily.

## 5.3. Oferecendo ajuda

Se você encontrou um relatório de erro aberto, se ele não estiver atribuído a alguém e você puder corrigi-lo, você deverá comentar no relatório a sua solução. Certifique-se de incluir toda a informação que puder: em que circunstâncias o erro acontece? Como você corrigiu o problema? Você testou a sua solução?

Se nenhum relatório de erro foi arquivado, você pode arquivá-lo. O que você deve ter em mente é: o problema é tão pequeno que pedir para alguém para repará-lo seria suficiente? Você conseguiu corrigir apenas parcialmente o problema e você quer ao menos compartilhar a sua parte na correção?

Isso é ótimo se você pode oferecer ajuda e certamente será apreciado.

## 5.4. Corrigindo o problema

Para este caso específico basta pesquisar na Internet “bumprace” e encontrar a sua página Web. Assegure-se de que é um site ativo e não apenas um catálogo de programas. http://www.linux-games.com/bumprace/ parece que é o local apropriado.

Para nos dedicarmos a esse problema no pacote fonte, nós primeiro precisamos do fonte e nós podemos facilmente obtê-lo executando:

    bzr branch ubuntu:bumprace

Se você leu A visão geral do diretório Debian previamente, você deve se lembrar que página Web para de um pacote está especificada na primeira página do “debian/control”, a seção que inicia com “Source”.

Então o que nós precisamos fazer é executar:

    cd bumprace

e edite o `debian/control` para adicionar `Homepage: http://www.linux-games.com/bumprace/`. O final da primeira seção será um bom lugar para colocá-lo. Uma vez que tenha feito isto, salve o arquivo.

Se você executar agora:

    bzr diff

você deve ver alguma coisa como isto:

    === modified file 'debian/control'
    --- debian/control      2012-05-14 23:38:14 +0000
    +++ debian/control      2012-09-03 15:45:30 +0000
    @@ -12,6 +12,7 @@
                    libtool,
                    zlib1g-dev
     Standards-Version: 3.9.3
    +Homepage: http://www.linux-games.com/bumprace/

     Package: bumprace
     Architecture: any

The diff is pretty simple to understand. The `+` indicates a line which was added. In our cases it was added just before the second section, starting with `Package`, which indicates a resulting binary package.

## 5.5. Documentando a correção

É importante explicar para seus colegas desenvolvedores o que exatamente você fez. Se você executar:

    dch -i

this will start an editor with a boilerplate changelog entry which you just have to fill out. In our case something like `debian/control: Added project's homepage.` should do. Then save the file. To double-check this worked out, run:

    bzr diff debian/changelog

e você verá algo como isto:

    === modified file 'debian/changelog'
    --- debian/changelog    2012-05-14 23:38:14 +0000
    +++ debian/changelog    2012-09-03 15:53:52 +0000
    @@ -1,3 +1,9 @@
    +bumprace (1.5.4-1ubuntu1) UNRELEASED; urgency=low
    +
    +  * debian/control: Added project's homepage.
    +
    + -- Peggy Sue <peggy.sue@example.com>  Mon, 03 Sep 2012 17:53:12 +0200
    +
     bumprace (1.5.4-1) unstable; urgency=low

       * new upstream version, sound and music have been removed (closes: #613344)

Umas poucas considerações adicionais:

> - Se você tem uma referência para um erro no Launchpad que está corrigido pelo problema, adicione (“LP: #<número do erro>”) para a linha de entrada do registro de alterações, ou seja, “(LP: #123456)”.

> - Se você deseja que a sua correção seja incluída no Debian, a sintaxe para o erro no Debian é (Closes: #<número do erro>), ou seja, (Closes: #123456)”.

> - Se for uma referencia para um erro de upstream ou Debian, ou lista de discussão, mencione isto também.

> - Tente quebrar suas linhas em 80 caracteres.

> - Tente ser específico, num texto não muito longo, mas o suficiente para que alguém (que não conhece profundamente o problema) possa entender.

> - Menção como você corrigiu o problema e onde.

## 5.6. Testando a correção

Para testar a correção, você precisa ter seu ambiente de desenvolvimento configurado, então construir o pacote, instalá-lo e verificar se o problema foi resolvido. Em nosso caso isto seria:

    bzr bd -- -S
    pbuilder-dist <current Ubuntu release> build ../bumprace_*.dsc
    dpkg -I ~/pbuilder/*_result/bumprace_*.deb

Na primeira etapa nós construímos o pacote fonte a partir do ramo, então o construímos usando “pbuilder”, e então inspecionamos o pacote para verificar se o campo da página inicial foi adicionado corretamente.

Nota

In a lot of cases you will have to actually install the package to make sure it works as expected. Our case is a lot easier. If the build succeeded, you will find the binary packages in `~/pbuilder/<release>_result`. Install them via `sudo dpkg -i <package>.deb` or by double-clicking on them in your file manager.

Como verificamos, o problema agora está resolvido, então o próximo passo é compartilhar nossa solução com o mundo.

## 5.7. Incluindo a correção

É feito para incluir a correção o mais upstream possível. Fazendo isto, você pode garantir que todos possam obter a fonte upstream como está, sem precisar fazer modificações locais para corrigi-la.

In our case we established that we have a problem with the packaging, both in Ubuntu and Debian. As Ubuntu is based on Debian, we will send the fix to Debian. Once it is included there, it will be picked up by Ubuntu eventually. The issue in our tutorial is clearly non-critical, so this approach makes sense. If it is important to fix the issue as soon as possible, you will need to send the solution to multiple bug trackers. Provided the issue affects all parties in question.

Para submeter o patch para o Debian, simplesmente execute:

    submittodebian

Isto lhe levará por uma série de passos para assegurar que o erro vá parar no lugar correto. Assegure-se de revisar o diff novamente para ter certeza de que não inclui alterações aleatórias que você tenha feito antes.

Comunicação é importante, então quando você adicionar alguma descrição para solicitar a inclusão, seja amigável, explique ela bem.

Se tudo deu certo você deverá receber um e-mail do sistema de rastreamento de erros do Debian com mais informações. Isto pode levar alguns minutos.

Nota

Se o problema só existe no Ubuntu, você pode considerar :doc:`Buscar revisão e orientação<./udd-sponsorship>`para que a correção seja incluída.

## 5.8. Considerações adicionais

Se você encontrar um pacote e achar que há algumas coisas pequenas que você pode corrigir ao mesmo tempo, faça isso. Isto irá acelerar a revisão e a inclusão.

Se há várias coisas grandes que você queira corrigir, é prudente que você envie patches individuais ou propostas de mesclagem. Se houver erros individuais já arquivados para esses problemas, isto facilita ainda mais.