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 はユーザが回答しなかった質問は、(パッケージメンテナが定義した) デフォルトと同じように回答されたと仮定します。
他の関連設定項目はフロントエンドが使うインターフェイスです。中でも noninteractive を選んだら、ユーザからの入力は完全に使用不能にされます。パッケージが有益な注意を表示しようとした場合、管理者にメールで通知されます。
debconf を再設定するには、debconf パッケージから提供される dpkg-reconfigure ツールを使ってください; これを実行するコマンドは dpkg-reconfigure debconf です。ここで設定した値は、必要ならば環境変数を使って一時的に上書きすることができる点に注意してください。(例えば、DEBIAN_FRONTEND 環境変数は、debconf(7) マニュアルページで説明されている通り、インターフェイスを制御します)。

6.8.4. コマンドラインインターフェースの取り扱い

ユーザに入力を要求する最後の要素は、dpkg が実行する設定スクリプトで、これは克服することが最も難しいものです。これに対する標準的な解決策はありませんし、無回答以外に良い解決策はありません。
The common approach is to suppress the standard input by redirecting the empty content of /dev/null into it with command </dev/null, or to feed it with an endless stream of newlines. None of these methods are 100 % reliable, but they generally lead to the default answers being used, since most scripts consider a lack of reply as an acceptance of the default value.

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