Azure の CentOS を Rocky Linux にマイグレーションしてみた

## 背景と目的

CentOS 8 のサポート終了に向けて、既存の CentOS 8 を簡単に Rocky Linux へマイグレーション出来るのか試してみました。

## 前提条件

コマンドの実施環境は、Mac + Azure CLI です。

```zsh:zsh
% sw_vers
ProductName:    macOS
ProductVersion: 11.4
BuildVersion:   20F71

% az version
{
  "azure-cli": "2.26.0",
  "azure-cli-core": "2.26.0",
  "azure-cli-telemetry": "1.0.6",
  "extensions": {}
}
```

## 実施内容

```zsh:zsh
# 環境変数を設定します
region=japaneast
prefix=mnrcentos

# VM のパスワードを生成します
vmpass=$(openssl rand -base64 16)
echo $vmpass

# リソースグループを作成します
az group create \
  --name ${prefix}-rg \
  --location $region

# VM イメージを探します（現時点は OpenLogic が提供している CentOS 8.4 が見当たらなかったので 8.3 にしました）
az vm image list \
  --offer centos \
  --publisher openlogic \
  --sku 8_3 \
  --all \
  --output table

Offer    Publisher    Sku       Urn                                       Version
-------  -----------  --------  ----------------------------------------  --------------
CentOS   OpenLogic    8_3       OpenLogic:CentOS:8_3:8.3.2020120900       8.3.2020120900
CentOS   OpenLogic    8_3       OpenLogic:CentOS:8_3:8.3.2021020400       8.3.2021020400
CentOS   OpenLogic    8_3-gen2  OpenLogic:CentOS:8_3-gen2:8.3.2020120901  8.3.2020120901
CentOS   OpenLogic    8_3-gen2  OpenLogic:CentOS:8_3-gen2:8.3.2021020401  8.3.2021020401

# VM を作成します
az vm create \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --os-disk-name ${prefix}-vmOSDisk \
  --image OpenLogic:CentOS:8_3:8.3.2021020400 \
  --admin-username azureuser \
  --admin-password $vmpass \
  --size Standard_A2_v2 \
  --nsg-rule NONE \
  --storage-sku Standard_LRS

# 自動生成された NSG を見つけます
nsg=$(az network nsg list \
  --resource-group ${prefix}-rg \
  --query "[].name" \
  --out tsv)

# NSG に自身のパブリック IP から SSH 接続出来るようにします
az network nsg rule create \
    --resource-group ${prefix}-rg \
    --name Allow-SSH \
    --nsg-name $nsg \
    --priority 100 \
    --source-address-prefixes $(curl -s inet-ip.info) \
    --destination-port-ranges 22 \
    --access Allow \
    --protocol Tcp

# VM に SSH 接続します
ssh azureuser@$(az vm show \
  --resource-group ${prefix}-rg \
  --name ${prefix}-vm \
  --show-detail \
  --query publicIps \
  --output tsv)
```

## 実施結果

Rocky Linux へのマイグレーションは、時間がかかりますが簡単でした。

```bash:bash
$ wget https://raw.githubusercontent.com/rocky-linux/rocky-tools/main/migrate2rocky/migrate2rocky.sh

$ sudo bash ./migrate2rocky.sh -r
Preparing to migrate CentOS Linux 8 to Rocky Linux 8.

Determining repository names for CentOS Linux 8.....

Found the following repositories which map from CentOS Linux 8 to Rocky Linux 8:
CentOS Linux 8    Rocky Linux 8
appstream         appstream
baseos            baseos
extras-openlogic  extras

Getting system package names for CentOS Linux 8..........

Found the following system packages which map from CentOS Linux 8 to Rocky Linux 8:
CentOS Linux 8        Rocky Linux 8
centos-logos-ipa      rocky-logos-ipa
centos-backgrounds    rocky-backgrounds
centos-gpg-keys       rocky-gpg-keys
centos-logos          rocky-logos
centos-indexhtml      rocky-indexhtml
centos-linux-release  rocky-release
centos-logos-httpd    rocky-logos-httpd
centos-linux-repos    rocky-repos

Getting list of installed system packages.

We will replace the following CentOS Linux 8 packages with their Rocky Linux 8 equivalents
Packages to be Removed  Packages to be Installed
centos-gpg-keys         rocky-gpg-keys
centos-linux-release    rocky-release
centos-linux-repos      rocky-repos

In addition to the above the following system packages will be removed:
centos-linux-release
centos-linux-release

Getting a list of enabled modules for the system repositories.

Excluding modules:
libselinux-python:2.8

Found the following modules to re-enable at completion:
python36:3.6

Running dnf update before we attempt the migration.
Last metadata expiration check: 0:01:25 ago on Tue 13 Jul 2021 11:13:20 AM UTC.
Dependencies resolved.
======================================================================================================
 Package                        Arch    Version                             Repository            Size
======================================================================================================
Installing:
 fwupd                          x86_64  1.5.9-1.el8_4                       BaseOS-openlogic     2.8 M
     replacing  dbxtool.x86_64 8-5.el8
 kernel                         x86_64  4.18.0-305.7.1.el8_4                BaseOS-openlogic     5.9 M
 kernel-core                    x86_64  4.18.0-305.7.1.el8_4                BaseOS-openlogic      36 M
 kernel-modules                 x86_64  4.18.0-305.7.1.el8_4                BaseOS-openlogic      28 M
Upgrading:
 NetworkManager                 x86_64  1:1.30.0-9.el8_4                    BaseOS-openlogic     2.6 M
 NetworkManager-libnm           x86_64  1:1.30.0-9.el8_4                    BaseOS-openlogic     1.8 M
 NetworkManager-team            x86_64  1:1.30.0-9.el8_4                    BaseOS-openlogic     145 k

 （中略）

  yum-utils-4.0.18-4.el8.noarch                                                 
  zip-3.0-23.el8.x86_64                                                         
  zlib-1.2.11-17.el8.x86_64                                                     

Complete!

Done, please reboot your system.
A log of this installation can be found at /var/log/migrate2rocky.log

# 再起動します（マイグレーションを開始してから 37 分後です）
$ sudo reboot

# もう一度 VM に SSH 接続してから実行します
$ cat /etc/os-release 
NAME="Rocky Linux"
VERSION="8.4 (Green Obsidian)"
ID="rocky"
ID_LIKE="rhel fedora"
VERSION_ID="8.4"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Rocky Linux 8.4 (Green Obsidian)"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:rocky:rocky:8.4:GA"
HOME_URL="https://rockylinux.org/"
BUG_REPORT_URL="https://bugs.rockylinux.org/"
ROCKY_SUPPORT_PRODUCT="Rocky Linux"
ROCKY_SUPPORT_PRODUCT_VERSION="8"

# OpenLogic のリポジトリ情報が残っているため下記のエラーが表示されます
$ sudo dnf update
CentOS-8 - AppStream (OpenLogic)                                                                                                                                                                    13 kB/s | 249  B     00:00    
Errors during downloading metadata for repository 'AppStream-openlogic':
  - Status code: 404 for http://olcentgbl.trafficmanager.net/pub/rocky/8/AppStream/x86_64/os/repodata/repomd.xml (IP: 138.91.1.67)
Error: repo 'AppStream-openlogic' のメタデータのダウンロードに失敗しました : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
CentOS-8 - Base (OpenLogic)                                                                                                                                                                         13 kB/s | 246  B     00:00    
Errors during downloading metadata for repository 'BaseOS-openlogic':
  - Status code: 404 for http://olcentgbl.trafficmanager.net/pub/rocky/8/BaseOS/x86_64/os/repodata/repomd.xml (IP: 138.91.1.67)
Error: repo 'BaseOS-openlogic' のメタデータのダウンロードに失敗しました : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
CentOS-8 - Extras (OpenLogic)                                                                                                                                                                       13 kB/s | 243  B     00:00    
Errors during downloading metadata for repository 'extras-openlogic':
  - Status code: 404 for http://olcentgbl.trafficmanager.net/pub/rocky/8/extras/x86_64/repodata/repomd.xml (IP: 138.91.1.67)
Error: repo 'extras-openlogic' のメタデータのダウンロードに失敗しました : Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
リポジトリーを無視します: AppStream-openlogic, BaseOS-openlogic, extras-openlogic
メタデータの期限切れの最終確認: 0:25:01 時間前の 2021年07月13日 11時31分46秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!

# OpenLogic のリポジトリ情報を無効にします
$ sudo mv /etc/yum.repos.d/OpenLogic.repo /etc/yum.repos.d/OpenLogic.repo.bak
$ sudo mv /etc/yum.repos.d/OpenLogicCentOS.repo /etc/yum.repos.d/OpenLogicCentOS.repo.bak

# エラーが表示されなくなりました
$ sudo dnf update
メタデータの期限切れの最終確認: 0:32:16 時間前の 2021年07月13日 11時31分46秒 に実施しました。
依存関係が解決しました。
行うべきことはありません。
完了しました!

# waagent も動いてくれています
$ ps aux | grep waagent
root         929  0.0  0.6 335816 23108 ?        Ss   11:53   0:00 /usr/bin/python3.6 -u /usr/sbin/waagent -daemon
azureus+    7534  0.0  0.0 221928  1064 pts/0    S+   12:12   0:00 grep --color=auto waagent
```

## 参考

```zsh:zsh
# リソースグループを削除します
az group delete \
  --name ${prefix}-rg
```

[How to Migrate to Rocky Linux from CentOS, Alma Linux, RHEL, or Oracle Linux](https://docs.rockylinux.org/guides/migrate2rocky/)