Product SiteDocumentation Site

6.9. 自動アップグレード

Falcot Corp は多くのコンピュータを使っているものの人手は不足しているため、管理者は可能な限り自動でアップグレードを行うように努力しています。アップグレード作業を担当しているプログラムは人間の介在がなくても実行されなければいけません。

6.9.1. dpkg の設定

As we have already mentioned (see sidebar GOING FURTHER 設定ファイルの更新に関連する質問を回避する」), dpkg can be instructed not to ask for confirmation when replacing a configuration file (with the --force-confdef --force-confold options). Interactions can, however, have three other sources: some come from APT itself, some are handled by debconf, and some happen on the command line due to package configuration scripts (sometimes handled by ucf).

6.9.2. APT の設定

APT からの入力要求に自動回答する設定は簡単です。つまり -y オプション (または --assume-yes) を使えば、APT の出すすべての質問に「yes」と答えたことになります。

6.9.3. debconf の設定

debconf からの入力要求に自動回答する設定はさらに詳細な説明が必要です。設計当初から debconf はユーザに対する質問の妥当性と分量を調整し、同時に質問の表示方法を制御することを目標に設計されました。そのため、debconf データベースに質問を登録する際には各質問に対して表示の妥当性を制御するための優先度を設定する必要があります。現在の優先度が質問に設定された優先度を超える場合、その質問が表示されます。debconf はユーザが回答しなかった質問は、(パッケージメンテナが定義した) デフォルトと同様に回答されたと仮定します。
The other relevant configuration element is the interface used by the frontend. If you choose noninteractive out of the choices, all user interaction is disabled. If a package tries to display an informative note, it will be sent to the administrator by email.
debconf を再設定するには、debconf パッケージから提供される dpkg-reconfigure ツールを使ってください。debconf を再設定するコマンドは dpkg-reconfigure debconf です。ここで設定した値は、必要ならば環境変数を使って一時的に上書きできる点に注意してください (たとえば、DEBIAN_FRONTEND 環境変数は、debconf(7) マニュアルページで説明されている通り、インターフェースを制御します)。

6.9.4. コマンドラインインターフェースの制御

ユーザに入力を要求する最後の要素は dpkg が実行する設定スクリプトで、これは制御することが最も難しいものです。残念なことに設定スクリプトからの入力要求に自動回答するための標準的な解決策はありませんし、無回答以外に良い解決策はありません。
設定スクリプトからの入力要求に自動回答するための一般的な解決策は、command </dev/null のように標準入力を /dev/null の空内容にリダイレクトすることで標準入力を抑制するか、プログラムに改行文字を送り続けるかです。どちらの解決策も完全に信頼できるわけではありませんが、通常はこれらの解決策を取ればデフォルト回答が使われることになります。なぜなら、多くのスクリプトでは、応答のない場合はデフォルト回答を選択したことになるからです。

6.9.5. 奇跡の組み合わせ

上記の要素を組み合わせれば、小規模で比較的信頼できるスクリプトを設計することが可能です。これで自動アップグレードが可能になります。

例 6.5 非対話型のアップグレードスクリプト

export DEBIAN_FRONTEND=noninteractive
yes '' | apt-get -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade