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

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

SLESのバージョン/アーキテクチャが同じ2台のマシンがあります。

マシン#Aに「foo」ソフトウェアがインストールされており、これがrpm -qa

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

foo.rpmこの情報は、どのソース(インターネットなど)からも取得できません。

質問

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

rpmにも事前/事後スクリプトがあると思います。だからfoo.rpm依存関係はありますか?)をインストールできます。

答え1

これを正しく行うことは可能ですが、非常に難しいです。紛失した場合は、新しいRPM.specファイルを作成し、「偽の」ソースRPM(SRPM)ファイルを作成して使用できますrpmbuild --rebuild

引き続き実際のRPMを探してみましょう。質問に具体的な内容を記載していませんでしたが、私の経験上、検索方法を知っていれば、インターネット上で何でも見つけることができます。私はRed Hatディストリビューション用のRPMの以前のバージョンが10年以上使用されていないことを発見したので、このRPMの残りの部分がどこにもないとは信じられません。

また、RPMに含まれているアプリケーションのソースコードに戻り、それを使用してRPMを再構築することもできます。通常、ソースアプリケーションには.specRPMを再構築するために必要なファイルが含まれています。

.spec最後に、Red Hatベースのデプロイ用のKojiなどのビルドサービスからソースコードとファイルを取得できます。 SuSEは同様のビルドサービスも維持するため、これらのサービスから以前のビルド成果物を検索できます。

バイナリをそのままインポート

この方法では、あるシステムから実際の実行可能ファイルを抽出し、別のシステムに展開するためにパッケージ化できます。

マシンA

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

マシンB

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

SLESのRPMバージョン

このスレッドの投稿によると:Re:インストールされたパッケージからRPMを生成する方法 rpmSLESにはこのスイッチがあるそうです--repackage。この機能はRed Hatエディション(FedoraまたはCentOS)にはありません。しかし、投稿によると、次のように使用できます。

$ rpm -e --repackage <somepackage>

完了したら、ここからRPMにアクセスできます。

/var/spool/repackage

rpmerizorの使用

回転速度ソースファイルを適切なRPMに再パッケージするサードパーティのツール/スクリプトをインストールできます。スクリプトの使い方はここで確認できます。rpmerizorのマニュアルページ

抜粋

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

rpmを使用した再構築

ビルドツールと混同しないでください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

引用する

答え2

一般的に言えばそうではありません。

運が良ければ、パッケージのソースに関する情報を提供するrpm -qiことができます。rpm -q --changelog

実行中のシステムに構築されている場合は、実際のrpmを作成するために使用された仕様ファイル(両方ともそうでない場合)がまだ存在する可能性があります。

通常、ファイル/バイナリのコピーはお勧めできませんが、ほとんどのメタ情報はRPMデータベースにあり、実際のファイルがあります。

rpm -q --list <pkg_name>パッケージによって配布されたすべてのファイルを表示します。

rpm -q --scripts <pkg_name> パッケージをインストール(または削除)して実行されたスクリプトを表示すると、少なくとも配布されたファイルと同じくらいその目的に関する洞察を得ることができます。

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

関連情報