Azure VM の RHEL 7 を RHEL 8 にインプレース アップグレードする

## はじめに
こんにちは。
この記事は、[Microsoft Azure Tech Advent Calendar 2023](https://qiita.com/advent-calendar/2023/microsoft-azure-tech) 12/14 の記事です。

来年 2024/06/30 に、RHEL7 のサポートが終了します。アップグレードしなきゃなぁ、と思いつつ、まだ準備できていない方も多いのではないでしょうか。
そこで、この記事では、来年に向け、従量課金制の Azure REHL VM を用いて RHEL 7 を RHEL 8 にインプレース アップグレードする手順について検証します。


## 手順
#### 1. RHEL7 VM を作成します

今回は Azure Marketplace の RHEL 7.9 最新イメージを用いて VM を新規作成し、検証します。

```bash
$ az group create -g rhel7rg -l japaneast
$ az vm create -g rhel7rg -n rhel7vm --image RedHat:RHEL:7_9:latest
```

既存の環境を用いて検証したい場合には、サポート チームの公式ブログ記事 [VM 複製方法について part.3/3 OS ディスクのスナップショットから複製する手順](https://jpaztech.github.io/blog/vm/vm-replica-3/) を参考に、VM を複製し検証することをお勧めします。
また、実際にプロダクション環境で実施する場合には、事前に必ずバックアップを取得しましょう。

#### 2. パッケージを最新バージョンに更新し再起動します

```bash
# yum-config-manager --enable rhui-microsoft-azure-rhel7
# yum-config-manager --enable rhui-rhel-7-server-rhui-extras-rpms
# yum -y install rhui-azure-rhel7 leapp-rhui-azure
# yum -y update && reboot
```

yum update に失敗する場合には、サポート チームの公式ブログ記事 [yum/dnf update に失敗する場合の原因と解決方法](https://jpaztech.github.io/blog/vm/rhui-yum-update/) を参考に、トラブルシューティングしましょう。

#### 3. 評価レポートの作成

leapp preupgrade コマンドでアップグレード評価レポートを作成します。
`--target` オプションにはアップグレード先バージョンを指定できます。今回は 8.8 にします。

```bash
# rm -f /etc/leapp/files/*
# yum -y reinstall leapp-upgrade
# leapp preupgrade --target 8.8 --no-rhsm
```

`/var/log/leapp/leapp-report.json`, `/var/log/leapp/leapp-report.txt` にレポートが作成されます。

#### 4. 評価レポートの問題解消

アップグレードするためには、このレポートを参照し、inhibitor 扱いとなっている問題を解消する必要があります。
今回、３つの inhibitor が出力されましたので、それぞれ対処します。
詳細は Red Hat の公式ドキュメント [第4章 アップグレード前のレポートの確認](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/upgrading_from_rhel_7_to_rhel_8/reviewing-the-pre-upgrade-report_upgrading-from-rhel-7-to-rhel-8) を参照することを推奨します。

1つめ
```
Risk Factor: high (inhibitor)
Title: Possible problems with remote login using root account
Summary: OpenSSH configuration file does not explicitly state the option PermitRootLogin in sshd_config file, which will default in RHEL8 to "prohibit-password".
Remediation: [hint] If you depend on remote root logins using passwords, consider setting up a different user for remote administration or adding "PermitRootLogin yes" to sshd_config. If this change is ok for you, add explicit "PermitRootLogin prohibit-password" to your sshd_config to ignore this inhibitor     Key: 3d21e8cc9e1c09dc60429de7716165787e99515f
```

これは SSH で root ログインが無効化されているので、有効にします。
```bash
# sed -i -e 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config
```

2つめ
```
Risk Factor: high (inhibitor)
Title: Leapp detected loaded kernel drivers which have been removed in RHEL 8. Upgrade cannot proceed.
Summary: Support for the following RHEL 7 device drivers has been removed in RHEL 8:
     - pata_acpi

Key: f08a07da902958defa4f5c2699fae9ec2eb67c5b
```

これは pata_acpi カーネルモジュールが読み込まれているので、取り除きます。
```bash
# rmmod pata_acpi
```
3つめ
```
Risk Factor: high (inhibitor)
Title: Missing required answers in the answer file
Summary: One or more sections in answerfile are missing user choices: remove_pam_pkcs11_module_check.confirm
For more information consult https://red.ht/leapp-dialogs.
Remediation: [hint] Please register user choices with leapp answer cli command or by manually editing the answerfile.
[command] leapp answer --section remove_pam_pkcs11_module_check.confirm=True
Key: d35f6c6b1b1fa6924ef442e3670d90fa92f0d54b
```

これは Leapp 回答ファイル に回答する必要があるので、言われた通り回答します。

```bash
# leapp answer --section remove_pam_pkcs11_module_check.confirm=True
```

再度 `leapp preupgrade --target 8.8 --no-rhsm` コマンドを実行し、inhibitor がなくなったことを確認します。

#### 5. アップグレードの実行

```bash
# leapp upgrade --target 8.8 --no-rhsm && reboot
```

再起動後、redhat-release や os-release を確認し、期待通りアップグレードされていれば完了です。

```bash
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)
```

## まとめ
- 2024/06/30 に、RHEL7 のサポートが終了します
- 従量課金制の Azure RHEL 7 VM は leapp を用いて RHEL 8 にインプレース アップグレードできます
- 間に合わなくなっても知らんぞーーっ!!

## 参考情報

- [Red Hat Enterprise Linux のライフサイクル](https://access.redhat.com/ja/support/policy/updates/errata)
- [RHEL 7 から RHEL 8 へのアップグレード](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/8/html/upgrading_from_rhel_7_to_rhel_8/index)