AlmaLinuxを使ってみた（後編）

# 前回の続き
前回から続いた内容なので、5から始まる連続した段落番号をつけている。

* [AlmaLinuxを使ってみた（前編）](https://qiita.com/yamada-hakase/items/245da3df19e9334d041c)

# 5. 移行ツールを使う

AlmaLinuxは、almalinux-deployという移行ツールを提供している。このツールを使うと既存のディストリビューションから簡単に移行できる。なお、移行元ディストリビューションとして、CentOS 8やRHEL 8、Oracle Linux 8をサポートしている。詳しくは[GitHub](https://github.com/AlmaLinux/almalinux-deploy)を見てほしい。

### 5.1. 移行ツールの実行手順

実行手順は以下のとおり。ただし、移行元のサーバーからインターネットにアクセスできる必要がある。

1. RHEL8.3相当以上にアップデート
1. 移行スクリプトのダウンロード
1. 移行スクリプトの実行
1. 必要に応じて、リポジトリ情報を修正

今回は、ISOイメージからインストールしたCentOS 8に加えて、AWSやAzure、Oracle CloudなどのCentOS 8でも確認する。わざわざパブリック・クラウドで確認するのは、カスタマイズされて素のCentOSと異なることが多いからだ。

<font color="red">なお、移行ツールを使用するときは必ず事前にバックアップすること。</font>

### 5.2. 移行ツールの事前準備

利用環境は、ISOイメージからインストールしたCentOS 8.3を使用している。

1. 現在のLinux OSバージョンを確認する。次のように8.3以上ならば問題ない。8.2以前のときにはアップデートが必要になる（8.2以前だとスクリプトにNGで蹴られる）。

```shell-session
$ cat /etc/centos-release
CentOS Linux release 8.3.2011
```

```shell-session:アップデートするとき
$ sudo dnf distro-sync -y
```

2.移行ツールをダウンロードする。

```shell-session
$ curl -O https://raw.githubusercontent.com/AlmaLinux/almalinux-deploy/master/almalinux-deploy.sh
```

3.スクリプト（version 0.1.7）は約400行あり、おもに次のことを実行している。

* 移行元ディストリビューションのチェック
* ディストリビューション固有のパッケージ削除
* AlmaLinux固有のパッケージのインストール
* インストール済みパッケージのAlmaLinuxの置き換え

```shell-session
$ wc -l almalinux-deploy.sh
407 almalinux-deploy.sh
```

### 5.3. 移行ツールの実行

1.スクリプトを実行する。実行にかかる時間は、サーバー性能やインストール済みパッケージ数、ネットワーク速度などに依存する。10分から30分くらいは必要だと思ったほうがいいだろう。

```shell-session
sudo bash almalinux-deploy.sh
```

```shell-session:以下のようにチェックが走り、インストールが開始される
Check root privileges                                                 OK
Check Secure Boot disabled                                            OK
Check centos-8.x86_64 is supported                                    OK
Download RPM-GPG-KEY-AlmaLinux                                        OK
Import RPM-GPG-KEY-AlmaLinux to RPM DB                                OK
Download almalinux-release package                                    OK
Verify almalinux-release package                                      OK
Remove centos-linux-release package                                   OK
Remove centos-gpg-keys package                                        OK
Remove centos-linux-repos package                                     OK
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:almalinux-release-8.3-4.el8      ################################# [100%]
Install almalinux-release package                                     OK
Remove centos-logos package                                           OK
Install almalinux-logos package                                       OK
```

2.インストールが終わると以下のように表示される。[GitHub](https://github.com/AlmaLinux/almalinux-deploy)の記述と異なるが、スクリプトのバージョンによって変わるかもしれない。

```shell-session:今回の結果
Complete!
Run dnf distro-sync -y                                                OK
```

```shell-session:GitHubの記述
Migration to AlmaLinux is completed
```

3.再起動は必須ではないが、移行の前後でkernelやglibc、opensslなどのコアパッケージのバージョンが変わっているときにはリブートする。以上で終了だ。

```shell-session
sudo systemctl reboot
```

### 5.4. 移行後の確認

移行が終わったら、変更箇所を確認しよう。

1. `/etc/*-release`の中身は「AlmaLinux」に変更されている。

```shell-session
$ cat /etc/almalinux-release
AlmaLinux release 8.3 (Purple Manul)

$ cat /etc/centos-release
AlmaLinux release 8.3 (Purple Manul)
```

2.リポジトリもすべてAlmaLinuxに変更されている。

```shell-session:有効なリポジトリ
$ dnf repolist
repo id                          repo name
appstream                        AlmaLinux 8 - AppStream
baseos                           AlmaLinux 8 - BaseOS
extras                           AlmaLinux 8 - Extras
powertools                       AlmaLinux 8 - PowerTools
```

```shell-session:すべてのリポジトリ
$ dnf repolist all
repo id                        repo name                                status
appstream                      AlmaLinux 8 - AppStream                  enabled
appstream-debuginfo            AlmaLinux 8 - AppStream debuginfo        disabled
appstream-source               AlmaLinux 8 - AppStream Source           disabled
baseos                         AlmaLinux 8 - BaseOS                     enabled
baseos-debuginfo               AlmaLinux 8 - BaseOS debuginfo           disabled
baseos-source                  AlmaLinux 8 - BaseOS Source              disabled
extras                         AlmaLinux 8 - Extras                     enabled
extras-debuginfo               AlmaLinux 8 - Extras debuginfo           disabled
extras-source                  AlmaLinux 8 - Extras Source              disabled
ha                             AlmaLinux 8 - HighAvailability           disabled
ha-debuginfo                   AlmaLinux 8 - HighAvailability debuginfo disabled
ha-source                      AlmaLinux 8 - HighAvailability Source    disabled
powertools                     AlmaLinux 8 - PowerTools                 enabled
powertools-debuginfo           AlmaLinux 8 - PowerTools debuginfo       disabled
powertools-source              AlmaLinux 8 - PowerTools Source          disabled
```

```shell-session:repoファイル
$ ls /etc/yum.repos.d/
almalinux-ha.repo almalinux.repo
```

### 5.5. パブリック・クラウドでの移行
次に、AWSやAzure、Oracle Cloudなどのパブリック・クラウドで提供しているCentOS 8で実行した結果を紹介する。なお、以下の2点を確認している。

* 移行ツールで移行できたか
* 移行後に修正すべき箇所はあるか

### 5.5.1. AWSのCentOS 8

AWSには、CentOS 8のAMIが数多く登録されている。今回はCentOS公式のAMIを使用した（[CentOS Official AMI情報](https://wiki.centos.org/Cloud/AWS)）。

| key | value |
|:-:|:-:|
| Region  | ap-northeast-1 |
| AMI Name  | CentOS 8.3.2011 x86_64 |
| AMI ID  | ami-0d9bf167cb68ac889  |

<font color="green">**移行結果**</font>
何の問題も無く移行が完了した。

* **移行ツールで移行できたか：<font color="blue">できた</font>**
* **移行後に修正すべき箇所はあるか：<font color="blue">ない</font>**


<font color="green">**おまけ**</font>
移行後に既存のRPMパッケージが残っているか確認する。

1. 使われているVenderタグの一覧を表示する。この例ではAlmaLinuxとCloudLinux以外に、CentOSと(none)がある。

```shell-session
$ rpm -qa --qf '%{VENDOR}\n' | sort | uniq
AlmaLinux
CentOS
CloudLinux
(none)
```

2.VenderタグがAlmaLinuxとCloudLinux以外のパッケージを表示する。これを見ると古いカーネルとGPG KEYだけだ。つまり現在使用しているパッケージはすべてAlmaLinuxに置き換えられている。

```shell-session
$ rpm -qa --qf '%{NAME}-%{VERSION}-%{RELEASE}\t%{VENDOR}\n' | grep -v AlmaLinux | grep -v CloudLinux
gpg-pubkey-3abb34f8-5ffd890e    (none)
kernel-core-4.18.0-240.1.1.el8_3        CentOS
kernel-modules-4.18.0-240.1.1.el8_3     CentOS
kernel-4.18.0-240.1.1.el8_3     CentOS
```

### 5.5.2. AzureのCentOS 8

Azureも、AWSと同様に数多くのCentOS 8イメージが公開されている。そのためOpenLogicの仮想マシンイメージを使用した。

<font color="green">**移行結果**</font>
問題なく移行できたがリポジトリ情報を修正する必要があった。

* **移行ツールで移行できたか：<font color="blue">できた</font>**
* **移行後に修正すべき箇所はあるか：<font color="red">ある</font>**
 
<font color="green">**問題箇所**</font>
移行後にリポジトリを表示すると、OpenLogicのリポジトリが存在するため以下のエラーが発生した。

```shell-session
$ sudo dnf repolist

errors during downloading metadata for repository 'AppStream-openlogic':
  - Status code: 404 for http://olcentgbl.trafficmanager.net/almalinux/8/AppStream/x86_64/os/repodata/repomd.xml (IP: 138.91.1.67)
Error: Failed to download metadata for repo 'AppStream-openlogic': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried
CentOS-8 - Base (OpenLogic)    
```

```shell-session:エラーを除外してリポジトリだけを表示
$ sudo dnf repolist
repo id                       repo name
AppStream-openlogic           CentOS-8 - AppStream (OpenLogic)
BaseOS-openlogic              CentOS-8 - Base (OpenLogic)
appstream                     AlmaLinux 8 - AppStream
baseos                        AlmaLinux 8 - BaseOS
extras                        AlmaLinux 8 - Extras
extras-openlogic              CentOS-8 - Extras (OpenLogic)
openlogic                     CentOS-8 - OpenLogic packages for x86_64
powertools                    AlmaLinux 8 - PowerTools
```

**OpenLogicのリポジトリを無効にする**
修正するには、次のコマンドでOpenLogicのリポジトリを無効にすればよい。

```shell-session
sudo dnf config-manager --disable AppStream-openlogic BaseOS-openlogic extras-openlogic openlogic
```

無効にすると、エラー無しにdnfを実行できる。

```shell-session
$ sudo dnf repolist
repo id                  repo name
appstream                AlmaLinux 8 - AppStream
baseos                   AlmaLinux 8 - BaseOS
extras                   AlmaLinux 8 - Extras
powertools               AlmaLinux 8 - PowerTools
```

**repoファイルを無効にする**
別の方法としてrepoファイルをリネームする方法もある。OpenLogicのリポジトリは絶対に利用しないので、こちらの方が確実といえる。

`/etc/yum.repos.d/`には以下の有効なrepoファイルがある。

```shell-session
$ ls /etc/yum.repos.d/*repo
/etc/yum.repos.d/almalinux-ha.repo  /etc/yum.repos.d/OpenLogicCentOS.repo
/etc/yum.repos.d/almalinux.repo     /etc/yum.repos.d/OpenLogic.repo
```

OpenLogicのrepoファイルをリネームする。

```shell-session
$ sudo rename repo repo.bak /etc/yum.repos.d/OpenLogic*
```

確認すると`.bak`という拡張子が付いて無効になっている。

```shell-session
$ ls /etc/yum.repos.d/OpenLogic*
/etc/yum.repos.d/OpenLogicCentOS.repo.bak  /etc/yum.repos.d/OpenLogic.repo.bak
```

### 5.5.3. Oracle CloudのCentOS 8

Oracle Cloud Infrastructureでは、Oracleが提供するCentOS 8を利用した。

<font color="green">**移行結果**</font>
何の問題も無く移行が完了した。

* **移行ツールで移行できたか：<font color="blue">できた</font>**
* **移行後に修正すべき箇所はあるか：<font color="blue">ない</font>**

<font color="green">**問題箇所**</font>
リポジトリを表示すると`Failed loading plugin`のメッセージが表示される。これは移行とは関係なく、Oracle CloudのCentOS系イメージの問題なので無視してよい。


```shell-session
$ dnf repolist
Failed loading plugin "osmsplugin": No module named 'librepo'
repo id                          repo name
appstream                        AlmaLinux 8 - AppStream
baseos                           AlmaLinux 8 - BaseOS
extras                           AlmaLinux 8 - Extras
powertools                       AlmaLinux 8 - PowerTools
```

# 6. これまでのまとめ

**AlmaLinuxの概要**

* **AlmaLinuxはRHEL互換のLinux OSで、CentOSと同じ位置づけ**
* **AlmaLinuxは、少なくとも2029年までサポートを保証（RHEL8と同等）**
* **AlmaLinuxは、CloudLinux社のスポンサードを受けながらもコミュティードリブンで開発**
* **2021/03/30に正式安定版をリリース**

**AlmaLinuxの機能**

* **CentOSと、まったく同じように扱える。違うのは/etc/almalinux-releaseがあること**
* **アップデートパッケージも十分早くリリースされている**
* **現時点（2021/04/06）で60以上のミラーサイトが用意され、日本でも5サイトある**

**AlmaLinuxへの移行**

* **移行ツールを利用するとCentOS 8からAlmaLinuxへ簡単に移行できる**
* **パブリック・クラウドのCentOS 8もAlmaLinuxに移行できる**
* **移行ツールの前提条件として、インターネットへのアクセスが可能なことと、CentOS 8.3以上の必要がある（※1）**

※1. CentOSはエンタープライズ利用が多いことを考えると、インターネットにアクセスできないか、アクセスできてもホワイトリスト申請が必要な可能性がある。共にダメだった場合は、スクリプトを少し修正し、ローカルリポジトリを立てればできそうだ。経験が無いとそれなりに面倒なので、台数が多い場合の選択肢としてはあり得るだろう。

# 7. 総評

これまで2回にわたってAlmaLinuxを見てきた。CentOSからCentOS Streamへの意向表明から、たった4カ月で仕上げてきたAlmaLinuxは見事というしかない。モノだけでなく、コミュニティーなどのバックアップ体制まで構築できたことは驚嘆に値する。CloudLinuxの主体的な協力による成果だろう。

CentOSの後継となる新しいプロジェクトでは一歩リードした感がある。

まあ、今後コミュニティーが崩壊することや、コントリビューターにそっぽを向かれる可能性は捨てきれないが...。

今後の移行先に関する議論は別のエントリとして書いたので、興味のある方はどうぞ。

* [CentOS 8の移行先を考える](https://qiita.com/yamada-hakase/items/2e015d9b09be97724ab0)