rpmを介してインストールされるJava製品を開発しています。ユーザーが編集できる構成ファイルのセットがあります。これらの設定ファイルは、次の形式のJavaプロパティファイルです。
com.acme.pkg1.setting=something customized 1
com.acme.pkg2.setting=something original 2
これらのファイルはSPECファイルに%config(noreplace)としてマークされているため、アップグレード後に横に.rpmnewファイルを持つことができます。
com.acme.pkg1.setting=something original 1
com.acme.pkg2.setting=something original 2
com.acme.pkg3.setting=something original 3
元のファイルに新しいキーのみを追加する方法でこれらのファイルをマージする方法はありますか?
私の意見は次のとおりです。
- フィルターキー
- キーソート
- comm(1) を使用します。例: comm -23 file.rpmnew.keys file.keys > new.keys
- file.rpmnewからnew.keysと一致するキー=値を抽出する
- ソースファイルに結果を追加する
rpmのアップデート後にスクリプトを使用してこれをどのように達成できますか?
標準のLinuxユーティリティ(comm、diff、sed、awk、grep ...)を使用する方が良いですか?
答え1
設定なしで生の生と生の目標値を設定します。
sed "s/=.*//g" file_original.ini > file_original.raw sed "s/=.*//g" file_target.ini > file_target.raw
私の考えでは、ターゲットが元のターゲットよりも多くのオプションを持つことになると思います。違いを作る:
grep -vf original.raw target.raw > newvals.dat
新しい価値を追加します。
cp -p file_original.ini file_original.ini.rpmsave grep -f newvals.dat file_target.ini >>file_original.ini
これが基本的なアイデアです。多くのエラー処理、クリーンな一時ファイルの生成、クリーンアップが必要です。