2016-04-05 20 views
0

私は最近64ビットに移植した32ビットアプリケーションを持っていて、新しいx86_64 rpmパッケージを作成しました。 64ビットマシンでの通常のアップグレードプロセスの一部として、古いi386パッケージを新しいx86_64パッケージに置き換えることができます。32bitパッケージを廃止した64bit rpmパッケージを作成するには?

ただし、古いi386パッケージをx86_64パッケージ(rpm -Uv MyPackage.version-release.x86_64)にアップグレードしようとすると、ファイルの競合が原因でアップグレードが失敗します。私はアップグレードコマンドに--replacefilesフラグを追加した場合、アップグレードは成功しますが、私はrpmのDB数(rpm -q mypackageと)を照会するとき私は2つのインストールパッケージを参照してください。

MyPackage.version-release.i386

MyPackage.version-release.x86_64

x86_64パッケージのspecファイルに「Obsoletes」タグを追加しようとしましたが、1つのアーチのパッケージが別のアーチからパッケージを廃止することはできません。

私はまた、明示的にx86_64版の%のpostinstallスクリプト用のi386パッケージを削除しようとしましたが、それが理由のrpmロック機構(回転数の内側から回転数を呼び出すことはできません...)

の失敗行うにはどのような方法がありますこれはパッケージのインストール\アップグレードプロセスの一環として行いますか?

ありがとう、 Tzippi。

+0

この質問をする場所はhttp://unix.stackexchange.com/ –

+0

です。スペルファイルに 'Obsoletes'タグを正確に追加しましたか?そのパッケージをインストールしようとしたときに何が起こったのですか? –

+0

アップグレードがうまくいくようにするには、「ダミー」の32ビットパッケージを出荷することもできます.64ビットのパッケージにバージョンマッチングされていて、アップグレードが正しく動作するようにする必要があります(32ビットパッケージを残しておいてくださいユーザによって、等)。これは幾分かですが、ちょうど道の下で缶をキックします。 –

答えて

1

i386の最後のパッケージにはバージョン1.1が含まれています。この新しいパッケージを作成してください:

BridgeForMyPackage.spec: 
Version: 1 
BuildArch: noarch 
Obsoletes: MyPackage < 1.2 
Provides: MyPackage = 1.2 
Provides: AnyOtherProvideWhichAreInOriginalPackage 

これは移行のためのブリッジであり、インストールされていない可能性があります。次に、作成します。

MyPackage.spec: 
Version: 1.3 
Obsoletes: BridgeForMyPackage < 2 

だから廉はmypackageと-1.3.x86_64にすぐBridgeForMyPackage-1.noarchにmypackageと-1.1.i386からの移行を選択します。

+0

これが2つの異なるステップで実行された場合、これはうまくいくと思います。 1回のステップでヤムが正しく計算されたと確信していますか? –

+0

コメントありがとう@msuchy。私はこれをyumの代わりにrpmを使って試してみましたが、部分的に動いていました: "rpm -Uv MyPackage.1.3-0.x86_64.rpm BridgeForMyPackage.1-0.noarch.rpm"というコマンドを実行しました。これにより、Bridgeパッケージが最初にインストールされ、i386パッケージが削除され、x86_64パッケージが正常にインストールされましたが、Bridgeパッケージは削除されませんでした。ブリッジパッケージは空であるため、インストールパッケージとしてBridgePackageがリストされているだけの副作用がありますが、これはi386パッケージと同じ結果です... yumを使って再試行します。 – tzippi

+0

yumで試してみてください。私はSpacewalkプロジェクトでこれを正確に行っているので、それがうまく動作すると確信しています。 – msuchy