コマンドラインのマニュアル

Man » ucf マニュアルオンライン - ucf man ページの詳細なオンラインドキュメント

🌍
ucf - 構成ファイルの更新:構成ファイルにおけるユーザーの変更を保持します。

SYNOPSIS

ucf [オプション] <新しいファイル> <宛先>

ucf [オプション] --purge <宛先>

DESCRIPTION

このユーティリティは、パッケージのメンテナーが提供する構成ファイルの新しいバージョンをユーザーが受け入れるかどうかを尋ねる手段を提供し、さまざまなヒューリスティックを使用して、対話時間を最小限に抑えるように設計されています。Debian ポリシーに従って、debconf を使用してユーザーと対話します。上記の SYNOPSIS では、新しいファイルはパッケージによって提供される構成ファイル(パッケージに同梱されるか、メンテナーのスクリプトによって動的に生成される)であり、宛先は実際の構成ファイルが配置されている場所(通常は /etc の下)であり、エンドユーザーによって変更されている可能性があります。編集されるファイルは実際のファイルであり、シンボリックリンクではないため、ucf はシンボリックリンクをたどって解決してから処理を実行します。可能な限り、ucf は新しいファイルから新しい場所にコピーするときに、新しいファイルの所有権とアクセス許可を保持しようとします。

このスクリプトは、/etc の下にインストールされているファイル(Debian パッケージに同梱されていないが、postinst スクリプトによって処理されるファイル)に対して、conffile のような処理を提供しようとします。Debian ポリシーでは、/etc の下の構成ファイルはユーザーの変更を保持する必要があり、これはメンテナーのスクリプトによって処理されるファイルにも適用されます。ucf を使用すると、/usr(/usr/share/<pkg> は適切な場所です)のどこかに一連のデフォルトの構成ファイルを配布し、/etc にファイル​​を保持することで、ユーザーの変更を保持し、一般的に dpkg が「conffile」に対して通常提供するアップグレード時の機能を提供できます。

さらに、このスクリプトは、conffile のような保護が提供されていなかったファイルを、このスキームの下に移行するための機能を提供し、インストール時に尋ねられる質問を最小限に抑えようとします。実際、移行機能は、dpkg がファイルを conffile ではない状態から conffile 状態に移行するときに提供する機能よりも優れています。上記の SYNOPSIS の 2 番目の形式は、パッケージがパージされたときに構成ファイルに関する情報をパージするために使用され、スムーズな再インストールを可能にするために非常に重要です。

構成ファイルで作業している最中に、ucf はオプションで、対象となる構成ファイルのバージョンのコピーを作成します。たとえば、ucf-old というサフィックスを持つファイルには、ucf によって置き換えられた構成ファイルの古いバージョンが保持されます。また、ucf-new および ucf-dist というサフィックスを持つ構成ファイルのコピーも作成される可能性があり、メンテナーのスクリプトは、パージ中にこれらの拡張子を持つ構成ファイルのコピーをパージすることを検討する必要があります。


オプション

-h, --help

短い使い方メッセージを表示します。

-n, --no-action

ドライランを実行します。スクリプトが実行された場合に実行される操作を表示しますが、実際には何も実行しません。

-d[n], --debug=[n]

デバッグレベルを(オプションの)レベルnに設定します(nはデフォルトで1)。スペースはオプションの数字nの前に置かないでください。これにより、大量のデバッグ情報が表示されます。

-p, --purge

ファイルの状態ハッシュファイルからすべての痕跡を削除します。これにより、パッケージをパージした後に再インストールできるようになります。そうしないと、実際の構成ファイルは削除されますが、ハッシュファイルには残っているため、再インストール時に何も実行されません(新しいファイルのmd5sumがハッシュファイル内のものと一致するため)。要するに、ucfによって管理されるすべての構成ファイルについて、パッケージがパージされる場合に、このオプションをpostrmで使用することを忘れないでください(ucf自体が存在することを前提とします)。注:ucfはこの操作ではディスク上のファイルに触れないため、ファイルの削除は呼び出し元のパッケージの責任です。

-v, --verbose

スクリプトが内部変数の設定について非常に詳細に表示するようにします。

-P foo, --package foo

構成ファイルを更新するときに、パッケージfooによるdpkg-divertのリダイレクトを追跡しません。

-s foo, --src-dir foo

ソースディレクトリを設定します(履歴md5sumは、このディレクトリ内のファイルとサブディレクトリに存在することが予想されます)。デフォルトでは、新しいファイルが存在するディレクトリがソースディレクトリであると想定されます。このオプションを設定すると、環境変数UCF_SOURCE_DIRおよび構成ファイル変数conf_source_dirの設定が上書きされます。

--sum-file foo

履歴md5sumを、デフォルトではソースディレクトリに配置されるのではなく、このファイルから読み取るように強制します。このオプションを設定すると、環境変数UCF_OLD_MDSUM_FILEおよび構成ファイル変数conf_old_mdsum_fileの設定が上書きされます。

--three-way

インストール中に、古いメンテナバージョンと新しいメンテナバージョンの変更点をユーザーに提示し、ローカルの構成ファイルにマージするかどうかを尋ねるオプションを有効にします。ユーザーが結果に満足した場合、これらの変更をマージするように要求できます。これにより、ローカルの構成ファイルの変更を保持しながら、新しいアップストリームの変更を組み込むことができます。これは、構成ファイルを登録中にキャッシュ領域に保存し、インストール中にdiff3を使用して行われます(保存されたファイル名は、名前空間の競合を回避するために、構成ファイルの完全なパスを調整したものです)。

--debconf-ok

ucfが、プロンプトを表示するためにすでに実行中のdebconfインスタンスを使用しても問題ないことを示します(debconfが実行されていないときにucfを使用することは常に問題ありません。ucfは必要に応じてdebconfを起動します)。


--debconf-template foo
ucfに、通常ucfによって提供されるdebconfテンプレートではなく、指定されたマルチセレクトdebconfテンプレートを使用するように指示します。呼び出し元は、指定されたテンプレートが存在し、デフォルトのucfテンプレートの選択肢と一致する選択肢のリストがあることを確認する責任があり、`Choices-C: ${CHOICES}`を設定して、返される値がデフォルトテンプレートからの値と一致するようにする必要があります。ただし、選択肢は、--three-wayオプションも設定されているかどうかによって異なる必要があります。

--state-dir /path/to/dir
状態ディレクトリを/var/lib/ucfのデフォルトではなく、/path/to/dirに設定します。主にテストで使用されます。

-Z 目的ファイルのSELinuxセキュリティコンテキストをデフォルトのタイプに設定します。

USAGE

最も一般的な使用方法は非常にシンプルです。configure時のpostinstに1行の呼び出しを記述し、purge時にucfが構成ファイルを忘れるように(--purgeオプションを使用)postrmに別の1行の呼び出しを記述するだけで済みます(ucfがシステムにインストールされている場合)。

ucfによって管理されているファイルをucfレジストリに登録することも推奨されます。これにより、構成ファイルをそれが属するパッケージに関連付けます。これは、ucfrを単純に呼び出すことで行われます。ユーザーは、ucfqツールを使用して、構成ファイルとパッケージの間の関連を照会できます。詳細は、適切なマニュアルページを参照してください。

debhelperを使用するパッケージは、必要なmaintscriptフラグメントの作成をdh_ucfヘルパーを使用して簡素化できます。

メンテナンススクリプトによって管理されているファイルが、保護されていない状態からスクリプトによって提供される保護に移行している場合、メンテナンス担当者は、インストール時に尋ねられる質問を減らすことで、移行を容易にすることができます。具体的には、質問は、対象のファイルが、このパッケージの以前のバージョンで出荷された変更されていないバージョンである場合にのみ行うべきではありません。また、メンテナンス担当者は、このファイルが過去に公開されたバージョンで使用されていたmd5sumに関する情報を提供することで支援できます。

これを行うには、<New file>.md5sumという名前のファイルを作成し、各行に1つのmd5sumを記述します(使用するファイル名は無視されます。defaultという名前のエントリは例外です)。または、<New file>.md5sum.dという名前のディレクトリを作成し、その中に任意の数のファイルを含めることができます。各ファイルには、<New file>の以前のバージョンの1つのmd5sumを含む単一行を含める必要があります。これらのファイルの名前は重要ではありませんが、1つの例外があります。defaultという名前のファイルは特別に扱われます。たとえば、著者は通常、パッケージのバージョン番号またはリリースコード名(7.6.3やpotatoなど)を使用します。過去のmd5sumのいずれとも一致しない場合、過去のmd5sumの記録が不完全であるか、ユーザーが構成ファイルを変更した可能性があります。

デフォルトの過去のmd5sum

前に述べた名前に関する規則の例外は、過去のmd5sumのいずれとも一致せず、<New file>.md5sum.d/defaultというファイルが存在する場合、または<New file>.md5sumにdefaultファイルに対応する行がある場合、それがこのマシンにインストールされていたパッケージの以前のバージョンのデフォルトのmd5sumとして使用されることです。ご覧のとおり、過去にリリースされたパッケージの数が限られている場合(たとえば、1つしかない場合)、メンテナンス担当者は情報に基づいた推測を行いますが、このオプションはメンテナンス担当者に提供されます。


ファイル <New file>.md5sum、またはディレクトリ <New file>.md5sum.d が存在しない場合、または md5sum のいずれも一致しない場合、インストールされた <Destination> ファイルが <New file> と同じであるかどうかをテストします。もし異なる場合は、ユーザーにファイルを置き換えるかどうかを尋ねます。

さらに、オプションとして、ucf はメンテナンス担当者による設定ファイルの古いバージョンを 1 つ保存し、更新時にメンテナンス担当者のバージョンの設定ファイルで行われた変更を計算し、そのパッチをローカルバージョンのファイルに適用することができます(もちろん、ユーザーの要求に応じて)。また、ユーザーはアクションを実行する前に、そのようなマージの結果を確認するためのプレビュー機能を利用できます。

環境変数

変数 UCF_FORCE_CONFFNEW が設定されている場合、新しいファイルは常にインストールされた宛先ファイルを上書きします。一方、変数 UCF_FORCE_CONFFOLD が設定されている場合、インストールされたファイルは静かに保持されます。UCF_FORCE_CONFFMISS は、インストールされた宛先ファイルが存在しない場合(おそらくユーザーが削除したため)にのみ適用され、ucf に欠落したファイルを再作成するように強制します(デフォルトの動作は、ユーザーの意図を尊重し、ローカルに削除されたファイルを再作成しないことです)。さらに、ucf が下位シェルを作成する場合、UCF_CONFFILE_NEW と UCF_CONFFILE_OLD の変数を設定し、これらは変更を検査するのに役立ちます。

DPKG_FORCE 変数の confmiss、confnew、confold、confdef、および confask フラグもサポートされています。詳細は dpkg(1) を参照してください。

ファイル

このスクリプトは、ファイル new_file.md5sum を作成し、ファイル (<New file>、パッケージに同梱されているものと想定) をその宛先である <Destination> にコピーする可能性があります。

/var/lib/ucf/hashfile、および /var/lib/ucf/hashfile.X(X は小さな整数)、過去のバージョンのハッシュファイルが保存されている場所。

/etc/ucf.conf

パッケージ foo が、パッケージに提供される /usr/share/foo/configuration のバージョンの設定ファイル foo.conf に対して、ucf を使用してユーザーとの対話処理を行う場合、post inst ファイルで ucf を単純に呼び出すだけで済みます。

ucf /usr/share/foo/configuration /etc/foo.conf

purge の場合、ucf にファイルの情報を忘れるように指示する必要があります(詳細な例については、/usr/share/doc/ucf/examples を参照してください)。

ucf --purge /etc/foo.conf purge を使用すると、ucf に以前の状態を忘れさせることができます。パッケージが次にインストールまたは更新された場合、ucf はユーザーに現在の設定ファイルを置き換えるかどうかを尋ねます。メンテナンス担当者によって提供されたバージョンの設定ファイルを更新しないという決定を変更する場合は、これを使用してください。

このスクリプトの動機は、Emacs Lisp パッケージの起動ファイルに対して、設定ファイルのような処理を提供するようにすることです(例:/etc/emacs21/site-start.d/50psgml-init.el)。これらの起動ファイルはパッケージと一緒に配布されるのではなく、/usr/lib/emacsen-common/emacs-package-install $package_name というスクリプトによって、インストール後の設定段階でインストールされます。

このスクリプトは、/usr/lib/emacsen-common/packages/install/$package_name にあるパッケージのインストールスクリプトによって、インストールされた各 Emacs のフレーバーに対して、適切な新しいファイル(/usr/share/emacs/site-lisp/<pkg>/<pkg-init.el)、および宛先ファイル(/etc/emacs21/site-start.d/50<pkg-init.el)の値とともに呼び出されることを想定しており、残りの処理はすべてこのスクリプトが行います。

関連項目

[ucf.conf(5)](ucf.conf(5)), [ucfr(1)](ucfr(1)), [ucfq(1)](ucfq(1)), [dpkg]({filename}../../dpkg)(1), [dh_ucf(1)](dh_ucf(1)), [diff3(1)](diff3(1))。

Emacsen-common パッケージに同梱されている Debian Emacs ポリシー。

著者

このマニュアルページは、Manoj Srivastava <_> 氏が Debian GNU/Linux システムのために作成しました。