質問
rpmを使用して、Webアプリケーションを内部的に展開しています。 rpmはファイルをインストールし、Apache、cron、ロギングなどを構成します。
Apache、cron、およびロギングの設定が異なる別の場所にインストールするrpmのテストバージョンをビルドしたいと思います。実動とテストの両方のrpmを同じマシンにインストールできるはずです。
両方のrpmをインストールすると、次のようになります
/opt/app/www/...
/opt/app-test/www/...
/etc/httpd/conf.d/app.conf
/etc/httpd/conf.d/app-test.conf
/etc/cron.d/app
/etc/cron.d/app-test
/etc/init.d/app
/etc/init.d/app-test
これを達成するための良い方法は何ですか?
- 仕様をコピーして、すべての名前を" test&quot ;?に変更しますか?
- prod / test用に異なるサブパッケージを作成しますか?
- rpmマクロを使用して、仕様の場所と名前を変更しますか?
- rpm --relocateを使用しますか?
これを実行しようとする既存のrpmがありますか?
解決
仕様ファイルでは、組み込みマクロそして、テストアカウント(rootではない)とカスタマイズされた〜/ .rpmmacrosを使用して、デフォルトのプレフィックスを変更します:
%_prefix %{_home}
正常に動作します。
テストrpmデータベースを作成することもできます:
$ rpmdb --initdb --dbpath /home/test/var/lib/rpm
そしてこれを.rpmmacrosに入れます:
%_dbpath /home/test/var/lib/rpm
%_rpmlock_path %{_dbpath}/__db.000
他のヒント
別の解決策がありますが、これを実現する別の方法を提案することにしました。ただし、仮想化に問題はありません。とにかく、実稼働と同じマシンでテスト環境を実行することは安全/セキュアではないため、とにかくより良いソリューションです。とはいえ...
おそらく、1つのスペックファイルをテンプレートとして使用し、次のようにします。
...
# somwwhere in the beginning of spec
%global testrel test
#rest of document
Source0: tarball-with-things%{?testrel}.tar.bz
...
%if ${?testrel:1}${!?testrel:0}
# this will execute only in test rpm
%endif
...
特に%{?testrel}
マクロは興味深いものです。両方のバージョンについて同時に更新することができますが、1つのバージョンまたは他のバージョンに固有の何かを保持したい場合は、引き続き可能です。また、データベースへの変更は必要ありません。〜/ .rpmmacrosのカスタムマクロ(ビルド対象のシステムによって異なります)
所属していません StackOverflow