Nix: Haskell 패키지 설치 시 단위 테스트 건너뛰기

Nix: Haskell 패키지 설치 시 단위 테스트 건너뛰기

나는 Nix를 사용하여 제한된 리소스를 사용하는 공유 호스팅의 내 집 아래에 패키지를 설치하고 있습니다(따라서 바이너리 패키지는 없습니다). git-annex를 설치하려고 합니다. 종속성 중 하나인 haskell-lens를 빌드할 때 단위 테스트는 많은 메모리를 소비하여 해당 테스트가 종료되고 설치가 실패하게 됩니다.

패키지를 설치하기 위해 단위 테스트를 건너뛸 수 있는 방법이 있습니까? Cabal 빌더를 살펴보니 false로 설정하여 테스트를 비활성화 haskell-packages.nix할 수 있는 것 같습니다 . enableCheckPhase다음을 시도했지만 ~/.nixpkgs/config.nix테스트가 여전히 실행 중입니다.

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                self.lens = self.disableTest self.lens;
            };
        };
    };
}

답변1

nixpkgs승인된 답변이 게시된 이후 상황이 재구성되었으며 테스트를 비활성화하는 새로운 기능이 있습니다. 이제 pkgs.haskell.lib.dontCheck테스트를 비활성화하는 기능으로 Haskell 패키지를 래핑할 수 있습니다. 다음은 shared-memoryOS X에서 빌드할 때 종속성 테스트를 비활성화해야 하는 Haskell 프로젝트 중 하나의 Nix 표현식의 예입니다 .

{ pkgs ? import <nixpkgs> {}, compiler ? "ghc7103" }:
pkgs.haskell.packages.${compiler}.callPackage ./my-project.nix
    {   shared-memory =
            let shared-memory = pkgs.haskell.packages.${compiler}.shared-memory;
            in  if pkgs.stdenv.isDarwin
                then pkgs.haskell.lib.dontCheck shared-memory
                else shared-memory;
    }

답변2

또 다른 대답은 다른 각도에서 문제를 해결하는 것입니다. 즉, 더 강력한 시스템에서 테스트하여 패키지를 구축하는 것입니다. 그런 다음 필요할 때 클로저가 원격 호스트에 복사됩니다.

이 접근 방식은 동일한 아키텍처를 사용하고 관련 소프트웨어가 두 시스템의 다른 하드웨어와 긴밀하게 결합되지 않은 경우에 효과적입니다.

방법에 대해 읽어보세요머신 간 패키지 공유닉스 핸드북에 있습니다.

이는 패키지 관리에 대한 nix 접근 방식을 가능하게 하는 훌륭한 기능입니다. 나는 종종 이 기능을 반대로 사용하여 더 강력한 원격 시스템을 사용하여 로컬 시스템을 위한 많은 소프트웨어를 구축합니다.

답변3

사용하려고 하시는 걸 보니disableTesthaskell-package.nix테스트 결과는 렌즈 포장에서 제거될 수 있는 것으로 밝혀졌습니다 . 귀하의 요구 사항을 충족하지 못하는 이유를 정확히 알려면 몇 가지 테스트를 수행해야 합니다.

일반 테스트 를 비활성화하고 cabal패키지 재정의 config.nixcabalNoTest.cabal

나는 보통 다음과 같이 쓴다.

{
    packageOverrides = pkgs: with pkgs; {
        # ...other customizations...
        haskellPackages = haskellPackages.override {
            extension = self : super : {
                cabal = pkgs.haskellPackages.cabalNoTest;
            };
        };
    };
}

관련 정보