Kapitel 6. Optimale Vorgehensweise beim Paketieren

Inhaltsverzeichnis

6.1. Optimale Vorgehensweisen für debian/rules
6.1.1. Helferskripte
6.1.2. Unterteilen Sie Ihre Patches in mehrere Dateien
6.1.3. Pakete mit mehreren Binärdateien
6.2. Optimale Vorgehensweisen für debian/control
6.2.1. Allgemeine Leitlinien für Paketbeschreibungen
6.2.2. Die Paketübersicht oder Kurzbeschreibung
6.2.3. Die ausführliche Beschreibung
6.2.4. Homepage der Originalautoren
6.2.5. Ort des Versionsverwaltungssystems
6.2.5.1. Vcs-Browser
6.2.5.2. Vcs-*
6.3. Optimale Vorgehensweisen für debian/changelog
6.3.1. Verfassen nützlicher Änderungsprotokolleinträge
6.3.2. Selecting the upload urgency
6.3.3. Häufige Missverständnisse über Änderungsprotokolleinträge
6.3.4. Häufige Fehler in Änderungsprotokolleinträgen
6.3.5. Änderungsprotokolle mit NEWS.Debian-Dateien ergänzen
6.4. Optimale Vorgehensweisen für Betreuerskripte
6.5. Konfigurationsverwaltung mit debconf
6.5.1. Missbrauchen Sie Debconf nicht
6.5.2. Allgemeine Empfehlungen für Autoren und Übersetzer
6.5.2.1. Schreiben Sie korrektes Englisch.
6.5.2.2. Seien sie nett zu Übersetzern
6.5.2.3. Entfernen Sie die fuzzy-Markierungen in vollständigen Übersetzungen, wenn Sie Tipp- und Rechtschreibfehler korrigieren.
6.5.2.4. Treffen Sie keine Annahmen über Schnittstellen.
6.5.2.5. Reden Sie nicht in der ersten Person.
6.5.2.6. Formulieren Sie geschlechtsneutral
6.5.3. Definition von Vorlagenfeldern
6.5.3.1. Type
6.5.3.1.1. string
6.5.3.1.2. password
6.5.3.1.3. boolean
6.5.3.1.4. select
6.5.3.1.5. multiselect
6.5.3.1.6. note
6.5.3.1.7. text
6.5.3.1.8. error
6.5.3.2. Description: Kurze und erweiterte Beschreibung
6.5.3.3. Choices
6.5.3.4. Default
6.5.4. Template fields specific style guide
6.5.4.1. Feld »Type«
6.5.4.2. Feld »Description«
6.5.4.2.1. »string«-/»password«-Vorlagen
6.5.4.2.2. »boolean«-Vorlagen
6.5.4.2.3. »select«/»multiselect«
6.5.4.2.4. »notes«
6.5.4.3. Das Feld »Choices«
6.5.4.4. Das Feld »Default«
6.5.4.5. Das Feld »Default«
6.6. Internationalisierung
6.6.1. Handhabung von Debconf-Übersetzungen
6.6.2. Internationalisierte Dokumentation
6.7. Übliche Paketierungssituationen
6.7.1. Pakete benutzen autoconf/automake
6.7.2. Bibliotheken
6.7.3. Dokumentation
6.7.4. Besondere Pakettypen
6.7.5. Architekturunabhängige Daten
6.7.6. Eine bestimmte Locale wird während des Builds benötigt
6.7.7. Machen Sie Übergangspakete deborphan-konform
6.7.8. Optimale Vorgehensweisen für .orig.tar.{gz,bz2,xz}-Dateien
6.7.8.1. Unberührter Quellcode
6.7.8.2. Neu paketierter Originalquellcode
6.7.8.3. Ändern binärer Dateien
6.7.9. Optimale Vorgehensweisen für Debug-Pakete
6.7.10. Optimale Vorgehensweisen für Meta-Pakete

Debian's quality is largely due to the Debian Policy, which defines explicit baseline requirements that all Debian packages must fulfill. Yet there is also a shared history of experience which goes beyond the Debian Policy, an accumulation of years of experience in packaging. Many very talented people have created great tools, tools which help you, the Debian maintainer, create and maintain excellent packages.

Dieses Kapitel stellt einige optimale Vorgehensweisen für Debian-Entwickler vor. Das alles sind lediglich Empfehlungen und keine Anforderungen oder feste Regeln. Es sind nur subjektive Hinweise, Ratschläge und Fingerzeige, die von Debian-Entwicklern gesammelt wurden. Suchen Sie sich einfach das heraus, was Ihnen am meisten zusagt.

The following recommendations apply to the debian/rules file. Since debian/rules controls the build process and selects the files that go into the package (directly or indirectly), it's usually the file maintainers spend the most time on.

Der Grund für die Benutzung von Helferskripten in debian/rules ist, dass sie den Betreuern eine gemeinsame allgemeine Logik inmitten vieler Pakete ermöglichen. Nehmen Sie zum Beispiel die Frage, wie Menü-Einträge installiert werden: Sie müssen die Datei in /usr/share/menu (oder /usr/lib/menu für ausführbare binäre Menü-Dateien, wenn nötig) ablegen und den Betreuerskripten Befehle hinzufügen, um Menü-Einträge zu registrieren bzw. ihre Registrierung zu entfernen. Dies ist eine sehr häufige Tätigkeit für Pakete. Warum sollte daher jeder Betreuer all dies für sich selbst neu schreiben und dabei möglicherweise Fehler verursachen? Außerdem, gesetzt den Fall, das Menü-Verzeichnis würde sich ändern, müsste dann jedes Paket geändert werden.

Helferskripte kümmern sich um diese Probleme. Angenommen, Sie erfüllen alle Gepflogenheiten, die das Helferskript erwartet, dann kümmert sich das Helferskript um alle Einzelheiten. Änderungen an den Richtlinien können im Helferskript erledigt werden. Dann müssen Pakete nur mit der neuen Version des Helferskripts erstellt und sonst nicht geändert werden.

Anhang A, Überblick über die Werkzeuge der Debian-Betreuer enthält ein paar verschiedene Helferskripte. Das gängigste und beste Helfersystem (nach Meinung von Debian) ist debhelper. Frühere Helfersysteme wie debmake waren monolithisch. Man konnte nicht einen Teil des Helferskripts herausgreifen und verwenden, den man nützlich fand, sondern musste den Helfer für alles benutzen. debhelper besteht jedoch aus mehreren getrennten kleinen dh_*-Programmen. dh_installman installiert und komprimiert zum Beispiel Handbuchseiten, dh_installmenu installiert Menü-Dateien und so weiter. Daher bietet es eine ausreichende Flexibilität, die kleinen Helferskripte dort zu benutzen, wo sie nützlich sind, in Verbindung mit handgemachten Befehlen in debian/rules.

Sie können mit debhelper beginnen, indem Sie debhelper(1) lesen und sich die Beispiele ansehen, die dem Paket beigefügt sind. dh_make aus dem Paket dh-make (siehe Abschnitt A.3.2, „dh-make) kann benutzt werden, um ein einfaches Quellpaket in ein mit debhelper bearbeitetes Paket umzuwandeln. Gleichwohl sollte diese Kurzform Sie jedoch nicht davon überzeugen, dass Sie sich nicht plagen müssen, um die einzelnen dh_*-Helfer zu verstehen. Falls Sie einen Helfer benutzen möchten, müssen Sie sich die Zeit nehmen zu lernen, wie dieser Helfer benutzt wird, um zu verstehen, was er erwartet und wie er sich verhält.

Große, komplexe Pakete könnten mehrere Fehler haben, die Sie bewältigen müssen. Falls Sie mehrere Fehler direkt im Quellcode beheben und nicht sorgfältig vorgehen, kann es schwierig werden, die verschiedenen Patches, die Sie bereitgestellt haben, zu unterscheiden. Es kann ziemlich chaotisch werden, wenn Sie das Paket auf eine neue Originalversion aktualisieren müssen, die einige (aber nicht alle) Korrekturen enthält. Sie können nicht die komplette Zusammenstellung der Diffs nehmen (z.B. aus .diff.gz) und austüfteln, welcher Patch es als Einheit zurücksetzt, da Fehler im Original behoben wurden.

Fortunately, with the source format “3.0 (quilt)” it is now possible to keep patches separate without having to modify debian/rules to set up a patch system. Patches are stored in debian/patches/ and when the source package is unpacked patches listed in debian/patches/series are automatically applied. As the name implies, patches can be managed with quilt.

Wenn Sie den älteren Quellcode »1.0« verwenden, ist es auch möglich, Patches zu trennen, aber es muss ein zugehöriges Patch-System verwandt werden: Die Patch-Dateien werden innerhalb der Debian-Patch-Datei (.diff.gz) mitgeliefert, normalerweise im Verzeichnis debian/. Der einzige Unterschied ist, dass sie nicht unmittelbar von dpkg-source angewandt werden, sondern von der build-Regel der Datei debian/rules durch eine Abhängigkeit in der patch-Regel. Im Gegenzug werden sie von der Regel clean durch eine Abhängigkeit zur Regel unpatch umgekehrt.

quilt is the recommended tool for this. It does all of the above, and also allows one to manage patch series. See the quilt package for more information.

Es gibt noch andere Werkzeuge, um Patches zu verwalten, wie dpatch und das in cdbs eingebaute Patch-System.

Die folgenden Vorgehensweisen sind maßgeblich für die Datei debian/control. Sie ergänzen die Richtlinien für Paketbeschreibungen.

Die Beschreibung des Pakets, wie es durch das entsprechende Feld in der Datei control definiert wird, enthält sowohl die Paketübersicht als auch die ausführliche Beschreibung des Pakets. Abschnitt 6.2.1, „Allgemeine Leitlinien für Paketbeschreibungen“ beschreibt übliche Richtlinien für beide Teile der Paketbeschreibung. Diesen folgend stellt Abschnitt 6.2.2, „Die Paketübersicht oder Kurzbeschreibung“ Richtlinien speziell für die Übersicht bereit und Abschnitt 6.2.3, „Die ausführliche Beschreibung“ enthält spezielle Richtlinien für die Beschreibung.

Die Paketbeschreibung sollte für den erwarteten Durchschnittsanwender geschrieben werden, der Durchschnittsperson, die das Paket benutzt und davon profitiert. Entwicklungspakete sind beispielsweise für Entwickler und können in einer technischen Sprache verfasst werden. Anwendungen für allgemeinere Zwecke, wie Editoren, sollten für Anwender mit weniger technischem Verständnis geschrieben werden.

Die Durchsicht der Paketbeschreibungen mündet in der Schlussfolgerung, dass die meisten Paketbeschreibungen technischer Natur sind, also nicht so geschrieben, dass sie für Anwender ohne technischen Hintergrund einen Sinn ergeben. Sofern Ihr Paket nicht wirklich für technikkundige Anwender gedacht ist, ist dies ein Problem.

Wie können sie für nicht technikkundige Anwender schreiben? Vermeiden Sie Fachsprache. Vermeiden Sie, sich auf Anwendungen und Rahmenwerke zu beziehen, mit denen der Anwender möglicherweise nicht vertraut ist – GNOME oder KDE sind in Ordnung, da Anwender wahrscheinlich mit diesen Begriffen vertraut sind, aber GTK+ vermutlich nicht. Versuchen Sie nicht irgendein Wissen vorauszusetzen, geben Sie eine Einführung.

Seien Sie objektiv. Paketbeschreibungen sind nicht der richtige Ort, um Ihr Paket zu verfechten, egal wie sehr Sie es mögen. Denken Sie daran, dass der Leser nicht die gleichen Dinge wichtig nimmt, wie Sie.

Bezüge zu Namen anderer Softwarepakete, Protokollnamen, Standards oder Spezifikationen sollten, falls sie existiert, in ihrer vorschriftsmäßigen Form verwandt werden. Benutzen Sie zum Beispiel X Window System, X11 oder X, nicht X Windows, X-Windows, or X Window. Benutzen Sie GTK+, nicht GTK oder gtk. Benutzen Sie GNOME, nicht Gnome. Benutzen Sie PostScript, nicht Postscript oder postscript.

Falls Sie Probleme beim Verfassen Ihrer Beschreibung haben, könnten Sie sie an senden und um Rückmeldung ersuchen.

Die Richtlinie legt fest, dass die Übersichtszeile (die Kurzbeschreibung) kurz sein muss, den Paketnamen nicht wiederholen darf, aber trotzdem informativ sein muss.

Die Übersichtsfunktionen sind ein Ausdruck, der das Paket beschreibt, kein kompletter Satz, daher ist Zeichensetzung unangebracht: Es wird weder eine besondere Großschreibung noch ein abschließender Punkt benötigt. Außerdem sollten jegliche bestimmten und unbestimmten Artikel am Anfang weggelassen werden – »a«, »an« oder »the«. Deshalb zum Beispiel:

Package: libeg0
Description: exemplification support library

Technisch gesehen ist dies eine Nominalphrase im Gegensatz zu einer Verbalphrase. Eine gute Entscheidungsregel ist, dass es möglich sein sollte, den Paket-Namen und die Übersicht in diesem Schema zu ersetzen:

Das Paket Name stellt {ein,eine,den,einige} Übersicht zur Verfügung.

Zusammenstellungen verwandter Pakete können ein alternatives Schema benutzen, das die Übersicht in zwei Teile unterteilt, als erstes eine Beschreibung der ganzen Suite und als zweites eine Zusammenfassung der Rolle, die das Paket darin spielt:

Package: eg-tools
Description: simple exemplification system (utilities)
			              
Package: eg-doc
Description: simple exemplification system - documentation

Diese Übersicht folgt einem geänderten Schema. Wo ein Paket »Name« die Übersicht »Suite (Rolle)« oder »Suite - Rolle« hat, sollten die Elemente so ausgedrückt werden, dass sie in dieses Schema passen:

Das Paket Name stellt {ein,eine,die} Rolle für die Suite zur Verfügung.

Die ausführliche Beschreibung ist die wichtigste für den Benutzer verfügbare Information über ein Paket, bevor er es installiert. Sie sollte alle nötigen Informationen bereitstellen, damit der Anwender entscheiden kann, ob er das Paket installieren möchte. Es ist anzunehmen, dass der Benutzer bereits die Paketübersicht gelesen hat.

Die ausführliche Beschreibung sollte aus vollständigen Sätzen bestehen.

Der erste Absatz der ausführlichen Beschreibung sollte die folgenden Fragen beantworten: Was tut das Paket? Bei welchen Aufgaben hilft es dem Anwender? Es ist wichtig, dies auf eine nicht technische Weise zu beschreiben, sogar dann, wenn die Zielgruppe des Pakets notwendigerweise einen technischen Hintergrund hat.

The following paragraphs should answer the following questions: Why do I as a user need this package? What other features does the package have? What outstanding features and deficiencies are there compared to other packages (e.g., if you need X, use Y instead)? Is this package related to other packages in some way that is not handled by the package manager (e.g., is this the client for the foo server)?

Seien Sie vorsichtig, um Rechtschreib- und Grammatikfehler zu vermeiden. Sorgen Sie für eine Rechtschreibprüfung. Sowohl ispell als auch aspell haben spezielle Modi zur Prüfung von debian/control-Dateien:

ispell -d american -g debian/control
aspell -d en -D -c debian/control

Anwender erwarten normalerweise, dass diese Fragen in der Paketbeschreibung beantwortet werden:

  • Was tut das Paket? Falls es eine Erweiterung eines anderen Pakets ist, dann sollte eines Kurzbeschreibung des Pakets, das es erweitert, hier eingefügt werden.

  • Warum sollte ich dieses Paket wollen? Dies bezieht sich auf das vorhergehende, aber nicht das gleiche (dies ist ein Mail-Client. Er ist toll, schnell, hat Schnittstellen zu PGP, LDAP und IMAP, hat die Funktionen X, Y und Z).

  • Falls dieses Paket nicht direkt installiert werden sollte, sondern von einem anderen Paket mitinstalliert wird, sollte dies erwähnt werden.

  • Falls das Paket experimental ist oder es andere Gründe gibt, weshalb es nicht benutzt werden sollte und wenn es andere Pakete gibt, die stattdessen benutzt werden sollen, sollte dies auch hier stehen.

  • How is this package different from the competition? Is it a better implementation? more features? different features? Why should I choose this package?

Es gibt zusätzliche Felder für den Ort des Versionsverwaltungssystems in debian/control.

Value of this field should be a string identifying unequivocally the location of the Version Control System repository used to maintain the given package, if available. * identifies the Version Control System; currently the following systems are supported by the package tracking system: arch, bzr (Bazaar), cvs, darcs, git, hg (Mercurial), mtn (Monotone), svn (Subversion). It is allowed to specify different VCS fields for the same package: they will all be shown in the PTS web interface.

Die Information ist für Benutzer bestimmt, die im gegebenen Versionsverwaltungssystem sachkundig sind und bereit, die aktuelle Version des Pakets aus den VCS-Quellen zu erstellen. Andere Nutzungen dieser Information könnten das automatische Erstellen der letzen VCS-Version des Pakets umfassen. Dazu sollte der vom Feld angegebene Ort versionsunabhängig sein und auf den Hauptzweig (main branch) zeigen (bei Versionsverwaltungssystemen, die dieses Konzept unterstützen). Außerdem sollte der Endanwender auf den Ort, auf den verwiesen wird, zugreifen können. Die Erfüllung dieser Anforderungen könnte einen anonymen Zugriff voraussetzen, statt auf eine Version mit SSH-Zugriff zu verweisen.

Im folgenden Beispiel sehen Sie ein Beispiel von einem Feld eines Subversion-Depots des Pakets vim. Beachten Sie, wie die URL im svn://-Schema aufgebaut ist (im Gegensatz zu svn+ssh://) und wie sie auf den Zweig trunk/ zeigt. Außerdem wird ebenfalls die Benutzung der Felder Vcs-Browser und Homepage, wie oben beschrieben, gezeigt.

  Source: vim
  Section: editors
  Priority: optional
  <snip>
  Vcs-Svn: svn://svn.debian.org/svn/pkg-vim/trunk/packages/vim
  Vcs-Browser: https://svn.debian.org/wsvn/pkg-vim/trunk/packages/vim
  Homepage: http://www.vim.org

Die folgenden Vorgehensweisen ergänzen die Richtlinien für Änderungsprotokolldateien.

Der Änderungsprotokolleintrag einer Paketüberarbeitung (Changelog) dokumentiert Änderungen in nur dieser Überarbeitung. Der Schwerpunkt liegt auf der Beschreibung bedeutender und für den Anwender sichtbarer Änderungen, die seit der letzten Version vorgenommen wurden.

Der Fokus liegt darauf, was geändert wurde – wer, wie und wann ist normalerweise nicht so wichtig. Erinnern Sie gleichwohl höflich an die Leute, die merklich Hilfe beim Erstellen des Pakets geleistet haben (die z.B. Patches gesandt haben).

Es ist nicht nötig, belanglose und offensichtliche Änderungen näher auszuführen. Sie können außerdem mehrere Änderungen in einem Eintrag zusammenfassen. Fassen Sie sich andererseits nicht zu kurz, falls Sie eine größere Änderung vorgenommen haben. Stellen Sie insbesondere klar, falls es Änderungen gibt, die das Verhalten des Programms ändern. Benutzen Sie für weitere Erklärungen die Datei README.Debian.

Benutzen Sie geläufiges Englisch, so dass die Mehrheit der Leser es begreifen kann. Vermeiden Sie Abkürzungen, technische Begriffe und Fachsprache, wenn Sie Änderungen erklären, die Fehlerberichte schließen, insbesondere bei Fehlern, die von Anwendern eingereicht wurden, die Ihnen als technisch unerfahren aufgefallen sind. Seien Sie höflich, fluchen Sie nicht.

Manchmal ist es wünschenswert, den Änderungsprotokolleinträgen die Namen der Dateien voranzustellen, die geändert wurden. Es ist jedoch nicht nötig, explizit jede einzelne geänderte Datei aufzuführen, insbesondere dann nicht, wenn die Änderung klein oder wiederholend war. Sie können Platzhalter verwenden.

Treffen Sie keine Annahmen, wenn Sie sich auf Fehler beziehen. Sagen Sie, welches Problem vorlag, wie es behoben wurde und hängen Sie die Zeichenkette »closes: #nnnnn« an. Weitere Informationen erhalten Sie unter Abschnitt 5.8.4, „Wann Fehler durch neue Uploads geschlossen werden“.

Die Änderungsprotokolleinträge sollten keine allgemeinen Paketierungsthemen dokumentieren (Hey, falls Sie die Foo.conf suchen, die ist in /etc/blah/.), da von Administratoren und Anwendern angenommen wird, dass sie zumindest entfernt damit vertraut sind, wie solche Dinge im Allgemeinen auf Debian-Systemen eingerichtet sind. Erwähnen Sie jedoch, wenn Sie den Ort einer Konfigurationsdatei ändern.

Die einzigen Fehler, die mit einem Änderungsprotokolleintrag geschlossen werden, sollten Fehler sein, die tatsächlich in der gleichen Überarbeitung des Pakets behoben werden. Das Schließen von Fehlern ohne Bezug dazu, ist eine falsche Vorgehensweise. Siehe Abschnitt 5.8.4, „Wann Fehler durch neue Uploads geschlossen werden“.

Die Änderungsprotokolleinträge sollten nicht für zufällige Diskussionen mit Leuten, die Fehler melden (Ich kann keine Schutzverletzungen sehen, wenn ich Foo mit der Option Bar starte. Senden Sie weitere Informationen.), allgemeine Äußerungen über das Leben, das Universum und alles mögliche (Entschuldigung, dass der Upload so lange brauchte, aber ich hatte die Grippe.) oder Hilfeersuchen (Die Fehlerliste für dieses Paket ist riesig, bitte packen Sie mit an) benutzt werden. Solche Dinge werden normalerweise nicht von Ihrer Zielgruppe bemerkt, könnten aber viele Leute stören, die Informationen über tatsächliche Änderungen am Paket lesen möchten. Weitere Informationen über die Benutzung der Fehlerdatenbank finden Sie unter Abschnitt 5.8.2, „Auf Fehler antworten“.

Es ist ein alter Brauch, im ersten regulären Upload des Paketbetreuers das Beheben von Fehlern durch Non-Maintainer-Uploads zu bestätigen. Da Debian nun über eine Versionsverwaltung verfügt, reicht es aus, die NMU-Änderungsprotokolleinträge zu erhalten und diese Tatsache nur in Ihrem eigenen Änderungsprotokolleintrag zu erwähnen.

Die folgenden Beispiele demonstrieren einige häufige Fehler oder Beispiele für schlechten Stil in Änderungsprotokolleinträgen.

  * Fixed all outstanding bugs.

Dies teilt den Lesern offensichtlich nichts Nützliches mit.

  * Applied patch from Jane Random.

Was war das für ein Patch?

  * Late night install target overhaul.

Welche Korrektur wurde ausgeführt? Soll die Erwähnung der späten Nacht daran erinnern, dass man dem Code nicht trauen sollte?

  * Korrigiert vsync FU w/ historischen CRTs.

Zu viele Abkürzungen und es ist nicht klar, wovon der äh ... Mist (Hoppla, ein Schimpfwort) tatsächlich handelt oder wie er korrigiert wurde.

  * This is not a bug, closes: #nnnnnn.

Erst einmal ist es absolut unnötig, das Paket hochzuladen, um diese Information zu übermitteln. Benutzen Sie stattdessen die Fehlerdatenbank. Zweitens fehlt die Erklärung, warum dieser Bericht kein Fehler ist.

  * Has been fixed for ages, but I forgot to close; closes: #54321.

If for some reason you didn't mention the bug number in a previous changelog entry, there's no problem, just close the bug normally in the BTS. There's no need to touch the changelog file, presuming the description of the fix is already in (this applies to the fixes by the upstream authors/maintainers as well; you don't have to track bugs that they fixed ages ago in your changelog).

  * Closes: #12345, #12346, #15432

Wo ist die Beschreibung? Falls Ihnen keine aussagekräftige Nachricht einfällt, beginnen Sie damit, die Titel der verschiedenen Fehler einzufügen.

Wichtige Nachrichten über Änderungen in einem Paket können auch in die NEWS.Debian-Dateien geschrieben werden. Die Nachrichten werden durch Werkzeuge wie apt-listchanges vor dem ganzen Rest des Änderungsprotokolls angezeigt. Dies ist das bevorzugte Mittel, dem Anwender bedeutende Änderungen in einem Paket mitzuteilen. Es ist besser, als debconf-Notizen zu benutzen, da es weniger stört und der Anwender nach der Installation zurückgehen und in der NEWS.Debian-Datei nachschlagen kann. Es ist auch besser, als die Hauptänderungen in README.Debian aufzuführen, da der Anwender solche Notizen leicht übersehen kann.

Das Dateiformat entspricht dem des Änderungsprotokolls, die Sternchen werden allerdings weggelassen und jedes Nachrichtenelement wird, wenn nötig, mit einem vollständigen Satz beschrieben, statt der kurz gefassten Zusammenfassungen, die in ein Änderungsprotokoll einfließen. Sie sind gut beraten, Ihre Datei durch dpkg-parsechangelog laufen zu lassen, um die Formatierung zu prüfen, da sie nicht automatisch während des Builds getestet wird, so wie dies beim Änderungsprotokoll geschieht. Hier nun ein Beispiel einer echten NEWS.Debian-Datei:

cron (3.0pl1-74) unstable; urgency=low

    The checksecurity script is no longer included with the cron package:
    it now has its own package, checksecurity. If you liked the
    functionality provided with that script, please install the new
    package.

 -- Steve Greenland <stevegr@debian.org>  Sat,  6 Sep 2003 17:15:03 -0500

Die Datei NEWS.Debian wird als /usr/share/doc/Paket/NEWS.Debian.gz installiert. Sie ist komprimiert und hat immer diesen Namen, auch in nativen Debian-Paketen. Falls Sie debhelper benutzen, wird dh_installchangelogs die debian/NEWS-Dateien für Sie installieren.

Anders als Änderungsprotokolldateien müssen Sie die debian/NEWS-Dateien nicht bei jeder Veröffentlichung aktualisieren. Aktualisieren Sie sie nur, wenn Sie etwas besonders berichtenswertes haben, worüber der Anwender Bescheid wissen sollte. Falls Sie überhaupt keine Nachrichten haben, ist es nicht nötig, Ihrem Paket eine debian/NEWS-Datei mitzugeben. Keine Nachricht ist eine gute Nachricht!

Maintainer scripts include the files debian/postinst, debian/preinst, debian/prerm and debian/postrm. These scripts take care of any package installation or deinstallation setup that isn't handled merely by the creation or removal of files and directories. The following instructions supplement the Debian Policy.

Betreuerskripte müssen idempotent sein. Das bedeutet, dass Sie sicherstellen müssen, dass nichts Schlimmes passiert, wenn das Skript zweimal aufgerufen wird, während es normalerweise nur einmal aufgerufen würde.

Standardein- und -ausgabe könnten zu Protokollierungszwecken umgeleitet werden (z.B. in Pipes), verlassen Sie sich daher nicht darauf, dass sie ein Terminal sind.

Jegliche Bedienerführung oder interaktive Konfiguration sollte so gering wie möglich gehalten werden. Wenn es nötig ist, sollten Sie das Paket debconf für die Schnittstelle benutzen. Denken Sie daran, dass diese Bedienerführung nur in der configure-Stufe des postinst-Skripts stattfinden kann.

Halten Sie die Betreuerskripte so einfach wie möglich. Es wird empfohlen, nur reine POSIX-Shell-Skripte zu benutzen. Falls Sie irgendwelche Bash-Funktionen benötigen, vergessen Sie nicht, dass das Betreuerskript eine Shebang-Zeile haben muss. POSIX-Shell oder Bash werden für Perl bevorzugt, da sie debhelper ermöglichen, den Skripten einfach Teile hinzuzufügen.

Falls Sie Ihre Betreuerskripte ändern, stellen Sie sicher, dass Sie das Entfernen des Pakets, die mehrmalige Installation und das vollständige Entfernen testen. Vergewissern Sie sich, dass nach dem vollständigen Entfernen des Pakets alles komplett gelöscht ist, sprich es muss jede Datei entfernt sein, die direkt oder indirekt in irgendeinem Betreuerskript erstellt wurde.

Falls Sie prüfen möchten, ob ein Befehl existiert, sollten Sie etwas benutzen wie:

if which install-docs > /dev/null; then ...

Sie können diese Funktion benutzen, um $PATH nach einem Befehlsnamen zu durchsuchen, der als Argument übergegeben wird. Sie gibt »true« (null) zurück, falls der Befehl gefunden wurde und »false«, falls nicht. Dies ist wirklich die am ehesten portierbare Möglichkeit, da command -v, type und which nicht POSIX-konform sind.

Obwohl which eine akzeptable Alternative ist, da es aus dem benötigten Paket debianutils stammt, liegt es nicht auf der Wurzelpartition. Was bedeutet, es liegt eher in /usr/bin als in /bin, so dass es nicht in Skripten benutzt werden kann, die vor dem Einhängen von /usr ausgeführt werden. Dieses Problem werden allerdings die meisten Skripte nicht haben.

Debconf is a configuration management system that can be used by all the various packaging scripts (postinst mainly) to request feedback from the user concerning how to configure the package. Direct user interactions must now be avoided in favor of debconf interaction. This will enable non-interactive installations in the future.

Debconf ist ein großartiges Werkzeug, aber es wird oft mangelhaft benutzt. Viele alltägliche Fehler sind auf der Handbuchseite debconf-devel(7) aufgeführt. Sie sollten sie lesen, falls Sie sich entscheiden, Debconf zu benutzen. Außerdem werden hier ein paar optimale Vorgehensweisen vorgestellt.

Diese Leitlinien enthalten einige Schreibstil- und Typografie-Empfehlungen, allgemeine Betrachtungen über die Benutzung von Debconf sowie spezifischere Empfehlungen für einige Teile der Distribution (das Installationssystem besispielsweise).

Die meisten Debian-Paketbetreuer haben nicht Englisch als Muttersprache. Daher ist es für sie nicht einfach, korrekt formulierte Vorlagen zu verfassen.

Bitte benutzen (und missbrauchen) Sie die Mailingliste . Lassen Sie Ihre Vorlagen dort korrekturlesen.

Schlecht geschriebene Vorlagen werfen ein armseliges Bild auf Ihr Paket, Ihre Arbeit ... oder sogar auf Debian selbst.

Vermeiden Sie soweit möglich technische Fachsprache. Auch wenn sich einige Begriffe für Sie vertraut anhören, könnten sie für andere unverständlich sein. Falls sie sich nicht vermeiden lassen, versuchen Sie sie zu erklären (benutzen Sie die erweiterte Beschreibung). Versuchen Sie dabei, zwischen Aussagekraft und Einfachheit abzuwägen.

Debconf templates may be translated. Debconf, along with its sister package po-debconf, offers a simple framework for getting templates translated by translation teams or even individuals.

Bitte benutzen Sie Gettext-basierte Vorlagen. Installieren Sie po-debconf auf Ihrem Entwicklungssystem und lesen Sie dessen Dokumentation (man po-debconf ist ein guter Anfang).

Avoid changing templates too often. Changing template text induces more work for translators, which will get their translation fuzzied. A fuzzy translation is a string for which the original changed since it was translated, therefore requiring some update by a translator to be usable. When changes are small enough, the original translation is kept in PO files but marked as fuzzy.

Falls Sie planen, Änderungen an Ihren Originalvorlagen vorzunehmen, benutzen Sie bitte das Benachrichtigungssystem namens podebconf-report-po, das vom Paket po-debconf bereitgestellt wird, um die Übersetzer zu kontaktieren. Die meisten aktiven Übersetzer sind sehr zugänglich, und deren Arbeit zusammen mit Ihren geänderten Vorlagen einzubeziehen, wird Sie vor zusätzlichen Uploads bewahren. Falls Sie Gettext-basierte Vorlagen verwenden, werden die Namen und E-Mail-Adressen der Übersetzer in den Kopfzeilen der PO-Dateien erwähnt und von podebconf-report-po benutzt.

Ein empfohlene Art, das Hilfswerkzeug zu benutzen ist:

cd debian/po && podebconf-report-po --call --languageteam --withtranslators --deadline="+10 days"

This command will first synchronize the PO and POT files in debian/po with the template files listed in debian/po/POTFILES.in. Then, it will send a call for new translations, in the mailing list. Finally, it will also send a call for translation updates to the language team (mentioned in the Language-Team field of each PO file) as well as the last translator (mentioned in Last-translator).

Es wird immer gewürdigt, wenn Sie den Übersetzern einen Abgabetermin nennen, so dass diese ihre Arbeit organisieren können. Bitte denken Sie daran, dass einige Übersetzer-Teams einen formalisierten Übersetzungs-/Korrekturprozess haben und eine Zeitspanne, die kürzer als zehn Tage ist, als unangemessen angesehen wird. Eine kürzere Frist übt zuviel Druck auf die Übersetzer-Teams aus und sollte nur für sehr kleine Änderungen gewählt werden.

Im Zweifelsfall können Sie auch das Übersetzer-Team für eine bestimmte Sprache (debian-l10n-xxxxx@lists.debian.org) oder die Mailingliste kontaktieren.

Wenn der Text einer Debconf-Vorlage korrigiert wurde und Sie sicher sind, dass die Änderung keine Übersetzungen beeinflusst, seien Sie so nett zu den Übersetzern, die fuzzy-Markierungen aus deren Übersetzungen zu entfernen.

Falls Sie dies nicht tun, wird die ganze Vorlage nicht übersetzt sein, bis Ihnen ein Übersetzer eine Aktualisierung zusendet.

Um die fuzzy-Markierungen aus Übersetzungen zu entfernen, können Sie msguntypot benutzen (Teil des Pakets po4a).

  1. Erzeugen Sie die POT- und PO-Dateien neu.

    debconf-updatepo
  2. Erstellen Sie eine Kopie der POT-Datei.

    cp templates.pot templates.pot.orig
  3. Erstellen Sie eine Kopie aller PO-Dateien.

    mkdir po_fridge; cp *.po po_fridge
  4. Ändern Sie die Debconf-Vorlagedateien, um den Tippfehler zu korrigieren.

  5. Erzeugen Sie die POT- und PO-Dateien (wieder) neu.

    debconf-updatepo

    An dieser Stelle markiert die Korrektur des Tippfehlers alle Übersetzungen mit »fuzzy« und diese unglückliche Änderung ist die einzige zwischen den PO-Dateien Ihres Hauptverzeichnisses und denen aus fridge. Hier nun eine Erklärung, wie das gelöst wird.

  6. Verwerfen Sie die mit »fuzzy« markierte Übersetzung und stellen Sie die aus fridge wieder her.

    cp po_fridge/*.po .
  7. Führen Sie manuell die PO-Dateien mit der neuen POT-Datei zusammen, unter Berücksichtigung/Vermeidung des nutzlosen »fuzzy«.

    msguntypot -o templates.pot.orig -n templates.pot *.po
  8. Räumen Sie auf.

    rm -rf templates.pot.orig po_fridge

As a way of showing our commitment to our diversity statement, please use gender-neutral constructions in your writing. This means avoiding pronouns like he/she when referring to a role (like "maintainer") whose gender is unknown. Instead, you should use the plural form (singular they).

Dieser Teil stellt einige Informationen bereit, die überwiegend von der Handbuchseite debconf-devel(7) übernommen wurden.

Vorlagenbeschreibungen haben zwei Teile: kurz und erweitert. Die Kurzbeschreibung steht in der Zeile »Description:« der Vorlage.

Die Kurzbeschreibung sollte knapp gehalten werden (ungefähr 50 Zeichen), so dass sie in den meisten Debconf-Schnittstellen untergebracht werden kann. Es hilft obendrein Übersetzern, wenn sie kurz gehalten wird, da Übersetzungen normalerweise dazu neigen, länger als das Original zu sein.

The short description should be able to stand on its own. Some interfaces do not show the long description by default, or only if the user explicitly asks for it or even do not show it at all. Avoid things like: "What do you want to do?"

Die Kurzbeschreibung muss nicht notwendigerweise aus einem vollständigen Satz bestehen. Dies ist Teil der Forderung nach kurzen, brauchbaren Empfehlungen.

Die erweiterte Beschreibung sollte die Kurzbeschreibung nicht Wort für Wort wiederholen. Falls Ihnen keine ausführliche Beschreibung einfällt, denken Sie zuerst etwas darüber nach. Schreiben Sie an debian-devel. Bitten Sie um Hilfe. Nehmen Sie Schreibunterricht! Diese erweiterte Beschreibung ist wichtig. Falls Sie nach allem noch immer nicht damit zurecht kommen, lassen Sie sie leer.

Die erweiterte Beschreibung sollte in ganzen Sätzen verfasst sein. Absätze sollten kurz gehalten werden, um die Leserlichkeit zu verbessern. Vermischen Sie nicht zwei Ideen in einem Absatz, sondern benutzen Sie lieber einen anderen Absatz.

Seien Sie nicht zu gesprächig. Benutzer tendieren dazu, zu ausführliche Bildschirminhalte zu ignorieren. 20 Zeilen sind erfahrungsgemäß die Grenze, die Sie nicht überschreiten sollten, da dies bedeutet, dass Anwender klassische Dialogfenster nicht scrollen müssen und viele Leute tun das einfach nicht.

Die erweiterte Beschreibung sollte keine Frage enthalten.

Um etwas über besondere Regeln zu erfahren, die vom Vorlagentyp (string, boolean etc.) abhängen, lesen Sie das Folgende.

Es folgen spezifische Anweisungen für ordnungsgemäßes Verfassen der Beschreibung (kurz und erweitert), abhängig vom Vorlagentyp.

If the default value for a select template is likely to vary depending on the user language (for instance, if the choice is a language choice), please use the _Default trick.

This special field allows translators to put the most appropriate choice according to their own language. It will become the default choice when their language is used while your own mentioned Default Choice will be used when using English.

Ein Beispiel aus den Vorlagen des Pakets Geneweb:

Template: geneweb/lang
Type: select
__Choices: Afrikaans (af), Bulgarian (bg), Catalan (ca), Chinese (zh), Czech (cs), Danish (da), Dutch (nl), English (en), Esperanto (eo), Estonian (et), Finnish (fi), French (fr), German (de), Hebrew (he), Icelandic (is), Italian (it), Latvian (lv), Norwegian (no), Polish (pl), Portuguese (pt), Romanian (ro), Russian (ru), Spanish (es), Swedish (sv)
# This is the default choice. Translators may put their own language here
# instead of the default.
# WARNING : you MUST use the ENGLISH NAME of your language
# For instance, the French translator will need to put French (fr) here.
_Default: English[ translators, please see comment in PO files]
_Description: Geneweb default language:

Note the use of brackets, which allow internal comments in debconf fields. Also note the use of comments, which will show up in files the translators will work with.

Die Kommentare werden benötigt, da der _Default-Trick etwas verwirrend ist: Die Übersetzer können ihre eigene Auswahl nehmen.

Do NOT use an empty default field. If you don't want to use default values, do not use Default at all.

If you use po-debconf (and you should; see Abschnitt 6.5.2.2, „Seien sie nett zu Übersetzern“), consider making this field translatable, if you think it may be translated.

Falls der Vorgabewert von Sprache oder Land abhängen könnte (zum Beispiel, weil es sich bei der Auswahl um eine Sprachauswahl handelt), ziehen Sie in Betracht, den Typ _Default zu benutzen, der in po-debconf(7) dokumentiert ist.

This section contains global information for developers to make translators' lives easier. More information for translators and developers interested in internationalization are available in the Internationalisation and localisation in Debian documentation.

Internationalisierte Dokumentation für Anwender ist wichtig, bereitet aber viel Mühe. Es gibt keine Möglichkeit, all diese Arbeit zu vermeiden, aber Sie können den Übersetzern einige Dinge erleichtern.

Falls Sie Dokumentationen in irgendwelchem Umfang betreuen, ist es für Übersetzer einfacher, wenn Sie Zugriff auf das Versionsverwaltungssystem haben. Dadurch können Übersetzer die Unterschiede zwischen zwei Versionen der Dokumentation anschauen, so dass sie beispielsweise sehen können, was neu übersetzt werden muss. Es wird empfohlen, dass die übersetzte Dokumentation eine Notiz darüber bereithält, auf welcher Revision des Quellcodes die Übersetzung basiert. Ein interessantes System wird von doc-check aus dem debian-installer-Paket bereitgestellt, das eine Übersicht über den Übersetzungsstatus für eine angegebene Sprache anzeigt. Dazu werden strukturierte Kommentare für die aktuelle Revision der zu übersetzenden Datei und für eine übersetzte Datei die Revision des Originals auf der die Übersetzung basiert, angezeigt. Möglicherweise möchten Sie dies anpassen und in Ihrem VCS-Bereich bereitstellen.

If you maintain XML or SGML documentation, we suggest that you isolate any language-independent information and define those as entities in a separate file that is included by all the different translations. This makes it much easier, for instance, to keep URLs up to date across multiple files.

Some tools (e.g. po4a, poxml, or the translate-toolkit) are specialized in extracting the translatable material from different formats. They produce PO files, a format quite common to translators, which permits seeing what needs to be re-translated when the translated document is updated.

Achten Sie darauf, dass Sie den Richtlinien für Dokumentation folgen.

Falls Ihr Paket Dokumentation enthält, die aus XML oder SGML erstellt wurde, wird empfohlen, nicht die XML- oder SGML-Quellen im (in den) Binärpaket(en) mitzuliefern. Falls Anwender den Quellcode der Dokumentation möchten, sollten sie das Quellpaket herunterladen.

Die Richtlinie gibt an, dass die Dokumentation im HTML-Format weitergegeben werden sollte. Außerdem wird empfohlen, die Dokumentation im PDF-Format und als Klartext mitzuliefern, falls geeignet und falls die Ausgabe in einer vernünftigen Qualität möglich ist. Es ist allgemein jedoch nicht angemessen, Klartextversionen von Dokumentationen mitzuliefern, deren Quellformat HTML ist.

Bedeutende mitgelieferte Handbücher sollten sich selbst bei der Installation mit doc-base registrieren. Weitere Einzelheiten erhalten Sie in der Dokumentation des Pakets doc-base.

Die Debian-Richtlinien (Abschnitt 12.1) schreiben vor, dass Handbuchseiten jedem Programm, jedem Hilfswerkzeug und jeder Funktion beiliegen sollten und für andere Objekte, wie Konfigurationsdateien, wird dies nahegelegt. Falls die von Ihnen paketierte Arbeit nicht über eine solche Handbuchseite verfügt, dann überlegen Sie sich, eine zu schreiben, die Ihrem Paket beigefügt und an die Originalautoren gesandt wird.

The manpages do not need to be written directly in the troff format. Popular source formats are DocBook, POD and reST, which can be converted using xsltproc, pod2man and rst2man respectively. To a lesser extent, the help2man program can also be used to write a stub.

Mehrere besondere Typen von Paketen haben spezielle Unter-Richtlinien und zugehörige Paketierungsregeln und -Vorgehensweisen:

  • Perl related packages have a Perl policy; some examples of packages following that policy are libdbd-pg-perl (binary perl module) or libmldbm-perl (arch independent perl module).

  • Python related packages have their Python policy; see /usr/share/doc/python/python-policy.txt.gz in the python package.

  • Emacs zugehörige Pakete haben die Emacs-Richtlinie.

  • Java zugehörige Pakete haben ihre Java-Richtlinie.

  • OCaml related packages have their own policy, found in /usr/share/doc/ocaml/ocaml_packaging_policy.gz from the ocaml package. A good example is the camlzip source package.

  • Pakete, die XML- oder SGML-DTDs bereitstellen, sollten konform zu den Empfehlungen im Paket sgml-base-doc sein.

  • Lisp-Pakete sollten sich selbst mit common-lisp-controller registrieren. Siehe dazu /usr/share/doc/common-lisp-controller/README.packaging.

Es gibt zwei Arten von Original-Quell-Tarballs: unberührten Quellcode und neu paketierten Quellcode der Originalautoren.

Das charakteristische Merkmal eines unberührten Tarballs ist, dass die .orig.tar.{gz,bz2,xz}-Datei Byte für Byte identisch mit einem offiziell weitergegebenen Tarball des Originalautors ist.[5] Dies ermöglicht die Benutzung von Prüfsummen, um auf einfache Weise alle Änderungen zwischen Debians Version und der der Originalautoren zu prüfen, die in der Diff-Datei in Debian enthalten sind. Falls außerdem der Originalquellcode riesig ist, können Originalautoren und andere, die bereits den Original-Tarball haben, Download-Zeit sparen, falls sie Ihre Paketierung im Detail inspizieren möchten.

There are no universally accepted guidelines that upstream authors follow regarding the directory structure inside their tarball, but dpkg-source is nevertheless able to deal with most upstream tarballs as pristine source. Its strategy is equivalent to the following:

  1. Es entpackt den Tarball in eine leeres temporäres Verzeichnis mittels

    zcat path/to/Paketname_Originalversion.orig.tar.gz | tar xf -
    
  2. Falls das temporäre Verzeichnis danach nur ein Verzeichnis und keine anderen Dateien enthält, benennt dpkg-source dieses Verzeichnis in Paketname_Originalversion(.orig) um. Der Name des Verzeichnisses auf der obersten Ebene im Tarball ist ohne Bedeutung und geht verloren.

  3. Andernfalls muss der Tarball der Originalautoren ohne ein sonst übliches Verzeichnis der obersten Ebene gepackt worden sein (Schande über den Originalautor!). In diesem Fall benennt dpkg-source das temporäre Verzeichnis selbst in Paketname_Originalversion(.orig) um.

Sie sollten Pakete, wenn möglich, mit einem unberührten Quell-Tarball hochladen, aber es gibt viele Gründe, warum das manchmal nicht möglich ist. Dies ist der Fall, wenn die Originalautoren den Quellcode gar nicht als Gzip-gepackte Tar-Datei weitergeben oder falls der Tarball der Originalautoren nicht-DFSG-freies Material enthält, das Sie vor den Hochladen entfernen müssen.

In diesen Fällen muss der Entwickler selbst eine geeignete .orig.tar.{gz,bz2,xz}-Datei bauen. Solch einen Tarball nennen wir neu paketierten Originalquellcode. Beachten Sie, dass sich neu paketierter Originalquellcode von einem nativen Debian-Paket unterscheidet. Eine neu paketierte Quelle kommt mit Debian-spezifischen Änderungen in einem separaten .diff.gz oder .debian.tar.{gz,bz2,xz} daher und hat eine Versionsnummer, die sich aus der Originalversion und der Debian-version zusammensetzt.

Es könnte Gründe geben, aus denen es wünschenswert wäre, den Quellcode neu zu paketieren, obwohl die Originalautoren ein .tar.{gz,bz2,xz} verteilen, dass im Prinzip in seiner unberührten Form benutzt werden könnte. Der naheliegendste Grund ist, wenn signifikante Platzersparnis durch Neukomprimierung des Tar-Archivs oder Entfernen von wirklich nutzlosem Müll aus dem Qriginalarchiv erzielt werden kann. Handeln Sie hier nach eigenem Ermessen, aber seien Sie darauf vorbereitet, Ihre Entscheidung zu verteidigen, falls Sie einen Quellcode neu paketieren, der unberührt sein könnte.

Eine neu paketierte .orig.tar.{gz,bz2,xz}

  1. sollte im resultierenden Quellpaket dokumentiert sein. Detaillierte Informationen, wie der neu paketierte Quellcode gewonnen wurde und wie dies reproduziert werden kann, sollten in debian/copyright bereitgestellt werden. Es ist außerdem eine gute Idee, ein get-orig-source-Target in Ihrer debian/rules-Datei bereitzustellen, die den Prozess wiederholt, wie im Policy-Handbuch beschrieben unter Main building script: debian/rules.

  2. sollte keine Datei enthalten, die nicht von dem/den Originalautor(en) stammt oder deren Inhalt von Ihnen geändert wurde.[6]

  3. sollte außer, wenn es aus rechtlichen Gründen unmöglich ist, die ganze Erstellungs- und Portierungsinfrastruktur aufbewahren, die vom Originalautor bereitgestellt wurde. Es ist zum Beispiel kein ausreichender Grund für das Weglassen einer Datei, wenn sie nur für die Erstellung unter MS-DOS benutzt wird. Gleichermaßen sollte ein Makefile, das vom Originalautor bereitgestellt wurde, nicht einmal dann weggelassen werden, wenn das erste, was Ihre debian/rules tut, das Überschreiben durch Ausführen eines Konfigurationsskripts ist.

    (Begründung: Es ist üblich für Debian-Anwender, die Software für nicht-Debian-Plattformen erstellen möchten, den Quellcode von einem Debian-Spiegel abzurufen, anstatt den Speicherort der ordnungsgemäßen Originaldistribution zu suchen).

  4. sollte als Namen des Verzeichnisses auf der obersten Ebene des Tarballs Paketname-Originalversion.orig benutzen. Dies ermöglicht die Unterscheidung von unberührten und neu paketierten Tarballs.

  5. sollte mit Gzip oder Bzip mit der maximalen Komprimierung gepackt werden.

Ein Debug-Paket ist ein Paket, dessen Name mit -dbg endet. Es enthält zusätzliche Informationen, die gdb benutzen kann. Da Debian-Programme standardmäßig unverhüllt sind, sind Debugging-Informationen, einschließlich Namen und Zeilennummern andernfalls nicht verfügbar, wenn gdb auf Debian-Programmen ausgeführt wird. Debug-Pakete ermöglichen Anwendern, die diese zusätzlichen Debugging-Informationen benötigen, sie zu installieren, ohne das normale System mit diesen Informationen aufzublähen.

It is up to a package's maintainer whether to create a debug package or not. Maintainers are encouraged to create debug packages for library packages, since this can aid in debugging many programs linked to a library. In general, debug packages do not need to be added for all programs; doing so would bloat the archive. But if a maintainer finds that users often need a debugging version of a program, it can be worthwhile to make a debug package for it. Programs that are core infrastructure, such as Apache and the X server are also good candidates for debug packages.

Einige Debug-Pakete könnten ein ganz spezielles Debugging-Build einer Bibliothek oder eines anderen Programms haben, aber die meisten können Speicher und Build-Zeit sparen, indem sie stattdessen separate Debugging-Symbole enthalten, die gdb spontan finden und laden kann, wenn in einem Programm oder einer Bibliothek nach Fehlern gesucht wird. Die Konvention in Debian besagt, dass diese Symbole in /usr/lib/debug/Pfad aufbewahrt werden, wobei Pfad der Pfad zum ausführbaren Programm oder der Bibliothek ist. Debugging-Symbole für /usr/bin/foo wandern beispielsweise nach /usr/lib/debug/usr/bin/foo und Debugging-Symbole für /usr/lib/libfoo.so.1 nach /usr/lib/debug/usr/lib/libfoo.so.1.

Die Debugging-Symbole können mit objcopy --only-keep-debug aus einer Objektdatei extrahiert werden. Dann kann die Objektdatei enthüllt und objcopy --add-gnu-debuglink benutzt werden, um den Pfad zur Debugging-Symboldatei anzugeben. objcopy(1) erklärt im Detail, wie dies funktioniert.

Der Befehl dh_strip in debhelper unterstützt das Erstellen von Debug-Paketen und kann sich um die Benutzung von objcopy kümmern, um die Debugging-Symbole für Sie herauszusuchen. Falls Ihr Paket debhelper benutzt, müssen Sie nur dh_strip --dbg-package=libfoo-dbg aufrufen und einen Eintrag in debian/control für das Debug-Paket hinzufügen.

Beachten Sie, dass Debug-Pakete von dem Paket abhängen sollten, für das sie Debugging-Symbole bereitstellen und diese Abhängigkeit sollte mit einer Version versehen werden. Zum Beispiel:

Depends: libfoo (= ${binary:Version})


[5] We cannot prevent upstream authors from changing the tarball they distribute without also incrementing the version number, so there can be no guarantee that a pristine tarball is identical to what upstream currently distributing at any point in time. All that can be expected is that it is identical to something that upstream once did distribute. If a difference arises later (say, if upstream notices that they weren't using maximal compression in their original distribution and then re-gzip it), that's just too bad. Since there is no good way to upload a new .orig.tar.{gz,bz2,xz} for the same version, there is not even any point in treating this situation as a bug.

[6] As a special exception, if the omission of non-free files would lead to the source failing to build without assistance from the Debian diff, it might be appropriate to instead edit the files, omitting only the non-free parts of them, and/or explain the situation in a README.source file in the root of the source tree. But in that case please also urge the upstream author to make the non-free components easier to separate from the rest of the source.