AWS で Oracle Linux 8 を動かしたメモ

とある事情で AWS で Oracle Linux 8 を使ってみることになったのでそのメモ。

AMI

AMI は所有者を 131827586825 で検索するとずらずら出てきます。

参考:https://community.oracle.com/tech/apps-infra/discussion/4417739/launch-an-oracle-linux-instance-in-aws

aws ec2 describe-images \
  --executable-users all \
  --owners 131827586825 \
  --query 'Images[] | [].{ Name: Name, ImageId: ImageId } | sort_by(@, &Name)' \
  --output table
# -------------------------------------------------------------------
# |                         DescribeImages                          |
# +------------------------+----------------------------------------+
# |         ImageId        |                 Name                   |
# +------------------------+----------------------------------------+
# |  ami-352d1c34          |  OL5.11-i386-10-17-2014-ebs            |
# |  ami-3d2d1c3c          |  OL5.11-x86_64-10-17-2014-ebs          |
# |  ami-0a7a660b          |  OL6-i386-HVM-2015-1-20                |
# |  ami-ce5742cf          |  OL6-i386-PVM-2014-12-11               |
# |  ami-a6637da7          |  OL6-x86_64-HVM-2015-1-20              |
# |  ami-8c23308d          |  OL6-x86_64-PVM-2015-1-12              |
# |  ami-08021f6ff9bb5043e |  OL6.10-x86_64-HVM-2019-01-30          |
# |  ami-06aec29ea727b45c5 |  OL6.10-x86_64-PVM-2019-01-30          |
# |  ami-1011387e          |  OL6.7-i386-HVM-2015-12-04             |
# |  ami-8fefc6e1          |  OL6.7-i386-PVM-2015-12-06             |
# |  ami-3e133a50          |  OL6.7-x86_64-HVM-2015-12-04           |
# |  ami-6a1f3604          |  OL6.7-x86_64-PVM-2015-12-04           |
# |  ami-a022cec1          |  OL6.8-i386-HVM-2016-05-23             |
# |  ami-233cd042          |  OL6.8-i386-PVM-2016-05-23             |
# |  ami-e726ca86          |  OL6.8-x86_64-HVM-2016-05-23           |
# |  ami-6a3dd10b          |  OL6.8-x86_64-PVM-2016-05-24           |
# |  ami-9f8ca9f8          |  OL6.9-i386-HVM-2017-03-29             |
# |  ami-4882a72f          |  OL6.9-i386-PVM-2017-03-29             |
# |  ami-6982a70e          |  OL6.9-x86_64-HVM-2017-03-28           |
# |  ami-afc65dc9          |  OL6.9-x86_64-HVM-2018-01-10           |
# |  ami-c58faaa2          |  OL6.9-x86_64-PVM-2017-03-28           |
# |  ami-70c45f16          |  OL6.9-x86_64-PVM-2018-01-10           |
# |  ami-fce940fc          |  OL7.1-x86_64-HVM-2015-06-17           |
# |  ami-0ce8410c          |  OL7.1-x86_64-PVM-2015-04-06           |
# |  ami-65e0c80b          |  OL7.2-x86_64-HVM-2015-12-10           |
# |  ami-52e1c93c          |  OL7.2-x86_64-PVM-2015-12-10           |
# |  ami-de248ebf          |  OL7.3-x86_64-HVM-2016-11-09           |
# |  ami-1e11e778          |  OL7.4-x86_64-HVM-2017-08-07           |
# |  ami-3ad3485c          |  OL7.4-x86_64-HVM-2018-01-09           |
# |  ami-0918cd1ebaef69218 |  OL7.5-x86_64-HVM-2019-03-04           |
# |  ami-054e85339904efdef |  OL7.6-x86_64-HVM-2019-01-29           |
# |  ami-0950559ec2dfaacec |  OL7.7-x86_64-HVM-2020-02-13           |
# |  ami-0267b0d59b04d0de5 |  OL7.7-x86_64-HVM-2020-02-13-13-14     |
# |  ami-04e6facfaefdca6ec |  OL7.8-x86_64-HVM-2020-04-28           |
# |  ami-07174046d339a2557 |  OL7.9-x86_64-HVM-2020-12-07           |
# |  ami-0ef7c57e516f3dda7 |  OL8.1-x86_64-HVM-2019-12-11-15-50-57  |
# |  ami-0509f2707adadc9c5 |  OL8.1-x86_64-HVM-2020-01-15           |
# |  ami-05cf17097c9e7017f |  OL8.2-x86_64-HVM-2020-05-22           |
# |  ami-0d5bb29b78cc0af39 |  OL8.2-x86_64-HVM-2020-12-09           |
# |  ami-0ab635c88e06025fb |  OL8.3-x86_64-HVM-2020-12-10           |
# |  ami-0fbc34d0cb97e47b3 |  OL8.4-x86_64-HVM-2021-05-28           |
# |  ami-0afe0424c9fd49524 |  OL8.5-x86_64-HVM-2021-11-24           |
# +------------------------+----------------------------------------+

Oracle Linux 8.5 = OL8.5 なので ami-0afe0424c9fd49524 です。

os-release とか

インスタンス作成後に ssh ログインして色々見てみます。

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

cat /etc/oracle-release
# Oracle Linux Server release 8.5

cat /etc/os-release
# NAME="Oracle Linux Server"
# VERSION="8.5"
# ID="ol"
# ID_LIKE="fedora"
# VARIANT="Server"
# VARIANT_ID="server"
# VERSION_ID="8.5"
# PLATFORM_ID="platform:el8"
# PRETTY_NAME="Oracle Linux Server 8.5"
# ANSI_COLOR="0;31"
# CPE_NAME="cpe:/o:oracle:linux:8:5:server"
# HOME_URL="https://linux.oracle.com/"
# BUG_REPORT_URL="https://bugzilla.oracle.com/"
#
# ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
# ORACLE_BUGZILLA_PRODUCT_VERSION=8.5
# ORACLE_SUPPORT_PRODUCT="Oracle Linux"
# ORACLE_SUPPORT_PRODUCT_VERSION=8.5

ID_LIKErhel が無いですね、RHEL の ID_LIKE はおそらく fedora だけだろうので、それがそのままということなのでしょうけど。

なお、CentOS 8 なら rhel fedora だし AlmaLinux 8 なら rhel centos fedora です。

Kernel

uname -r
# 5.4.17-2136.300.7.el8uek.x86_64

カーネルのバージョンが RHEL8 と全然違います。いわゆる Unbreakable Enterprise Kernel(UEK) です。 Oracle Linux は UEK と RHEL 互換のカーネル(Red Hat Compatible Kernel(RHCK)) が利用できますが、デフォルトが UEK になっているようです。

そのままでもあまり問題無いかもしれませんが RHCK に変更します。見た感じ RHCK のカーネル自体がインストールされていないようなのでインストールします。

ls -l /boot/vmlinuz*
# -rwxr-xr-x. 1 root root 10348096 Oct  9 08:29 /boot/vmlinuz-5.4.17-2136.300.7.el8uek.x86_64

dnf install kernel
# いろいろ

ls -l /boot/vmlinuz*
# -rwxr-xr-x. 1 root root 10221104 Dec 22 02:32 /boot/vmlinuz-4.18.0-348.7.1.el8_5.x86_64
# -rwxr-xr-x. 1 root root 10348096 Oct  9 08:29 /boot/vmlinuz-5.4.17-2136.300.7.el8uek.x86_64

grubby でデフォルトカーネルを切り替えてリブートします。

参考:https://community.oracle.com/tech/apps-infra/discussion/4467791/oracle-linux-how-to-change-default-kernel

grubby --default-kernel
# /boot/vmlinuz-5.4.17-2136.300.7.el8uek.x86_64

grubby --info=ALL | grep -E "^kernel|^index"
# index=0
# kernel="/boot/vmlinuz-5.4.17-2136.300.7.el8uek.x86_64"
# index=1
# kernel="/boot/vmlinuz-4.18.0-348.7.1.el8_5.x86_64"

grubby --set-default /boot/vmlinuz-4.18.0-348.7.1.el8_5.x86_64
# The default is /boot/loader/entries/ec2536de9a9cc53fbc785b744042fb86-4.18.0-348.7.1.el8_5.x86_64.conf with index 1 and kernel /boot/vmlinuz-4.18.0-348.7.1.el8_5.x86_64

grubby --default-kernel
# /boot/vmlinuz-4.18.0-348.7.1.el8_5.x86_64

reboot

カーネルが RHEL 互換になっていることを確認します。

uname -r
# 4.18.0-348.7.1.el8_5.x86_64

EPEL

EPEL は Oracle で専用のリポジトリを持っているらしく epel-release のパッケージ名が異なるようです。

dnf install -y oracle-epel-release-el8

PowerTools

CentOS 8 で EPEL の moreutils をインストールしようとすると PowerTools リポジトリにある perl-IPC-Run が必要になります。

PowerTools はデフォルトで無効なので有効にしてインストールする必要があるのですが、

dnf install --enablerepo=powertools moreutils

Oracle Linux 8 だとリポジトリ名が異なっており PowerTools は ol8_codeready_builder です。

dnf install --enablerepo=ol8_codeready_builder moreutils

他のリポジトリ名の全然違っているため、リポジトリ名を指定してなにかしているなら注意が必要です。

dnf repolist --enablerepo=\* | column -t -s $'\t'
# repo id               repo name
# ol8_UEKR6             Latest Unbreakable Enterprise Kernel Release 6 for Oracle Linux 8 (x86_64)
# ol8_UEKR6_RDMA        Oracle Linux 8 UEK6 RDMA (x86_64)
# ol8_addons            Oracle Linux 8 Addons (x86_64)
# ol8_appstream         Oracle Linux 8 Application Stream (x86_64)
# ol8_baseos_latest     Oracle Linux 8 BaseOS Latest (x86_64)
# ol8_codeready_builder Oracle Linux 8 CodeReady Builder (x86_64) - Unsupported
# ol8_developer_EPEL    Oracle Linux 8 EPEL Packages for Development (x86_64)
# ol8_distro_builder    Oracle Linux 8 Distro Builder (x86_64) - Unsupported
# ol8_kvm_appstream     Oracle Linux 8 KVM Application Stream (x86_64)
# ol8_u0_baseos_base    Oracle Linux 8 BaseOS GA (x86_64)
# ol8_u1_baseos_base    Oracle Linux 8.1 BaseOS (x86_64)
# ol8_u2_baseos_base    Oracle Linux 8.2 BaseOS (x86_64)
# ol8_u3_baseos_base    Oracle Linux 8.3 BaseOS (x86_64)
# ol8_u4_baseos_base    Oracle Linux 8.4 BaseOS (x86_64)
# ol8_u5_baseos_base    Oracle Linux 8.5 BaseOS (x86_64)

参考:https://github.com/oracle/centos2ol/blob/1424a2417aaa383b5ebf0b77b9147584c85c9695/centos2ol.sh#L454

firewalld と iptables

Oracle Linux 8 の素の AMI だと firewalld が有効でした。CentOS 8 の素の AMI だと firewalld は無効だったと思うので、何も知らないと「何故か ssh 以外で接続できない・・」となり数分~十数分ぐらいの時間を無駄にします。

セキュリティグループやネットワークACLで十分ならサーバの firewalld は止めても良いでしょう。

systemctl stop firewalld
systemctl disable firewalld

がしかし、これだけでは不十分。なぜか iptables-services がインストールされています。

rpm -q iptables-services
# iptables-services-1.8.4-20.0.1.el8.x86_64

しかも有効です。

systemctl is-enabled iptables
# enabled

がしかし、firewalld で Conflicts に指定されているため iptables サービスは起動しません。

systemctl show firewalld -p Conflicts
# Conflicts=ip6tables.service nftables.service ebtables.service ipset.service shutdown.target iptables.service

systemctl status iptables
# * iptables.service - IPv4 firewall with iptables
#    Loaded: loaded (/usr/lib/systemd/system/iptables.service; disabled; vendor preset: disabled)
#    Active: inactive (dead)

がしかし、前述のように firewalld を無効にしてリブートすると、次は iptables サービスが起動してきます。

systemctl disable firewalld
reboot
.
.
.
systemctl status iptables
# * iptables.service - IPv4 firewall with iptables
#    Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
#    Active: active (exited) since Tue 2022-01-18 13:20:10 GMT; 25min ago
#     :

ので、firewalld と iptables の両方を無効にする必要があります。

systemctl stop firewalld
systemctl disable firewalld
systemctl disable iptables

tar: command not found

素の AMI だと tar すら入っていませんでした。dnf install @base とかで 普通入ってそうだけど入っていないもの を確認しておくと良いかもしれません。