SRC RPMs installieren mit apt und/oder rpm
Dieses Howto ist nach besten Wissen und Gewissen geschrieben, trotzdem übernehme ich keinerlei Haftung auf Richtigkeit oder Vollkommenheit.
1. Voraussetzungen
Wenn man das Howto mit apt machen will, benötigt man logischerweise ein funktionierendes apt und man muss wissen wie man die sources.list bearbeitet. Ansonsten sind alle nötigen Tools im Paket rpm, was auf jedem Suse-System installiert ist.
2. Vorbemerkung
Wir arbeiten hier fast ausschließlich als normaler Benutzer, da so das System vor Beschädigungen besser geschützt ist.
3. Erstellen der notwendigen Verzeichnisse
Das machen wir so:
mkdir -p ~/packages/SOURCES ~/packages/SRPMS ~/packages/BUILD ~/packages/SPECS ~/packages/RPMS/i386 ~/packages/RPMS/athlon ~/packages/ RPMS/i486 ~/packages/RPMS/i586 ~/packages/RPMS/i686 ~/packages/RPMS/noarch
mkdir -p erstellt, wenn nötig, die fehlenden Unterverzeichnisse, somit muss man nicht jedes Verzeichnis einzeln erstellen. Die Tilde "~" am Anfang ist ein Ersatz für den Pfad zum Verzeichnis des Benutzers, der den Befehl aufruft. Bei mir ist "~" gleichbedeutend mit "/home/daniel".
4. Setzen der RPM-Macros
RPM-Macros sind vergleichbar mit Variablen. Benutzerspezifische Macros werden in der ~/.rpmmacros gesetzt. Man setzt sie so:
%macroname wert
Aufrufen kann man Macro's mit %{macroname}.
In meiner ~/.rpmmacros steht im Moment:
# SuSE Release %suserel 0.suse092-daniel # Buildroot %_topdir ~/packages
Das Macro suserel wird bei den .src.rpm der suser-* Repositories benutzt. Dieser Text erscheint dann auch, je nach .src.rpm, im endgültigen Namen. z.B. synaptic-0.55.3-0.suse092-daniel.i586.rpm . Dieses Macro ist kein Standardmacro (weder von rpm direkt noch von Suse) und Macro's haben nur eine Wirkung, wenn sie im SPEC-File des .src.rpm benutzt werden. Deshalb kann es sein, dass es bei einigen .src.rpm's keinerlei Wirkung hat.
_topdir ist nötig, da wir die Pakete in einem anderen Verzeichnis als standardmäßig (/usr/src/packages), wo meist nur root Zugriff hat, erstellen.
5. Abhängigkeiten auflösen
5.1 mit RPM
Wenn man kein apt verwendet muss das .src.rpm lokal auf dem Computer vorliegen. Deshalb ist es bei diesem Schritt Voraussetzung, dass das .src.rpm schon heruntergeladen wurde.
Mit
rpm -qRp name-des-Pakets.src.rpm
Erhält man die Pakete, die man zum Kompilieren des .src.rpm's benötigt.
5.2 mit apt
Zuerst muss man das Repository mit dem gewünschten Paket in der sources.list eingetragen haben oder auch nicht, wenn man das Paket schon heruntegeladen hat. (Mit "apt-cache policy paket" bekommt man die möglichen Repositories in denen das gewünschte .src.rpm liegen kann.)
Die Abhängigkeiten löst man auf mit (muss man als root machen):
sudo apt-get build-dep paketname
oder wenn das Paket schon auf dem Computer vorliegt
sudo apt-get build-dep /pfad/zum/paket/paketname.src.rpm
Damit werden alle benötigten Pakete heruntergeladen.
6. Kompilieren des .scr.rpm's und Erstellen des Binary-RPM's
6.1 mit RPM
Zum Bauen des .src.rpm's genügt ein:
rpmbuild --rebuild /pfad/zum/paket/paketname.src.rpm
Mit --with=<option> bzw. --without=<option> kann man wie beim ./configure bei .tar.gz's Optionen aktivieren/deaktivieren.
6.2 mit apt
apt-get --compile source paketname
bzw.
apt-get --compile source /pfad/zum/paket/paketname.src.rpm
6.3 Fehler durch nicht aufgelöste Abhängigkeiten
Es kann sein, dass bei einigen .src.rpm's die Abhängigkeiten nicht vollständig sind, deshalb entweder bei diesem Schritt darauf achten, welche Pakete als fehlend gemeldet werden oder besser noch auf der Homepage des Projekts nach den nötigen Pakete erkundigen, da im .src.rpm normalerweise die Originalsourcen !!!
7. Installieren des fertigen RPM's
Den Namen mit dem kompletten Pfad des Pakets erhält man ca. 15 Zeilen vor dem Ende der Ausgabe in der Zeile, dei mit Wrote: beginnt. Z.B.
Wrote: /home/daniel/packages/RPMS/i586/synaptic-0.55.3-suse092.daniel.i586.rpm
7.1 mit rpm
sudo rpm -Uvh packages/RPMS/iX86/paketname-0.suse092.daniel.iX86.rpm
7.2 mit apt
sudo apt-get install packages/RPMS/iX86/paketname-0.suse092.daniel.iX86.rpm
8. Schlussbemerkung
Man kann, wenn man will auch rpm und apt mischen. Z.B. kann man die Abhängigkeiten mit apt lösen und das Paket dann mit rpmbuild bauen, da man mit apt keine Optionen, die den Kompiliervorgang betreffen, übergeben/ändern kann.
Fertig
daniel2000