WebARENA VPSでUbuntu 18.04を24.04まで無理やり上げる手順メモ

VM(Docker等)Ubuntu,VPS,WebARENA

WebARENA VPSでは既に新規受け付けも停止し、提供されるOSイメージも極めて古いものしかなくなっている。 今現在提供されているのは、こちらで確認できたものだけで以下の3点。

  • Ubuntu 18.04
  • CentOS 6.9
  • CentOS 7.4

これではちょっと実用に耐えないので、最新のOSにアップグレードしたいがCentOSはこれまた問題があって、バージョン8以降はAlmaLinuxかRockyLinuxを選択する事になる。

しかしちょっと調べてみたところ、CentOS7からのこれらのアップグレードは色々と問題が発生する様なので、今回はUbuntuを順繰りアップデートする事にする。

これは、Ubuntu 18.04イメージのWebARENA VPSを、再構築せずに24.04 LTSまで引き上げるための実作業メモです。 実施はあくまで自己責任、壊れる事前提で行うべきものです。

18.04 -> 20.04 -> 22.04 -> 24.04 の順次アップグレード専用。 Ubuntu公式のアナウンスでも、LTSの飛び級は不可。

うん。 多分、サービスをはやく閉めたいNTTPCコミュニケーションズからしたら迷惑な話だろうけれど、、、


事前準備

1) まず公式仕様を確認(ログイン情報)

WebARENAの公式マニュアル(コントロールパネル機能)に、Ubuntuイメージのログイン情報が記載されている。

  • ログインユーザーは root ではなく ubuntu
  • Ubuntu初期パスワードは「インスタンス名の i- を除いた文字列」
  • SSH接続先はインスタンスIP、ポート22

例:

インスタンス名: i-[masked]
初期パスワード: [masked]   # i- を除いた文字列

2) tmux は必須

リリースアップグレード中にSSHが切れると、作業端末側のセッション断で進捗確認が困難になりる。
この手順では tmux 上での実行を必須にする。

sudo apt update
sudo apt install -y tmux
tmux has-session -t upgrade 2>/dev/null && tmux attach -t upgrade || tmux new -s upgrade

操作の最低限:

  • 一時離脱: Ctrl+b のあと d
  • 再接続: tmux attach -t upgrade
  • セッション確認: tmux ls

3) バックアップ

必要なバックアップは取っておいてください。
(各ホップ前にWebARENA側スナップショットを取る運用を推奨)

4) アップグレード前の共通初期化(対話抑止込み)

sudo systemctl disable --now wakame-init.service
sudo systemctl mask wakame-init.service

sudo systemctl stop unattended-upgrades apt-daily.service apt-daily-upgrade.service 2>/dev/null || true
sudo systemctl stop apt-daily.timer apt-daily-upgrade.timer 2>/dev/null || true

echo 'ubuntu ALL=(ALL:ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/90-ubuntu-nopasswd >/dev/null
sudo chmod 440 /etc/sudoers.d/90-ubuntu-nopasswd
sudo visudo -cf /etc/sudoers

wakame-init は常駐監視サービスではなく、起動時にメタデータから設定を再投入する初期化処理です。
実際にはネットワーク(/etc/netplan/01-netcfg.yaml)、ホスト名、authorized_keys/etc/hosts などを更新する。
アップグレード作業では起動ハング要因になりやすいため、無効化したまま進める。

非対話用の関数:

ni() {
  sudo env \
    DEBIAN_FRONTEND=noninteractive \
    DEBIAN_PRIORITY=critical \
    NEEDRESTART_MODE=a \
    APT_LISTCHANGES_FRONTEND=none \
    UCF_FORCE_CONFFOLD=1 \
    "$@"
}

dpkg/apt の対話抑止:

sudo tee /etc/apt/apt.conf.d/90-auto-noninteractive >/dev/null <<'EOF2'
Dpkg::Options {
  "--force-confdef";
  "--force-confold";
};
Dpkg::Use-Pty "0";
EOF2

echo 'debconf debconf/priority select critical' | sudo debconf-set-selections
echo '$nrconf{restart} = "a";' | sudo tee /etc/needrestart/conf.d/99-auto-restart.conf >/dev/null
echo 'libc6 libraries/restart-without-asking boolean true' | sudo debconf-set-selections
echo 'grub-pc grub-pc/install_devices multiselect /dev/sda' | sudo debconf-set-selections
echo 'grub-pc grub-pc/install_devices_empty boolean false' | sudo debconf-set-selections
echo 'grub-pc grub-pc/install_devices_disks_changed multiselect /dev/sda' | sudo debconf-set-selections
sudo sed -i 's/^Prompt=.*/Prompt=lts/' /etc/update-manager/release-upgrades

通常ほぼ不要で詰まりやすいものは先に除去:

sudo systemctl stop lxd lxd.socket lxcfs snap.lxd.daemon snap.lxd.activate 2>/dev/null || true
sudo pkill -TERM -f '/usr/bin/lxd|lxcfs' 2>/dev/null || true
sudo apt purge -y lxd lxd-client lxcfs || true
sudo snap remove lxd 2>/dev/null || true

最後に正常化:

tmux has-session -t upgrade 2>/dev/null && tmux attach -t upgrade || tmux new -s upgrade
ni dpkg --configure -a
ni apt -f install -y
sudo apt update
ni apt full-upgrade -y
sudo apt autoremove --purge -y
sudo reboot

本作業(18.04 -> 20.04 -> 22.04 -> 24.04)

以下を3回繰り返す。

  1. 18.04 -> 20.04
  2. 20.04 -> 22.04
  3. 22.04 -> 24.04

各ホップの実行手順

  1. ターミナルA(実行用)を接続し、tmux セッションを用意する。
ssh ubuntu@[server_ipv4_addr]
tmux has-session -t upgrade 2>/dev/null && tmux attach -t upgrade || tmux new -s upgrade
  1. ターミナルB(監視用)を別に接続し、ログ監視を開始して待機する。
    この監視を先に立ち上げてから、ターミナルAでアップグレードを開始する。
ssh ubuntu@[server_ipv4_addr]
sudo tail -f /var/log/dist-upgrade/main.log
  1. ターミナルAでアップデートを実行する。
ni() {
    sudo env \
        DEBIAN_FRONTEND=noninteractive \
        DEBIAN_PRIORITY=critical \
        NEEDRESTART_MODE=a \
        APT_LISTCHANGES_FRONTEND=none \
        UCF_FORCE_CONFFOLD=1 \
        "$@"
}

cat /etc/os-release | grep -E '^(PRETTY_NAME|VERSION_ID|VERSION_CODENAME)='

sudo apt update
ni apt full-upgrade -y
sudo apt autoremove --purge -y

sudo do-release-upgrade -c
ni do-release-upgrade -m server -f DistUpgradeViewNonInteractive
sudo reboot
  1. 再起動後に再ログインして確認する。
cat /etc/os-release | grep -E '^(PRETTY_NAME|VERSION_ID|VERSION_CODENAME)='
uname -r

まだ質問が出る場合の回答固定

DistUpgradeViewNonInteractive を使っても、環境によっては質問が出る。
回答は以下の通りに。

  • Continue running under SSH? -> y
  • Do you want to start the upgrade? -> y
  • sysctl.conf 更新確認 -> N(現行維持)
  • grub-pc デバイス選択 -> /dev/sda のみ
  • Remove obsolete packages? -> y

進捗監視とハング判定

監視は必ず「別ターミナルで事前接続」して実施する。

main.log の更新が10分以上止まったら、ターミナルA側で以下を確認する。

ps -ef | egrep 'apt|dpkg|unattended' | grep -v grep
sudo tail -n 50 /var/log/dist-upgrade/main.log

dpkg lock が出たら削除せず、実行中プロセスを確認:

sudo fuser -v /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock
ps -ef | egrep 'apt|dpkg|unattended' | grep -v grep

後処理

1) システム復帰

sudo rm -f /etc/sudoers.d/90-ubuntu-nopasswd
sudo -k

sudo systemctl enable --now unattended-upgrades.service
sudo systemctl enable --now apt-daily.timer apt-daily-upgrade.timer

wakame-init の扱い:

  • 原則: disabled/inactive のまま運用
  • 理由: WebARENA VPSクラウドはグローバルIP固定で、停止(シャットダウン)ではIPは変わらない
  • 例外: インスタンス削除/再作成/複製でIPやメタデータが変わった直後のみ、一時的に有効化を検討

確認コマンド:

systemctl is-enabled wakame-init.service
systemctl is-active wakame-init.service

2) 最終ヘルスチェック

cat /etc/os-release
php -v
mysql --version || mariadb --version
systemctl status nginx apache2 php*-fpm mariadb --no-pager
sudo do-release-upgrade -c

失敗時の戻し方

WebARENA公式FAQにある通り、スナップショットから複製して戻すのが最短です。
ただし複製時はIPアドレスが変わるため、DNSやFW設定の切り替えをセットで実施。


参考URL(公式)