CentOS 8 を Oracle Linux 8 に切り替える


# 概要

CentOS 8 を Oracle Linux 8 に切り替える方法について記載します。


# 背景 

CentOS 8 の開発が終了し、CentOS Stream に統一されるとの発表がありました。CentOS Stream はRHELのプレリリース版のような位置づけで、特定のバージョンはなくローリングリリース方式となります。RHELの代わりに使えるケースもあると思いますが、特定のRHELのバージョンと合わせた環境がほしいような場合は要件に合わないこともあると思います。

https://gigazine.net/news/20201209-centos-project/


# Oracle Linux とは？

Oracle Linux は、Oracleによって開発されている RHEL Clone のLinuxディストリビューションで、10年以上の歴史があり、今も開発が続いています。
Oracle Databaseを代表とする
血も涙もない
ライセンスのOracle製品とは異なり、Oracle Linuxは以下のようなかなり柔軟なライセンス体系となっています。

- 無料で使用できる。本番環境でも使用できる。（RHELは開発版は無償だが本番では使えない）
- サポートが必要なら必要な分だけ購入できる。（RHELは全部購入しないといけない）
- RHELやCentOSからも移行してもサポートを受けられる。
- Ksplice などの Oracle Linux 独自の機能もある。（要Premier Support）

https://www.oracle.com/jp/linux/


かつてはずいぶん叩かれましたが、当時から今まで柔軟なライセンス体系のまま開発が継続されていますので、CentOSが無くなるなら現実的な移行先として有力なのではないかと思います。

https://linux.srad.jp/story/12/07/20/095230/


# CentOS → Oracle Linux の移行手順

Oracle LinuxはRHELおよびCentOSからの移行方法を公開しています。CentOS 6 or 7 からの移行方法はこちらに公開されていますが、CentOS 8 はやり方が違うようです。

https://linux.oracle.com/switch/centos/

(2020/12/16追記) 移行ツールがCentOS8にも対応しました。このページの内容はさっそく不要になりました。 

CentOS 8 から Oracle Linux 8 への移行方法はサポートが必要なところにドキュメントがあるようです。（公開した方がいいと思うなー）

https://support.oracle.com/knowledge/Oracle%20Linux%20and%20Virtualization/2698144_1.html


サポートが必要な情報を使うのは微妙なので、こちらで言及されていた方法でやってみようと思います。やってる内容はほとんど変わらないと思いますが。

https://blog.centos.org/2020/12/future-is-centos-stream/#comment-183993


# 移行してみるテスト

VirtualBoxにCentOS 8 をインストールします。
![centos8_install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317213/3807deb2-e589-7b12-b2ab-24b11e1dd890.png)


起動時はもちろん CentOSです。
![centos8_boot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317213/29bb92a5-6de8-5d8a-d3d0-d08a4fbafe9e.png)


Oracle Linuxのリポジトリから必要なRPMをダウンロードします。

```
$ repobase=http://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage
$ wget \
  ${repobase}/redhat-release-8.3-1.0.0.1.el8.x86_64.rpm \
  ${repobase}/oraclelinux-release-8.3-1.0.4.el8.x86_64.rpm \
  ${repobase}/oraclelinux-release-el8-1.0-9.el8.x86_64.rpm
```

そのままだと依存関係でRPMが入らないので centos-linux-release を削除します。

```
# rpm -e --nodeps centos-linux-release 
```

Oracle Linuxのリポジトリ関連のRPMをインストールします。

```
# rpm -ivh *.rpm
```

ociregionファイルを作っておきます。これはOCI（Oracle Cloud）ではリージョンに応じてリポジトリサーバを変えるための仕組みのようです。

```
# :> /etc/dnf/vars/ociregion
```

CentOSのリポジトリを削除します。

```
# dnf remove centos-linux-repos
```

これで、DNFのリポジトリはOracle Linuxのものになります。

```
# dnf repolist
repo id                                                repo name
ol8_UEKR6                                              Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
ol8_appstream                                          Oracle Linux 8 Application Stream (x86_64)
ol8_baseos_latest                                      Oracle Linux 8 BaseOS Latest (x86_64)
```

パッケージをOracle Linuxのものに入れ替えます。CentOSとOracle Linuxのパッケージが混ざってもよければやらなくてもよいです。

```
# dnf --refresh distro-sync
...
パッケージが入れ替わります
```

Oracle Linux 独自の Kernel（Unbreakable Enterprise Kernel）を使うこともできます。

```
# dnf install kernel-uek
```

EFI bootの場合は再起動する前に grub.cfg を作り直す手順も必要です。

```
# grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
```

ファイルがあることを確認します。

```
# ls -l /etc/grub2-efi.cfg 
lrwxrwxrwx. 1 root root 31 Nov  5 14:56 /etc/grub2-efi.cfg -> ../boot/efi/EFI/redhat/grub.cfg

# ls -l /boot/efi/EFI/redhat/grub.cfg 
-rwx------. 1 root root 6544 Dec 11 04:51 /boot/efi/EFI/redhat/grub.cfg
```


再起動します。

```
# reboot
```

再起動後、起動画面はOracle Linuxになりました。
![centos8_ol.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/317213/8159fc72-8bc5-26b5-ddf0-1aa25320d423.png)


UEKで動作していることがわかります。

```
# uname -r
5.4.17-2036.100.6.1.el8uek.x86_64
```

/etc/oracle-release があります。

```
# cat /etc/oracle-release
Oracle Linux Server release 8.3
```

Oracle Linuxでは、/etc/redhat-release には Red Hat と書かれてます。

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

というわけで、CentOS 8 から Oracle Linux 8 に切り替えることができました。