Ubuntu 20.04から22.04へのアップグレードメモ

その他
スポンサーリンク

はじめに

Ubuntu 20.04 LTS(Focal Fossa)から22.04 LTS(Jammy Jellyfish)へのアップグレードを、SSH経由で本番環境にて実施しました。この記事では、実際に遭遇したトラブルと解決方法を含めた完全な手順を記録しています。

特に、Nginx、MySQL、仮想通貨デーモンなどが稼働している本番環境でのアップグレード経験を共有します。

環境情報

  • アップグレード前:Ubuntu 20.04.6 LTS
  • アップグレード後:Ubuntu 22.04.5 LTS
  • 接続方法:SSH経由(カスタムポート使用)
  • 稼働サービス:Nginx、MySQL、PHP、仮想通貨デーモン

事前準備

バックアップの作成

アップグレード前に必ず以下のバックアップを取得してください:

  • 重要なデータファイル
  • データベース(MySQLなど)
  • 設定ファイル(/etc/nginx、/etc/ssh など)
  • 可能であればシステム全体のスナップショット

システムの更新

sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt autoremove

保留パッケージの処理

cloud-initなどのパッケージが保留される場合があります:

sudo apt install cloud-init
sudo apt full-upgrade

再起動

sudo reboot

アップグレード手順

アップグレード設定の確認

cat /etc/update-manager/release-upgrades

Prompt=ltsになっていることを確認します。

アップグレード開始

sudo do-release-upgrade
⚠️ 注意:SSH経由での実行時、ポート1022に予備のSSHデーモンが起動します。ファイアウォールを使用している場合は、以下のコマンドでポートを開放してください:

sudo ufw allow 1022/tcp

アップグレード中の選択肢

アップグレード中、いくつかの確認画面が表示されます:

  • サービスの自動再起動:「Yes」を選択(libc6の設定)
  • SSH設定ファイル:「現在の設定を維持」を選択(カスタム設定を保持)
  • Nginx設定ファイル:「現在の設定を維持」を選択(カスタム設定を保持)
  • 古いパッケージの削除:「y」で削除

遭遇した問題と解決方法

問題1:ModuleNotFoundError: No module named ‘DistUpgrade’

アップグレード実行時に以下のエラーが発生:

ModuleNotFoundError: No module named 'DistUpgrade'

解決方法:

sudo apt install --reinstall python3-distupgrade python3-update-manager
sudo apt install --reinstall python3-requests-unixsocket
sudo apt install --reinstall update-manager-core

問題2:ModuleNotFoundError: No module named ‘distro_info’

Python依存関係の問題が発生:

ModuleNotFoundError: No module named 'distro_info'

解決方法:

sudo apt purge python3-distro-info
sudo apt install python3-distro-info

問題3:ModuleNotFoundError: No module named ‘lsb_release’

lsb_releaseモジュールが不足:

解決方法:

sudo apt install --reinstall lsb-release

問題4:MongoDB起動エラー(exit code 14)

アップグレード後、MongoDBが起動しない問題が発生。ログには以下のエラー:

Failed to start up WiredTiger under any compatibility version

これは古いMongoDBデータファイルとMongoDB 6.0の互換性問題です。

解決方法:

sudo systemctl stop mongod
sudo mv /var/lib/mongodb /var/lib/mongodb.backup
sudo mkdir /var/lib/mongodb
sudo chown -R mongodb:mongodb /var/lib/mongodb
sudo systemctl start mongod

その後、MongoDBのユーザーとデータベースを再作成:

mongosh
use データベース名
db.createUser({
  user: "ユーザー名",
  pwd: "パスワード",
  roles: [{role: "readWrite", db: "データベース名"}]
})
exit

アップグレード後の確認

バージョン確認

lsb_release -a
uname -r

サービスの動作確認

sudo systemctl status nginx
sudo systemctl status mysql
sudo systemctl status mongod

クリーンアップ

sudo apt update
sudo apt upgrade
sudo apt autoremove
sudo ufw delete allow 1022/tcp

無効化されたPPAの再有効化

アップグレード中に無効化されたサードパーティリポジトリを再有効化:

sudo add-apt-repository ppa:ondrej/php
sudo apt update

重要なポイント

  • SSH設定は必ず保持:カスタムポートやセキュリティ設定を変更した場合、「現在の設定を維持」を選択
  • 設定ファイルの判断:基本的にカスタマイズした設定は保持、デフォルトのものは新バージョンを採用
  • Python依存関係:複数のPythonモジュールエラーが発生する可能性があるため、1つずつ解決
  • データベースの互換性:MongoDBなど、データベースのバージョン互換性に注意
  • 時間の確保:アップグレードには1〜2時間かかる場合があるため、メンテナンス時間を確保

トラブルシューティング Tips

SSH接続が切れた場合

ポート1022の予備SSHで接続:

ssh -p 1022 user@server-ip

アップグレードが途中で止まった場合

sudo dpkg --configure -a
sudo apt --fix-broken install
sudo do-release-upgrade

ログの確認

tail -f /var/log/dist-upgrade/main.log
journalctl -xe

まとめ

Ubuntu 20.04から22.04へのアップグレードは、いくつかのトラブルはあったものの、最終的には成功しました。特に以下の点が重要でした:

  • 事前のバックアップ
  • Python依存関係の問題への対処
  • カスタム設定ファイルの保持
  • データベースの互換性問題への対応

本番環境でのアップグレードは慎重に行う必要がありますが、適切な準備と対処方法を知っていれば、安全に実施できます。

Ubuntu 22.04 LTSは2027年4月までサポートされており、必要に応じて後日24.04 LTSへのアップグレードも可能です。

コメント