色々、そう色々ありましたが、実施してきました。22.04LTSから24.04LTSへのアップグレード。それもserver版です。正確には24.04.1へのアップグレードですが。
致命的バグが発覚したために一旦取り下げになっていた24.04.1へのアップグレードパスですが、それほど時間を置く事もなく再開されました。ので、ストレージをまるごとバックアップしていざ実行。普通にdo-release-upgradeです。
結果は一応成功。しかし当然のように問題がいくつも発生しました。以下にその中でもひどかったものを2点抜粋します。いずれもDNS関連です。
1. ローカルホストの名前解決に失敗
これは意味がわからないかもしれません。私も意味がわかりません。具体的には、アップグレード後に、sudo等の、おそらくはホスト内の特定プロセスにアクセスする際にローカルホストのIPにアクセスする類の操作の際に、遅延が生じ、ローカルホストの名前解決に失敗した旨のエラーを吐くようになったのです。その結果、各コマンドの実行の度に何十秒から遅延するので、まともに作業が出来ません。改めて書いても意味がわかりません。何で・・・?
まあ、バグに理由を求めても仕方ありません。解決方法は簡単です。/etc/hostnameと/etc/hostsを修正するだけです。
/etc/hostnameの方は、私の環境ではなぜかホスト名の前に謎の文字列が数文字追加されていました。余計な文字列を削除してホスト名だけに。
それでも解決しなかったので、/etc/hostsの、localhostが記載されているところ(127.0.0.1と::1のところ)にローカルホスト名を挿入しました。これで解決。
しかし何なんでしょうね。ホスト名の名前解決のルーチンにバグが入ったっぽいですけど、何でそんな事になるんだろう。
2. DNSの機能不全
こちらはだいぶ深刻です。全ての名前解決に失敗するようになったのです。アップグレード直後は問題なかったのですが、そこから一度アップデート->再起動をしたらその後から発生するようになりました。もはや何も出来ません。推測される原因は、24.04LTSではDNS関連はsystemd-resolvedに移行しているのですが、その辺のアップグレード(もしくはコンポーネントそのもの)に不具合がある、という事なのだろうと思うのですが。
なお、先にアップグレードしたクライアントPCでは同様の問題は生じていません。ここから考えられる事としては、クライアントPCではネットワークインターフェースはイーサネット1つのみですが、当該サーバーでは複数のネットワークインターフェースを有しているのでその辺りが原因じゃないかと推測されます。
補足すると、今回採用されたsystemd-resolvedでは、複数のネットワークインターフェースがあってそれぞれdhcp等で別のDNSが割り当てられる場合、デフォルトで各々のDNSを参照するようになっているのですが、そのルーティング等が上手く動作していないんじゃないかと。また、この他にGLOBALのDNSサーバも設定できるようになっています。チェックしてみたところ、GLOBALも含めいずれのDNSサーバーも有効な状態でした。にも関わらず名前解決は失敗するのです。わけがわかりません。が、考えてもどうにもなりません。何なんでしょうね。
解決方法は、本来的にはsystemd-resolvedの設定修正等で解決するのが正攻法だと思うのですが、そのやり方は色々試したものの今の所成功していません。ので、差し当たり従来のresolv.confに戻しています。手順は簡単ですが、一応記載しておきます。以下の通り。
2-1. /etc/resolv.confの書き換え
/etc/resolv.confは、24.04のバージョンではシンボリックリンクになっています。ので、リンク先を別のファイルに変更します。例えばresolv.tmpfix.confというファイルにするなら、
$ sudo ln -sf /etc/resolv.tmpfix.conf /etc/resolv.conf
等とした上で、/etc/resolv.conf(/etc/resolv.tmpfix.conf)に従来の通りにDNSサーバーを書き込みます。
例: nameserver 8.8.8.8 nameserver 1.1.1.1
※上記は、cloudflare提供のDNSサーバー(8.8.8.8,1.1.1.1)を設定する場合
普通は各々適切なDNSがあるでしょうからそれを設定します。
そしてDNSを再起動。(別にしなくてもいいかもしれません。念の為)
$ sudo systemctl restart systemd-resolved.service
これで一時的にDNSが復旧します。
なお、DNSが設定されているかどうかを確認するには、下記コマンドを使います。
$ resolvectl status
他にも色々問題はありますが、とりあえず大きなものはこの辺り。お疲れ様でした。
<追記>
さらに別のPCでひどい目に。