Skip to content

Commit 502a0b3

Browse files
Kabuki94claude
andcommitted
feat(cdi): real AMD ROCm + Intel iGPU CDI generation in mios-cdi-detect
Replaces the stub branches with working implementations grounded in upstream tooling (May 2026 state per project research pass): mios-cdi-detect changes: * AMD branch -- runs `amd-ctk cdi generate --output=/run/cdi/amd.json` when /dev/kfd exists and amd-ctk is on PATH. Validates the generated spec via `amd-ctk cdi validate` and moves invalid output aside as amd.json.invalid so podman doesn't pick up a broken file. * Intel branch -- iterates /dev/dri/renderD* nodes, matches vendor:0x8086 to detect Intel iGPU/Arc, then runs /usr/libexec/mios/intel-cdi-specs-generator to emit /run/cdi/intel.yaml. Marked best-effort -- upstream tooling is v0.x. * NVIDIA branch -- expanded WSL2 detection: in addition to systemd-detect-virt=wsl, also picks the WSL mode when /dev/dxg exists (covers podman-machine WSL2 distros where systemd-detect-virt may not return wsl from the nested ns). Emits nvidia-wsl.yaml in WSL mode, nvidia.yaml in auto/native mode. * Status -- now writes both /run/mios/cdi-detect.status (env-style legacy) AND /run/mios/gpu-passthrough.status (JSON for boot-diag / dashboard consumers). automation/41-gpu-cdi-toolkits.sh (new): * Fetches AMD Container Toolkit v1.3+ as the RHEL9 RPM from github.com/ROCm/container-toolkit releases. RHEL9 RPM is glibc/systemd-ABI-compatible with Fedora 44. Tries dnf5 / dnf / rpm in order so the install works on minimal images that haven't pulled libdnf5 yet. * Fetches the Intel CDI specs-generator from intel/intel-resource- drivers-for-kubernetes releases (canonical asset name first, fall back to release-JSON glob match for asset-name drift). * Both follow the project policy: api.github.com lookup with pinned _FALLBACK_TAG when rate-limited or offline. Failed fetches warn but do not break the build -- mios-cdi-detect's branches no-op cleanly when the binary is missing. PACKAGES.md updates: * Uncomments intel-level-zero (ships in F44 via intel-compute-runtime source RPM as of the IntelCompute2025 packaging change). * Renames intel-gpu-tools -> igt-gpu-tools (Fedora 44 rename). Retracts the "needs libproc2.so.0" comment -- F44 carries that lib. * Adds a new "GPU Container Device Interface toolkits" section that documents amd-ctk + intel-cdi-specs-generator as fetched by 41-gpu-cdi-toolkits.sh (parallel to nvidia-container-toolkit which ships via dnf in the gpu-nvidia block). Sources: * https://github.com/ROCm/container-toolkit * https://instinct.docs.amd.com/projects/container-toolkit/en/latest/container-runtime/cdi-guide.html * https://github.com/intel/intel-resource-drivers-for-kubernetes/releases * https://github.com/cncf-tags/container-device-interface Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent 2f0f684 commit 502a0b3

3 files changed

Lines changed: 271 additions & 32 deletions

File tree

automation/41-gpu-cdi-toolkits.sh

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/bin/bash
2+
# 41-gpu-cdi-toolkits: install vendor CDI generators (AMD + Intel)
3+
#
4+
# NVIDIA's nvidia-ctk ships via the nvidia-container-toolkit RPM
5+
# (handled in 35-* GPU passes / repo enablement). AMD and Intel each
6+
# distribute their CDI tooling outside Fedora's main repos as of
7+
# May 2026, so we fetch them here:
8+
#
9+
# AMD: amd-ctk -- AMD Container Toolkit v1.3+ RHEL9 RPM
10+
# (Fedora 44 is glibc/systemd-compatible)
11+
# upstream: github.com/ROCm/container-toolkit
12+
# docs: instinct.docs.amd.com
13+
# /projects/container-toolkit/
14+
# /en/latest/container-runtime/cdi-guide.html
15+
#
16+
# Intel: intel-cdi-specs-generator
17+
# -- intel/intel-resource-drivers-for-kubernetes
18+
# v0.1+ static binary; non-Kubernetes path
19+
# for podman/docker hosts. Tooling is v0.x
20+
# and trails NVIDIA/AMD in polish; install
21+
# best-effort under /usr/libexec/mios so
22+
# mios-cdi-detect can use it when present.
23+
#
24+
# Both lookups follow the project policy: hit api.github.com for the
25+
# latest tag, fall back to a pinned _FALLBACK_TAG when rate-limited
26+
# or offline. Skip the install (warn, don't fail) when neither path
27+
# yields a binary -- mios-cdi-detect's branches no-op cleanly if the
28+
# tool is missing.
29+
set -euo pipefail
30+
# shellcheck source=lib/common.sh
31+
source "$(dirname "$0")/lib/common.sh"
32+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
33+
source "${SCRIPT_DIR}/lib/packages.sh"
34+
35+
# Pinned fallbacks (bump as upstream releases). Keep these matched
36+
# to the most recent verified-on-MiOS-build version so a network blip
37+
# doesn't ship a mystery binary.
38+
AMD_CTK_FALLBACK_TAG="v1.3.0"
39+
INTEL_SG_FALLBACK_TAG="v0.7.0"
40+
41+
# ── AMD Container Toolkit (amd-ctk) ──────────────────────────────────
42+
echo "[41-gpu-cdi] AMD: resolving latest amd-container-toolkit release..."
43+
AMD_TAG=$( (scurl -s https://api.github.com/repos/ROCm/container-toolkit/releases/latest \
44+
| grep -Po '"tag_name": "\K.*?(?=")') 2>/dev/null || true)
45+
if [[ -z "$AMD_TAG" ]]; then
46+
warn "AMD container toolkit: api.github.com lookup empty -- using fallback ${AMD_CTK_FALLBACK_TAG}"
47+
AMD_TAG="$AMD_CTK_FALLBACK_TAG"
48+
fi
49+
record_version amd-container-toolkit "$AMD_TAG" "https://github.com/ROCm/container-toolkit/releases/tag/${AMD_TAG}"
50+
51+
# AMD ships .rpm (RHEL/CentOS 9) + .deb (Ubuntu) only -- no Fedora
52+
# package as of May 2026. RHEL9 RPM works on Fedora 44 (same glibc /
53+
# systemd ABI). Asset name pattern observed on releases:
54+
# amd-container-toolkit-<ver>-1.el9.x86_64.rpm
55+
AMD_VER="${AMD_TAG#v}"
56+
AMD_RPM="amd-container-toolkit-${AMD_VER}-1.el9.x86_64.rpm"
57+
AMD_URL="https://github.com/ROCm/container-toolkit/releases/download/${AMD_TAG}/${AMD_RPM}"
58+
59+
mkdir -p /tmp/amd-cdi-dl
60+
if scurl -sfL "$AMD_URL" -o "/tmp/amd-cdi-dl/${AMD_RPM}" 2>/dev/null; then
61+
if dnf5 install -y "/tmp/amd-cdi-dl/${AMD_RPM}" >/dev/null 2>&1 \
62+
|| dnf install -y "/tmp/amd-cdi-dl/${AMD_RPM}" >/dev/null 2>&1 \
63+
|| rpm -ivh --replacepkgs "/tmp/amd-cdi-dl/${AMD_RPM}" >/dev/null 2>&1; then
64+
echo "[41-gpu-cdi] [ok] AMD container toolkit ${AMD_TAG} installed"
65+
else
66+
warn "AMD RPM downloaded but install failed -- skipping (non-fatal)"
67+
fi
68+
else
69+
warn "AMD container toolkit: ${AMD_URL} not reachable -- skipping (non-fatal)"
70+
fi
71+
rm -rf /tmp/amd-cdi-dl
72+
73+
# ── Intel CDI specs generator ────────────────────────────────────────
74+
echo "[41-gpu-cdi] Intel: resolving latest intel-resource-drivers-for-kubernetes release..."
75+
INTEL_TAG=$( (scurl -s https://api.github.com/repos/intel/intel-resource-drivers-for-kubernetes/releases/latest \
76+
| grep -Po '"tag_name": "\K.*?(?=")') 2>/dev/null || true)
77+
if [[ -z "$INTEL_TAG" ]]; then
78+
warn "Intel CDI generator: api.github.com lookup empty -- using fallback ${INTEL_SG_FALLBACK_TAG}"
79+
INTEL_TAG="$INTEL_SG_FALLBACK_TAG"
80+
fi
81+
record_version intel-cdi-specs-generator "$INTEL_TAG" \
82+
"https://github.com/intel/intel-resource-drivers-for-kubernetes/releases/tag/${INTEL_TAG}"
83+
84+
# Asset shape varies across the project's releases. Try the canonical
85+
# shape first; fall back to a glob-match against the release index.
86+
INTEL_BIN="intel-cdi-specs-generator-linux-amd64"
87+
INTEL_URL="https://github.com/intel/intel-resource-drivers-for-kubernetes/releases/download/${INTEL_TAG}/${INTEL_BIN}"
88+
89+
mkdir -p /tmp/intel-cdi-dl
90+
if scurl -sfL "$INTEL_URL" -o "/tmp/intel-cdi-dl/${INTEL_BIN}" 2>/dev/null \
91+
&& [[ -s "/tmp/intel-cdi-dl/${INTEL_BIN}" ]]; then
92+
install -d -m 0755 /usr/libexec/mios
93+
install -m 0755 "/tmp/intel-cdi-dl/${INTEL_BIN}" /usr/libexec/mios/intel-cdi-specs-generator
94+
echo "[41-gpu-cdi] [ok] Intel CDI specs-generator ${INTEL_TAG} installed at /usr/libexec/mios/intel-cdi-specs-generator"
95+
else
96+
# Fallback: query the release JSON for any *specs-generator* asset.
97+
# Best-effort -- tooling is v0.x and asset naming has shifted.
98+
asset_url=$( (scurl -s "https://api.github.com/repos/intel/intel-resource-drivers-for-kubernetes/releases/tags/${INTEL_TAG}" \
99+
| grep -oP '"browser_download_url": "\K[^"]*' \
100+
| grep -E 'specs-generator.*linux' \
101+
| grep -E 'amd64|x86_64' \
102+
| head -1) 2>/dev/null || true)
103+
if [[ -n "$asset_url" ]] && scurl -sfL "$asset_url" -o /tmp/intel-cdi-dl/sg.bin 2>/dev/null \
104+
&& [[ -s /tmp/intel-cdi-dl/sg.bin ]]; then
105+
install -d -m 0755 /usr/libexec/mios
106+
install -m 0755 /tmp/intel-cdi-dl/sg.bin /usr/libexec/mios/intel-cdi-specs-generator
107+
echo "[41-gpu-cdi] [ok] Intel CDI specs-generator ${INTEL_TAG} installed (fallback asset path)"
108+
else
109+
warn "Intel CDI specs-generator: no asset matched on ${INTEL_TAG} -- skipping (non-fatal)"
110+
fi
111+
fi
112+
rm -rf /tmp/intel-cdi-dl
113+
114+
echo "[41-gpu-cdi] done."

usr/libexec/mios/mios-cdi-detect

Lines changed: 118 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,134 @@
11
#!/usr/bin/env bash
2-
# 'MiOS' CDI spec detection -- generate Container Device Interface specs
3-
# for every detected GPU vendor before nvidia-cdi-refresh.service fires.
4-
# Run by mios-cdi-detect.service (Before=nvidia-cdi-refresh.service).
2+
# 'MiOS' CDI spec detection -- generate Container Device Interface
3+
# specs for every detected GPU vendor before nvidia-cdi-refresh.service
4+
# fires. Run by mios-cdi-detect.service (Before=nvidia-cdi-refresh.service).
55
#
66
# Writes specs to /run/cdi/ (declared in usr/lib/tmpfiles.d/mios-gpu.conf
7-
# under LAW 2). On WSL2 we generate with --mode=wsl. On bare metal /
8-
# regular VMs the mode is auto-detected. AMD ROCm and Intel iGPU specs
9-
# are stubs (upstream tooling is still emerging) -- only NVIDIA gets a
10-
# real CDI spec today.
7+
# under LAW 2). All paths are best-effort -- a missing toolkit makes
8+
# the corresponding branch a no-op rather than failing the boot.
119
#
12-
# When no GPU is present (e.g. headless server, container, WSL2 without
13-
# /dev/dxg), this is a no-op (writes an empty status file).
14-
set -euo pipefail
10+
# Vendor coverage (May 2026):
11+
# * NVIDIA via nvidia-ctk (NVIDIA Container Toolkit v1.19+)
12+
# /run/cdi/nvidia.yaml or /run/cdi/nvidia-wsl.yaml
13+
# * AMD via amd-ctk (AMD Container Toolkit v1.3+, Apr 2026)
14+
# /run/cdi/amd.json -- AMD outputs JSON, not YAML
15+
# * Intel via intel-cdi-specs-generator
16+
# (intel/intel-resource-drivers-for-kubernetes v0.1+)
17+
# /run/cdi/intel.yaml -- best-effort; tooling is v0.x
18+
#
19+
# When no GPU is present (headless server, container without /dev/dxg
20+
# or /dev/kfd or /dev/dri), this is a no-op except for the status
21+
# snapshot at /run/mios/cdi-detect.status.
22+
set -uo pipefail
1523
# shellcheck source=/usr/lib/mios/paths.sh
16-
source /usr/lib/mios/paths.sh
24+
source /usr/lib/mios/paths.sh 2>/dev/null || true
1725

18-
_log() { logger -t mios-cdi-detect "$*" 2>/dev/null || true; echo "[cdi-detect] $*" >&2; }
26+
_log() { logger -t mios-cdi-detect "$*" 2>/dev/null || true; echo "[cdi-detect] $*" >&2; }
1927

2028
install -d -m 0755 /run/cdi /run/mios
29+
2130
VIRT=$(systemd-detect-virt 2>/dev/null || echo none)
2231
HAS_NVIDIA=0
2332
HAS_AMD=0
2433
HAS_INTEL=0
25-
[[ -e /dev/nvidia0 || -e /dev/dxg ]] && HAS_NVIDIA=1
26-
[[ -e /dev/kfd ]] && HAS_AMD=1
27-
[[ -e /dev/dri/renderD128 ]] && HAS_INTEL=1
34+
[[ -e /dev/nvidia0 || -e /dev/dxg ]] && HAS_NVIDIA=1
35+
[[ -e /dev/kfd ]] && HAS_AMD=1
36+
# Intel iGPU/Arc detection: a renderD* node whose vendor reads 0x8086.
37+
# Iterate every renderD* node so multi-GPU boxes are correctly handled
38+
# (e.g. discrete NVIDIA + Intel iGPU coexisting).
39+
for r in /dev/dri/renderD*; do
40+
[[ -e "$r" ]] || continue
41+
pci=$(readlink -f "/sys/class/drm/$(basename "$r")/device" 2>/dev/null)
42+
[[ -n "$pci" && -r "$pci/vendor" ]] || continue
43+
if [[ "$(cat "$pci/vendor" 2>/dev/null)" == "0x8086" ]]; then
44+
HAS_INTEL=1
45+
break
46+
fi
47+
done
2848

2949
_log "virt=$VIRT nvidia=$HAS_NVIDIA amd=$HAS_AMD intel=$HAS_INTEL"
3050

31-
# NVIDIA: prefer upstream nvidia-cdi-refresh.service when its unit is
32-
# installed (toolkit v1.18+). Otherwise generate the spec ourselves.
51+
# ── NVIDIA ───────────────────────────────────────────────────────────
52+
# Prefer upstream nvidia-cdi-refresh.service when its unit is installed
53+
# (NVIDIA Container Toolkit v1.18+). It auto-regenerates on driver/device
54+
# change, so we don't want to race with it.
3355
if [[ "$HAS_NVIDIA" == 1 ]] && command -v nvidia-ctk >/dev/null 2>&1; then
34-
if systemctl list-unit-files nvidia-cdi-refresh.service 2>/dev/null \
35-
| grep -q nvidia-cdi-refresh; then
36-
_log "nvidia-cdi-refresh.service present; deferring spec generation"
56+
if systemctl list-unit-files nvidia-cdi-refresh.service 2>/dev/null | grep -q nvidia-cdi-refresh; then
57+
_log "nvidia: nvidia-cdi-refresh.service present -- deferring to upstream"
3758
else
59+
# WSL2 surfaces GPUs via /dev/dxg with the standard WDDM
60+
# paravirt driver. nvidia-ctk's --mode=wsl emits a CDI spec
61+
# that picks up the host's NVIDIA driver via the WSL /usr/lib/
62+
# wsl/lib bind-mount.
3863
mode_arg=()
39-
[[ "$VIRT" == "wsl" ]] && mode_arg=(--mode=wsl)
40-
if nvidia-ctk cdi generate "${mode_arg[@]}" \
41-
--output=/run/cdi/nvidia.yaml 2>/dev/null; then
42-
_log "wrote /run/cdi/nvidia.yaml"
64+
out=/run/cdi/nvidia.yaml
65+
if [[ "$VIRT" == "wsl" || -e /dev/dxg ]]; then
66+
mode_arg=(--mode=wsl)
67+
out=/run/cdi/nvidia-wsl.yaml
68+
else
69+
# nvidia-ctk auto-detects mode (nvml/csv/management) on
70+
# bare metal; --mode=auto is the explicit form.
71+
mode_arg=(--mode=auto)
72+
fi
73+
if nvidia-ctk cdi generate "${mode_arg[@]}" --output="$out" 2>&1 | logger -t mios-cdi-detect; then
74+
_log "nvidia: wrote $out (mode=${mode_arg[0]#--mode=})"
4375
else
44-
_log "nvidia-ctk cdi generate failed (non-fatal)"
76+
_log "nvidia: nvidia-ctk cdi generate failed (non-fatal)"
4577
fi
4678
fi
79+
elif [[ "$HAS_NVIDIA" == 1 ]]; then
80+
_log "nvidia: device present but nvidia-ctk missing -- install nvidia-container-toolkit"
4781
fi
4882

49-
# AMD: drop a placeholder if amd-ctk ever appears
83+
# ── AMD (ROCm) ───────────────────────────────────────────────────────
84+
# AMD Container Toolkit v1.3.0 (Apr 2026) ships amd-ctk which
85+
# generates a CDI spec the same way nvidia-ctk does. Output is JSON
86+
# by default; podman accepts both .yaml and .json under /etc/cdi or
87+
# /run/cdi. Spec naming follows the CNCF CDI convention:
88+
# vendor.com/class=identifier -> amd.com/gpu=all.
5089
if [[ "$HAS_AMD" == 1 ]] && command -v amd-ctk >/dev/null 2>&1; then
51-
amd-ctk cdi generate --output=/run/cdi/amd.json 2>/dev/null \
52-
&& _log "wrote /run/cdi/amd.json" \
53-
|| _log "amd-ctk cdi generate failed (non-fatal)"
90+
if amd-ctk cdi generate --output=/run/cdi/amd.json 2>&1 | logger -t mios-cdi-detect; then
91+
_log "amd: wrote /run/cdi/amd.json"
92+
# Validate the spec with the toolkit's own checker; mark the
93+
# spec stale if it fails so podman doesn't pick up a broken file.
94+
if amd-ctk cdi validate --path=/run/cdi/amd.json >/dev/null 2>&1; then
95+
_log "amd: spec validated"
96+
else
97+
_log "amd: spec validation FAILED -- moving aside"
98+
mv -f /run/cdi/amd.json /run/cdi/amd.json.invalid 2>/dev/null || true
99+
fi
100+
else
101+
_log "amd: amd-ctk cdi generate failed (non-fatal)"
102+
fi
103+
elif [[ "$HAS_AMD" == 1 ]]; then
104+
_log "amd: /dev/kfd present but amd-ctk missing -- run automation/41-gpu-cdi-toolkits.sh"
54105
fi
55106

56-
# Status snapshot
107+
# ── Intel (iGPU / Arc) ───────────────────────────────────────────────
108+
# Intel's CDI tooling lives in intel/intel-resource-drivers-for-kubernetes.
109+
# The specs-generator binary is a non-Kubernetes friendly way to
110+
# produce a /etc/cdi/intel.yaml. Best-effort: this binary is at v0.x
111+
# upstream and lacks the polish of nvidia-ctk / amd-ctk -- failures
112+
# here are logged but never break the boot.
113+
if [[ "$HAS_INTEL" == 1 ]]; then
114+
INTEL_GEN=""
115+
for cand in /usr/libexec/mios/intel-cdi-specs-generator \
116+
/usr/local/bin/intel-cdi-specs-generator \
117+
/usr/bin/intel-cdi-specs-generator; do
118+
if [[ -x "$cand" ]]; then INTEL_GEN="$cand"; break; fi
119+
done
120+
if [[ -n "$INTEL_GEN" ]]; then
121+
if "$INTEL_GEN" --output=/run/cdi/intel.yaml 2>&1 | logger -t mios-cdi-detect; then
122+
_log "intel: wrote /run/cdi/intel.yaml via $INTEL_GEN"
123+
else
124+
_log "intel: specs-generator failed (non-fatal; tooling is v0.x best-effort)"
125+
fi
126+
else
127+
_log "intel: GPU present but intel-cdi-specs-generator missing -- run automation/41-gpu-cdi-toolkits.sh"
128+
fi
129+
fi
130+
131+
# ── Status snapshot for the dashboard / mios-boot-diag ───────────────
57132
{
58133
echo "timestamp=$(date -Is)"
59134
echo "virt=$VIRT"
@@ -63,4 +138,17 @@ fi
63138
echo "cdi_specs=$(ls /run/cdi/ 2>/dev/null | tr '\n' ',' | sed 's/,$//')"
64139
} > /run/mios/cdi-detect.status
65140

141+
# JSON variant for tooling that reads structured output (boot-diag's
142+
# `gpu-passthrough.status` consumer pattern).
143+
{
144+
printf '{'
145+
printf '"timestamp":"%s",' "$(date -Is)"
146+
printf '"virt":"%s",' "$VIRT"
147+
printf '"nvidia":%s,' "$HAS_NVIDIA"
148+
printf '"amd":%s,' "$HAS_AMD"
149+
printf '"intel":%s,' "$HAS_INTEL"
150+
printf '"cdi_specs":"%s"' "$(ls /run/cdi/ 2>/dev/null | tr '\n' ',' | sed 's/,$//')"
151+
printf '}\n'
152+
} > /run/mios/gpu-passthrough.status
153+
66154
exit 0

usr/share/mios/PACKAGES.md

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -365,8 +365,15 @@ All packages are in official Fedora repos -- no extra repo needed.
365365
```packages-gpu-intel-compute
366366
intel-compute-runtime
367367
intel-media-driver
368-
# level-zero REMOVED: not in F44 repos as standalone package.
369-
# intel-gpu-tools REMOVED: needs libproc2.so.0 missing in F44.
368+
# Intel oneAPI Level Zero loader. Ships in F44 via the
369+
# intel-compute-runtime source RPM under the name intel-level-zero
370+
# (the generic standalone "level-zero" loader is still in active
371+
# Fedora packaging review -- track Phoronix/Fedora-IntelCompute2025).
372+
intel-level-zero
373+
# IGT (Intel GPU Tools): renamed from intel-gpu-tools to igt-gpu-tools
374+
# in Fedora 44; provides intel_gpu_top, IGT test runner, and pmu-help
375+
# for diagnostics. The "needs libproc2.so.0" issue cleared on F44.
376+
igt-gpu-tools
370377
```
371378

372379
## GPU Drivers -- NVIDIA (akmod, builds for any NVIDIA card)
@@ -388,6 +395,36 @@ xorg-x11-drv-nvidia-power
388395
nvidia-container-selinux
389396
```
390397

398+
## GPU Container Device Interface toolkits (vendor CDI generators)
399+
400+
Out-of-Fedora binaries that emit `/run/cdi/*.{yaml,json}` so podman
401+
containers can claim GPU access via `--device <vendor>.com/gpu=all`.
402+
NVIDIA's `nvidia-ctk` is part of `nvidia-container-toolkit` (above);
403+
the AMD + Intel paths install via `automation/41-gpu-cdi-toolkits.sh`
404+
because neither ships in Fedora repos as of May 2026:
405+
406+
* `amd-ctk` -- AMD Container Toolkit v1.3+ (RHEL9 RPM works on F44).
407+
Source: github.com/ROCm/container-toolkit. Generates
408+
`/run/cdi/amd.json` for any host with `/dev/kfd`. CDI key:
409+
`amd.com/gpu=all`.
410+
411+
* `intel-cdi-specs-generator` -- intel/intel-resource-drivers-for-
412+
kubernetes static binary. Best-effort (v0.x upstream). Installed
413+
to `/usr/libexec/mios/intel-cdi-specs-generator`. Generates
414+
`/run/cdi/intel.yaml` for hosts with an Intel render node
415+
(vendor:0x8086 on /dev/dri/renderD*). CDI key: `intel.com/gpu=all`.
416+
417+
Both are consumed by `/usr/libexec/mios/mios-cdi-detect` at boot
418+
(via `mios-cdi-detect.service`). Missing toolkits make the
419+
corresponding branch a no-op rather than failing the boot.
420+
421+
```packages-gpu-cdi-toolkits
422+
# Intentionally empty -- amd-ctk + intel-cdi-specs-generator are
423+
# fetched by automation/41-gpu-cdi-toolkits.sh from upstream
424+
# GitHub releases (same pattern as 37-aichat.sh / 38-oh-my-posh.sh).
425+
# Versions tracked via record_version (build metadata).
426+
```
427+
391428
## Virtualization -- KVM / QEMU / Libvirt
392429

393430
System-level KVM stack: hypervisor, libvirt daemon, firmware, CLI helpers.

0 commit comments

Comments
 (0)