Am 20 Dec 2005 um 18:03 hat Philipp Thomas geschrieben:
* lothar.behrens@lollisoft.de (lothar.behrens@lollisoft.de) [20051220 17:21]:
mein tgz File eben. Das soll durch die Angaben des Users irgendwo entpackt werden.
Welches tgz File? Normalerweise besteht ja der Inhalt eines .src.rpm aus einem Tarball, einer .spec Datei und evtl. noch einem oder mehreren Patches.
Das, das ich aus meinem CVS export vor dem RPM Bau erzeuge. Lt. der Doku in
meinem letzten Posting wird das ja wieder in den BUILD Zweig entpackt. (%prep)
Also hier nochmal kurz mein Specfile:
Summary: DMF - Distributed Multiplatform Framework
Name: lbdmf
Version: 0.6.0
Release: 1
Copyright: LGPL
Group: Development/Tools
Source: lbDMF-Source-0.6.0.tgz
URL: http://www.lollisoft.de
Distribution: lbDMF Development System
Vendor: Lothar Behrens
Packager: Lothar Behrens
Das mit make install oder %makeinstall lasse ich besser noch.
Warum? Ist im Prinzip ganz einfach. Bau einfach eine Variable in die Makefiles ein, die normalerweise leer ist. Wenn du automake zum Erstellen der Makefiles benutzt, wird dafür DESTDIR verwendet. Das sieht dann gekürzt so aus:
prefix = /usr/local bindir =$(prefix)/bin
DESTDIR =
install: install -d $(DESTDIR)/$(bindir) install $(PROGRAMS) $(DESTDIR)/$(bindir)
Innerhalb der .spec Datei rufst du nun make so auf:
make DESTDIR=%{buildroot}
Das ist mir dann klar, auch wenn ich kein Automake verwende. Ich verwende mein eigenes Makesystem, welches auch unter Windoof und Mac OS X geht. Also dann zeigt mein DESTDIR nach ~, wobei binaries in ein $DESTDIR/bin, shared libraries in $DESTDIR/lib und Plugins in $DESTDIR/plugins gepackt werden. (Nach dem Linken) Ok, $(DESTDIR)/$(bindir) hat evtl. einen doppelten /, aber sollte nicht stören. %build und %install dann so: %build # Wie oben %install make install # Ohne verbiegen des DESTDIR
Und wenn Buildroot verwendet wird (das sollte immer der Fall sein), wird die Software nun dorthin kopiert und RPM packt sie dann in das .rpm mit den in der %files Sektion angegebenen Pfaden.
Wo ist Buildroot im obigen Beispiel definiert ?
Ich mache ein CVS export, um das dann in ein tarball zu packen. Dies wird dann in /usr/src/packages/SOURCES kopiert. Das nimmt rpmbuild auch und es ist dannach im rpm File. Nur die Installation geht nicht - es passiert nichts.
Nimm dir ein beliebiges GNU Paket und schau dir mal an, wie bei 'make dist' der Tarball produziert wird. *So* sollte auch deiner aussehen, sprich ein nicht absolutes Verzeichnis beinhalten, unterhalb dessen der Quellcode-Baum liegt.
Das ist mein Script zur Tarball Erstellung: #!/bin/sh # Steht selbst in CPP if [ -e "dist" ]; then rm -R dist; fi mkdir dist cd dist cvs -d:ext:lollisoft@cvs.sourceforge.net:/cvsroot/lbdmf export -r HEAD CPP # Nicht im CVS enthalten: cp ../Plugins/DatabaseReport/repwrt.cpp CPP/Plugins/DatabaseReport/repwrt.cpp cp ../Plugins/DatabaseReport/repwrt.h CPP/Plugins/DatabaseReport/repwrt.h tar cvzf lbDMF-Source-$1.tgz CPP/ cp lbDMF-Source-$1.tgz /usr/src/packages/SOURCES cd .. rpmbuild -ba lbDMF.spec
Ich verstehe nur nicht, warum ich im %files Zweig die Dateien nochmal angeben muss. Die sind ja im tgz File und das findet rpmbuild ja schon.
Das sind doch zwei Paar Schuhe! In deinem Tarball liegen die *Quellen*. In der %files Sektion gibst du an, welche der Dateien in das zu bauende binäre .rpm gepackt werden sollen. Du willst ja normalerweise nicht, dass dieses auch den Quellcode beinhaltet.
Ach sooooo :-) Wenn mein Tarball nun folgenden Inhalt hätte: CPP/BaseDevelopment/lbHook/lbHook.cpp und nach dem Bauen dort (entpackt) ein lbHook.so ist, dann muss ich %files $RPM_BUILD_DIR/CPP/BaseDevelopment/lbHook/lbHook.so stehen haben ? Denn rpm entpackt ja in $RPM_BUILD_DIR (Siehe %prep) und wärend des Compiliervorgangs ist mein DEVROOT oder DESTDIR = %{buildroot} und %{buildroot} ist lt. meinem Verständniss nun $RPM_BUILD_DIR. Richtig ? Nun fehlt mir nur noch die Verbindung, zum Ziel Installationsort einer bestimmten Datei, die im Binary RPM steht. Wird dafür dann %prefix/bin genommen, ist mir alles klar. Ich hoffe jetzt so viel verstanden zu haben, dass es klappt :-)
[Signatures zitiert man nicht!]
Sorry Danke, Lothar -- Lothar Behrens | Rapid Prototyping ... Rosmarinstr 3 | 40235 Düsseldorf | www.lollisoft.de