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


9

리소스가 제한된 공유 호스트에서 Nix를 사용하여 내 집 (이진 패키지가 아님)에 패키지를 설치하고 있습니다. git-annex를 설치하려고합니다. 종속 장치 중 하나 인 haskell-lens를 빌드 할 때 단위 테스트는 너무 많은 메모리를 소비하여 종료되어 설치에 실패합니다.

패키지를 설치하기 위해 단위 테스트를 건너 뛰는 방법이 있습니까? Cabal 빌더를 살펴본 haskell-packages.nix결과 enableCheckPhasefalse 로 설정하여 테스트를 비활성화 할 수있는 것으로 보입니다 . 에서 다음을 시도 ~/.nixpkgs/config.nix했지만 테스트는 계속 실행됩니다.

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

답변:


2

렌즈 패키지에서 테스트를 제거 하기 위해 disableTest찾은 것을 사용하려고 haskell-package.nix합니다. 왜 그것이 당신의 요구를 충족시키지 못하는지 정확히 알려주기 위해 약간의 테스트를해야 할 것입니다.

cabal패키지를 대체하는 테스트를 일반적으로 비활성화 config.nix했습니다 cabalNoTest. 이것은 cabal나머지 haskell 패키지가 테스트를 끄는 데 사용되는 패키지를 무시합니다 .

이것이 내가 일반적으로 쓰는 방법입니다.

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

12

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;
    }

nix-build --disable-check-phase파생 / 출력 해시를 변경하지 않고 (대화 형 사용 관점에서) 테스트를 선택적으로 비활성화하는 방법이 있습니까?
CMCDragonkai

@CMCDragonkai : 해시를 변경하지 않고 테스트를 비활성화 할 수 없습니다 (결정적 이진 출력이있는 고정 출력 파생 제외). 해쉬를 바꾸는 것이 괜찮더라도 내가 아는 커맨드 라인에서 인체 공학적으로 할 수있는 방법은 없습니다
Gabriel Gonzalez

3

다른 각도에서 우려 사항을 해결하는 대안은보다 강력한 시스템에서 테스트하여 패키지를 작성하는 것입니다. 그런 다음 필요한 경우 클로저를 원격 호스트에 복사하십시오.

이것은 동일한 아키텍처에 있고 해당 소프트웨어가 두 시스템에서 다른 하드웨어와 밀접하게 연결되어 있지 않은 경우에 효과적입니다.

nix 매뉴얼에서 머신간에 패키지공유 하는 방법에 대해 읽으십시오 .

이것은 패키지 관리에 대한 nix의 접근 방식을 가능하게하는 훌륭한 기능입니다. 필자는이 기능을 역으로 사용하여 더 강력한 원격 컴퓨터를 사용하여 로컬 컴퓨터에 충분한 양의 소프트웨어를 구축했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.