2

私たちはPythonでアプリケーションを開発しており、RPMを使用してインストールしています。ただし、インストール中にエラーが発生することがあり、それを検出できます。問題は、何か問題が発生した場合にインストールをキャンセルする方法はありますか?「rpm-epackage_name」コマンドを実行しようとしましたが、システムが2つのRPMを並行して実行することを許可していないため、RPMはコードの終了を待機しており、コードは最初のRPMが起動するのを待機しています。独自の「rpm-e」

よろしくお願いします!!

4

2 に答える 2

1

推奨されるアプローチは、パッケージ自体のインストールとパッケージデータ/設定の初期化を分離することです。RPMにパッケージファイルのインストールを処理させます。RPM自体がファイルの競合などを処理します。要件(Requires:)を適切に指定するだけです。

次に、アプリケーションを使用する前に、管理者による初期設定を要求できます。これは、データベースや同様のアプリケーションで非常に一般的なアプローチです。

しかし、他の回答のコメントから、あなたのアプリケーションは1つの醜いことをしていると思います。つまり、RPMによってインストールされたファイルを変更しているということです。それは受け入れられません。常に分離する必要があります:

  • コードと共有データ(アイコンなど)
  • ランタイムファイル(一時ファイル、キャッシュ、ユーザー生成データ)

コードと共有データは、アプリケーションに対して読み取り専用です。インストーラー(rpmまたは他のパッケージマネージャー)のみがアクセスできます。ランタイムファイル(通常は/ var /libまたは$HOMEのどこかにあります)は自由に変更でき、アプリケーションはもちろん可能な限りバージョン間の更新を処理する必要があります。パッケージは、次のように設計する必要があります。

  • rpmは、コードと共有データのインストール/アンインストールを処理します
  • アプリケーションはランタイムファイルの更新とクリーンアップを処理します

言い換えると、rpmはランタイムファイルに触れてはならず、アプリケーションはrpmで制御されているファイルに触れようとしてはなりません

たとえば、データベースでは、管理者が更新前にデータベースをダンプし、新しいデータベースのインストール後にデータベースを復元する必要があります(新しいデータベースでは、データを保存するための内部形式が異なる場合があります)。これは、自動変換を実行できない場合の最後のアプローチです。

于 2012-07-10T11:32:45.947 に答える
0

rpmパッケージのインストールを中止しようとしないでください。インストールの開始に失敗するか、ソフトウェアを実行しようとしたときにエラーをユーザーに通知してください。

于 2010-01-19T11:51:43.537 に答える