はじめに
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へのアップグレードも可能です。
コメント