【问题标题】:Generate a file hash similar to the one output by nix-prefetch-url生成类似于 nix-prefetch-url 输出的文件哈希
【发布时间】:2023-01-05 06:27:36
【问题描述】:

假设我在某个 URL 下有一个可用的 zip 文件。我需要获取它的哈希值,它应该与 nix-prefetch-url --unpack <URL> 输出的哈希值相同,但没有有效的 Nix 安装。怎么办呢?

【问题讨论】:

    标签: hash nix


    【解决方案1】:

    似乎没有简单的方法,因为 nix-prefetch-url 将文件添加到商店。更多细节在这里:https://discourse.nixos.org/t/generate-a-file-hash-similar-to-the-one-output-by-nix-prefetch-url/19907(非常感谢迅速和彻底的社区成员的回应)

    【讨论】:

      【解决方案2】:

      使用泊坞窗。

      演示:

      $ nix-prefetch-url --unpack https://github.com/hraban/git-hly/archive/06ff628d5f2b02d1a883c94b01d58187d117f4f3.tar.gz
      path is '/nix/store/gxx1pfp19s3a39j6gl0xw197b4409cmp-06ff628d5f2b02d1a883c94b01d58187d117f4f3.tar.gz'
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      $ # Or .zip: it's the same, because of --unpack:
      $ nix-prefetch-url --unpack https://github.com/hraban/git-hly/archive/06ff628d5f2b02d1a883c94b01d58187d117f4f3.zip
      path is '/nix/store/1bpjlzknnmq1x3hq213r44jwag1xkaqs-06ff628d5f2b02d1a883c94b01d58187d117f4f3.zip'
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      

      下载到本地目录

      $ cd "$(mktemp -d)"
      $ curl -sSL --fail https://github.com/hraban/git-hly/archive/06ff628d5f2b02d1a883c94b01d58187d117f4f3.tar.gz | tar xz
      $ cd *
      

      并测试它:

      $ # Using the modern nix command:
      $ nix hash path --base32 .
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      $ # Or the same, using nix-hash:
      $ nix-hash --type sha256 --base32 .
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      

      同样在 Docker 中:

      $ docker run --rm -v "$PWD":/data nixos/nix nix --extra-experimental-features nix-command hash path --base32 /data
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      $ docker run --rm -v "$PWD":/data nixos/nix nix-hash --type sha256 --base32 /data
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      

      P.S.:我不太喜欢 nix-prefetch-url 的默认输出 (base32)。 nix hash path 的默认输出更好,如果你可以使用它:

      $ nix hash path .
      sha256-FibesuhNC4M81Gku9qLg4MsgS/qSZ2F3y4aa2u72j5g=
      $ # Sanity check:
      $ nix-hash --type sha256 --to-base32 $(<<<"FibesuhNC4M81Gku9qLg4MsgS/qSZ2F3y4aa2u72j5g=" base64 -d | hexdump -v -e '/1 "%02x"' )
      164gyvpdm6l6rdvn2rwjz95j1jz0w2igcbk9shy862sdx2rdw9hn
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-22
        • 1970-01-01
        • 2016-07-16
        • 2020-12-08
        • 2021-03-18
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多