LXDでRHEL9系のコンテナが起動しなかった件

# 概要

LXD 5.0 で RHEL9系 のコンテナが起動しなかった。


# 現象

LXD 5.0 で RockyLinux9 と RockyLinux8 のコンテナを作ってみたら、RockyLinux9のコンテナだけ起動しない。


```
ubuntu@ubuntu2204:~$
ubuntu@ubuntu2204:~$ lxc launch images:rockylinux/8 rocky8-c1
ubuntu@ubuntu2204:~$ lxc launch images:rockylinux/9 rocky9-c1
ubuntu@ubuntu2204:~$
ubuntu@ubuntu2204:~$ lxc list
+---------------+---------+-----------------------+------+-----------+-----------+
|     NAME      |  STATE  |         IPV4          | IPV6 |   TYPE    | SNAPSHOTS |
+---------------+---------+-----------------------+------+-----------+-----------+
| rocky8-c1     | RUNNING | 192.168.0.114 (eth0)  |      | CONTAINER | 0         |
+---------------+---------+-----------------------+------+-----------+-----------+
| rocky9-c1     | STOPPED |                       |      | CONTAINER | 0         |
+---------------+---------+-----------------------+------+-----------+-----------+
ubuntu@ubuntu2204:~$ 
ubuntu@ubuntu2204:~$ lxc info --show-log rocky9-c1
Name: rocky9-c1
Status: STOPPED
Type: container
Architecture: x86_64
Created: 2023/03/15 18:18 JST
Last Used: 2023/03/17 09:20 JST

Log:

lxc rocky9-c1 20230317002029.777 WARN     conf - ../src/src/lxc/conf.c:lxc_map_ids:3621 - newuidmap binary is missing
lxc rocky9-c1 20230317002029.777 WARN     conf - ../src/src/lxc/conf.c:lxc_map_ids:3627 - newgidmap binary is missing
lxc rocky9-c1 20230317002029.779 WARN     conf - ../src/src/lxc/conf.c:lxc_map_ids:3621 - newuidmap binary is missing
lxc rocky9-c1 20230317002029.779 WARN     conf - ../src/src/lxc/conf.c:lxc_map_ids:3627 - newgidmap binary is missing
lxc 20230317002035.602 ERROR    af_unix - ../src/src/lxc/af_unix.c:lxc_abstract_unix_recv_fds_iov:218 - Connection reset by peer - Failed to receive response
lxc 20230317002035.602 ERROR    commands - ../src/src/lxc/commands.c:lxc_cmd_rsp_recv_fds:128 - Failed to receive file descriptors for command "get_state"

ubuntu@ubuntu2204:~$ 
ubuntu@ubuntu2204:~$ lxc console --show-log rocky9-c1

Console log:

Fatal glibc error: CPU does not support x86-64-v2

ubuntu@ubuntu2204:~$ 
ubuntu@ubuntu2204:~$ 
```

# 原因

RHEL9から `x86-64-v2` が要求されるようで、今回の事象に遭遇したハードウェアは2007年に購入した古いものだったので `x86-64-v2` に対応しておらずRHEL9系のOSは起動しないようです。

- cf. [Building Red Hat Enterprise Linux 9 for the x86-64-v2 microarchitecture level | Red Hat Developer](https://developers.redhat.com/blog/2021/01/05/building-red-hat-enterprise-linux-9-for-the-x86-64-v2-microarchitecture-level)
- cf. [x86-64-v2 マイクロアーキテクチャレベル用にRed Hat Enterprise Linux 9 をビルドする - 赤帽エンジニアブログ](https://rheb.hatenablog.com/entry/x86-64-v2)

> x86-64-v2 brings support (among other things) for vector instructions up to Streaming SIMD Extensions 4.2 (SSE4.2)  and Supplemental Streaming SIMD Extensions 3 (SSSE3), the POPCNT instruction (useful for data analysis and bit-fiddling in some data structures), and CMPXCHG16B (a two-word compare-and-swap instruction useful for concurrent algorithms).
～developers.redhat.comより～

> x86-64-v2では、Streaming SIMD Extensions 4.2(SSE4.2)およびSupplemental Streaming SIMD Extensions 3 (SSSE3) までのベクトル命令、POPCNT命令 (データ解析や一部のデータ構造でのビット操作に有用)、CMPXCHG16B (並列アルゴリズムに有用な2ワードの比較およびスワップ命令) などがサポートされています。
～赤帽エンジニアブログより～

ということで、CPUの詳細を確認したところ `popcnt` `sse4_1` `sse4_2` に対応していないことが判明...
いちおう RHEL9系 の RockyLinux-9 以外の AlmaLinux-9、CentOS-9Stream も試してみましたが、やっぱり起動しませんでした...
```
ubuntu@ubuntu2204:~$ 
ubuntu@ubuntu2204:~$ lscpu
アーキテクチャ:                        x86_64
  CPU 操作モード:                      32-bit, 64-bit
  Address sizes:                       36 bits physical, 48 bits virtual
  バイト順序:                          Little Endian
CPU:                                   2
  オンラインになっている CPU のリスト: 0,1
ベンダー ID:                           GenuineIntel
  モデル名:                            Intel(R) Xeon(R) CPU            3040  @ 1.86GHz
    CPU ファミリー:                    6
    モデル:                            15
    コアあたりのスレッド数:            1
    ソケットあたりのコア数:            2
    ソケット数:                        1
    ステッピング:                      6
    BogoMIPS:                          3724.00
    フラグ:                            fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ht tm pbe syscall nx lm constant_
                                       tsc arch_perfmon pebs bts rep_good nopl cpuid aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm pti tpr_shadow d
                                       therm
Virtualization features:
  仮想化:                              VT-x
Caches (sum of all):
  L1d:                                 64 KiB (2 instances)
  L1i:                                 64 KiB (2 instances)
  L2:                                  2 MiB (1 instance)
NUMA:
  NUMA ノード数:                       1
  NUMA ノード 0 CPU:                   0,1
Vulnerabilities:
  Itlb multihit:                       KVM: Mitigation: VMX disabled
  L1tf:                                Mitigation; PTE Inversion; VMX EPT disabled
  Mds:                                 Vulnerable: Clear CPU buffers attempted, no microcode; SMT disabled
  Meltdown:                            Mitigation; PTI
  Mmio stale data:                     Unknown: No mitigations
  Retbleed:                            Not affected
  Spec store bypass:                   Vulnerable
  Spectre v1:                          Mitigation; usercopy/swapgs barriers and __user pointer sanitization
  Spectre v2:                          Mitigation; Retpolines, STIBP disabled, RSB filling, PBRSB-eIBRS Not affected
  Srbds:                               Not affected
  Tsx async abort:                     Not affected
ubuntu@ubuntu2204:~$ 
```

# 結論

古るぎるハードウェアは処分したほうが吉ということがわかりました。