# 5. Tutorial: Einen Bug in Ubuntu beheben

Obwohl die Mechanismen, um einen Fehler zu beheben für jeden Fehler gleich sind, ist das auftretende Problem sehr wahrscheinlich jedes Mal unterschiedlich. Ein Beispiel für ein konkretes Problem hilft Anhaltspunkte dafür zu finden, auf was alles geachtet werden muss.

Bemerkung

Als dieser Artikel geschrieben wurde, war dies noch nicht behoben. Wenn Du diesen Artikel liest, ist es eventuell schon behoben. Nimm dies als Beispiel und versuche es für die spezifischen Probleme, die du behebst anzuwenden.

## 5.1. Das Problem bestaetigen

Sagen wir das Paket `bumprace` nennt keine Homepage in seiner Paketbeschreibung. In einem ersten Schritt würde man prüfen, ob das Problem nicht vielleicht bereits behoben ist. Das ist leicht herauszufinden, entweder man schaut in Software Center oder führt folgendes aus:

    apt-cache show bumprace

Die Ausgabe sollte etwa so aussehen:

    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

Ein Gegenbeispiel waere `gedit`, welches eine Homepage gesetzt hat:

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

Manchmal stellt sich heraus, dass jemand das Problem, das Du lösen wolltest, schon bearbeitet hat. Um doppelte und nutzlose Arbeit zu verhindern macht es Sinn zuerst ein wenig Detektivarbeit zu leisten.

## 5.2. Die Fehlersituation ansehen

Zuerst sollte man überprüfen ob bereits ein Bericht über das Problem in Ubuntu zu finden ist. Vielleicht arbeitet bereits jemand an einer Fehlerbehebung oder wir können zu der Lösung beitragen. Für Ubuntu werfen wir einen kurzen Blick auf https://bugs.launchpad.net/ubuntu/+source/bumprace und es gibt dort keinen offenen Problembericht.

Bemerkung

Für Ubuntu wird die URL `https://bugs.launchpad.net/ubuntu/+source/<package>` einen immer auf die Bug-Seite des jeweiligen Pakets führen.

Für Debian, welches die Hauptquelle für Ubuntu’s Pakete ist, schauen wir auf http://bugs.debian.org/src:bumprace und finden auch keinen bestehenden Fehlerbericht für unser Problem.

Bemerkung

Für Debian wird die URL `http://bugs.debian.org/src:<package>` einen immer auf die Bug-Seite des jeweiligen Pakets führen.

Wir arbeiten an einem besonderen Problem, da es nur die für das Paketieren relevanten Teile des `bumprace` betrifft. Wenn es ein Problem im Quellcode wäre, würde es hilfreich sein auch den Upstream-Bugtracker zu überprüfen. Das ist leider von Paket zu Paket unterschiedlich; aber wenn du im Web danach suchst, sollte es in den meisten Fällen einfach zu finden sein.

## 5.3. Hilfe anbieten

Wenn du einen offenen Fehler gefunden hast, dieser noch nicht zugewiesen ist und du die Möglichkeit hast ihn zu beheben, solltest du einen Kommetar mit deinem Lösungsvorschlag abgeben. Gib so viele Informationen wie möglich an: Unter welchen Umständen tritt der Fehler auf? Wie hast du den Fehler behoben? Hast du die Lösung getestet?

Wenn noch kein Fehlerbericht eingesandt wurde, kannst Du das tun. Was Du im Kopf behalten solltest ist: ist das Problem klein genug, dass man vielleicht einfach jemand direkt darum bittet einen Patch hoch zu laden? Hast Du es vielleicht geschafft einen Teil des Problems zu beheben und willst dies mitteilen?

Es ist toll wenn Du Hilfe anbieten kannst und man wird dafür sehr dankbar sein.

## 5.4. Das Problem beheben

Für dieses spezifische Beispiel reicht es aus, das Netz nach `bumprace` zu durchsuchen, um die Homepage zu finden. Stell sicher, dass die Seite auch aktiv ist und nicht nur ein Software-Katalog. http://www.linux-games.com/bumprace/ sieht nach der richtigen Seite aus.

Um dieses Problem im Quellpaket zu beheben, müssen wir uns erst den Quelltext besorgen. Das ist einfach:

    bzr branch ubuntu:bumprace

Wenn Du the Debian Directory Overview vorher gelesen hast, wirst Du Dich vielleicht daran erinnwen, dass die Homepage für ein Paket im ersten Teil von `debian/control`, spezifiziert wird. Dieser Abschnitt startet mit `Source:`.

Als nächstes führt man folgendes aus:

    cd bumprace

und bearbeite `debian/control` um `Homepage: http://www.linux-games.com/bumprace/` hinzuzufügen. Das Ende des ersten Abschnitts sollte ein guter Platz dafür sein. Wenn Du das erledigt hast, speichere die Datei ab.

Wenn Du jetzt folgendes ausführst:

    bzr diff

dann solltest Du in etwa so etwas sehen:

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

Der Diff ist relativ leicht zu verstehen. Die `+` zeigen eine Zeile an, die hinzugefügt wurde. In unserem Fall wurde sie vor dem zweiten Abschnitt hinzugefügt, der mit `Package` beginnt, wobei es sich um ein Binärpaket handelt.

## 5.5. Die Lösung dokumentieren

Es ist wichtig den anderen Entwicklern zu erklären, was genau Du getan hast. Wenn Du folgendes ausführst:

    dch -i

dies wird einen Editor starten, der eine Standard-Meldung enthält, die man nur noch ausfüllen muss. In unserem Fall wird ein Eintrag wie `debian/control: Added project's homepage.` ausreichen. Dann speichere die Datei ab. Um sicherzustellen, dass alles geklappt hat, führe folgendes aus:

    bzr diff debian/changelog

und Du wirst in etwa so etwas sehen:

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

Ein paar weitere Überlegungen:

> - Falls man eine Referenz auf einen Bugreport in Launchpad hat, der mit der Änderung behoben wird, hängt man an die Changelog-Meldung (`LP: #<bug number>`) an, also z.B.: `(LP: #123456)`.

> - Solltest Du Deine Änderung in Debian haben wollen, ist die Syntax um einen Debian-Bugreport zu schließen: `(Closes: #<bug number>)`, z.B.: `(Closes: #123456)`.

> - Wenn es eine Referenz zu einem Upstream- oder Debian-Bug ist, oder zu einer Mailinglisten-Unterhaltung, erwähne dies bitte auch.

> - Versuche Deine Zeilen nach 80 Zeichen umzubrechen.

> - Versuche präzise zu sein. Es muss kein Aufsatz sein, aber genau genug, damit jemand, der sich das Problem nicht in’s kleinste Detail anschaut, auch versteht, was geändert wurde.

> - Erwähne, wie Du den Fehler behoben hast und wo.

## 5.6. Die Lösung testen

Um die Lösung zu testen, musst Du deine Entwicklungsumgebung aufgesetzt haben, dann das Paket bauen, es installieren und dann prüfen dass das Problem tatsächlich behoben ist. In unserem Fall wäre das:

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

In Schritt 1 bauen wir das Quellpaket aus dem Quellzweig heraus, dann bauen wir es mit `pbuilder`, dann prüfen wir das resultierende Paket um zu sehen, ob die Homepage hinzugefügt wurde.

Bemerkung

In vielen Fällen wirst Du das Paket auch installieren müssen, um zu prüfen, dass alles funktioniert. In unserem Fall ist das viel einfacher. Wenn der Build erfolgreich war, wirst Du die Binärpakete in `~/pbuilder/<release>_result` finden. Installiere sie einfach per `sudo dpkg -i <package>.deb` oder indem Du auf sie im Dateimanager doppelt-klickst.

Wie wird festgestellt haben, ist das Problem nun behoben, also ist der nächste Schritt, die Lösung mit dem Rest der Welt zu teilen.

## 5.7. Die Lösung in das Projekt einbringen

Es ist sinnvoll einen Fix so nah an die Quelle des Codes (Upstream) wie möglich zu bringen. Hierdurch können wir sicherstellen, dass jeder die Änderung wie sie ist übernehmen kann und keine zusätzlichen lokalen Änderungen benötigen.

In unserem Fall haben wir herausgefunden, dass es sich um ein Problem in der Paketierung handelte, in Ubuntu, wie in Debian. Weil Ubuntu auf Debian basiert, werden wir die Fehlerlösung nach Debian schicken. Sobald sie dort eingepflegt wurde, wird sie ihren Weg nach Ubuntu finden. Der Fehler den wir hier behandelt haben ist ganz klar unkritisch, also macht diese Vorgehensweise Sinn. Wenn es wichtig ist das Problem so schnell wie möglich zu beheben, wirst Du Deine Fehlerlösung an mehrere Bugtracker schicken wollen - wenn das Problem mehrere Stellen betreffen sollte.

Um den Patch zu Debian zu senden, starte einfach:

    submittodebian

Dies wird Dich durch eine Reihe von Schritten führen, um sicherzustellen, dass der Bug an der richtigen Stelle landet. Überprüfe das Diff noch einmal, um sicherzustellen, dass es keine unerwünschten Änderungen enthält, die Du vorher gemacht hast.

Kommunikation ist wichtig, also solltest Du mehr Beschreibung mitliefern, wenn Du darum bittest die Änderung einzupflegen. Sei freundlich, erkläre es ausreichend.

Wenn alles geklappt hat, solltest Du eine Mail von Debian’s Bug-Tracker mit weiteren Informationen bekommen. Dies kann manchmal einige Minuten dauern.

Bemerkung

Sollte das Problem nur in Ubuntu bestehen, solltest Du Dir vielleicht Seeking Review and Sponsorship anschauen, um die Änderung direkt eingepflegt zu bekommen.

## 5.8. Weitere Überlegungen

Wenn Du ein Paket findest und es sich herausstellt, dass Du mehrere triviale Dings darin beheben kannst, mach es ruhig in einer Änderung. Das wird die Code-Review und das Einpflegen beschleunigen.

Sollte es mehrere große Dinge geben, die Du beheben willst, mag es Sinn machen stattdessen mehrere Patches oder Merge Proposals einzuschicken. Sollte es bereits individuelle Bugs dafür geben, macht das die Sache sogar noch einfacher.