So entpacken, ändern, erstellen und installieren Sie ein SRPM

9

Ich möchte ein Fedora 15-Paket ( gnome-shell-extensions-alternative-status-menu) ändern . Es ist eine kleine Änderung (Zurücksetzen dieses Commits ). Mit kann yumdownloaderich ein SRPM ( gnome-shell-extensions-3.0.2-1.g63dd27cgit.fc15.src.rpm) herunterladen .

Wie entpacke ich es danach und baue es dann wieder auf?

Vitor Py
quelle
Sie sollten Ihre letzte Bearbeitung so ändern, dass sie entweder Kommentare zur Antwort von @ mdpc enthält, oder eine eigene Antwort mit den Schritten hinzufügen, die Ihnen bei der Lösung des Problems geholfen haben. Halten Sie die Antwortdaten bitte von der Frage selbst fern.
Caleb
@Caleb Fertig! (Noch 3 ...)
Vitor Py

Antworten:

7

Was ich als ROOT-Benutzer mache:

  1. Installieren Sie das SRPM wie jedes andere Paket ( rpm --install [source-rpm-filename])

  2. Untersuchen Sie das /root/rpmbuild/SPECSVerzeichnis und suchen Sie die Spezifikationsdatei, die Ihrem Paket entspricht

  3. rpmbuild -bb /root/rpmbuild/SPECS/[found-filename]

Die resultierenden Binärpakete befinden sich dann in dem /root/rpmbuild/RPMS/Verzeichnis, das über den Standardbefehl installiert werden kann rpm --install.

HINWEIS: Hiermit wird nur das erstellt, was im Standard-Binärpaket enthalten ist. Ich poste dies als Antwort auf die spezifische Frage, nicht wie man Änderungen an der Quelle vornimmt und neue Pakete generiert.

Um die Änderungen vorzunehmen, können Sie entweder Patches als Eingabe bereitstellen und die SPECS-Datei ändern ... oder Sie können den Standard, der *.tar.bz2sich in /root/rpmbuild/SOURCESIhrer eigenen befindet, durch die Änderung ersetzen und dann den Build wie oben beschrieben ausführen.

Beachten Sie, dass Sie möglicherweise das SPECS-Paket ändern müssen, damit es funktioniert (normalerweise durch Herausziehen des Patches und Ändern einiger Dateinamen, die von der SPECS-Datei programmiert wurden).


BEARBEITEN

Es scheint, dass das Erstellen von RPMs als Root eine schlechte Praxis ist ( Quelle ). Es funktioniert gut als Nicht-Root-Benutzer.

Schritt für Schritt Anleitung zum Hinzufügen eines Patches (von hier ):

  1. Kopieren Sie Ihren Patch nach rpmbuild/SOURCES.
  2. Bearbeiten Sie das rpmbuild/SPECS/package.specund fügen Sie ein Patch0: mypatch.patchdirekt nach der Source0: ...Zeile hinzu.
  3. %setup ...Fügen Sie nach der Zeile eine %patch0 -p1Zeile hinzu

Jetzt wird es normal gebaut, dh. mit:rpmbuild -ba SPECS/package.spec

mdpc
quelle
2
Sie sollten klarstellen, dass nur die Installation als root erfolgt, nicht als rpmbuild. Das Erstellen von RPM-Dateien sollte niemals als Root erfolgen.
Caleb
@Caleb Ich habe die Pakete als Nicht-Root installiert. rpm setzt es in die ~ / rpmbuild-Hierarchie. Auch ich habe getan, was Sie zu der Frage vorgeschlagen haben, und die zusätzlichen Schritte hier eingefügt.
Vitor Py
Nur ein paar Anmerkungen: sudo dnf install rpmdevtoolsWird für den Befehl rpmbuild benötigt. Und die %patch0 -p1Zeile sollte weggelassen werden, wenn die Spezifikationsdatei eine %autosetupZeile anstelle einer %setupEins verwendet (wie %autosetupder Patch automatisch angewendet wird).
Nelson
Um die neue Drehzahl über der ursprünglichen zu installieren (falls das Original bereits auf dem System installiert ist), gehen Sie wie folgt vorsudo rpm -ivh --force your.rpm
Nelson
4

OpenSSL-Paketwiederherstellung CentOS 6.4 ist ein detailliertes Beispiel für eine SRPM-Paketwiederherstellung.

Das obige Beispiel verwendet Mock - den Jedi-Lichtsäbel von Paketerstellern.

Mock wurde erstellt, um eine Chroot zuverlässig zu füllen und dann ein Paket in dieser Chroot neu zu erstellen.

Weitere Informationen finden Sie unter http://fedoraproject.org/wiki/Projects/Mock

Im Beispiel wird mock dreimal verwendet - einmal zum "Entpacken" des Pakets, dann zum erneuten Erstellen der .src.rpm und schließlich zum Erstellen der .rpm.

Neonzeon
quelle