PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu rpm



BMH1980
29.08.06, 21:24
Habe gleich zwei Fragen zu rpm.

1. Wie zum Geier kann ich rpm dazu bringen, %_arch und %_build_arch aus /etc/rpm/macros zu verwenden, anstelle des hauseigenen i386? Ich habe dort i686 angegeben. Aber jedes rpm, das ich erstelle kommt als i386 raus.

2. Gibt es eine Möglichkeit if then else Bedingungen in spec files zu definieren?

Zum ersten Problem. Alle anderen Dinge die ich in /etc/rpm/macros definiert habe, werden auch verwendet. Nur dieses ver****** arch Zeugs nicht. :mad:

Bin ziemlich genervt davon, da mein glibc Paket jetzt gerade mal für die Tonne ist.

Was soll überhaupt dieses i386 Zeugs, wenn du uname was ganz anderes ausgibt?

Rain_maker
29.08.06, 21:27
rpmbuild --target=i686 +weitere Optionen?

Notlösung, sollte aber gehen, oder?

Greetz,

RM

BedriddenTech
29.08.06, 21:36
Das ist keine Notlösung, es ist sogar explizit so gedacht. Warum sonst existiert im »macros«-Verzeichnis ein Ordner i686, einer i386, usw?

Vielleicht wäre »Maximum RPM« etwas für dich: http://wraptastic.org/maxrpm/max-rpm.html

BMH1980
29.08.06, 22:05
Soweit ich das max-rpm richtig verstanden habe, habe ich alles richtig gemacht.

In /usr/lib/rpm/macros wird ja explizit i386 als arch und build_arch definiert. Und /etc/rpm/macros wird nach /usr/lib/rpm/macros eingelesen.

Dazu kommt, dass %_build_arch die Konfigvariante von BuildArch aus den spec files sein müsste.

Somit muss rpm doch auch i686 als build_arch annehmen, wenn ich das schon so konfiguriere. Ansonsten wäre diese Option in der macros Datei ja völlig unnötig und unsinnig.

Was die Ordner angeht. Da werden ja nur noch mal platformspeziefische, bzw. archspeziefische Macros oder Variabeln gesetzt.

BedriddenTech
29.08.06, 22:08
Soweit ich das System verstanden habe, funktioniert es so: Du baust dein Specfile und gibst übergibst an den passenden Stellen mit der Shellvariable RPM_OPT_FLAGS die entsprechenden C(XX)FLAGS. Diese werden aus den Macrodateien gelesen, und zwar spezifisch zu der Plattform, auf der momentan gebaut wird. Die wird von rpmbuild entweder selbst herausgefunden oder via --target=bla fest gesetzt.

Andersherum gefragt: Wenn du ein Specfile erstellst mit dem Ziel, den Quelltext für eine beliebige Plattform in ein Paket zu übersetzen -- warum würdest du dann deine CFLAGS fest setzen? Vielleicht habe ich dich falsch verstanden, aber die Macrodateien bzw. plattformspezifischen Verzeichnisse sind für mich absolut sinnvoll.

traffic
30.08.06, 03:04
Also erst mal zur zweiten Frage, da sie einfacher zu beantworten ist:

Ja, natürlich kann man Bedingungen formulieren. Sogar auf zwei Arten:

- Shell-Syntax

if [...blubb...] ; then
[...bla...]
else
[...shutup...]
fi
Die Shell-Syntax funktioniert nur innerhalb von Skript-Blöcken: %prep, %setup, %build, %install, %clean, %pre, %post, %preun, %postun.

- Makro-Syntax:

%if [...blubb...]
[...bla...]
%else
[...shutup...]
%endif
Die Makro-Syntax funktioniert an jeder beliebigen Stelle der spec-Datei, auch innerhalb des Headers und der Dateiliste.

Dann die erste Frage mit dem %_arch-Makro. Die ist eigentlich auch ganz einfach, wenn auch möglicherweise unerwartet:

Das geht einfach nicht über eine Makrodefinition, fertig. Diese Einstellung ist kein Makro. Es gibt folgende Einstellungen, die sozusagen "unveränderlich sind":

$ rpm --showrc | head
ARCHITECTURE AND OS:
build arch : i586
compatible build archs: i686 i586 i486 i386 noarch fat
build os : Linux
compatible build os's : Linux
install arch : i686
install os : Linux
compatible archs : i686 i586 i486 i386 noarch fat
compatible os's : Linux
"Unveränderlich" ist nicht ganz richtig, weil es als Lösung die Kommandozeilenoption "--target=[...]" gibt. Aber "unveränderlich" in dem Sinne, dass sie nicht durch eine Makro-Definition anzupassen sind.

BMH1980
30.08.06, 21:43
@BedriddenTech: Die Ordner sind ja sinnvoll. Ich meinte nur, dass diese sinnlos wären, wenn man BuildArch nicht ändern könnte.

Was die Architektur allgemein angeht. Habe den richtigen Schalter gefunden.

Habe einfach eine /etc/rpmrc angelegt und dort diese Zeilen eingetragen:

buildarchtranslate: osfmach3_i686: i686
buildarchtranslate: pentium4: i686
buildarchtranslate: i686: i686

Die pentium4 Zeile hätte ich mir vielleicht auch schenken können. Aber warum jetzt noch großartig dran rumbasteln, wenn es doch klappt. :)

Die Sache mit if muss ich noch testen. Nur vorab noch ne Frage zu if.

%if [ %{name} = foo ]

Wäre das richtig? Bzw. würde das funktionieren?

Ach übrigens. traffic, deine Nachricht hat mich auf den Trichter mit der /etc/rpmrc gebracht. :)

compatible build archs: i686 i586 i486 i386 noarch fat

Speziell diese Zeile.

traffic
31.08.06, 01:25
%if [ %{name} = foo ]

Wäre das richtig?
Nein. Das ist ein Mix aus Makro-Syntax und Shell-Syntax.

Makro-Syntax:

%if %{name} == foo
...bla...
%else
...blubb...
%endif
Shell-Syntax:

if [ %{name} = foo ] ; then
...bla...
else
...blubb...
fi

webstar
31.08.06, 05:16
Habe gleich zwei Fragen zu rpm.

1. Wie zum Geier kann ich rpm dazu bringen, %_arch und %_build_arch aus /etc/rpm/macros zu verwenden, anstelle des hauseigenen i386? Ich habe dort i686 angegeben. Aber jedes rpm, das ich erstelle kommt als i386 raus.

2. Gibt es eine Möglichkeit if then else Bedingungen in spec files zu definieren?

Zum ersten Problem. Alle anderen Dinge die ich in /etc/rpm/macros definiert habe, werden auch verwendet. Nur dieses ver****** arch Zeugs nicht. :mad:

Bin ziemlich genervt davon, da mein glibc Paket jetzt gerade mal für die Tonne ist.

Was soll überhaupt dieses i386 Zeugs, wenn du uname was ganz anderes ausgibt?
Wie wäre es mit einer .rpmrc in Deinem Homeverzeichnis?!

Inhalt der .rpmrc:


buildarchtranslate: i386: i686
buildarchtranslate: i486: i686
buildarchtranslate: i586: i686
buildarchtranslate: i686: i686
Damit sollte es dann beim Paketbau funktionieren.

Schönen Tag noch, man liest sich. :)
Euer Jens Ornot alias Webstar

BillyHates
31.08.06, 10:38
funktioniert das auch rückwärts? : i586: 386

kann's iM nicht testen