2017-12-09 8 views
1

私たちは、32ビットおよび64ビットプラットフォーム用の当社製品のRPMをビルドします。 RPM仕様での製品の名前は、私たちは64ビットの回転数を構築するために32ビットの回転数と--target x86_64を構築するために、コマンドラインをrpmbuildのために--target i586を渡す特定のアーキテクチャー向けのrpmアップグレード

Name: foo 

のようなものを定義しています。 rpm archを製品のインストールディレクトリにエンコードして、32ビット版と64ビット版の両方を同時にインストールできるようにします。

rpmsをうまくインストールできます。例:foo製品、バージョンV4.1の32ビットおよび64ビットのバリアントのインストール:

rpm -i foo-4.1-i586.rpm 
rpm -i foo-4.1-x86_64.rpm 

をしかし、私たちがインストールされている製品のバージョン4.2 32ビットのバリアントにアップグレードしようとすると:

rpm -U foo-4.2-i586.rpm 

RMPは、両方の32ビットを削除し、 64ビット版のインストール済み製品これは望ましくない。ですから、問題は、選択されたアーキテクチャだけをアップグレードできるように、スペックファイルやrpmコマンドラインをどのように微調整するべきなのでしょうか? 明白な解決策は、このように、スペックファイルにパッケージ名でアーチをエンコードするために、次のようになります。

Name: foo-%{_arch} 

をしかし、これはパッケージ名のための共通のアプローチのようにしていません。お知らせ下さい。

答えて

0

--target%_target、%_target_cpu、および%_target_osマクロを設定しただけです。あなたのターゲットプラットフォーム用にビルドされているかどうかは確認しません(Makefileが許可していない限り)。正しい方法は、模擬使用して、それを構築することです:

mock -r epel-7-i386 foo.src.rpm 

その後、あなたはR32ビットのビットパッケージを取得し、あなたがそれらの一つだけをアップグレードすることができるはずです。

+0

rpmbuildはバイナリRPMに正しいアーキテクチャを設定します。だから、他のツールに切り替えても問題は解決しない。 –

関連する問題