{"id":9186,"date":"2012-09-19T23:48:17","date_gmt":"2012-09-19T21:48:17","guid":{"rendered":"https:\/\/www.gambaru.de\/blog\/?p=9186"},"modified":"2012-09-19T23:48:17","modified_gmt":"2012-09-19T21:48:17","slug":"wie-man-veroffentlichungskritische-bugs-in-debian-beseitigt","status":"publish","type":"post","link":"https:\/\/gambaru.de\/blog\/2012\/09\/19\/wie-man-veroffentlichungskritische-bugs-in-debian-beseitigt\/","title":{"rendered":"Wie man ver\u00f6ffentlichungskritische Bugs in Debian beseitigt"},"content":{"rendered":"<p>Es h\u00e4lt sich hartn\u00e4ckig das Ger\u00fccht, dass es so etwas wie einen Konkurrenzkampf zwischen Debian und Ubuntu gebe. Tats\u00e4chlich ermutigt Ubuntu jedoch <a href=\"https:\/\/wiki.ubuntu.com\/UbuntuDevelopment\/NewPackages\">neue Software<\/a> \u00fcber Debian einzubringen. Im Umkehrschluss hei\u00dft das auch, dass jeder <a href=\"https:\/\/wiki.ubuntu.com\/ContributingToDebian\">Beitrag zu Debian<\/a> auch ein Beitrag zu Ubuntu ist.<br \/>\nIn diesem Artikel geht es darum, dass auch ein kleiner Beitrag der gesamten Distribution weiterhelfen kann und dass das Beseitigen von Bugs, Modifizieren von Quelltext und die Neuerstellung des Pakets kein Hexenwerk sein muss. Besonders hilfreich ist das Beseitigen von sogenannten ver\u00f6ffentlichungskritischen Bugs, kurz RC-Bugs genannt.<\/p>\n<h2>Der grobe Ablauf<\/h2>\n<ol>\n<li>Finde einen RC-Bug, der dich interessiert.<\/li>\n<li>Erstelle einen Patch f\u00fcr das Problem.<\/li>\n<li>Schicke die L\u00f6sung an die <a href=\"http:\/\/www.debian.org\/Bugs\/\">Fehlerdatenbank<\/a> von Debian.<\/li>\n<li>Finde jemanden, der das Paket hochladen kann.<\/li>\n<\/ol>\n<h2>Finde einen RC-Bug<\/h2>\n<p>Erster Anlaufpunkt um einen RC-Bug zu finden ist die <a href=\"http:\/\/udd.debian.org\/bugs.cgi\">Ultimative Debian Datenbank<\/a> (UDD). Hier l\u00e4sst sich mit Hilfe verschiedener Filteroptionen die Suche exakt einschr\u00e4nken. F\u00fcr den angehenden Kammerj\u00e4ger ist <a href=\"http:\/\/udd.debian.org\/bugs.cgi?release=wheezy_and_sid&patch=ign&merged=ign&done=ign&fnewerval=7&rc=1&sortby=id&sorto=asc&ctags=1&ctags=1&cdeferred=1\">diese Ansicht<\/a> die zur Zeit beste. Wichtig ist, dass man alle schon mit Patch markierten Bugs und alle die neuer als 7 Tage sind ignorieren kann, da es bei ersteren eine L\u00f6sung gibt und bei letzteren dem Paketverwalter zumindest eine Chance einger\u00e4umt werden sollte, das Problem selbst zu l\u00f6sen.<br \/>\nEin hilfreiches Werkzeug ist das Programm <code>rc-alert<\/code>, welches sich im Paket <a href=\"http:\/\/packages.debian.org\/stable\/devscripts\">devscripts<\/a> befindet und anzeigt, welche Software auf dem eigenen Rechner kritische Fehler aufweist. Ein Bonus von rc-alert ist, dass es nach Debtags filtern kann.<br \/>\nMit dem nachfolgenden Befehl werden nur Debian Testing und Unstable nach Bugs durchsucht und geflickte und kurz vor dem Upload stehende Pakete ausgelassen. Zus\u00e4tzlich wird nur jene Software aufgelistet, die in Perl oder Python implementiert worden ist.<br \/>\n<code>rc-alert --include-dists TU --exclude-tags P+ --debtags implemented-in::perl,implemented-in::python<\/code><br \/>\n<img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/gambaru.de\/blog\/wp-content\/uploads\/2012\/09\/multi_disk_error_by_Justin_Marty1-1-1.jpg\" alt=\"Multi Disk Error\" title=\"multi_disk_error_by_Justin_Marty\" width=\"320\" height=\"277\" class=\"aligncenter size-full wp-image-9210\" \/><\/p>\n<h2>Erstelle einen Patch<\/h2>\n<p>In vielen F\u00e4llen ben\u00f6tigt man nicht einmal Kenntnisse in einer Programmiersprache, sondern es gen\u00fcgt mit einem Texteditor umgehen zu k\u00f6nnen. In Bug <a href=\"http:\/\/bugs.debian.org\/675220\">#675220<\/a>, <a href=\"http:\/\/bugs.debian.org\/685959\">#685959<\/a> und <a href=\"http:\/\/bugs.debian.org\/685958\">#685958<\/a> geht es schlicht darum, dass die E-Mail-Adresse des Paketverwalters ung\u00fcltig ist, was gegen die <a href=\"http:\/\/www.debian.org\/doc\/debian-policy\/\">Paketrichtlinien<\/a> von Debian verst\u00f6\u00dft. Genauso gut kann aber auch eine Abh\u00e4ngigkeit falsch sein, wodurch das Paket sich nicht mehr kompilieren l\u00e4sst. Diese Art von Fehler haben zwar ernste Auswirkungen, lassen sich jedoch in der Regel leicht beheben.<br \/>\nZum Arbeiten mit Quellpaketen solltet ihr euch das Paket <a href=\"http:\/\/packages.debian.org\/stable\/build-essential\">build-essential<\/a> oder, wenn ihr Gefallen an der Sache gefunden habt, <a href=\"http:\/\/packages.debian.org\/sid\/packaging-dev\">packaging-dev<\/a> installieren.<br \/>\n<code>apt-get source textedit.app<\/code><br \/>\nMit Hilfe von dpkg-dev wird automatisch das Quellpaket entpackt. Nachdem man in das entpackte Quellverzeichniss gewechselt ist, sollte man zuerst einen neuen Changelog-Eintrag anlegen und deutlich machen, dass man hier eine \u00c4nderung als Nicht-Paketverwalterin vornimmt.<br \/>\n<code>dch --nmu<\/code><br \/>\nHierdurch wird automatisch das Changelog mit dem richtigen Eintrag ge\u00f6ffnet. Da der Patch f\u00fcr Unstable gedacht ist (der Regelfall) sollte das UNRELEASED dementsprechend in unstable umge\u00e4ndert werden. Noch eine kurze Beschreibung, was ihr ge\u00e4ndert habt und ein wichtiger Schritt f\u00fcr einen Non-Maintainer-Upload (NMU) ist getan.<\/p>\n<pre>\ntextedit.app (4.0+20061029-3.4) unstable; urgency=low\n  * Non-maintainer upload.\n  * Fix invalid maintainer email address. (Closes: #675220)\n<\/pre>\n<p>Der wichtigste Anlaufpunkt im Quellpaket ist das Debian-Verzeichnis. In <a href=\"http:\/\/www.debian.org\/doc\/debian-policy\/ch-controlfields.html\">debian\/control<\/a> lassen sich z.B. allgemeine Paketinformationen wie die E-Mail-Adresse des Maintainers, Abh\u00e4ngigkeiten oder auch die empfohlenen Pakete in einer einfachen Textdatei definieren. Der \"Fix\" f\u00fcr die vorher erw\u00e4hnten Bugs war es, das Maintainer-Feld zu aktualisieren. G\u00e4be es noch weitere \u00c4nderungen zu machen, k\u00f6nnte man mit<br \/>\n<code>dch -a<\/code><br \/>\nweitere Eintr\u00e4ge zum Changelog hinzuf\u00fcgen und die entsprechende Textdateien innerhalb des Debian-Verzeichnisses \u00e4ndern.<\/p>\n<h3>Einen Patch mit Quilt erstellen<\/h3>\n<p>M\u00fcsst ihr hingegen den Quellcode selbst patchen und entspricht das Paket dem neuen Format 3.0 (quilt), k\u00f6nnt ihr <a href=\"http:\/\/packages.debian.org\/sid\/quilt\">quilt<\/a> zum Patchen benutzen. Ob ein Paket dies unterst\u00fctzt findet ihr heraus, indem ihr einen Blick in die Datei <em>debian\/source\/format<\/em> werft. Rapha\u00ebl Hertzog hat die <a href=\"http:\/\/raphaelhertzog.com\/2012\/08\/08\/how-to-use-quilt-to-manage-patches-in-debian-packages\/\">Bedienung von quilt<\/a> in einem sehr guten Artikel auf den Punkt gebracht.<br \/>\nDer grobe Ablauf ist, dass ihr innerhalb des Debian-Verzeichnisses einen Ordner patches erstellen m\u00fcsst, falls er nicht vorhanden ist und dann nach diesem Schema Patches erzeugt.<\/p>\n<ul>\n<li>Erstellt einen neuen Patch<br \/>\n<code>quilt new NamedesPatches<\/code><\/li>\n<li>Ver\u00e4ndert eine oder mehrere Dateien nach Belieben<br \/>\n<code>quilt edit Datei<\/code>\n<\/li>\n<li>Wendet den Patch auf die Originaldatei an<br \/>\n<code>quilt push<\/code><\/li>\n<li>Erneuert den Patch, wenn er schon existiert.<br \/>\n<code>quilt refresh<\/code><\/li>\n<\/ul>\n<h3>Einen Patch importieren<\/h3>\n<p><code>quilt import -P NamedesPatches \/Pfad-zum-Patch.patch<\/code><br \/>\n<code>quilt push<\/code><br \/>\nH\u00e4ufig kommt es auch vor, dass schon jemand einen Patch hinterlassen hat und man ihn selbst ausprobieren oder testen m\u00f6chte.<\/p>\n<h2>Schicke den Patch an die Fehlerdatenbank<\/h2>\n<p>Ist man der Meinung alles erledigt zu haben, sollte man zuerst alle Patches wieder zur\u00fccksetzen und das Quellpaket neu bauen.<br \/>\nInnerhalb des Quellverzeichnisses:<br \/>\n<code>quilt pop -a<\/code><br \/>\nDann<\/p>\n<pre>\ncd ..\ndpkg-source -b textedit.app-4.0+20061029\n<\/pre>\n<p>Wenn ihr alles richtig gemacht habt, m\u00fcsste nun eine weitere .dsc-Datei entstanden sein. Mit Hilfe von <strong>debdiff<\/strong>, dass sich auch im Paket devscripts befindet, lassen sich nun alle gemachten Unterschiede als Diff in eine neue Datei ausgeben, der Patch.<br \/>\nAllgemein: <\/p>\n<pre>debdiff altesPaket.dsc neuesPaket.dsc > Paket.debdiff<\/pre>\n<p>Im Speziellen: <\/p>\n<pre>debdiff textedit.app_4.0+20061029-3.3.dsc textedit.app_4.0+20061029-3.4.dsc > textedit.app.debdiff<\/pre>\n<p>Diese Datei muss jetzt nur noch per Mail an den Fehlerbericht geschickt werden und dieser mit dem passenden Tag <strong>patch<\/strong> markiert werden. <a href=\"http:\/\/www.debian.org\/Bugs\/Reporting\">Die Anleitung zur Bedienung der Fehlerdatenbank<\/a> verr\u00e4t alle Details. Zum Markieren als Patch gen\u00fcgt eine Mail an <em>control@bugs.debian.org<\/em> mit folgendem Inhalt, wobei nnnnnn f\u00fcr die Fehlernummer steht<\/p>\n<pre>\ntags nnnnnn patch\nthanks\n<\/pre>\n<h2>Einen Sponsor finden<\/h2>\n<p>Im Regelfall sollte das Anh\u00e4ngen des Patches an den Fehlerbericht mehr als ausreichend sein. Es besteht jedoch auch die M\u00f6glichkeit das Paket direkt zu <a href=\"http:\/\/mentors.debian.net\/\">mentors.debian.net<\/a> hochzuladen, wo ihr Hilfe von Debianentwicklern erhalten k\u00f6nnt. Vorher m\u00fcsst ihr noch wissen, <a href=\"https:\/\/www.gambaru.de\/blog\/2011\/06\/11\/wie-man-debian-pakete-aus-den-quellen-baut\">wie man Debianpakete aus den Quellen baut<\/a>, was auch zum Testen des Patches n\u00fctzlich ist.<br \/>\nHabt ihr einen Account bei den Mentoren erstellt und seid ihr den <a href=\"http:\/\/www.debian.org\/doc\/manuals\/developers-reference\/pkgs.html#nmu\">Regeln f\u00fcr einen Non-Maintainer-Upload<\/a> gefolgt, sind die Aussichten gut dort jemanden zu finden, der das gepatchte Paket in das Archiv hochladen kann. Vorausgesetzt nat\u00fcrlich, es l\u00f6st tats\u00e4chlich das Problem.<\/p>\n<h2>Lesenswerte und inspirierende Links<\/h2>\n<ul>\n<li><a href=\"http:\/\/raphaelhertzog.com\/2011\/07\/04\/how-to-prepare-patches-for-debian-packages\/\">http:\/\/raphaelhertzog.com\/2011\/07\/04\/how-to-prepare-patches-for-debian-packages\/<\/a><\/li>\n<li><a href=\"http:\/\/raphaelhertzog.com\/2011\/07\/14\/how-to-squash-debian-release-critical-bugs\/\">http:\/\/raphaelhertzog.com\/2011\/07\/14\/how-to-squash-debian-release-critical-bugs\/<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Es h\u00e4lt sich hartn\u00e4ckig das Ger\u00fccht, dass es so etwas wie einen Konkurrenzkampf zwischen Debian und Ubuntu gebe. Tats\u00e4chlich ermutigt Ubuntu jedoch neue Software \u00fcber Debian einzubringen. Im Umkehrschluss hei\u00dft das auch, dass jeder Beitrag zu Debian auch ein Beitrag zu Ubuntu ist. In diesem Artikel geht es darum, dass auch ein kleiner Beitrag der &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/gambaru.de\/blog\/2012\/09\/19\/wie-man-veroffentlichungskritische-bugs-in-debian-beseitigt\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eWie man ver\u00f6ffentlichungskritische Bugs in Debian beseitigt\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[53,69,202,204],"_links":{"self":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9186"}],"collection":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/comments?post=9186"}],"version-history":[{"count":0,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/posts\/9186\/revisions"}],"wp:attachment":[{"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/media?parent=9186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/categories?post=9186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gambaru.de\/blog\/wp-json\/wp\/v2\/tags?post=9186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}