SRPMS
Aus Fedorawiki.de
In diesem Artikel soll anhand eines praktischen Beispieles gezeigt werden, wie aus einem SRPM ein normales RPM erstellt wird. Es wird hier davon ausgegangen, dass wie im Artikel Einrichtung einer Buildumgebung beschrieben ein extra dafür angelegter Benutzer rpmbuild benutzt wird.
Installation des SRPMs
Ein SRPM wird nicht im eigentliche Sinne installiert. Installation bedeutet hier, dass die Inhalte des SRPMS einfach in die Unterordner des Build-Trees in die jeweiligen Verzeichnisse entpackt werden. Ein installiertes SRPM erscheint dabei auch nicht in der Paketdatenbank und kann nur durch Löschen der einzelnen Dateien wieder deinstalliert werden. Die Installation selbst übernimmt dabei wieder rpm. In diesem Beispiel soll dies Anhand von gnome-blog demonstriert werden:
rpmbuild@linux:~$ rpm -ivh http://download.fedora.redhat.com/pub/fedora/linux/extras/5/SRPMS/gnome-blog-0.8-13.fc5.src.rpm Empfange http://download.fedora.redhat.com/pub/fedora/linux/extras/5/SRPMS/gnome-blog-0.8-13.fc5.src.rpm 1:gnome-blog Warnung: Benutzer mockbuild existiert nicht - benutze Root Warnung: Gruppe mockbuild existiert nicht - benutze Root Warnung: Benutzer mockbuild existiert nicht - benutze Root Warnung: Gruppe mockbuild existiert nicht - benutze Root Warnung: Benutzer mockbuild existiert nicht - benutze Root Warnung: Gruppe mockbuild existiert nicht - benutze Root Warnung: Benutzer mockbuild existiert nicht - benutze Root Warnung: Gruppe mockbuild existiert nicht - benutze Root ########################################### [100%] rpmbuild@linux:~$
Die Warnungen besagen lediglich, dass der Benutzer mockbuild, der das SRPM ursprünglich erstellt hat, auf diesem System nicht existiert. Stattdessen wird angegeben, dass root benutzt wird. Das bedeutet in diesem Falle aber, dass die Dateien dem Benutzer rpmbuild gehören. Die Installation ist damit erfolgreich abgeschlossen.
Interessant ist es auch einfach das Paket zuerst herunterzuladen mit:
wget http://download.fedora.redhat.com/pub/fedora/linux/extras/5/SRPMS/gnome-blog-0.8-13.fc5.src.rpm
und dann zu analysieren:
rpm -qil gnome-blog-0.8-13.fc5.src.rpm
Dieser Befehl zeigt die Dateien des Source-RPMS.
Besonders interessant sind die RPM-Spezifikation gnome-blog.spec und das Quellarchiv gnome-blog-0.8.tar.gz
Diese Dateien finden sich nach der Installation unter:
- /usr/src/redhat/SOURCES/gnome-blog-0.8.tar.gz
- /usr/src/redhat/SPECS/gnome-blog.spec
Erstellung des RPMs: Erster Versuch
Anschließend wird rpmbuild benutzt, um aus dem SRPM ein normales RPM zu erstellen. Beim ersten Aufruf werden in der Regel noch fehlende Entwicklungspakete bemängelt:
rpmbuild@linux:~$ rpmbuild -ba ~/rpmbuild/SPECS/gnome-blog.spec
Fehler: Fehlgeschlagene Paket-Abhängigkeiten:
pygtk2-devel >= 1.99.13 wird benötigt von gnome-blog-0.8-13.fc5.noarch
glib2-devel wird benötigt von gnome-blog-0.8-13.fc5.noarch
gettext wird benötigt von gnome-blog-0.8-13.fc5.noarch
rpmbuild@linux:~$
Dies bedeutet, dass die von gnome-blog zur Erstellung des RPMs benötigten Pakete pygtk2-devel, glib2-devel und gettext noch nicht im System installiert sind. Dies sollte jetzt durch yum oder pirut nachgeholt werden:
Erstellung des RPMs: wirklicher Anlauf
Nach der Installation der Abhängigkeiten des SRPMs (diese sind nicht zu verwechseln und können differieren mit dem eigentlich RPM) sollte einer erfolgreichen Erstellung des RPMs nichts mehr im Wege stehen. Die Option -ba für rpmbuild besagt, dabei, dass sowohl ein RPM als auch ein SRPM generiert werden soll (vgl. dazu die Ausgabe von rpmbuild --help):
rpmbuild@linux:~$ rpmbuild -ba ~/rpmbuild/SPECS/gnome-blog.spec Ausführung(%prep): /bin/sh -e /var/tmp/rpm-tmp.24403 + umask 022 + cd /home/rpmbuild/rpmbuild/BUILD + LANG=C + export LANG + unset DISPLAY + cd /home/rpmbuild/rpmbuild/BUILD + rm -rf gnome-blog-0.8 + /bin/gzip -dc /home/rpmbuild/rpmbuild/SOURCES/gnome-blog-0.8.tar.gz + tar -xf - + STATUS=0 + '[' 0 -ne 0 ']' + cd gnome-blog-0.8 [...Ausgabe gekürzt...] Prüfe auf nicht gepackte Datei(en): /usr/lib/rpm/check-files /var/tmp/gnome-blog-0.8-13.fc5-root-rpmbuild Erstellt: /home/rpmbuild/rpmbuild/SRPMS/gnome-blog-0.8-13.fc5.src.rpm Erstellt: /home/rpmbuild/rpmbuild/RPMS/noarch/gnome-blog-0.8-13.fc5.noarch.rpm Ausführung(%clean): /bin/sh -e /var/tmp/rpm-tmp.50964 + umask 022 + cd /home/rpmbuild/rpmbuild/BUILD + cd gnome-blog-0.8 + rm -rf /var/tmp/gnome-blog-0.8-13.fc5-root-rpmbuild + exit 0 rpmbuild@linux:~$
Wenn die Erstellung so abschließt, war alles erfolgreich. Das fertige RPM befindet sich nun im Verzeichnis /home/rpmbuild/RPMS/ unter der jeweiligen Architektur. In diesem Beispiel ist das noarch. Eine Installation des erstellten RPMs muss dabei wie üblich als root erfolgen.