インストールされたファイルからRPMパッケージをビルドする方法は?


8

SLESの同じバージョン/ archの2つのマシンがあります。

マシン#Aには、「foo」ソフトウェアがインストールされており、を使用して確認できますrpm -qa

マシン#Bには、「foo」ソフトウェアをインストールする必要があります。

これfoo.rpmは、どのソースからも、インターネットからも利用できません。

質問

パッケージfoo.rpmはマシン#Aにインストールされているので、foo.rpmすでにインストールされているファイルからパッケージを構築できますか?

rpmにもpre / postスクリプトがあると思います。したがって、foo.rpm依存関係あり?)をインストールできます。


ここからほぼすべてのrpmパッケージを見つけることができます。rpmfind.net/linux/RPM
Ramesh

回答:


11

正しく実行できるようにすることは可能ですが、非常に困難です。どうしても必要な場合は、新しいRPM .specファイルを作成し、「偽の」ソースRPM(SRPM)ファイルを作成して、を使用して結果のRPMファイルを作成できますrpmbuild --rebuild

代わりに、実際のRPMを引き続き検索します。あなたはあなたの質問でどちらを述べていないが、それを検索する方法を知っていればインターネットで何かを見つけることができるのは私の経験でした。10年以上使用されていないRed Hatディストリビューション用のRPMの古いバージョンを見つけたので、このRPMの残骸がどこにもないなんて信じられません。

また、RPMに含まれているアプリケーションのソースに戻って、それを使用してRPMを再構築することもできます。多くの場合、ソースアプリには.spec、RPMの再構築に使用される必要なファイルが含まれています。

最後に.spec、Red Hatベースのディストリビューション向けのKojiなどのビルドサービスからソースとファイルを取得できます。SuSEも同様のビルドサービスを維持しているため、これらを検索して古いビルドアーティファクトを取得できます。

バイナリをそのままに

この方法を使用して、実際の実行可能ファイルを1つのシステムから持ち上げて、別のシステムに展開するためにtarにできます。

マシンA

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

マシンB

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

RPMのSLESのバージョン

:このスレッド内のポストの一つによると、再:RPMのフロンインストールパッケージを作成する方法 rpm SLES上のスイッチを持つように主張されます--repackage。これはRed Hatバージョン(FedoraまたはCentOS)には存在しません。しかし、投稿によると、次のように使用できます:

$ rpm -e --repackage <somepackage>

それが完了すると、RPMにアクセスできるようになります。

/var/spool/repackage

rpmerizorの使用

Rpmerizorは、ソースファイルを対応するRPMに再パッケージ化する、インストール可能なサードパーティのツール/スクリプトです。このスクリプトの使用法は、rpmerizorのmanページというタイトルのここからアクセスできます

抜粋

Rpmerizorは、インストールされたファイルからRPMパッケージを作成できるようにするスクリプトです。コマンドラインでファイルを指定し、rpmメタデータ(パッケージ名、バージョン...)を入力するためのいくつかのインタラクティブな質問に答えるだけです。メタデータのコマンドラインオプションを使用して、バッチモードで使用することもできます。

rpmrebuildの使用

ビルドツールと混同しないようにrpmbuildrpmrebuildあなたが既にインストールされているRPMの再パッケージ化を行うために使用することができ、他のサードパーティのスクリプトです。

抜粋

rpmrebuildは、基本的な使用ですでにインストールされているパッケージからRPMファイルをビルドするためのツールです。rpmrebuildの使用には、rpmのビルドに関する知識は必要ありません。(debianでは、同等の製品はdpkg-repackです)。

openssh-serverを再パッケージ化したいとします。

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

今それをパッケージ化:

$ 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

参考文献


とにかく、それは次のとおりです。jdk-1.6.0_02-fcs.rpm:)それは「インターネット」上にありません
evachristine '6/07/14

JDKのすべてのバージョンの公式RPMは、oracle.com / technetwork / java / javase / downloads / から入手できます。同じバージョンである1.6u2に移動します。
slm

「jdk-1.6.0_02-fcs.rpm」が「1.6u2」であることをどのようにして知ることができますか?:O
エヴァクリスティーヌ2014

1
見つけた!!ありがとう!名前はjdk-6u2-linux-i586.rpmです。
エヴァクリスティーヌ2014

1
@evachristine-うん、それはそれを解決してくれてうれしい。
slm

0

原則としてありません。

運のビットとrpm -qiし、rpm -q --changelogパッケージがどこから来たの洞察を提供します。

それがシステム上で構築されている場合は、実行されているスペックファイルが実際のrpmの作成に使用されている可能性があります。

原則として、ファイルやバイナリをコピーすることはお勧めしませんが、ほとんどのメタ情報はRPMデータベースにあり、実際のファイルがあります。

rpm -q --list <pkg_name> パッケージが展開するすべてのファイルを表示します。

rpm -q --scripts <pkg_name> パッケージをインストール(または削除)することによって実行されるスクリプトを表示するには、展開されるファイルと同じくらい、その目的についての洞察が得られる可能性があります。

そして、インストールする必要がある依存関係はで見つけることができますrpm -q --requires <pkg_name>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.