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

rpmbuild %files

Hi,

ich versuche gerade ein rpm zu bauen. Jetzt habe ich in einem Howto gelesen, dass ich in der %files section ALLE files incl. Pfad angeben muss die mein make install irgendwo ins System kopiert. Davon abgesehen, dass ich mir keinen Wolf tippen will, wie komme ich an diese Liste ran?
 

admine

Ultimate Guru
Nach einem "rpmbuild -bi deinspec.spec" ist alles relevante nach $RPM_BUILD_ROOT installiert.

Da kannst du erkennen, was durch "make install" ins System installiert werden soll.
Desweiteren wird dich aber auch bei fehlenden Files eine Fehlermeldung "anblitzen" -> "unpacked files" - und du siehst, was du in %files vergessen hast ;)
 
OP
K

klaus-dieter

Hacker
Also als build Anweisung im spec File habe ich nur "make install" und das installiert natuerlich dahin wo es spaeter sein sollte, also /usr/local/bin und so weiter. Wie sage ich dem System denn dann wo es hin bauen soll?
 

admine

Ultimate Guru
Jochen_r schrieb:
Wie sage ich dem System denn dann wo es hin bauen soll?
Indem du im Spec-File BuildRoot definierst:
BuildRoot: %{_tmppath}/%{name}-%{version}-build

Dann wird, wie in dem Beispiel, alles nach /var/tmp/progname-version-build installiert.
 
OP
K

klaus-dieter

Hacker
Habe im spec file die folgende Zeile:

BuildRoot: /var/tmp/%{name}-buildroot

Versuche nach http://www.rpm.org/RPM-HOWTO/build.html#SPEC-FILE vorzugehen.
 

admine

Ultimate Guru
Jochen_r schrieb:
Habe im spec file die folgende Zeile:
BuildRoot: /var/tmp/%{name}-buildroot
Und wenn du dann in %install auch %{buildroot} angibst, dann sollte es nach /var/tmp installieren.
In deinem Link entspricht das $RPM_BUILD_ROOT.
 
OP
K

klaus-dieter

Hacker
Wie genau soll das aussehen? Ich habe bisher

%install
make install

Wie soll ich das %{buildroot} darin "verwursten"?
 

admine

Ultimate Guru
So zum Beispiel:
Code:
make install \
	DESTDIR=%{buildroot} \
	prefix=%{_prefix}

Und da man üblicherweise besser als User RPMs baut und nicht als root, geht es auch gar nicht anders.
Ein User kann ja keine Files ins System installieren ;)
 
Nur mal der Vollständigkeit halber: Um die %files-Liste zusammenzubekommen, gibt es prinzipiell zwei Möglichkeiten.

(1) Trial-and-Error: Das Paket einfach mal bauen, %files dabei leerlassen. Dann einfach in "$RPM_BUILD_ROOT" nachschauen.

(2) Systematische, aber möglicherweise unangenehmere Methode: Die installierten Dateien aus den Makefiles "herauslesen" bzw. einfach "sehen". Dazu muss man aber ein wenig vertraut mit Makefile- bzw. Automake-Syntax sein.

Noch ein Wort zur Variable DESTDIR: DESTDIR ist ein GNU-Standard, d.h. alle Pakete, die den GNU-Richtlinien folgen, leiten die installierten Dateien nach DESTDIR um, wenn diese Variable gesetzt ist.

Das bedeutet aber mitnichten, dass DESTDIR immer wie erwartet funktioniert. Es gibt auch andere Build-Systeme, bei qmake hat DESTDIR z.B. eine völlig andere Bedeutung. Also nicht wundern, wenn es manchmal nicht funktioniert - in dem Fall muss man sich die Makefiles anschauen und eine andere Lösung finden.

PS: Beim Trial-and-Error-Verfahren muss man wirklich vorsichtig sein. Wie admine schon schrieb, führt eine unvollständige %files-Liste meistens dazu, dass rpmbuild fehlschlägt und eine aussagekräftige Fehlermeldung urückliefert. "Meistens" bedeutet aber nicht "immer". Symlinks führen beispielsweise nicht(!) dazu, dass rpmbuild fehlschlägt, d.h. bei nicht gelisteten Symlinks wird das RPM gebaut und der Symlink fehlt einfach im Paket. Auf solche Sachen sollte man immer sehr sorgfältig achten.
 
Oben