Skip to content

依赖解析不按平台过滤:macOS 上会去装只声明了 linux 的 runtime dep #487

Description

@Sunrisepeak

现象

在 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

为什么这不该发生

描述符两侧都已经表达清楚了:

  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 = { ... },
}
  1. pkgs/l/libcuda-host-link.luaxpm 只有 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 就会遇到。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions