Product SiteDocumentation Site

6.8. 自動アップグレード

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

6.8.1. dpkg の設定

既に言及した通り (補注GOING FURTHER 設定ファイルの更新に関連する質問を回避する」を参照してください)、dpkg は設定ファイルの交換時に確認を行わないように設定できます (--force-confdef --force-confold オプションを使います)。しかしながら、人間が入力する必要が生じる状況は 3 種類考えられます。具体的に言えば、APT からの入力要求、debconf からの入力要求、コマンドラインを介したパッケージ設定スクリプトからの入力要求です。

6.8.2. APT の設定

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

6.8.3. debconf の設定

debconf からの入力要求に自動回答する設定はさらに詳細な説明が必要です。設計当初から debconf はユーザに対する質問の妥当性と分量を調整し、同時に質問の表示方法を制御することを目標に設計されました。そのため、debconf データベースに質問を登録する際には各質問に対して表示の妥当性を制御するための優先度を設定する必要があります。現在の優先度が質問に設定された優先度を超える場合、その質問が表示されます。debconf はユーザが回答しなかった質問は、(パッケージメンテナが定義した) デフォルトと同様に回答されたと仮定します。
自動回答に関連する残りの設定項目がフロントエンドの使うインターフェースです。数あるインターフェースの中でも noninteractive を選んだ場合、ユーザからの入力は完全に使用不能にされます。パッケージが有益な注意を表示しようとした場合、管理者にメールで通知されます。
debconf を再設定するには、debconf パッケージから提供される dpkg-reconfigure ツールを使ってください。debconf を再設定するコマンドは dpkg-reconfigure debconf です。ここで設定した値は、必要ならば環境変数を使って一時的に上書きできる点に注意してください (たとえば、DEBIAN_FRONTEND 環境変数は、debconf(7) マニュアルページで説明されている通り、インターフェースを制御します)。

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

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

6.8.5. 奇跡の組み合わせ

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

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

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