3

私は RPM にはかなり慣れていませんが、それで遊んでいて、少し左翼手で何かをする必要があります。

各環境で同じ rpm パッケージを使用する必要があるという規則に従わなければなりません。%pre と %post を使用してファイルを変更することはできません。

問題は、インストールが make を実行していないことです。実際、テキスト ファイルと xml ファイルのファイル構造をコピーしています。ただし、これらのファイルには環境固有のコードが含まれていますが、残念ながらガイドラインに従う必要があります。

私が考えた「解決策」は、複数のソース ファイルを使用することです。source0 は開発用、source1 はテスト用、source2 は運用用であり、source3 は災害復旧用です。各ソースは、環境名を持つフォルダーに抽出されます (これは望ましいことです!)

$deploy_folder/dev_code

$deploy_folder/test_code

$deploy_folder/prd_code

環境を示す環境変数が与えられます。

これまでのところ、すべてのソースをデプロイしてから、条件を使用して不要なフォルダーを削除しました

if [[ $env_variable == "PRD" ]] ; それから

rm -rf $buildroot/install/$deploy_folder/dev_code

rm -rf $buildroot/install/$deploy_folder/test_code

フィ

*上記の変数をいくらか単純化しました

これはビルド時に機能するように見えますが、rpm -i を実行すると、すべてのコードがデプロイされず、最終的な宛先で他のフォルダーが削除されます。

明らかに、私はおそらく正しい精神で RPM を使用していないので、正しい方法でこれを行っていますか? 私のファイルが基本的にすべて環境固有であることを考えると、より良い方法はありますか?

最終的な宛先にデプロイされるコードにアクセスするにはどうすればよいですか?

ありがとう

4

1 に答える 1

2

あなたが求めているのは、開発、テスト、および本番環境用の単一の rpm です。ビルド時には、明らかにすべてのファイルをビルドする必要があります。私はあなたがファイルをコピーした %build セクションで、すべてうまくビルドしていると仮定しています

$RPM_BUILD_ROOT/$deploy_folder/dev_code
$RPM_BUILD_ROOT/$deploy_folder/test_code
$RPM_BUILD_ROOT/$deploy_folder/prd_code

その後、%files セクションを使用して生成された rpm(s) にこれらのファイルを含めました。

次を使用して、ビルド rpm のファイルが正しい場所にあるかどうかをいつでも確認できます。

rpm -qpl <rpm file.rpm>

インストール時に環境変数の存在に基づいてインストールしたいので、 %post を使用できます。rpmのインストール後に慣れる部分です。アンインストール中にクリーニングを行う場合は、%postun (または %preun) セクションを使用できます。$TESTENV が、本番用の PRD、開発用の DEV、およびテスト用の TEST を持つ環境変数であると仮定すると、%post セクションの次の部分を使用できます。

if if [ "$TESTENV" = "PRD" ]; then
    rm -rf $deploy_folder/dev_code
    rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "DEV" ]; then
    rm -rf $deploy_folder/prd_code
    rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "TEST" ]; then
    rm -rf $deploy_folder/dev_code
    rm -rf $deploy_folder/prd_code
fi

PRD、TEST、DEV 用に単一の rpm を作成することは、推奨される方法ではありませんが、要件がそれである場合、アプローチは問題ないようです。

%pre、%post、%preun、%postun は、インストール時に使用されるセクションで、インストール時に環境変数を確認できます。明らかにビルド時にそれを行うことはできないため、これらのセクションを使用する必要があります。それらを回避する必要がある場合は、すべての製品、開発、およびテストに対して単一の rpm のアイデアを削除することをお勧めします。単一の rpm をドロップすることをお勧めします。1 つのスペック ファイルで、prod、test、devel の 3 つの異なる rpm を sybpackage として作成することもできます。もう 1 つの方法は、3 つすべての製品用に個別の rpm を生成し、単一の仕様からテストおよび開発することです (これは、異なる環境を区別せず、rpm に同様のファイルの 3 つのコピーがありません。

于 2012-10-20T09:37:31.367 に答える