You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需不同架构机器,如何获取多架构fetchurl的SHA256校验码?

无需跨架构机器获取Nix多架构二进制文件哈希的方法

方法1:直接用nix-prefetch-url计算哈希

不需要构建完整derivation,直接通过命令行工具下载对应架构的文件并生成哈希:

# 获取x86_64-linux版本的哈希
nix-prefetch-url https://github.com/myorg/myapp/releases/download/v1.32.0/myapp_1.32.0_linux_amd64.tar.gz

# 获取aarch64-linux版本的哈希
nix-prefetch-url https://github.com/myorg/myapp/releases/download/v1.32.0/myapp_1.32.0_linux_arm64.tar.gz

# 同理处理x86_64-darwin和aarch64-darwin版本

命令执行后会直接输出对应的sha256哈希值,复制到你的derivation中对应架构的checksum字段即可。

方法2:批量构建fetchurl derivation获取哈希

调整代码,让Nix一次性尝试构建所有架构的文件下载任务,逐个获取真实哈希:

  1. 创建临时文件fetch-all.nix:
{ pkgs }:
let
  archFiles = {
    "x86_64-linux" = "myapp_1.32.0_linux_amd64.tar.gz";
    "aarch64-linux" = "myapp_1.32.0_linux_arm64.tar.gz";
    "x86_64-darwin" = "myapp_1.32.0_darwin_amd64.tar.gz";
    "aarch64-darwin" = "myapp_1.32.0_darwin_arm64.tar.gz";
  };
  fetchArch = file: pkgs.fetchurl {
    url = "https://github.com/myorg/myapp/releases/download/v1.32.0/${file}";
    sha256 = pkgs.lib.fakeSha256;
  };
in
builtins.mapAttrs (name: file: fetchArch file) archFiles
  1. 运行nix-build fetch-all.nix,Nix会依次尝试构建每个架构的下载任务,每次哈希不匹配时都会输出真实值,你可以逐个记录并更新到原derivation中。

方法3:通过Flake批量触发多架构哈希验证

修改Flake配置,为所有系统生成单独的fetchurl输出,然后逐个触发构建获取哈希:

  1. 更新Flake的outputs部分:
{
  inputs = {
    flake-utils.url = "github:numtide/flake-utils";
    nixpkgs.url = "github:nixos/nixpkgs";
  };

  outputs = { self, nixpkgs, flake-utils }:
    let
      allSystems = flake-utils.lib.allSystems;
      forAllSystems = f: flake-utils.lib.eachSystem allSystems f;
    in
    {
      packages = forAllSystems (system:
        let
          pkgs = import nixpkgs { inherit system; };
          archFiles = {
            "x86_64-linux" = "myapp_1.32.0_linux_amd64.tar.gz";
            "aarch64-linux" = "myapp_1.32.0_linux_arm64.tar.gz";
            "x86_64-darwin" = "myapp_1.32.0_darwin_amd64.tar.gz";
            "aarch64-darwin" = "myapp_1.32.0_darwin_arm64.tar.gz";
          };
        in
        {
          myapp-fetch = pkgs.fetchurl {
            url = "https://github.com/myorg/myapp/releases/download/v1.32.0/${archFiles.${system}}";
            sha256 = pkgs.lib.fakeSha256;
          };
        }
      );

      devShells = flake-utils.lib.eachDefaultSystem (system:
        let
          pkgs = import nixpkgs { inherit system; };
        in
        {
          default = pkgs.mkShell {
            packages = [ (import ./deps/myapp.nix { inherit pkgs system; }) ];
          };
        });
    };
}
  1. 运行以下命令逐个触发构建,获取对应架构的真实哈希:
nix build .#packages.x86_64-linux.myapp-fetch
nix build .#packages.aarch64-linux.myapp-fetch
nix build .#packages.x86_64-darwin.myapp-fetch
nix build .#packages.aarch64-darwin.myapp-fetch

每个命令失败时会输出该架构的正确哈希,记录后更新原derivation即可。

内容的提问来源于stack exchange,提问作者MatrixManAtYrService

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:04:53