fetchurl을 얻기 위해 컬을 사용하는 대신 axel을 사용하여 NixOS에서 소스 코드를 얻으십시오.

fetchurl을 얻기 위해 컬을 사용하는 대신 axel을 사용하여 NixOS에서 소스 코드를 얻으십시오.

Cuda를 사용하여 쉘을 시작하려고합니다. 다음 shell.nix 파일이 있습니다

{ pkgs ? import <nixpkgs> { } }:

pkgs.mkShell {
  name = "cuda-env-shell";
  buildInputs = with pkgs; [
    unzip
    # other packages
    cudatoolkit
    # other packages
    binutils
  ];
}

그러나 다음 오류로 인해 실패합니다. 이전에 대용량 파일을 사용하면서 davinci-resolve와 같은 상황을 겪은 적이 있습니다. davinci-resolve의 경우 내 솔루션은 10개의 연결이 있는 axel을 사용하여 새로운 플레이크를 만드는 것이었고 매번 잘 작동했습니다. 이제 저는 Cuda에서 이 문제에 직면하고 있습니다.

[1/0/3 built, 4 copied (183.8/183.8 MiB), 42.8 MiB DL] building cuda_11.8.0_520.61.05_linux.run:                                  Dload  Upload   Total   Spent    Left
error: builder for '/nix/store/idz14mzbsv4k5v5ims095jcjk2r50glr-cuda_11.8.0_520.61.05_linux.run.drv' failed with exit code 1;
       last 7 log lines:
       >
       > trying https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
       >   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
       >                                  Dload  Upload   Total   Spent    Left  Speed
       >  49 4135M   49 2044M    0     0   772k      0  1:31:20  0:45:08  0:46:12     0
       > curl: (56) Recv failure: Connection reset by peer

Cuda를 원하지만 컬 대신 axel을 사용하여 src를 검색할 수 있나요? 다음과 같은 것을 시도했지만 유효한 구문이 아닌 것 같습니다.

    cudatoolkit.overrideAttrs
    (finalAttrs: previousAttrs: {
      pname = previousAttrs.pname + "-bar";
      src = runCommandLocal "${previousAttrs.pname}.run" rec { } ''
        axel \
          --num-connections=10 \
          --verbose \
          --insecure \
          --output $out \
          "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run"
      '';
    })

실수:

        at /nix/store/0g53xyh39z3y90p4d8r341wbqyjy1zhl-source/pkgs/stdenv/generic/make-derivation.nix:395:7:

          394|       depsHostHost                = elemAt (elemAt dependencies 1) 0;
          395|       buildInputs                 = elemAt (elemAt dependencies 1) 1;
             |       ^
          396|       depsTargetTarget            = elemAt (elemAt dependencies 2) 0;

       error: Dependency is not of a valid type: element 13 of buildInputs for cuda-env-shell

답변1

(cudatoolkit.overrideAttrs (finalAttrs: previousAttrs: { .. }))첫 번째 단계로 목록이 깨지는 것을 방지하려면 표현식 주위에 괄호를 추가해야 합니다 .

두 번째 단계에서는outputHash빌더가 다운로드한 소스 코드를 승인할 수 있도록 합니다. 처음에는 다음을 사용할 수 있습니다.

src = runCommandLocal "${previousAttrs.pname}.run" {
  outputHashMode = "flat";
  outputHashAlgo = "sha256";
  outputHash = "";
}

소스 해시를 표시하는 오류를 트리거합니다. 이 경우 해시 값을 얻습니다 sha256-kiPErzrr5Ke77Zq9mxY7A6GzS4VfvCtKDRtwasCaWhY=.

axel마지막으로 명령이 실행되는 환경에 추가해야 합니다 . 소스코드 다운로드 전용이므로 nativeBuildInputs에 추가 runCommandLocal하시면 됩니다. 추가적으로 .axel${pkgs.axel}/bin/axel

{pkgs ? import <nixpkgs> {}}:
pkgs.mkShell {
  name = "cuda-env-shell";
  buildInputs = with pkgs; [

    (cudatoolkit.overrideAttrs (finalAttrs: previousAttrs: {
      pname = previousAttrs.pname;
      src =
        runCommandLocal "${previousAttrs.pname}.run" {
          nativeBuildsInputs = [axel];
          # outputHashMode = "flat";
          # outputHashAlgo = "sha256";
          # outputHash = "";
          outputHash = "sha256-kiPErzrr5Ke77Zq9mxY7A6GzS4VfvCtKDRtwasCaWhY=";
        } ''
          # ${pkgs.axel}/bin/axel \
          axel \
            --num-connections=10 \
            --verbose \
            --insecure \
            --output "$out" \
            "https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run"
        '';
    }))
  ];
}

관련 정보