概要
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
- cf. x86-64-v2 マイクロアーキテクチャレベル用にRed Hat Enterprise Linux 9 をビルドする - 赤帽エンジニアブログ
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:~$
結論
古るぎるハードウェアは処分したほうが吉ということがわかりました。