Re: Patentrezept "Kompilieren und Installieren"
Hallo, ein Umzug des Threads ist überfällig: X-Mailed & Followup-To opensuse-programming-de Am Die, 05 Jan 2010, Philipp Bender schrieb:
ok, ich bin nun einen Schritt weiter. Erkentnisse soweit:
1. muss man die .rpmmacros erstellen, z.B. mit
%_topdir /home/phil/build/opensuse
Nur wenn man nicht /usr/src/packages/ verwenden will.
2. muss man innerhalb dieses topdir eine Struktur haben mit SPECS, SOURCES, BUILD, BUILDROOT und so weiter
Jap.
3. gibt es nicht PRO PAKET so eine Verzeichnisstruktur, sodern in SPECS sind alle *.spec der (jemals) selbsterstellten Pakete, genau wie sich unter SOURCES mehrere verschiedene Quellarchive befinden können.
Korrekt. v.a. SOURCES sollte man aber ab und an ausmisten, da es sonst zu Konflikten bei schlecht benannten patch-Dateien kommt (foo.diff statt name[-version]-foo.diff). BUILD kann man regelmäßig oder sogar aus dem .spec heraus ausmisten.
4. muss ich die kompilierte Datei nicht mit "make install" ins System kopieren (z.B. soll sie nach "/tmp/foo") sondern ich gebe unter %files an "/tmp/foo" und muss dafür sorgen, dass sich die Ordnerstruktur innerhalb meines Quellordners wiederfindet, also wenn ich eine Datei "/usr/lib/foo.so" installieren will, muss ich diese Zeile so unter %files schreiben und der Ordner $QUELLORDNER/usr/lib/ muss (samt der Datei foo.so) existieren oder beim Kompilieren erzeugt werden.
FALSCH. Wie die Dateien nach %{buildroot} (aka $RPM_BUILD_ROOT) kommen ist egal. Ob per '%makeinstall (aka make DESTDIR="$RPM_BUILD_ROOT" install'), python setup.py install (hab grad nicht im Kopf wie man da DESTDIR angibt), per cp oder install oder sonstwie. Wichtig ist nur, daß die Files unter %{buildroot} am richtigen Platz laden, nämlich %{buildroot}/da/wo/sie/installiert/hinsollen. Ausführbare Dateien gehören nach %{_bindir}, also: install -d -m 755 %{buildroot}%{_bindir} install -m 755 foo %{buildroot}%{_bindir}/foo install -m 755 bar %{buildroot}%{_bindir}/
Also bleibt im Beispiel der %install - Abschnitt leer?
Nein.
Mit dieser Konfiguration, die ich nocheinmal hier
http://pastebin.ca/1738521 (Makefile)
Hier solltest du praktischerweise einen install-Target hinzufügen. ==== Makefile ==== CXX ?= g++ DESTDIR= all: $(CXX) -o foo main.cpp install: install -d -m 755 $(DESTDIR)/tmp install -m 755 foo $(DESTDIR)/tmp/foo ====
http://pastebin.ca/1738522 (Specfile)
==== foo.spec ==== [..] %prep %setup -q ### normal mit -q, ohne ist nur sinnvoll wenn man's braucht bzw. damit ### du erstmal mitbekommst, was das Makro macht ;) %build make %install make DESTDIR="%{buildroot}" install %clean rm -rf "%{buildroot}" %files /tmp/foo ==== Sinnvoller wäre generell foo in %{_bindir} zu haben: ==== Makefile ==== CXX ?= g++ prefix = /usr/local bindir = $(prefix)/bin DESTDIR= all: $(CXX) -o foo main.cpp install: install -d -m 755 $(DESTDIR)$(bindir) install -m 755 foo $(DESTDIR)$(bindir)/foo ==== ==== foo.spec ==== [..] %build make prefix="%{_prefix}" %install make prefix="%{_prefix}" DESTDIR="%{buildroot}" install %clean rm -rf "%{buildroot}" %files %{_bindir}/foo ====
error: File not found: /home/phil/build/opensuse/BUILDROOT/FooScript-0.0.1-1.i386/tmp/foo
Du hast foo eben nicht nach %{buildroot}/tmp/foo kopiert/installiert. -dnh -- Time is an illusion; lunchtime, doubly so. -- Ford Prefect -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hallo David, super! Vielen Dank für die Hilfe, genau das, was ich für den Einstieg gebraucht habe! Ich habe das hier gleich mal verwurstet: http://philipp.rootiniert.de/wiki/Paketbau Im openSUSE-Wiki findet sich leider keine solche Anleitung, die sich an einem Beispiel entlanghangelt (zumindest habe ich sie nicht gefunden), wenn sich im Text keine groben Fehler finden könnte man ja überlegen, ob man das, was ich hier geschrieben habe, in den Paketbau-Artikel im openSUSE-Wiki einpflegt. Die Anleitung dort fand ich jedenfalls für mich als Anfänger zu abstrakt. Grüße Philipp -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
participants (2)
-
David Haller
-
Philipp Bender