CentOS7からAlmalinux8へ移行した際の手順

# 概要
先日、CentOS7で動いていたサーバをAlmalinux8へ移行しました。
以降にあたっていくつか躓いた点があったので、共有として残します。

Almalinuxの公式ガイド通りの手順になりますが、
実施にあたって調べた点がいくつかあるので、それらを解説しながら記載します。

https://wiki.almalinux.org/elevate/ELevating-CentOS7-to-AlmaLinux-9.html#upgrade-centos-7-to-almalinux-8

# 移行手順

## STEP1：　既存システムを更新
まず既存システムを最新バージョンへアップデートします。
これは、おそらく後述のOSの移行プログラム（leapp）の実行環境として最新のCentOS7環境が推奨されるための手順です。

``` .bash
# yuｍのリポジトリを更新
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://el7.repo.almalinux.org/centos/CentOS-Base.repo

# 既存システムを更新
sudo yum upgrade -y

# 再起動
sudo reboot
```

:::note
__curlの処理は何をやっている？__
- １行目のcurlはyumの参照先をAlmalinux提供のリポジトリになるよう書き換えています。(CentOS7のリポジトリは既に閉鎖されて使えないため）
:::

:::note
__yum updateとyum upgradeの違い__
- 結論、どちらも変わらないようです。
- yum upgradeだと不要なパッケージを削除しますが、デフォルト設定ではyum updateでも削除されるとのこと
:::

### STEP2：　leappをインストールする
OSの移行プログラム（leapp）をインストールします。
``` .bash
# almalinuxのリポジトリを追加
sudo yum install -y http://repo.almalinux.org/elevate/elevate-release-latest-el$(rpm --eval %rhel).noarch.rpm

# leappのパッケージをインストール
sudo yum install -y leapp-upgrade leapp-data-almalinux
```

### STEP3：　leappを実行

いよいよleappを実行しますが、事前チェックである```leapp preupgrade```は必ず失敗します。
``` .bash
# アップグレード前のチェックを実行、1回目は必ず失敗する
sudo leapp preupgrade
```

表示されるエラーは以下
```.bash
============================================================
                     UPGRADE INHIBITED
============================================================

Upgrade has been inhibited due to the following problems:
    1. Inhibitor: Missing required answers in the answer file
Consult the pre-upgrade report for details and possible remediation.
```

/var/log/leapp/answerfileを見ると下記の記述がありました。
pam_pkcs11というモジュールはRHEL 8で廃止されたため、アップデートに時に削除して良いか聞かれています。

``` .bash
cat /var/log/leapp/answerfile
[remove_pam_pkcs11_module_check]
# Title:              None
# Reason:             Confirmation
# =================== remove_pam_pkcs11_module_check.confirm ==================
# Label:              Disable pam_pkcs11 module in PAM configuration? If no, the upgrade process will be interrupted.
# Description:        PAM module pam_pkcs11 is no longer available in RHEL-8 since it was replaced by SSSD.
# Reason:             Leaving this module in PAM configuration may lock out the system.
# Type:               bool
# Default:            None
# Available choices: True/False
# Unanswered question. Uncomment the following line with your answer
# confirm =
```

この「remove_pam_pkcs11_module_check」に関する問題は必ず発生するらしく、AlmaLinuxの移行ガイドに対応方法が載っているのでその方法で対処します。
```.bash
# 前述のanswerfileの問いかけにTrueで回答
sudo leapp answer --section remove_pam_pkcs11_module_check.confirm=True

```

移行ガイドには、よく発生するエラーの対処方法として下記も載っていましたが、自分の環境ではこれは不要でした。
answerfileに当該の対応が必要な旨の記述があったら、こちらを実行すべきかと思います。
``` bash
# pata_acpiというカーネルモジュールをアンロード
sudo rmmod pata_acpi

# rootでSSHログインできるように変更
echo PermitRootLogin yes | sudo tee -a /etc/ssh/sshd_config
```

上手くいっていればこの時点で、leappが成功するようになっているので実施します。
``` .bash
# OS移行を実施
sudo leapp upgrade
# 再起動
sudo reboot

# 再起動後、OSがアップデートされたかを確認
cat /etc/os-release
```


## 遭遇したエラー
以下はアップデートまでに遭遇したエラーとその際の対応方法です。

### 1. mysqlのアップデートエラー
``` yum upgrade -y```実行の際に以下のエラーが発生
どうやらパッケージのインストールに使うGPGキーが古いらしい
```bash
community/packages/mysql-community-client-5.7.44-1.el7.x86_64.rpm: ヘッダー V4 RSA/SHA256 Signature、鍵 ID 3a79bd29: NOKEY
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql から鍵を取得中です。


The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.


 Failing package is: mysql-community-client-5.7.44-1.el7.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
 ```

対応としてGPGキーの再インポートを行いました。
``` bash
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
```

### 2. libwebpパッケージが競合する
``` leapp upgrade```を実行した所下記のエラーが表示されました。

leappはlibwebpパッケージをインストールしようとしていますが、libwebp7というRemiリポジトリ由来のパッケージが競合しているため、処理が進行できません。

RPMパッケージをカスタムインストールした場合や、サードパーティのリポジトリからパッケージを導入している場合、同様の競合が発生することがあるようです。

``` bash
STDERR:
Error: Transaction test error:
  file /usr/lib64/libwebp.so.7 from install of libwebp-1.0.0-9.el8_9.1.x86_64 conflicts with file from package libwebp7-1.0.3-2.el7.remi.x86_64
  file /usr/lib64/libwebpdecoder.so.3 from install of libwebp-1.0.0-9.el8_9.1.x86_64 conflicts with file from package libwebp7-1.0.3-2.el7.remi.x86_64
  file /usr/lib64/libwebpdemux.so.2 from install of libwebp-1.0.0-9.el8_9.1.x86_64 conflicts with file from package libwebp7-1.0.3-2.el7.remi.x86_64
  file /usr/lib64/libwebpmux.so.3 from install of libwebp-1.0.0-9.el8_9.1.x86_64 conflicts with file from package libwebp7-1.0.3-2.el7.remi.x86_64
```

対応としては、競合元になっているパッケージを削除して、OS移行後に再度インストールしました。

他のパッケージで発生した場合でもこうして、一旦削除→再インストールをするしかないと思います。

``` bash
# libwebp7を削除、この時依存関係の整理でphp-gdも削除される
sudo yum remove libwebp7

# OS移行後に再度インストールを行う
sudo yum install libwebp7 --enablerepo=remi-php70
```