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 -sodergcc -susw. und entfernen Sie diese (oder die-s-Flags). Die Vorgehensweise ist unterschiedlich; Beispiele hierfür sind Patches, die Verwendung von%configureoder einesmake-Ziels, das das Entfernen von Symbolen verhindert, und/oder das Überschreiben eines Strip-Befehls, beispielsweisemake install STRIP=/bin/true. -
Das Paket ist nicht als
noarchgekennzeichnet, enthält aber keine architekturabhängigen Elemente (native Binärdateien, architekturabhängige Pfade usw.). Echtenoarch-Pakete enthalten nichts, was rpmbuild entfernen könnte. Daher ist zu erwarten, dass sie leer sind, wennBuildArch: noarchfehlt. In diesem Fall sollte das Paket alsnoarchgekennzeichnet werden. -
find-debuginfo.shverarbeitet nur ausführbare Dateien; praktisch kann davon ausgegangen werden, dass dies im Hintergrund nach dem Abschnitt%installgeschieht. Stellen Sie sicher, dass alle ELF-Binärdateien (ausführbare Dateien, gemeinsam genutzte Bibliotheken, DSOs) am Ende von%installausführbar sind. -
find-debuginfo.shverarbeitet 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%installkeine Setuid-/Setgid-Bits enthalten und stellen Sie diese im Abschnitt%filesmit%attr(...) /Pfad/zur/Dateiwieder 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
-gangcc` 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
CFLAGSundCXXFLAGSder Distribution bereits-genthalten. 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_FLAGSberücksichtigt und verwendet wird. -
Der Befehl
strip -gwurde 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
-
Debuginfo-Paketliste für Fedora, sortiert nach Größe. Die meisten Debuginfo-Pakete bis ca. 20 kB Größe sollten überprüft werden – allerdings können auch deutlich größere Debuginfo-Pakete die gleichen Probleme aufweisen, insbesondere im Fall des fehlenden Parameters „-g“.
-
Zu beachten ist, dass aufgrund der aufgeteilten Paketquellen jedes Verzeichnis separat untersucht werden muss.
-
-
rpmlint >= 0.77
Want to help? Learn how to contribute to Fedora Docs ›