logrotate
およびrsyslog
を含むさまざまなDebianパッケージは、独自のログローテーション定義を/etc/logrotate.d/
に配置します
これらの定義を上書きする正しい方法は何ですか?
ファイルを変更すると、システムを更新するたびに警告が表示され、私(または他の誰か)が間違った回答をすると、変更が失われる可能性があります。または、私(または他の誰か)が手動でファイルをマージできない場合、新しいログファイルの新しいアップストリーム定義を取得しないリスクがあります。どちらも過去数年間、定期的に発生しています。
00_*
またはzz_*
ファイルの定義を上書きしようとしましたが、重複エラーが発生しました。
error: zz_mail:1 duplicate log entry for /var/log/mail.log
error: found error in /var/log/mail.log , skipping
クリーンな解決策はありますか?変更を毎日定義ファイルに再適用するcronスクリプトを作成する必要がありますか?
編集:より明確にするために、理想的にはrsyslog
のログローテーション定義の99%を維持し、APTで自動的に更新したいと思います。 /var/log/mail.log
の単一の定義を除き、別のローテーションポリシーを適用する必要があります。
Logrotateが重複した定義を許可し、各ファイルの最初または最後の定義のみを使用した場合、私の問題は解決されます。 override
オプションがあった場合、意図的に以前の定義をオーバーライドするものとして定義にフラグを立てると、それも解決されます。
しかし、悲しいかな、/etc/logrotate.d/rsyslog
(およびnginx
など)全体を自分のバージョンで上書きする必要があるようです。
まず第一に、_ etckeeper
などのツールを使用して、/etc
内のファイルへの変更を追跡することをお勧めします。アップグレード中のデータ損失を回避します(他の利点の中でも)。
定義を上書きする「正しい」方法は、構成ファイルを直接編集するです。そのため、dpkg
は構成ファイルの処理方法を知っており、アップグレードによって変更が導入されるとプロンプトが表示されます。残念ながら、あなたが発見したように、それは理想的ではありません。
Debianに適した方法で特定の構成の問題に実際に対処するには、実際にメールメッセージを別のログファイルに記録し、thatを設定することをお勧めしますlogrotate
内:
/etc/rsyslog.d
に新しいログ構成ファイルを追加し、mail.*
を新しいログファイルに送信しますeg/var/log/ourmail.log
( rsyslog
を使用していると仮定します—適宜変更してください);logrotate
構成ファイルで/var/log/ourmail.log
を構成します。これには新しい構成ファイルの追加のみが含まれるため、アップグレードの問題はありません。既存のログファイルは引き続き生成され、デフォルトの構成を使用してローテーションされますが、ログファイルは構成に従います。
Debianでは、構成/バイナリのコピーを、配布のデフォルトで意図されたものとは異なるものに保つ1つの方法は、ファイルを「流用」することです。例えば新しいバージョンのdebパッケージをインストール/更新するときに、特定のファイルを別のディレクトリにインストールするようにパッケージマネージャーに指示します。
dpkg-divert
機能を使用して、BINDおよびISC-DHCPのinit.d sys Vラッパーを何年も保持し、DNSおよびDHCP構成ファイルの整合性をチェックし、変更されたファイルゾーンのシリアル番号を自動的に増やしますBINDでサービスを再起動するとき。
また、defパッケージのバージョンではなく、nfsenサーバーでそれを使用して、コンパイルされたバイナリのバージョンを保持します。
このようにして、元の場所を心ゆくまで変更できます。
私は好みに応じて、つまりファイルシステム構成の標準的な場所を変更するために、あまりにも多くのシステムを管理しています。したがって、この機能を、より複雑な構成でこの機能を使用して、変更を抑制したくないが、アップグレードから利益を得たいと考えています。
Debianでデフォルトで使用されているファイルダイバーションがすでに存在している場合でも、次のコマンドを使用してそれらを一覧表示します。
dpkg-divert --list
man dpkg-divert
から
例
To divert all copies of a /usr/bin/example to /usr/bin/example.foo, i.e. directs all packages providing /usr/bin/example to install it as /usr/bin/example.foo, performing the rename if required: dpkg-divert --divert /usr/bin/example.foo --rename /usr/bin/example To remove that diversion: dpkg-divert --rename --remove /usr/bin/example To divert any package trying to install /usr/bin/example to /usr/bin/example.foo, except your own wibble package: dpkg-divert --package wibble --divert /usr/bin/example.foo --rename /usr/bin/example To remove that diversion: dpkg-divert --package wibble --rename --remove /usr/bin/example
Debian-Administration.orgサイトからも参照してください バイナリをdpkg-divertで置き換える
明らかに、このディレクティブは非常に便利ですが、あまり乱用することはお勧めしません。
@Stephen Kittアドレッシング可能性のある構成ファイルの問題については、アップグレードが転送されたファイルに影響し、構成に大幅な変更がある場合、たとえば、新しいDebianバージョンにアップグレードする確率が高く、デーモンが起動せず、その状況は手動で対処する必要があります。また、完全に公平にするために、構成ファイルを流用しなくても発生する可能性があります。
IMO dkpg-divert
は、他のLinuxディストリビューションと比較して、Debianパッケージマネージャーの真の柔軟性を示す機能の1つです。
Stephenが言ったように、構成ファイルを直接編集する必要がありますが、カスタムディレクティブをそこに配置する必要があるという意味ではありません。
編集/etc/logrotate.d/rsyslog
既存のディレクティブの最後に、独自のオーバーライドディレクティブを含む個別のファイルを含む1行だけを追加します。
/var/log/syslog
{
... existing directives ...
include /etc/logrotate.d/override/rsyslog
}
次に、オーバーライドディレクティブのみを含むオーバーライドファイルを作成します。
/etc/logrotate.d/override/rsyslog
weekly
rotate 0
システムのアップグレード中にも注意を払う必要がありますが、パッケージによって提供されるデフォルトの構成に再度パッチを適用するのは非常に簡単です。追加するのは1行だけです。
私にとっては、許容できる妥協案です。少なくとも、システム標準に準拠し、明確で理解しやすい状態を維持しながら、各システムアップグレードの違いを手動でマージする手間が省けます。
少し前に戻って、変更された構成ファイルの警告について考えてみましょう。なぜあなたはそれを手に入れ、それはどういう意味ですか?いいことですか?
ほとんどの場合、Debianはデフォルトの構成ファイルを出荷しており、そのほとんどが必要なことを実行します。変更できる方法は2つあります。管理者またはパッケージャが変更します。どちらも正常で予期されたものですが、両方の場合、正しいことは何ですか?理想的には、両方が同じ変更を行い、マージできることが理想ですが、これを行うのは困難であり、私はそれが起こるのを見たことがありません。ほとんどの場合、パッケージャが行った変更を記録し、それらを受け入れてマージするか、行ごとに拒否します。これまでは限られた方法でこれを行う方法は1つしかありませんでした。これは、簡単な方法で追加を追加できるが、変更や削除はできない構成フラグメントのディレクトリであり、まだ望んでいるほど有用ではありません。重大な変更があった場合は、警告を受け入れ、先頭に立ち、少し時間をとって変更を比較して、正しいことを行えるようにします。
(マイナーな変更であるため)特定のケースでは、問題のあるフラグメントを無効にし(すべての読み取りアクセス許可を取り消すか、それを転用するか、名前を変更して)、別の名前で新しいフラグメントを作成します。バックアップは良いことなので、etckeeperを使用することもお勧めします。