2

1つのRPMインストールから複数のRPMをインストールしようとしています。%postセクションにスペックファイルを作成しました。コマンドを使用して別のrpmをインストールします。

 %post
 rm -f /var/lib/rpm/__db.0*
 rpm --rebuilddb
 rpm -ivh xyz.rpm

ただし、メインRPMがインストールされると、別のrpmインストールではロックが解放されないため、次の警告が表示され、インストールプロセスが停止し、無限に待機します。だからそのための解決策。

4

3 に答える 3

4

私があなたの質問を正しく理解しているなら、あなたはRequiresタグを使うべきです。

于 2013-01-01T07:30:48.517 に答える
1

したがって、以前の回答にコメントを追加することはできませんが、1つ強調したいと思います。

%post中にrpm-iを実行する計画が機能する方法はありません。アーキテクチャ上は、あなたが言及した正確な理由で発生することはありません。rpmはRPMdbをロックし、競合状態や破損を防ぐためにこれを行います。したがって、別の解決策を見つける必要があります。

解決策は1つあり、これまでのところ、Requires:ビットが1つです。現在のxyzrpmの後にインストールしたいのですが、「comefrom」ではなく「goto」を使用するのと同じ理由でpost-requiresがないため、「installafter」はありません。

したがって、Requires:タグを使用します。xyz.rpmに応じてabc.rpmだけ、またはabc.rpmに応じてxyz.rpmだけで注文が完全でない場合は、ペイロードを提供しないが両方を必要とする3番目の「仮想」RPMを構築します。少なくとも、この最後のソリューションは、両方のパッケージがインストールされていることを確認します。

他の誰もがRequires:タグを推奨し、%postでrpm-iの代替案について話しましたが、%post自体でrpmを直接使用する可能性に取り組んでいる人は見つかりませんでした。そして私は、提案された計画が機能する可能性が近い将来にないことをOPが知っていることを確認したかったのです。

于 2015-12-30T17:07:13.520 に答える
1

rm -rf /var/lib/rpm/.rpm.lock%postスクリプトで実行できます

于 2020-05-06T11:44:45.790 に答える