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を再構築することもできます。通常、ソースアプリケーションには.spec
RPMを再構築するために必要なファイルが含まれています。
.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を生成する方法 rpm
SLESにはこのスイッチがあるそうです--repackage
。この機能はRed Hatエディション(FedoraまたはCentOS)にはありません。しかし、投稿によると、次のように使用できます。
$ rpm -e --repackage <somepackage>
完了したら、ここからRPMにアクセスできます。
/var/spool/repackage
rpmerizorの使用
回転速度ソースファイルを適切なRPMに再パッケージするサードパーティのツール/スクリプトをインストールできます。スクリプトの使い方はここで確認できます。rpmerizorのマニュアルページ。
抜粋
Rpmerizorは、インストールされたファイルからRPMパッケージを生成できるスクリプトです。コマンドラインでファイルを指定し、いくつかのインタラクティブな質問に答えると、rpmメタデータ(パッケージ名、バージョン...)が入力されます。メタデータのコマンドラインオプションを使用してバッチモードで使用することもできます。
rpmを使用した再構築
ビルドツールと混同しないでくださいrpmbuild
。rpmrebuild
インストールされた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>
。