apt upgrade時に出る「Configuration file modified」警告で絶対に「Y」を選んではいけない理由(Redis / MariaDB編)

この記事は約6分で読めます。
この記事が役立ったらブックマーク! あとで読み返したり、環境構築時のリファレンスに活用できます
B! はてなブックマークに追加

Ubuntu環境でパッケージ更新(sudo apt upgrade)を実行している際、ターミナルが突然停止し、以下のような対話プロンプトに遭遇した経験はないでしょうか。

Plaintext
Configuration file «/etc/redis/redis.conf»
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
    D       : show the differences between the versions
    Z       : start a shell to examine the situation
 The default action is to keep your current version.
*** redis.conf (Y/I/N/O/D/Z) [default=N] ?

ここで「最新版のほうがセキュリティ的にも良さそうだから」と反射的に Y(Yes) を選んでしまうと、直後にWebサイトがダウンし、データベースやキャッシュの接続エラーが発生するという深刻なトラブルに直結します。

本記事では、この警告が出るメカニズムと、なぜ「Y」を選んではいけないのか、そして安全に処理するための実務ルールを解説します。

1. 警告が表示される理由

このプロンプトは、Debian/Ubuntuのパッケージ管理システム(dpkg)が提供する保護機能です。

  • 前回のインストール以降、手動(またはセットアップスクリプト)で設定ファイルを書き換えた履歴がある
  • 今回aptで配布された最新パッケージ側にも、新しいデフォルト設定ファイルが含まれている

この2つの条件が揃った際、システムは「ユーザーのカスタム設定を残すべきか、公式の新しいデフォルト設定で上書きすべきか」を判断できないため、管理者に選択を委ねる仕様になっています。

2. なぜ「Y」を選ぶとサービスが停止するのか?

Redis(redis.conf)の場合の被害

WordPressのオブジェクトキャッシュ等でRedisを利用している場合、redis.conf には以下のような設定が施されていることが一般的です。

  • requirepass:接続用パスワード
  • maxmemory:メモリ割り当て上限
  • maxmemory-policy:キャッシュがあふれた際の破棄ルール(allkeys-lru など)
  • bind / protected-mode:接続元IP制限

ここで Y を選ぶと、パッケージ提供者の工場出荷時デフォルト(パスワードなし・メモリ無制限等)で上書きされます。結果として、WordPress側は旧パスワードで認証しようとして失敗し、サイト全体で致命的なエラー(キャッシュ接続不能・500エラー)が発生します。

MariaDB / MySQL(50-server.cnf)の場合の被害

データベースサーバーの 50-server.cnf では、以下のようなチューニングがリセットされます。

  • character-set-server = utf8mb4:絵文字や日本語を扱うための文字コード設定
  • innodb_buffer_pool_size:メモリに応じたバッファ割り当て
  • bind-address:外部やコンテナからの接続許可

Y で上書きされると、文字コードが標準(latin1等)に戻って文字化けを引き起こしたり、バッファサイズが最小値に戻ってクエリ処理速度が劇的に低下するリスクを負うことになります。

3. 実務での正解:どう対応すべきか?

鉄則:原則は N(またはそのまま Enter)を押す

実稼働中の本番・ステージング環境では、N(keep your currently-installed version) を選択するのが最も安全です。

プロンプト末尾に [default=N] と記載されている通り、何も入力せず Enter を押すだけでも N が選択されます。これにより、パッケージ本体(バイナリ)のみが最新化され、設定ファイルは現在動いているカスタム内容がそのまま維持されます。

差分を確認したい場合は D を押す

公式側でどんなパラメータ変更が加わったのか気になる場合は、まず D(Diff) を入力します。

  • 現在の設定と新設定の差分が diff 形式で表示されます。
  • セキュリティ上の重要な新規ディレクティブが追加されていないか確認し、確認が終わったら q で抜けてから N で現在の設定を維持します。

4. もし誤って「Y」を押してしまったときの復旧手順

dpkgは親切な設計になっており、Y を選んで上書きした場合でも、古い設定ファイルをバックアップとして同じディレクトリに残してくれます。

  • 元のファイル名に .dpkg-old という拡張子が付いたファイルが生成されます。
    • 例:/etc/redis/redis.conf.dpkg-old
    • 例:/etc/mysql/mariadb.conf.d/50-server.cnf.dpkg-old

万が一上書きしてサービスが落ちた場合は、バックアップを戻してデーモンを再起動すれば即座に復旧可能です。

Bash
# Redisの復旧例
sudo cp /etc/redis/redis.conf.dpkg-old /etc/redis/redis.conf
sudo systemctl restart redis-server

# MariaDBの復旧例
sudo cp /etc/mysql/mariadb.conf.d/50-server.cnf.dpkg-old /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mariadb

まとめ

インフラ運用における apt upgrade はルーチン作業になりがちですが、ミドルウェアの設定確認プロンプトは最も事故が起きやすいトラップの一つです。

  • 迷ったら N(現在の設定を維持)
  • 新機能の追加を確認したいなら D で差分確認
  • 万が一上書きしたときは .dpkg-old から復元

この3点を押さえておくことで、パッケージ更新に伴う不意のサービス停止を確実に防ぐことができます。

コメント

タイトルとURLをコピーしました