26.04.1のリリースから遅れること1ヶ月強、ようやく24.04から26.04.1へのアップグレードパスが正式にopenされました。
しかしながら、予備PCでのテスト時のアップグレード失敗と、その後の各所での不具合報告の数々を見れば、安心してアップグレードに踏み切れる状況ではない事は明らかでした。
とはいえ、少々時間を空けたところで劇的に改善する見込みもない以上、多少の不具合とそれへの対処は必要な手間として許容せざるを得ないでしょうから、その時間を確保してサーバーのアップグレードに踏み切ったわけです。
結果から言うと、予想通りというかなんというか、準備段階の設定で1件、途中の設定ファイル更新確認が多数、加えて完了間際のサービスの再起動エラー1件。といった感じで、辛くもバックアップの出番はなく完了したもののやたらと時間も手間もかかりました。
以下、その概略メモです。
まずはいつものようにバックアップを取り、updateをかけてからdo-release-upgrade。
そして程なく、アップグレードが始まる前のチェック段階で1件目のトラブルで中断。
[1件目のトラブル(mysqlの認証方式設定) ]
ここで問題になったのはmysqlです。エラーメッセージ等から確認すると、mysqlのバージョン変更に伴い、24.04用のバージョンでユーザー認証に用いていたモジュールが廃止になり、認証方式を切り替えるか旧認証方式を引き続き使うように事前に設定するかしなければアップグレード後にmysqlでログイン等が出来なくなるらしいのです。rootも含めて。なので、アップグレードを進めるにはどちらか対応しろというわけですね。
思うに後者の旧認証方式を使う方法なら、アップグレード後に設定する事が出来る筈なので必ずしも詰むわけではないのかもしれません。とはいえ、更新後は認証に失敗しても多分その辺のメッセージは出ないだろうし方式の変更に気づかないでしょうから事実上詰む可能性が高く、後回しにする意味もない。だからこのタイミングで設定を強制しているんでしょうね。
簡単なのは旧認証方式を使うようにオプションを設定する方ですが、今後の事も考えれば新方式に切り替えた方がいいだろう、というわけで切り替え作業へ。
切り替えはmysqlのコンソールから行います。まずroot(mysqlの管理者アカウント)でコンソールを立ち上げます。
$ mysql -u root -p
切り替え対象となる、すなわち旧方式(mysql_native_password)を使っているユーザーの一覧を取得します。
> SELECT user, host, plugin from mysql.user WHERE plugin='mysql_native_password';
表示されたユーザー毎に、下記コマンドで認証方式の指定付きで新規パスワードを設定して切り替えます。ユーザー名とホストは一覧に表示されているものを入力し、新規パスワードにはそのユーザーのパスワードを入力します。
> ALTER USER 'ユーザー名'@'ホスト名' IDENTIFIED WITH caching_sha2_password BY '新規パスワード';
なお、パスワードの形式に制限がかかっている場合は、その形式に合わせたパスワードを設定する必要があります。何文字以上とか、大文字小文字混合とか、数字入りとか、特殊文字入りとかそういうやつです。どういう制限がかかっているのかわからない場合は、下記コマンドで制限の一覧が表示されるのでそこから確認します。
> SHOW VARIABLES LIKE 'validate_password%';
ユーザー分上記ALTERコマンドを繰り返せばOK。ユーザーが多数の場合はスクリプト等でする必要があるでしょう。というかあまりに面倒な場合には旧認証方式を使う事になるんだと思いますが。全ユーザーのパスワードリセットとか大変すぎますしね。
切り替え・設定後はアップグレードを実行可能になります。(他に問題がなければ。)
[大幅に増えた設定上書きの確認等]
後は基本的にいつもと同じです。設定ファイルを入れ替えるか、とか色々聞かれる度に差分等を確認してyes/noを選択するだけです。
ただ、今回は設定ファイルの入れ替えをするかどうか聞かれる回数がいつもより格段に多かったように思います。adduser.confの更新をするか聞かれたのは多分初めてだと思いますし、メール関連(postfixとdovecot)でかなり仕様変更があったらしく、大量に設定ファイルの更新可否を問われました。コメントアウト程度しか手を入れていないファイルまで。postfixは予備PCでのエラーを出した箇所な事もあり、嫌な予感がよぎります。
あと、今回は1つ見慣れないダイアログが出ました。何かというと、(debianの)popularity-contestモジュールを有効にするか?と聞いてくるものです。説明文を読むと、週一回どんなパッケージを使っているかのレポートをdebian projectに送信するモジュールだそうで。そんな余計かつ明らかに脆弱性に直結しそうなものをサーバーに入れる人なんているの?と疑問を感じると共に、よく確認せずにうっかりyesで入れてしまっていたらと思うと冷や汗が出ました。後からはなかなか気づけないと思いますし、気づいた時の事とか考えると本気で怖いので、こういうのをデフォルトにはしないでほしいですね。
後は概ね順調に進みました。このまま終われ、と半ば祈りながら待つ事しばし、しかしやはりというかそうすんなりとは終わらせてくれませんでした。エラー発生。問題になったのはdovecotです。
[dovecotの仕様変更対応]
エラーを吐いたのはアップグレードが一通り完了し、各サービスを再起動する段階での事でした。dovecotが再起動に失敗したのですね。
ここから設定の修正作業が始まったわけですが、修正箇所は結構多く、おそらくdovecotの設定によって異なるだろう割に長過ぎるでしょうから以下は概略だけ。
そもそも何故そんなに修正が必要なのかというと、dovecotのバージョン2.3と2.4の間で設定ファイルに大幅な仕様変更が加えられているからです。重要な変数が廃止・置き換えになっていたり、書式に変更があったり。しかも後方互換性がない(下記の設定ファイルバージョン変数dovecot_config_version等では2.4.0以降しか設定出来ない)ので、新様式に合わせて手動で修正するより他にないのです。(これは設定ファイルに何かしら変更を加えている場合の話です。何も手を入れていない場合はファイルごと新しいバージョンのものに置き換えれば特に問題はありません。)
この仕様変更は例によってセキュリティ強化に伴うものなんでしょうけれど、dovecotレベルの重要なモジュールには後方互換性は確保して欲しかったですね。せめて移行用の手順書の類が準備してあればだいぶ違ったんでしょうけれどそれもなかったですし、何が起こっているのか、何が問題なのかを調べて、設定ファイルの修正で片が付く事がわかるまでが結構な手間でしたからね。
いや改めて見ると本当に酷い。LTS版の更新にこれが被るとか、多少なりと設定をいじってるdovecotユーザーはほぼ全員が遭遇するじゃないの。どうにかならんかったのか。
ともあれ。修正作業は、起動コマンドを試してみて、エラーが出る度に下記コマンドでサービスの状況をチェックしてどこの設定でエラー引っかかっているのか特定しつつ、エラーの出ている箇所を1つずつ修正していく、というやり方で進めました。
$ sudo systemctl status dovecot.service
私の場合に重要だっただろう修正箇所は、
・/etc/dovecot/dovecot.conf
1. 冒頭(有効な設定の先頭)に下記2行挿入(dovecotのバージョンが2.4.2の場合)
dovecot_config_version = 2.4.2
dovecot_storage_version = 2.4.2
2. ファイル下部のdict{}をコメントアウト
・/etc/dovecot/conf.d/10-auth.conf
disable_plaintext_authをauth_allow_cleartextに変更(yes/noは反転)
・/etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildirを下記2行に置き換え
mail_driver = maildir
mail_path = ~/Maildir
の3件です。
以上でdovecotのエラーは解消。幸いエラーが出る前にアップグレード自体は完了していたので、残るは後始末だけです。
[後始末]
といっても、予備PCの時と同様に、aptの修復コマンド等を一通り走らせてから、不要になったパッケージを削除して完了。特に問題もありませんでした。
以上で作業終了。お疲れ様でした。
最も懸念していたpostfixで問題が起きなかったのは良かったのですが、その相方たるdovecotがやらかしてくれました。とはいえ本当に不具合と言えるのはそれだけで、ssl周りとかのここ数年で色々変化が激しかったその他の重要モジュールでは問題は出ませんでしたし、ネットワーク周りもすんなり移行出来ましたから、予想よりは穏当に収まったのかな、と思います。
しかし精神的にとても疲れました。毎度の事ではあるのですが、どうにかならんのかなあと。ならんのでしょうね。AI任せに出来るような作業でもないでしょうし。やれやれです。