手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 APT 非対話更新 – needrestart と入力待ちを制御する

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-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
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 の挙動も理解する必要があります。

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

関連する記事
Ubuntu 22.04 APT 非対話更新 – needrestart と入力待ちを制御する

コメントを残す

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

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

トップへ戻る