Debian JP Project

(for vocal browsers: toc, main)

Google
WWW 全体 www.debian.or.jp 検索


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]


Debian ポリシーマニュアル
Appendix E - 設定ファイルの取り扱い (旧 Packaging Manual より)


dpkg はパッケージ設定ファイルをある程度自動的に操作できます。

そのメカニズムが妥当かどうかは、多数の要因によります。 けれども、基本的にはある特定の設定ファイルに対して二つのアプローチがあります。

簡単な方法は、パッケージ中にできうる限り最良のパッケージ設定ファイルを含んだ形でリリースし、以降の更新には dpkg の conffile メカニズムを使用することです。 設定ファイルをユーザが編集することがなさそうでも、仮に編集していた場合にはその編集が失われないようにしたい、またはそのパッケージの新しいバージョンはそんなに頻繁にはリリースされない、そんな場合にはこれは適したアプローチです。

より複雑な方法として、設定ファイルを postinst スクリプト中でスクラッチから構築する方法があります。 そして、パッケージの初期のバージョンからのバグをその中で自動的にフィックスしていくようにします。 これは、構成ファイルがそれぞれのシステムによって違う場合に使用される方法です。


E.1 dpkg による設定ファイルの自動操作

パッケージに は、conffiles と呼ばれる制御情報ファイルを含めることができます。 このファイルは、自動操作を必要とする設定ファイル名一覧です。 設定ファイル名は、一行につきひとつのファイルを絶対パスで書かれていなければいけません。 また、参照されるファイルはパッケージ中に含まれていなければいけません。

パッケージが更新されるとき、dpkg は、設定の段階において、設定ファイルを処理します。 設定の段階とは、パッケージの postinst スクリプトを実行する直前です。

dpkg は、それぞれの設定ファイルについて、パッケージに含まれているものが現在のバージョン (つまり、今アップグレードしようとしている) のパッケージに最初に含まれていたものと同一のものであるかをチェックします。 同時に、現在のバージョンのパッケージで最初に提供されていたものと、現在システムにインストールされているものとの比較も行ないます。

ユーザとパッケージ管理者のどちらがもが設定ファイルを変更していない場合は、設定ファイルはそのままインストールされます。 どちらかが以前のバージョンの設定ファイルを編集していた場合は、その編集されたバージョンが優先されます。 つまり、ユーザが設定ファイルを編集しており、パッケージ管理者が違ったバージョンを出していなかったなら、 何の報告も無しに、ユーザの変更がそのまま残されます。 けれども、パッケージ管理者が新しいバージョンを出していて、 ユーザが設定ファイルに手を加えていなかった場合は、新しいバージョンがインストールされます (このとき、そのことを知らせるメッセージも表示されます)。 ユーザもパッケージ管理者も両方が設定ファイルを変更していた場合は、 ユーザが自分自身でこの問題を解決するように、入力を促すプロンプトを出力します。

この比較は、ファイル中の MD5 メッセージダイジェストを計算することによって行なれます。 そして、そのインストールされた最新バージョンのファイル中の MD5 を同様に保存します。

そのパッケージのインストールが初めてだったときは、 dpkg は、そのファイルが、現存システムのファイルを上書きするものでないかぎり、そのままインストールします。

けれども、dpkg は、ユーザまたはスクリプトによって削除された設定ファイル (conffile) を置き換えることは ありません。 いくつかのプログラムにおいては、ある設定ファイルが存在しないことによって、他の方法では代替できないような効果をねらっているものがあります。 したがって、もしユーザがそうしたのであれば、削除されたファイルはそのままにしておく必要があります。

パッケージは、パッケージ管理スクリプトの中では、dpkg によって操作される conffile を変更することは できません。 もし、これを行った場合、パッケージのアップデートのとき、 dpkg は、ユーザを混乱させる、また潜在的に危険なオプションを与えることになります。


E.2 管理スクリプトによる設定の取り扱い

ホスト名やネットワークの詳細など、サイト依存の情報を含むファイルは,パッケージの postinst スクリプトによって、作成するようにするのがよいでしょう。

たいてい、値や他の情報を決定するのに、システムの他の部分の状態が必要となります。 そして、その情報が得られないときは、プロンプトを出力して、ユーザに情報を入力してもらうことになります。

この方法を使用するとき、重要なことをいくつか考慮しなければいけません。

設定ファイルを生成するプログラムにバグを発見した場合や、そのファイルのフォーマットが以前のバージョンから変更されたときには、 postinst スクリプトを編集しなければならなくなるでしょう。 ふつう、この場合は、インストールされた設定ファイルから、問題をとりのぞくことになるか、そのファイルの文法を変更することになります。 これは、気をつけて行わなくてはなりません。 すでにユーザはその問題に対処するように設定ファイルを更新しているかもしれません。 スクリプトはすでに対処済みである場合を検出して、正しくそれを扱わなければなりません。

この方針を押し進めるならば、設定ファイルの生成を /usr/sbin に置かれる別のプログラムにまかせるというのは、よい考えです。 このプログラム名は慣習として、packageconfig を使うことになっており、そうすることが適切な場合、パッケージのインストール後に postinst スクリプトから実行されます。この packageconfig プログラムは、ユーザに問い合わせることなしに既存の設定を上書きしてはいけません。 もし、そのプログラムが (後に再設定行う場合ではなく) 初めてセットアップする場合には、そのプログラムは設定ファイルが存在するかどうかをチェックしなければいけません。 そして上書きするためには、dpkg に --force オプションが与えられていなければいけません。


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]


Debian ポリシーマニュアル

バージョン 3.9.5.0, 2014-07-03

The Debian Policy Mailing List