Let us assume, I want to fix a bug in a program called terminator, which is deployed in a package of the same name. First step: Get the source!
apt-get source terminator
This downloads three files
and puts the source into the directory
The orig tarball contains the pure release code,
the diff contains changes from package maintainer,
and the dsc some meta data like checksums and signature.
Now there might be some build dependencies, which apt can satisfy for us.
sudo apt-get build-dep terminator
Now fix the bug, add the feature, or do whatever you want with this package.
My suggestions would be to
and manage the changes/patches with git,
but this is up to you.
In the end, you should build the package yourself.
This generates a
which you can install on your system.
sudo dpkg -i terminator_0.95-1_all.deb
The buildpackage will also extend the diff
against the original tarball.
However, this diff may not have been empty in the beginning,
since package maintainers usually must add the
Now we need to inform the package maintainer of our changes, so they can be integrated into upstream. Ubuntu has a tool, which collects environment information and sends you to Launchpad to enter a bug report for your package.
For Debian the tool is called
This process does not directly lead to a bug report for the project, but only for the Ubuntu package. However, it unifies the reporting process, since this differs wildly between projects or even does not exist.