Rpmを使用してデプロイしたいアプリケーションがいくつかあります。アプリケーションデプロイメント内の一部のファイルは、他のデプロイされたパッケージのファイルをオーバーライドします。展開パッケージに新しいファイルを含めるだけでは、rpmの競合が発生します。
Rpmを使用して、すでにインストールされているファイルを更新/置換する適切な方法を探しています。
私はすでにいくつかの解決策を考え出しましたが、何も正しくないようです。
これは、他のいくつかの可能な解決策よりもハッキングのようには感じられませんが、比較的小さな報酬のために大量の作業のように見えます。
これは機能しますが、ファイルの複数のコピーをシステムに散らかすことを意味します。また、各ファイルのrpmビルド仕様の追加メンテナンスを意味します。
これはコピー手法に似ていますが、ファイルはrpmでさえ存在しません。ただし、これはニースの中央構成機関のように機能する可能性があります。
これもコピー手法に似ていますが、煩雑さが少なくなります。ここでの問題は、一部のファイルがシンボリックリンクとして適切に動作しないことです。
私の知る限り、RPMは既存のファイルの更新/置換を許可するようには設計されていないため、あなたが行うことはすべてハックになります。
あなたがリストするオプションの中で、ターゲットシステムが私が管理するシステムである場合は、最も悪いハックとして#1を選択します(あなたが言うように、それはより多くの作業ですが、最もクリーンなソリューションです)#2と#4の組み合わせ(他のシステムのRPMを作成している場合は(可能な場合はシンボリックリンク、そうでない場合はコピー)(RPMの束を配布する必要をなくすためですが、veryドキュメントで私がやっていることを明確にします)。
どのファイルを更新または置換する必要があるか、およびどのように更新する必要があるかを説明していません。これらの質問への回答によっては、他にいくつかのオプションがある場合があります。
.d
サブディレクトリから構成ファイルを取得するようにも設計されています。たとえば、Apacheは/etc/httpd/conf/httpd.conf
と/etc/httpd/conf.d/*.conf
を使用するため、RPMは/etc/httpd/conf.d
を変更する代わりに、/etc/httpd/conf/httpd.conf
の下にファイルをドロップできます。また、変更する必要のあるファイルが、このパターンに従わないが作成できる構成ファイルである場合は、パッケージメンテナーにこの機能を追加するように提案できます。これはすぐには役に立ちませんが、将来のリリースを容易にします。sendmail
やlpr
などのコマンドラインユーティリティの場合、alternatives
システム(man alternatives
を参照)では、複数のRPMを使用できます。これらのユーティリティは並べてインストールされます。繰り返しますが、変更する必要のあるファイルが、このパターンに従わないが作成できるコマンドラインユーティリティである場合は、パッケージメンテナにこの機能を追加するように提案できます。/opt
にダンプすることを検討します。他の管理者のRPMによる。/opt
の下のどこかにインストールするパッケージを作成できます。ソフトウェアコレクションツールは、ユーザーが/usr
の下に通常インストールされるものの代わりにそれらを使用することを選択するための標準化された方法を提供します。 Red Hatはこれを使用して、他の点では安定していて長寿命の(つまり、古い)Red Hat EnterpriseLinuxディストリビューション用の新しいバージョンのツールを配布します。また、rpm -U --replacefiles --replacepkgs ...
を実行して、必要なものを取得することもできます。
RPM%filesディレクティブの詳細については、こちらを参照してください。
http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html
RPMスクリプトレットの%postおよび%preセクションの引数を使用して、パッケージをインストール、アップグレード、または削除するかどうかを判断できます。
$ 1が0の場合、古いものは削除されます。インストールされている0個のパッケージをターゲットにしています。 $ 1が1の場合、新しいものをインストールしています。合計1つのパッケージをインストールすることを目標としています。 $ 1が2以上の場合、このパッケージをアップグレードしています。$ 1は、すでにインストールされているパッケージの数を表します。
これらのセクションは、バージョン間のファイルの管理に役立ちます。バージョン間で何をしているのかを追跡し、1つまたは2つのバージョンをスキップした場合に実行できることを検討します。
これらのことを考慮してください、そしてあなたは行ってもいいはずです!