Wie erstelle ich ein RPM-Paket aus den installierten Dateien?

8

Es gibt zwei Maschinen, identische Version / Bogen von SLES.

Auf Maschine #A ist eine "foo" -Software installiert, die wir verwenden können rpm -qa.

Auf Maschine #B muss die "foo" -Software installiert sein.

Das foo.rpmist aus keiner Quelle, aus dem Internet usw. erhältlich.

Frage

foo.rpmKönnen wir, da das Paket auf Computer #A installiert wurde, foo.rpmaus den bereits installierten Dateien eine Datei darauf erstellen?

Ich denke, es gibt auch Pre / Post-Skripte in den RPMs. Dann kann das foo.rpm( mit Abhängigkeiten? ) Installiert werden.

Evachristin
quelle
Sie können fast alle RPM-Pakete von hier finden. rpmfind.net/linux/RPM
Ramesh

Antworten:

11

Es ist möglich, aber sehr schwierig, dies richtig zu machen. Wenn Sie verzweifelt sind, können Sie eine neue RPM- .specDatei erstellen und eine "gefälschte" Quell-RPM-Datei (SRPM) erstellen, mit der Sie eine resultierende RPM-Datei erstellen können rpmbuild --rebuild.

Ich würde stattdessen weiter nach der tatsächlichen Drehzahl suchen. Sie geben in Ihrer Frage nicht an, welche, aber ich habe die Erfahrung gemacht, dass Sie im Internet alles finden können, wenn Sie wissen, wie man danach sucht. Ich habe alte Versionen von RPMs für Red Hat-Distributionen gefunden, die seit mehr als 10 Jahren nicht mehr verwendet werden. Daher fällt es mir schwer zu glauben, dass es nirgendwo einen Rest dieser RPM gibt.

Außerdem können Sie häufig zur Quelle der Anwendung zurückkehren, die im RPM enthalten ist, und diese auch zum Rekonstruieren des RPM verwenden. Oft enthalten die Quell-Apps eine erforderliche .specDatei, mit der das RPM neu erstellt wird.

Zuletzt könnten Sie die Quelle und die .specDatei von einem Build-Service wie Koji für Red Hat-basierte Distributionen erhalten. SuSE unterhält auch ähnliche Build-Services, sodass Sie diese durchsuchen können, um alte Build-Artefakte zu erhalten.

Nehmen Sie die Binärdateien so wie sie sind

Mit dieser Methode können Sie die tatsächlichen ausführbaren Dateien von einem System abrufen und für die Bereitstellung auf einem anderen System tarieren.

Maschine A.

$ rpm -ql <packageNameHere> | xargs tar -zcvf /tmp/program.tgz

Maschine B.

$ tar -zxvf /path/to/your/program.tgz

SLES-Version von RPM

Laut einem der Beiträge in diesem Thread: Re: Wie man RPM aus installierten Paketen rpm auf SLES erstellt, soll der Schalter haben --repackage. Dies ist in der Red Hat-Version (in Fedora oder CentOS) nicht vorhanden. Aber laut dem Beitrag können Sie es so verwenden:

$ rpm -e --repackage <somepackage>

Danach finden Sie Ihre Drehzahl hier verfügbar:

/var/spool/repackage

Verwenden von rpmerizor

Rpmerizor ist ein Tool / Skript eines Drittanbieters, das Sie installieren können und das Quelldateien in ein entsprechendes RPM neu verpackt. Die Verwendung dieses Skripts ist hier mit dem Titel: rpmerizors Manpage zugänglich .

Auszug

Rpmerizor ist ein Skript, mit dem Sie aus installierten Dateien ein RPM-Paket erstellen können. Sie müssen lediglich Dateien in der Befehlszeile angeben und einige interaktive Fragen beantworten, um die RPM-Metadaten (Paketname, Version ...) zu füllen. Sie können es auch im Batch-Modus mit Befehlszeilenoptionen für Metadaten verwenden.

Verwenden von rpmrebuild

Nicht zu verwechseln mit dem Build-Tool rpmbuild. Es rpmrebuildist ein weiteres Skript eines Drittanbieters, mit dem Sie ein bereits installiertes RPM neu verpacken können.

Auszug

rpmrebuild ist ein Tool zum Erstellen einer RPM-Datei aus einem Paket, das bereits in einer grundlegenden Verwendung installiert wurde. Für die Verwendung von rpmrebuild sind keine Kenntnisse zum Erstellen von RPM erforderlich. (Unter Debian ist das entsprechende Produkt dpkg-repack).

Beispiel

Angenommen, wir möchten den openssh-Server neu verpacken.

$ rpm -aq | grep openssh-server
openssh-server-6.2p2-8.fc19.x86_64

Packen Sie es jetzt ein:

$ rpmrebuild openssh-server-6.2p2-8.fc19.x86_64
/usr/lib/rpmrebuild/rpmrebuild.sh: WARNING: some files have been modified:
..?......  c /etc/ssh/sshd_config
..?......  c /etc/sysconfig/sshd
Do you want to continue ? (y/N) y
Do you want to change release number ? (y/N) n
result: /root/rpmbuild/RPMS/x86_64/openssh-server-6.2p2-8.fc19.x86_64.rpm

Verweise

slm
quelle
Wie auch immer, es ist: jdk-1.6.0_02-fcs.rpm :) Es ist nicht im "Internet"
evachristine
Sie können offizielle RPMs für jede Version von JDK hier herunterladen : oracle.com/technetwork/java/javase/downloads/… . Damit gelangen Sie zu 1.6u2, der gleichen Version.
slm
Wie können Sie wissen, dass "jdk-1.6.0_02-fcs.rpm" "1.6u2" ist? : O
evachristine
1
Ich habe es gefunden!! VIELEN DANK! es hieß: jdk-6u2-linux-i586.rpm DANKE!
Evachristine
1
@evachristine - yup das ist derjenige, froh, dass es gelöst hat.
slm
0

In der Regel Nr.

Mit etwas Glück rpm -qiund rpm -q --changelogEinblick, woher das Paket stammt.

Wenn es auf dem System erstellt wurde, auf dem es ausgeführt wird, haben Sie möglicherweise immer noch die Spezifikationsdatei, mit der die tatsächliche Drehzahl ermittelt wird, wenn nicht beide.

Im Allgemeinen empfehle ich nicht, Dateien / Binärdateien zu kopieren, aber die meisten Metainformationen befinden sich in der RPM-Datenbank und Sie haben die tatsächlichen Dateien.

rpm -q --list <pkg_name> zeigt alle Dateien an, die ein Paket bereitstellt.

rpm -q --scripts <pkg_name> Das Anzeigen von Skripten, die durch Installieren (oder Entfernen) des Pakets ausgeführt werden, bietet möglicherweise mindestens so viel Einblick in seinen Zweck wie die Dateien, die bereitgestellt werden.

Und alle Abhängigkeiten, die installiert werden müssen, können mit gefunden werden rpm -q --requires <pkg_name>.

HBruijn
quelle