PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Grundlegende RPM Fragen



compyler
07.07.12, 14:57
Hallo,

ich bin Linux-Neuling und absoluter RPM Neuling und habe dazu ein paar sehr grundlegende Fragen.
Ich habe eine Software geschrieben unter OpenSUSE 11.2 und will die fertig kompilierte Software mit allen Resourcen zu einem .rpm Paket packen, das sich dann auf anderen Rechnern installieren lässt.

Per CMake wird der C++ Code meiner Software übersetzt und anschließend baue ich per Skript die finale Struktur meiner Software, die in etwa so aussieht:


IMGLoader/
Icons/
Samples/
Sample1.ims
Config.xml
Readme.txt
IMGLoader (Binary, das ich per CMake gebaut habe)

So, jetzt will ich einfach diesen ganzen Ordner IMGLoader in ein .rpm packen.
Ein Benutzer soll dann einfach nur rpm -i loader.rpm eingeben und es soll dann wieder die Ordnerstruktur von oben erzeugt werden.

1. Geht das mit .rpm? Sprich es soll nix kompiliert werden, sondern eigentlich nur "entpackt" werden. Wie würde das so ganz grob das .spec aussehen?

2. Ist es möglich, dass der Benuter beim Installieren den Pfad angeben kann, wo die Software hin installiert is?
Sprich irgendwie so:
rpm -i loader.rpm
Where do you want to install?
$ /home/Projects
und rpm erzeugt jetzt /home/Projects/IMGLoader ...
Geht das?

3. Es gibt da ja diese .spec Dateien. Beschreiben die WIE bei mir als rpm-Erschaffer das .rpm erzeugt wird oder landet diese Datei auch im .rpm und legt fest, wie sich das .rpm installiert?

Ginsengelf
07.07.12, 18:58
Moin,

1) geht, die .spec Datei enthält dann halt keine make Aufrufe
2) geht auch, heißt "relocatable"
3) die spec ist nur beim Erstellen wichtig (beschreibt aber auch die Installationspfade), das eigentliche Paket enthält die Datei aber nicht mehr.

generell hilfreich: RPM Doku (http://www.rpm.org/max-rpm/index.html), besonders Kapitel 13.

Ginsengelf

compyler
07.07.12, 22:16
Ich versteh nach wie vor nicht, wie das in meinem Fall gehen soll.

In allen Beschreibungen stand immer, dass man ein tgz mit dem Sourcecode nach SOURCES kopieren soll. Ich habe aber keinen Quellcode! Ich will mein Programm einfach irgendwo bauen, dann erzeuge ich mit mehreren Skripts die finale Ordnerstruktur mit den ganzen Binaries, Texturen etc.

Wie sag ich jetzt rpm, dass dieser ganze Ordner ins rpm soll?

Ginsengelf
08.07.12, 09:03
Moin, du lässt alles weg, was SOURCES, PATCH oder sonstwas in der Richtung betrifft. In %build und %install sammelst du dann zusammen, was du extern erstellt hast (oder du verlagerst deine externe Erstellung in das spec).

Vielleicht hilft das hier (http://www.linuxquestions.org/questions/linux-general-1/creating-an-rpm-without-source-734490/).

Ginsengelf

roadracer
08.07.12, 13:22
Ich habe aber keinen Quellcode! Ich will mein Programm einfach irgendwo bauen, dann erzeuge ich mit mehreren Skripts die finale Ordnerstruktur mit den ganzen Binaries, Texturen etc.

Das ist unter Linux der völlig FALSCHE Ansatz! Es geht darum Pakete so transparent wie möglich aus den Sources zu bauen. Alles andere ist einfach nur Windows-Kacke

Generell sieht das so aus:
Es gibt einen Ordner (bei SUSE ist das /usr/src/packages), der enthält weitere Ordner namens BUILD, BUILDROOT, RPMS, SOURCES, SPECS und SRPMS. Deine Sources kommen vornehmlich als tar.gz oder tar.bz2 nach SOURCES, dein spec-File nach SPECS. Dann lässt du in der Konsole einfach
rpmbuild -ba dein_spec_file.spec #Nur der Name, kein Pfad laufen und das fertige RPM befindet sich in RPMS/<architektur>, sowie ein Source-RPM in SRPMS, das alle Sorces und build-Informationen enthält um ein neues RPM zu bauen.

medhefgo
08.07.12, 20:05
1. Geht das mit .rpm? Sprich es soll nix kompiliert werden, sondern eigentlich nur "entpackt" werden. Wie würde das so ganz grob das .spec aussehen?

2. Ist es möglich, dass der Benuter beim Installieren den Pfad angeben kann, wo die Software hin installiert is?
Im Prinzip ist das Auspacken und autonomes Einrichten der Software (Installationspfad, Erstkonfiguration, etc.) die Idee von RPM. Wenn du dem Benutzer aber die Wahl geben willst, geht das völlig an der Idee vom Paketmanagement vorbei. Ich glaube du wärst mit "makeself" vermutlich besser bedient.

Und wenn du bei RPM bleibst würde ich auch empfehlen, das Paket von RPM aus den Quellen erstellen zu lassen. Das finale RPM wird kein Quellcode enthalten.