# 5. Tutorial: Fixing a bug in Ubuntu

While the mechanics for fixing a bug are the same for every bug, every problem you look at is likely to be different from another. An example of a concrete problem might help to get an idea what to consider generally.

Note

At the time of writing this article this was not fixed yet. When you are reading the article this might actually be fixed. Take this as an example and try to adapt it to the specific problem you are facing.

## 5.1. Confirming the problem

Let’s say the package `bumprace` does not have a homepage in its package description. As a first step you would check if the problem is not solved already. This is easy to check, either take a look at Software Center or run:

    apt-cache show bumprace

The output should be similar to this:

    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

A counter-example would be `gedit`, which has a homepage set:

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

Sometimes you will find that a particular problem you are looking into is already fixed. To avoid wasting efforts and duplicating work it makes sense to first do some detective work.

## 5.2. Research bug situation

First we should check if a bug for the problem exists in Ubuntu already. Maybe somebody is working on a fix already, or we can contribute to the solution somehow. For Ubuntu we have a quick look at https://bugs.launchpad.net/ubuntu/+source/bumprace and there is no open bug with our problem there.

Note

For Ubuntu the URL `https://bugs.launchpad.net/ubuntu/+source/<package>` should always take to the bug page of the source package in question.

For Debian, which is the major source for Ubuntu’s packages, we have a look at http://bugs.debian.org/src:bumprace and can’t find a bug report for our problem either.

Note

For Debian the URL `http://bugs.debian.org/src:<package>` should always take to the bug page of the source package in question.

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. Offering help

If you found an open bug and it is not assigned to somebody and you are in a position to fix it, you should comment on it with your solution. Be sure to include as much information as you can: Under which circumstances does the bug occur? How did you fix the problem? Did you test your solution?

If no bug report has been filed, you can file a bug for it. What you might want to bear in mind is: Is the issue so small that just asking for somebody to commit it is good enough? Did you manage to only partially fix the issue and you want to at least share your part of it?

It is great if you can offer help and will surely be appreciated.

## 5.4. Fixing the issue

For this specific example it is enough to search the web for `bumprace` and find the homepage of it. Be sure it is a live site and not just a software catalogue. http://www.linux-games.com/bumprace/ looks like it is the proper place.

To address the issue in the source package, we first need the source and we can easily get it by running:

    bzr branch ubuntu:bumprace

If you read the Debian Directory Overview before, you might remember, that the homepage for a package is specified in the first part of `debian/control`, the section which starts with `Source:`.

So what we do next is run:

    cd bumprace

and edit `debian/control` to add `Homepage: http://www.linux-games.com/bumprace/`. At the end of the first section should be a good place for it. Once you have done this, save the file.

If you now run:

    bzr diff

you should see something like this:

    === 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. Documenting the fix

It is important to explain to your fellow developers what exactly you did. If you run:

    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

and you will see something like this:

    === 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)

A few additional considerations:

> - If you have a reference to a Launchpad bug which is fixed by the issue, add (`LP: #<bug number>`) to the changelog entry line, ie: `(LP: #123456)`.
> - If you want to get your fix included in Debian, for a Debian bug the syntax is `(Closes: #<bug number>)`, ie: `(Closes: #123456)`.
> - If it is a reference to an upstream or Debian bug or a mailing list discussion, mention it as well.
> - Try to wrap your lines at 80 characters.
> - Try to be specific, not an essay, but enough for somebody (who did not deeply look into the issue) to understand.
> - Mention how you fixed the issue and where.

## 5.6. Testing the fix

To test the fix, you need to have your development environment set up, then to build the package, install it and verify the problem is solved. In our case this would be:

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

In step one we build the source package from the branch, then build it by using `pbuilder`, then inspect the resulting package to check if the Homepage field was added properly.

Note

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.

As we verified, the problem is now solved, so the next step is sharing our solution with the world.

## 5.7. Getting the fix included

It makes sense to get the fix included as Upstream as possible. Doing that you can guarantee that everybody can take the Upstream source as-is and don’t need to have local modifications to fix it.

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.

To submit the patch to Debian, simply run:

    submittodebian

This will take you through a series of steps to make sure the bug ends up in the correct place. Be sure to review the diff again to make sure it does not include random changes you made earlier.

Communication is important, so when you add some more description to it to the inclusion request, be friendly, explain it well.

If everything went well you should get a mail from Debian’s bug tracking system with more information. This might sometimes take a few minutes.

Note

If the problem is just in Ubuntu, you might want to consider Seeking Review and Sponsorship to get the fix included.

## 5.8. Additional considerations

If you find a package and find that there are a couple of trivial things you can fix at the same time, do it. This will speed up review and inclusion.

If there are multiple big things you want to fix, it might be advisable to send individual patches or merge proposals instead. If there are individual bugs filed for the issues already, this makes it even easier.