Debuginfo-Pakete

Diese Seite enthält Informationen zu Debuginfo-Paketen und häufigen Fallstricken bei deren Verwendung für Paketierer. Informationen zur Verwendung und eine Erklärung, warum Debuginfo-Pakete wichtig sind, finden Sie unter StackTraces.

Überprüfung des Nutzwerts Ihres Debuginfo-Pakets

Ein nützliches Debuginfo-Paket enthält die aus ELF-Binärdateien extrahierten Symbole (*.debug in /usr/lib/debug) sowie den zugehörigen Quellcode (in /usr/src/debug). Diese Pakete werden vom Skript /usr/lib/rpm/find-debuginfo.sh erzeugt. Lesen Sie es, um ein grundlegendes Verständnis der Erzeugung zu erhalten. Falls Ihr Debuginfo-Paket keine Dateien enthält, die Quelldateien fehlen oder die Größe der darin enthaltenen *.debug-Dateien unerwartet gering ist (normalerweise sind *.debug größer als die entsprechende Binärdatei, aus der sie extrahiert wurden), liegt wahrscheinlich ein Fehler in Ihrem Paket vor. Dies ist jedoch nicht immer der Fall. Lesen Sie weiter.

Nutzlose oder unvollständige Debuginfo-Pakete aufgrund von Paketierungsproblemen

Unbrauchbare oder unvollständige Debuginfo-Pakete sind häufig die Folge von Paketierungsfehlern. Typische Fehler, die sich oft darin äußern, dass die Debuginfo-Pakete keine Dateien enthalten:

  • Die Spec-Datei oder die Bauroutinen des Pakets entfernen Symbole explizit aus den Binärdateien. Suchen Sie nach Aufrufen von strip, install -s, ld -s oder gcc -s usw. und entfernen Sie diese (oder die -s-Flags). Die Vorgehensweise ist unterschiedlich; Beispiele hierfür sind Patches, die Verwendung von %configure oder eines make-Ziels, das das Entfernen von Symbolen verhindert, und/oder das Überschreiben eines Strip-Befehls, beispielsweise make install STRIP=/bin/true.

  • Das Paket ist nicht als noarch gekennzeichnet, enthält aber keine architekturabhängigen Elemente (native Binärdateien, architekturabhängige Pfade usw.). Echte noarch-Pakete enthalten nichts, was rpmbuild entfernen könnte. Daher ist zu erwarten, dass sie leer sind, wenn BuildArch: noarch fehlt. In diesem Fall sollte das Paket als noarch gekennzeichnet werden.

  • find-debuginfo.sh verarbeitet nur ausführbare Dateien; praktisch kann davon ausgegangen werden, dass dies im Hintergrund nach dem Abschnitt %install geschieht. Stellen Sie sicher, dass alle ELF-Binärdateien (ausführbare Dateien, gemeinsam genutzte Bibliotheken, DSOs) am Ende von %install ausführbar sind.

  • find-debuginfo.sh verarbeitet keine Setuid- oder Setgid-Binärdateien. Es gibt dazu einen Bugreport für rpmbuild. Bis das Problem in den Zieldistributionen Ihres Pakets behoben ist, stellen Sie bitte sicher, dass alle Ihre Binärdateien am Ende von %install keine Setuid-/Setgid-Bits enthalten und stellen Sie diese im Abschnitt %files mit %attr(...) /Pfad/zur/Datei wieder her.

Fehler, die sich als unerwartet kleine *.debug-Dateien im debuginfo-Paket und/oder fehlende Quelldateien äußern:

  • Das Paket wurde ohne die Übergabe von -g an gcc` oder `+g+` erstellt. Ohne `-g+ werden keine oder unzureichende Informationen für Debuginfo-Pakete generiert. Stellen Sie daher sicher, dass diese Option verwendet wird.

  • Beachten Sie, dass die Standard-Flags CFLAGS und CXXFLAGS der Distribution bereits -g enthalten. Wenn diese Flags berücksichtigt werden, sollte die Option bereits aktiv sein. Falls nicht, sind suboptimale Debuginfo-Pakete nicht das einzige Problem; das Paket wurde wahrscheinlich auch ohne die Sicherheitsoptionen aktueller Compilerversionen kompiliert. Stellen Sie sicher, dass $RPM_OPT_FLAGS berücksichtigt und verwendet wird.

  • Der Befehl strip -g wurde auf die Binärdateien angewendet; mögliche Abhilfemaßnahmen finden Sie oben.

Nutzlose oder unvollständige Debuginfo-Pakete aus anderen Gründen

Leere Debuginfo-Pakete können auch dann entstehen, wenn keine offensichtlichen Paketierungsfehler vorliegen. Manchmal liegt dies an Einschränkungen von find-debuginfo.sh, manchmal nicht. Einige typische Fälle:

  • Pakete, deren einziger architekturabhängiger Binärteil eine statische Bibliothek oder eine Vielzahl davon ist

  • R- und Mono-Pakete TODO: Bitte überprüfen Sie dies, falls Sie mit R und/oder Mono vertraut sind.

Wenn Sie die Generierung des nutzlosen Debuginfo-Pakets deaktivieren möchten, während Sie auf Verbesserungen an find-debuginfo.sh warten, oder wenn es unwahrscheinlich ist, dass es so verbessert werden kann, dass es gute Debuginfos für Ihr Paket erzeugt (z. B. keine architekturabhängigen Dateien, aber das Paket ist aufgrund der verwendeten Installationspfade nicht „noarch“), verwenden Sie %global debug_package %{nil} in der Spec-Datei und fügen Sie unbedingt einen Kommentar daneben hinzu, der erklärt, warum dies getan wurde.

Fehlende Debuginfo-Pakete

Es ist normal, dass bei der Erstellung von „noarch“-Paketen kein Debuginfo-Paket erzeugt wird. Fehlt es jedoch auch in anderen Fällen (in denen es nicht explizit deaktiviert wurde), liegt ein Fehler vor. Ein Beispiel hierfür ist ein fehlender %build-Abschnitt, der bei einigen rpmbuild-Versionen auftritt.

Markieren Sie keine Debuginfo-Pakete als veraltet

Falls ein Teilpaket entfernt oder von architekturabhängig auf „noarch“ geändert wird, kann das zugehörige -debuginfo-Paket zurückbleiben. Dies kann problematisch sein, wenn die Paketquelle fedora-debuginfo während einer Systemaktualisierung aktiviert ist. Da die debuginfo-Pakete jedoch keine Abhängigkeiten haben, können sie parallel installiert werden und sind für die Core-Dump-Analyse nützlich. Sie sollten daher nirgends als veraltet markiert werden.

Ressourcen