手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 APT 実行時の TUI / 入力待ちを抑止する – needrestart と非対話更新の整理

Ubuntu 22.04 で APT を実行すると、パッケージ更新中に TUI や入力待ちが表示されることがあります。手動作業なら確認すればよいですが、Ansible などの構成管理や非対話の更新処理では、入力待ちがそのまま停止原因になります。

この記事では、APT 実行時の TUI / 入力待ちを抑止するために、DEBIAN_FRONTEND=noninteractive、dpkg の設定ファイル処理オプション、needrestart を分けて整理します。

なぜ入力待ちが発生するのか

APT の入力待ちは、APT だけが原因ではありません。debconf、dpkg の設定ファイル差分、needrestart など、複数の仕組みが関係します。

原因内容対策の方向
debconfパッケージ設定時の質問を表示するDEBIAN_FRONTEND=noninteractive
dpkg conffile設定ファイル差分をどう扱うか確認する--force-confdef / --force-confold
needrestartサービスやカーネル再起動の必要性を確認するneedrestart の設定、再起動運用の整理

Ansible の APT 実行ログを見る

Ansible 経由で 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-pkgs

DEBIAN_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
cat /var/log/apt/history.log | tail -n 80
[ -f /var/run/reboot-required ] && cat /var/run/reboot-required

まとめ

Ubuntu 22.04 の APT 実行時に TUI や入力待ちを抑止するには、DEBIAN_FRONTEND=noninteractive だけでなく、dpkg の設定ファイル処理オプションや needrestart の挙動も理解する必要があります。

非対話化は自動化には重要ですが、設定ファイル差分や再起動の必要性を見ないまま進めると、別の運用リスクになります。入力待ちを避けることと、更新後の確認を省略しないことをセットで考えるのがよいです。

参考
書籍
参考書籍

Advanced Ubuntu Administration and Management Best Practices

Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

関連記事

Ubuntu 22.04 APT 実行時の TUI / 入力待ちを抑止する – needrestart と非対話更新の整理

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る