• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Gelöst: rpmbuild --rebuild rpm nicht identisch zu SuSE rpm

wbwb

Hacker
Hallo,
ich bin nicht ganz sicher ob das hier der richtige Teil des Forums für meine Frage ist - ich versuche es mal:

Ich möchte aus einem SuSE src rpm ein rebuild für das entsprechende binäre rpm machen. Warum ist erstmal egal. Meines (beschränkten :) ) Wissens nach muss ich dazu

rpmbuild --rebuild xxxxx.src.rpm

ausführen ?
Nun habe ich ein 'original SuSE' xxxxx.src.rpm und das dazu gehörige binäre xxxxx.rpm.
Wenn ich rpmbuild --rebuild xxxxx.src.rpm ausführe bekomme ich auch ganz artig in /usr/src/packages/RPMS/i586 das entsprechende binäre xxxxx.rpm ... aber, wenn man das dann mit dem 'original SuSE' binären xxxxx.rpm vergleicht fällt einem sofort auf, dass das selbstgebaute binäre xxxxx.rpm deutlich größer ist ???

Packt man beide binären xxxxx.rpms, also das selbsgebaute und das SuSE, mit
rpm2cpio xxxxx.rpm | cpio -idmv --no-absolute-filenames
mal kurz aus, dann sieht man das Problem:
aus mir unerfindlichen Gründen sind die SuSE binaries und libraries in dem binären Packet alle kleiner - haben also mit an Sicherheit grenzender Wahrscheinlichkeit keine debug symbols ?

Anscheinend muss man ausser rpmbuild --rebuild xxxxx.src.rpm noch ein paar andere Dinge machen, damit ein rebuild von einem 'original SuSE' xxxxx.src.rpm wirklich zu einem 'original SuSE' binären rpm führt ???

Kann mir dazu bitte jemand auf die Sprünge helfen?
Danke!

Gruß,
wbwb
 
OP
W

wbwb

Hacker
na ja, ist wahrscheinlich nicht unbedingt der Sinn eines Forums, aber dann helfe ich mir halt mal selbst ... und poste des Rätsels Lösung 'für die Nachwelt' ;-)

1) Default-mäßig scheint kein SuSE Packet die Debug Symbol-Table zu strippen ...

2) vielmehr gibts es im *.spec file der SuSE rpms ein rpm macro: '%debug_package'. Damit produziert die SuSE üblicherweise das foo-debuginfo.rpm und das foo-debugsource.rpm. Darin sind die Debug Symbole 'out-ge-source-t' und im eigentlichen binären foo.rpm sind *keine* Debug-Symbole mehr drin - d.h. es ist 'schön schlank' :) . Der GDB kann aber trotzdem über den 'debug link' oder den 'build ID' Mechanismus die SuSE-Pakete debuggen ... wenn man das will ... und nur dann wenn man die debug Pakete auch installiert hat.

3) Wenn aber aus irgendeinem °!"§$%&/()=*-Grund das '%debug_package' Macro im spec File des foo.src.rpm's, also des source-rpms fehlt, dann produziert der Befehl 'rpmbuild --rebuild foo.src.rpm' ein binäres foo.rpm in dem die gesamte Debug Symbol-Table enthalten ist ... weil die SuSE eben default-mäßig die binaries nicht stript ... genau das war bei mir der Fall.

und die Moral von der Geschicht: trau einem 'rpmbuild --rebuild foo.src.rpm' mit einem SuSE source rpm nicht.

Stattdessen:
a) pack' das foo.src.rpm zunächst mit 'rpm2cpio foo.src.rpm | cpio -idmv --no-absolute-filenames' aus
b) check ob der spec file vor der %prep section ein %debug_package hat. Wenn ja, kann man mit 'rpmbuild --rebuild foo.src.rpm' leben, wenn nein, dann spec file erst editieren und mit den restlichen files des foo.src.rpm an die üblichen Stellen unter /usr/src/packages schieben und dann mit 'rpmbuild -bb foo.spec' das rpm bauen.

wbwb
 
Oben