现象
在 macOS 上安装 ollama 时,xim 去解析并安装 xim:libcuda-host-link@0.0.1,然后失败:
[xim:xpkg]: [ERROR] cannot get install dir for xim:libcuda-host-link@0.0.1
为什么这不该发生
描述符两侧都已经表达清楚了:
pkgs/o/ollama.lua 把那条依赖写在 xpm.linux 段之内:
xpm = {
linux = {
deps = { runtime = {
"xim:glibc@>=2.39",
"xim:gcc-runtime@15.1.0",
"xim:libcuda-host-link@0.0.1", -- ← linux 段内
}},
},
macosx = { ... },
windows = { ... },
}
pkgs/l/libcuda-host-link.lua 的 xpm 只有 linux,没有 macosx。
也就是说,「这条依赖只属于 linux」被声明了两遍,而 macOS 的安装流程仍然去解析它。看起来是 deps.runtime 的收集没有按当前平台段过滤,把别的平台段里的依赖也一起取了。
这个包在 macOS 上本来就不可能装:它是宿主 NVIDIA 驱动的 sentinel,给出一个指向 /usr/lib/x86_64-linux-gnu/libcuda.so.1 的稳定符号链接。
诊断也把人带偏
报的是 cannot get install dir —— 一个内部状态,像是「安装目录算不出来」。真实情况是这个包在当前平台上不存在。这两件事排查方向完全不同;前者会让人去查路径/权限,后者一眼就能看出是平台过滤问题。
建议:遇到「解析到一个当前平台没有 xpm 段的包」时,直接说出来 —— 是哪个包、哪个平台、以及它是被谁拉进来的。
复现
在 macOS 上 xim install ollama(或任何会走 ollama 安装路径的 CI)。
我这边是在 xim-pkgindex 的 macos-install-test 里撞到的:
https://github.com/openxlings/xim-pkgindex/actions/runs/31050326117/job/92455731362
那次 CI 会跑到 ollama 是我的误操作(我往一个 PR 分支推了 merge commit,changed-files 因此把 main 上三个月的变更算成了该 PR 的),已还原。但被暴露出来的这个平台过滤问题与那次误操作无关 —— 只要在 macOS 上装 ollama 就会遇到。
现象
在 macOS 上安装
ollama时,xim 去解析并安装xim:libcuda-host-link@0.0.1,然后失败:为什么这不该发生
描述符两侧都已经表达清楚了:
pkgs/o/ollama.lua把那条依赖写在xpm.linux段之内:pkgs/l/libcuda-host-link.lua的xpm只有linux,没有macosx。也就是说,「这条依赖只属于 linux」被声明了两遍,而 macOS 的安装流程仍然去解析它。看起来是
deps.runtime的收集没有按当前平台段过滤,把别的平台段里的依赖也一起取了。诊断也把人带偏
报的是
cannot get install dir—— 一个内部状态,像是「安装目录算不出来」。真实情况是这个包在当前平台上不存在。这两件事排查方向完全不同;前者会让人去查路径/权限,后者一眼就能看出是平台过滤问题。建议:遇到「解析到一个当前平台没有 xpm 段的包」时,直接说出来 —— 是哪个包、哪个平台、以及它是被谁拉进来的。
复现
在 macOS 上
xim install ollama(或任何会走 ollama 安装路径的 CI)。我这边是在 xim-pkgindex 的
macos-install-test里撞到的:https://github.com/openxlings/xim-pkgindex/actions/runs/31050326117/job/92455731362
那次 CI 会跑到 ollama 是我的误操作(我往一个 PR 分支推了 merge commit,
changed-files因此把 main 上三个月的变更算成了该 PR 的),已还原。但被暴露出来的这个平台过滤问题与那次误操作无关 —— 只要在 macOS 上装 ollama 就会遇到。