特定の条件が満たされた場合にYUMトランザクションが失敗するRPMパッケージを作成する方法

特定の条件が満たされた場合にYUMトランザクションが失敗するRPMパッケージを作成する方法

複数のパッケージで構成された製品を梱包しようとしています。

すべての仕様ファイル、パッケージ間の依存関係などを正常に作成しました。すべてインストールされ、うまく機能しています。

私が正常に実行できなかったことの1つは、事前アプリケーションテストを実行することです。場合によっては、パッケージがまったくインストールされないことを望み、ユーザーはパッケージのインストールを実行する前に最初に修正する必要があることを説明するエラーを受け取ります。 。

例:ユーザーがランレベル3で実行されていることを確認し、そうでない場合は、インストール全体を中止し、ユーザーに「最小」プロファイルでCentOSを再インストールするように依頼したいと思います。なぜなら、追加のパッケージはすべて必要ないからです。 「デスクトップ」供給。 (これは単なる例であり、実行するテストがいくつかあります。)

私がこの問題に対処する方法は次のとおりです。

他のすべてのパッケージの「Requires:」ディレクティブに名前が表示される一種の「メタパッケージ」を作成したので、まずYUMによってインストールされ、パッケージ仕様ファイルセクションで必要に応じて%pre行われました。さまざまなテストが実行され、該当する場合はテストエラーが出力され、その後に「exit 1」が表示されます。

私がこのアプローチを選択した理由は次のとおりです。 「すべてのパッケージがこのパッケージに依存していて、このパッケージがインストールに失敗した場合、パッケージマネージャがインストールに失敗したパッケージに依存したパッケージをインストールしようとすると、すぐにトランザクションが失敗するはずです。 」たとえば、Gentooで何らかの理由でパッケージのインストールに失敗した場合、Emergencyは完全に停止しますが、これは依存関係の問題ではなく、パッケージの1つがエラーを返しても、Emergencyを続行するように指示する特別なフラグがある場合でも同様です。

問題は、テストが失敗するとパッケージが失敗することです(RPMは具体的にコード1を返したと言います)。しかし... YUMは、このようなことが起こることを実際に気にしないようです。そして、次のパッケージを含む他のすべてをインストールし続けます。削除されたパッケージ(!)によって異なります。結局、意図的に失敗したパッケージを除いて、すべてのパッケージが正常にインストールされたことが報告されます。

その理由は、トランザクションが開始される前に依存関係チェックが発生し、YUMが使用できるさまざまなリポジトリで依存関係が実際に満たされているためです。それにもかかわらず、依存関係が最終的に失敗すると、依存パッケージのインストールが続くことは私にとっては理解できません。

私の論理に問題があるのでしょうか?私はこれがバグだと思います。誰かがこれまでこのバグを発見したからです(重要な場合はCentOS 6.3にありました...)。しかし、すべてのGoogle-fooで結果は出ていません。同じ質問をする人もいませんでしたが…キーワードを間違って使ったのではないでしょうか?

私が何を間違っているのか?他のアイデア(RPM仕様または他のYUMリポジトリマジックまたはYUM .repoファイル内に適していますが...すべてYUMインフラストラクチャに含まれているため、「yumインストール」の前に外部スクリプトを実行する必要はありません)は次のとおりです。どうもありがとうございました!

ベストアンサー1

パッケージ仕様ファイルの%preセクションで実行したいさまざまなテストを実行し、該当する場合はテストエラーを出力してから「exit 1」を実行します。

これはうまくいきません。 %preスクリプトが失敗した場合、rpmはトランザクションを停止/アンローリングしません。 rpmがACIDトランザクションを処理できない方法はいくつかあり、これがその1つです。解決手順中にトランザクションを停止するには、競合を追加する必要があります。

おすすめ記事