Software sollte man generell nicht als root kompilieren, das gilt auch für RPM-Quellpakete.
Inhaltsverzeichnis
Vorarbeiten
In manchen Distributionen (z.B. SuSE) haben im systemweiten Compilierungs-Verzeichnis von RPM /usr/src/packages auch die normalen User Schreibberechtigung. In so einem Fall ist keine der hier genannten Vorarbeiten notwendig und man kann direkt beginnen, mit den ganz unten genannten Anweisungen binary RPM-Pakete zu bauen.
Andernfalls sind ein paar Vorarbeiten notwendig, um als normaler User RPMs bauen zu können. Diese werden im Folgenden beschrieben.
Per Hand
Datei ~/.rpmmacros anlegen. Diese sollte in etwa so aussehen:
%_topdir <homedir>/RPM
Ab jetzt benutzt RPM zum Zusammenbauen der RPMs das Verzeichnis <homedir>/RPM (kann natürlich auch ein anderes Verzeichnis sein, man braucht natürlich Schreibrechte). In diesem Verzeichnis erwarter RPM folgende Unterverzeichnisse:
RPM |-- BUILD |-- RPMS | |-- i386 | |-- i486 | |-- i586 | |-- i686 | `-- noarch |-- SOURCES |-- SPECS `-- SRPMS
Das wars, ab jetzt baut RPM das Zeug im %_topdir!
Per Script
Man kann auch diese kleine Skript benutzen, um eine Build-Umgebung zu erstellen.
myname="$(getent passwd $USER|awk -F: '{print $5}')" myemail="$USER@$(hostname)" cat << EOF > ~/.rpmmacros %_topdir $HOME/RPM %_tmppath $HOME/RPM/tmp %packager $myname <$myemail> EOF cat << EOF > ~/.rpmrc buildarchtranslate: i386: i586 buildarchtranslate: i486: i586 buildarchtranslate: i586: i586 buildarchtranslate: i686: i586 EOF mkdir -p $HOME/RPM/SPECS mkdir -p $HOME/RPM/RPMS/i386 mkdir -p $HOME/RPM/RPMS/i486 mkdir -p $HOME/RPM/RPMS/i586 mkdir -p $HOME/RPM/RPMS/i686 mkdir -p $HOME/RPM/RPMS/noarch mkdir -p $HOME/RPM/BUILD mkdir -p $HOME/RPM/SOURCES mkdir -p $HOME/RPM/SRPMS ln -s /var/tmp $HOME/RPM/tmp
Das ~/.rpmrc sollte man evtl. noch anpassen, wenn man für eine andere Archiketur als i586 bauen will. Man kann es auch einfach weglassen, dann wird für die jeweils passendste Rechnerarchitektur gebaut.
Fertige Pakete bauen
Fertige .src.rpm Pakete kann man dann mit rpmbuild --rebuild paket.src.rpm in binäre (=installierbare) Form bringen - die fertigen Pakete liegen dann unter RPM/RPMS/<arch>.
Siehe auch RPM Package Building Introduction.
Achtung: Ab RPM in der Version 4 muss man zum Erstellen von Paketen den Befehl rpmbuild benutzen.
Bei Problemen kann es hilfreich sein, rpmbuild mit vorangestelltem "sh -x" aufzurufen, dadurch erfährt man etwas mehr über die Aktivitäten von rpmbuild.