推奨されるアプローチは、パッケージ自体のインストールとパッケージデータ/設定の初期化を分離することです。RPMにパッケージファイルのインストールを処理させます。RPM自体がファイルの競合などを処理します。要件(Requires:)を適切に指定するだけです。
次に、アプリケーションを使用する前に、管理者による初期設定を要求できます。これは、データベースや同様のアプリケーションで非常に一般的なアプローチです。
しかし、他の回答のコメントから、あなたのアプリケーションは1つの醜いことをしていると思います。つまり、RPMによってインストールされたファイルを変更しているということです。それは受け入れられません。常に分離する必要があります:
- コードと共有データ(アイコンなど)
- ランタイムファイル(一時ファイル、キャッシュ、ユーザー生成データ)
コードと共有データは、アプリケーションに対して読み取り専用です。インストーラー(rpmまたは他のパッケージマネージャー)のみがアクセスできます。ランタイムファイル(通常は/ var /libまたは$HOMEのどこかにあります)は自由に変更でき、アプリケーションはもちろん可能な限りバージョン間の更新を処理する必要があります。パッケージは、次のように設計する必要があります。
- rpmは、コードと共有データのインストール/アンインストールを処理します
- アプリケーションはランタイムファイルの更新とクリーンアップを処理します
言い換えると、rpmはランタイムファイルに触れてはならず、アプリケーションはrpmで制御されているファイルに触れようとしてはなりません。
たとえば、データベースでは、管理者が更新前にデータベースをダンプし、新しいデータベースのインストール後にデータベースを復元する必要があります(新しいデータベースでは、データを保存するための内部形式が異なる場合があります)。これは、自動変換を実行できない場合の最後のアプローチです。