MacBook M1上无法运行Nix Flake安装bun@1.1.13求助
问题
我使用MacBook M1,想要安装bun@1.1.13,但该版本暂未在Nix Store中提供,于是编写了如下Nix Flake配置,预期能正常安装darwin-aarch64架构的bun@1.1.13,但运行时报错。
配置代码
{ description = "Runtimes required by Platform"; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs }: { packages = let bunVersion = "1.1.13"; getBun = { system, sha256 }: let pkgs = import nixpkgs { inherit system; }; bunSrc = pkgs.fetchurl { url = "https://github.com/oven-sh/bun/releases/download/bun-v${bunVersion}/bun-${system}.zip"; inherit sha256; }; in pkgs.stdenv.mkDerivation { pname = "bun"; version = bunVersion; src = bunSrc; nativeBuildInputs = [ pkgs.unzip ]; installPhase = '' mkdir -p $out/bin unzip $src -d $out/bin chmod +x $out/bin/bun ''; meta = with pkgs.lib; { description = "Bun - JavaScript runtime"; homepage = "https://bun.sh/"; license = licenses.mit; platforms = platforms.all; }; }; bun_darwin_aarch64 = getBun { system = "darwin-aarch64"; sha256 = "144bvn34v26shi50ykrfvwm439qnqn7z2v903dxm0wzbwqpsf3m6"; }; bun_darwin_x64 = getBun { system = "darwin-x64"; sha256 = "1h6p9sb9dyx3i5dw3xfm20np6wh0p0blm2204fpig4dph5chdrim"; }; bun_linux_aarch64 = getBun { system = "linux-x64"; sha256 = "1xwq9n7gpbpz8dyvcpavlr9i4lrl7kxkxwc84a0jnqnid2qrsbj0"; }; in { aarch64-darwin.bun = bun_darwin_aarch64; x86_64-darwin.bun = bun_darwin_x64; x86_64-linux.bun = bun_linux_aarch64; }; }; }
错误信息
Error: error installing package path:flakes/runtime#bun source: nix: command error: nix --extra-experimental-features ca-derivations --option experimental-features 'nix-command flakes fetch-closure' path-info 'path:/Users/mp/workspace/com/proj/flakes/runtime#bun' --json --impure: Unknown CPU type: darwin: exit code 1
解决方案
错误根源
配置核心问题:getBun函数中传给import nixpkgs的system参数用了darwin-aarch64格式,但Nix的标准系统标识符是架构在前、系统在后(如aarch64-darwin),Nix无法识别darwin-aarch64作为有效系统,因此抛出Unknown CPU type: darwin错误。
另外原配置中bun_linux_aarch64命名与参数不匹配——实际用的是linux-x64的Bun包,对应Nix的x86_64-linux系统,属于笔误。
修复后的配置
将getBun函数拆分为接收Nix标准系统标识和Bun下载链接对应的系统名两个参数,修正后配置如下:
{ description = "Runtimes required by Platform"; inputs = { nixpkgs.url = "nixpkgs/nixos-unstable"; }; outputs = { self, nixpkgs }: { packages = let bunVersion = "1.1.13"; # nixSystem: Nix标准系统标识,如aarch64-darwin # bunSystem: Bun下载链接中的系统名,如darwin-aarch64 getBun = { nixSystem, bunSystem, sha256 }: let pkgs = import nixpkgs { system = nixSystem; }; bunSrc = pkgs.fetchurl { url = "https://github.com/oven-sh/bun/releases/download/bun-v${bunVersion}/bun-${bunSystem}.zip"; inherit sha256; }; in pkgs.stdenv.mkDerivation { pname = "bun"; version = bunVersion; src = bunSrc; nativeBuildInputs = [ pkgs.unzip ]; installPhase = '' mkdir -p $out/bin unzip $src -d $out/bin chmod +x $out/bin/bun ''; meta = with pkgs.lib; { description = "Bun - JavaScript runtime"; homepage = "https://bun.sh/"; license = licenses.mit; platforms = platforms.all; }; }; bun_darwin_aarch64 = getBun { nixSystem = "aarch64-darwin"; bunSystem = "darwin-aarch64"; sha256 = "144bvn34v26shi50ykrfvwm439qnqn7z2v903dxm0wzbwqpsf3m6"; }; bun_darwin_x64 = getBun { nixSystem = "x86_64-darwin"; bunSystem = "darwin-x64"; sha256 = "1h6p9sb9dyx3i5dw3xfm20np6wh0p0blm2204fpig4dph5chdrim"; }; bun_linux_x64 = getBun { nixSystem = "x86_64-linux"; bunSystem = "linux-x64"; sha256 = "1xwq9n7gpbpz8dyvcpavlr9i4lrl7kxkxwc84a0jnqnid2qrsbj0"; }; in { aarch64-darwin.bun = bun_darwin_aarch64; x86_64-darwin.bun = bun_darwin_x64; x86_64-linux.bun = bun_linux_x64; }; }; }
验证方法
针对M1 Mac,运行以下命令测试安装:
nix run path:/Users/mp/workspace/com/proj/flakes/runtime#bun --version
内容的提问来源于stack exchange,提问作者Moon
相关产品推荐
相关产品推荐

