手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 APT コマンドの TUI を抑止

目次に戻る

Overview

Ubuntu に限らず deb パッケージと APT コマンドを使用する OS 全般に関することですが、コマンドオプションを意識せずに使用すると TUI が表示されて入力待ち状態になることがあります。これは、debconf や needrestart の効果によるものです。

APT としては良かれと思って設計されているものと思いますが、Yum や DNF に慣れているとかなり扱いづらい設計です。都度の確認は不要なのでとりあえずデフォルトで進めてもらいたいです。

本稿では TUI を表示しない APT コマンドの使用方法を記載しています。他の手順もこのコマンドを使用しています。

前提条件

  • こちらを参考にネットワーク設定が完了していること。

Ansible 実行ログとの比較と考察

DEBIAN_FRONTEND=noninteractive は当初から知っていたのですが、Ansible で APT コマンドを使用する際は この問題が発生しない為、Ansible ではどのように APT コマンドを発行しているか気になりました。

APT コマンドのログは /var/log/apt/history.log に記載されており、Ansible から発行した APT コマンドには -o Dpkg::Options::=--force-confdef, -o Dpkg::Options::=--force-confold 等の見慣れないオプションが付与されていました。

myadmin@ubuntu:~$ cat /var/log/apt/history.log
Start-Date: 2022-05-29  12:29:49
Commandline: /usr/bin/apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold upgrade --with-new-pkgs
Requested-By: myadmin (1000)
Upgrade: libjson-c5:amd64 (0.15-2build4, 0.15-3~ubuntu1.22.04.1)
End-Date: 2022-05-29  12:29:49

Start-Date: 2022-05-23  15:06:57
Commandline: /usr/bin/apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install postfix
Requested-By: myadmin (1000)
Install: postfix:amd64 (3.6.4-1ubuntu1)
End-Date: 2022-05-23  15:07:08

コマンドオプションをキーワードにして検索してみると、Debian 管理者ハンドブックに記載されている内容そのままです。この内容でも「奇跡の組み合わせ」とされていることから、これらの挙動は apt, dpkg のかなり深い根本に関わるものと想像できます。逆に言うと一概に正しい方法は無く、エンジニアが各々の方法で対応しているのが現状の様です。

http://l.github.io/debian-handbook/html/ja-JP/sect.automatic-upgrades.html

APT の TUI を抑止する情報はネット上に散乱している状態ですが、Debian 管理者ハンドブックに書かれている情報と、実際に Ansible で使われているコマンドオプションの内容から、Ansible が発行しているコマンドオプションを参考にするのが今のところ確実そうです。

Dpkg コマンドオプションの説明は以下の通りです。

コマンドオプション説明
-o Dpkg::Options::=–force-confdef–force-confdef は、パッケージがデフォルトの設定ファイルを持っている場合に、新しい設定ファイルが提供されても、既存の設定ファイルを上書きしないように指示します。
-o Dpkg::Options::=–force-confold–force-confold は、パッケージがアップグレードされる際に新しいバージョンに含まれる設定ファイルが既存の設定ファイルと競合する場合、既存の設定ファイルを保持するように指示します。
Dpkg Option

–with-new-pkgs は、APT の upgrade コマンドのオプションとして使用されます。このオプションを使用すると、APT は新しいパッケージが利用可能な場合にのみパッケージをアップグレードするようになります。通常、upgrade コマンドはシステム内のすべてのパッケージを最新のバージョンにアップグレードしますが、–with-new-pkgs オプションを指定すると、新しいパッケージがない場合はアップグレードをスキップします。このため、より効率的なアップグレードが可能になると思います。

これに行き着くまで needrestart をアンインストールしてみたりといろいろと試しましたが、どうもしっくりこなく後述の内容に落ち着きました。

TUI を抑止する APT コマンド

システムアップデート

システム全体をアップデートする際の例です。これにより確実に TUI を抑止できます。欠点はコマンドが長くなるので手入力は現実的で無くコピペになるでしょう。

myadmin@ubuntu:~$ sudo apt update
myadmin@ubuntu:~$ sudo DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold upgrade --with-new-pkgs

新規パッケージのインストール

一例として Postfix をインストールしています。説明はシステムアップデートと同じです。

myadmin@ubuntu:~$ sudo DEBIAN_FRONTEND=noninteractive apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install postfix

長すぎるコマンドオプションを短くする

前述の通り、コマンドオプションが長すぎるため、手動入力は現実的ではありません。デフォルトの設定値としてこれらのコマンドオプションを定義できないか検討してみました。

DEBIAN_FRONTEND=noninteractive

まず、DEBIAN_FRONTEND=noninteractive についてです。これは単なる環境変数であり、対処は以下の通り簡単です。これにより、次回のログイン時からは apt コマンドに DEBIAN_FRONTEND=noninteractive を含める必要はありません。

myadmin@ubuntu:~$ sudo tee /etc/profile.d/debian_frontend.sh <<"EOF"
export DEBIAN_FRONTEND=noninteractive
EOF

これにより、僅かですがコマンドを短くすることができます。

myadmin@ubuntu:~$ sudo apt -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confold install postfix

-o Dpkg::Options::=–force-confdef, -o Dpkg::Options::=–force-confold

-o Dpkg::Options::=--force-confdef, -o Dpkg::Options::=--force-confold については、/etc/apt 内の設定を色々と試しましたが、デフォルトの動作とすることはできませんでした。検証自体も結果を確認するのが面倒ということがあり、一旦諦めることとします。機会があれば、また検討したいと思います。

目次に戻る

Ubuntu 22.04 APT コマンドの TUI を抑止

コメントを残す

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

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

トップへ戻る