Ubuntu 22.04 で APT を実行すると、パッケージ更新中に TUI や入力待ちが表示されることがあります。手動作業なら確認できますが、構成管理やスクリプト実行では、そのまま停止原因になります。
この記事は、Ubuntu 22.04 の既存環境で APT 更新を非対話に寄せるための記事です。単に入力待ちを消すのではなく、debconf、dpkg の設定ファイル差分、needrestart、再起動要否を分けて考えます。
- APT 更新時に入力待ちが出る主な原因
DEBIAN_FRONTEND=noninteractiveの役割と限界- dpkg の設定ファイル差分をどう扱うか
needrestartとサービス再起動の考え方- 更新後に確認する項目
書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
入力待ちが発生する理由
APT の入力待ちは、APT だけが原因ではありません。debconf、dpkg の設定ファイル差分、needrestart など、複数の仕組みが関係します。
| 原因 | 内容 | 対応の方向 |
|---|---|---|
| debconf | パッケージ設定時の質問を表示する | DEBIAN_FRONTEND=noninteractive |
| dpkg conffile | 設定ファイル差分をどう扱うか確認する | --force-confdef と --force-confold |
| needrestart | サービスやカーネル再起動の必要性を確認する | 設定と再起動運用を分けて決める |
APT の実行ログを見る
構成管理ツール経由で APT を実行すると、手動実行より入力待ちが発生しにくいことがあります。APT の履歴を見ると、dpkg オプションが付与されている場合があります。
grep -A5 -B2 'Dpkg::Options' /var/log/apt/history.logたとえば、次のようなオプションで設定ファイル差分の扱いを指定できます。
apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold upgrade --with-new-pkgsDEBIAN_FRONTEND=noninteractive
DEBIAN_FRONTEND=noninteractive は、debconf の対話画面を抑止するための環境変数です。パッケージ設定時の質問を非対話に寄せるため、構成管理や自動化でよく使われます。
sudo DEBIAN_FRONTEND=noninteractive apt install -y package-nameただし、これだけですべての入力待ちが消えるわけではありません。dpkg の設定ファイル差分や needrestart の確認は別に考える必要があります。
dpkg の設定ファイル差分を扱う
パッケージ更新時に、既存の設定ファイルとパッケージ側の新しい設定ファイルが異なる場合、dpkg は扱いを確認することがあります。非対話で進めるには方針を指定します。
| オプション | 意味 |
|---|---|
--force-confdef | デフォルトの判断を使う |
--force-confold | 既存の設定ファイルを優先する |
--force-confnew | 新しい設定ファイルを優先する |
サーバー運用では、既存設定を守るために --force-confold を使うことがあります。ただし、新しい設定ファイルに重要な変更が入っている場合、それを見落とすリスクがあります。更新後に差分やログを確認する前提で使います。
非対話更新の基本形
手動で非対話に寄せて更新する場合の例です。
sudo DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold upgrade --with-new-pkgsこの形は便利ですが、常に万能というわけではありません。重要な設定変更を確認したいサーバーでは、更新前後に差分やログを確認します。
needrestart の扱い
Ubuntu では、ライブラリやカーネル更新後にサービス再起動が必要か確認するため、needrestart が関係することがあります。手動更新では表示を見て判断できますが、自動化では入力待ちになる場合があります。
自動化する場合は、needrestart の設定で再起動確認の挙動を指定します。ただし、サービスを自動再起動するかどうかは影響が大きいため、運用方針に合わせます。
grep -R "\$nrconf{restart}" /etc/needrestart/needrestart.conf /etc/needrestart/conf.d 2>/dev/null || true確認結果に応じて、対象サービスを自動再起動するのか、手動のメンテナンス手順に回すのかを決めます。入力待ちを避けることと、サービス影響を見ないことは別問題です。
Ansible で考える場合
Ansible では、APT モジュールに任せる方が素直です。シェルで APT コマンドを直書きするより、モジュールのオプションで非対話処理を扱う方が管理しやすくなります。
- name: Upgrade packages
become: true
ansible.builtin.apt:
update_cache: true
upgrade: safe
dpkg_options: force-confdef,force-confoldただし、Ansible でも再起動が必要な状態をどう扱うかは別問題です。更新後に /var/run/reboot-required を確認し、必要ならメンテナンス手順として再起動します。
更新後に確認すること
- APT の履歴を確認する
- 保留されたパッケージがないか確認する
- 再起動が必要か確認する
- サービス再起動が必要か確認する
- 設定ファイル差分を無視しすぎていないか確認する
apt list --upgradable
tail -n 80 /var/log/apt/history.log
test -f /var/run/reboot-required && cat /var/run/reboot-requiredまとめ
Ubuntu 22.04 の APT 実行時に TUI や入力待ちを抑止するには、DEBIAN_FRONTEND=noninteractive だけでなく、dpkg の設定ファイル処理オプションや needrestart の挙動も理解する必要があります。
非対話化は自動化には重要ですが、設定ファイル差分や再起動の必要性を見ないまま進めると、別の運用リスクになります。入力待ちを避けることと、更新後の確認を省略しないことをセットで考えます。

