나는 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-memory
OS 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
사용하려고 하시는 걸 보니disableTest
haskell-package.nix
테스트 결과는 렌즈 포장에서 제거될 수 있는 것으로 밝혀졌습니다 . 귀하의 요구 사항을 충족하지 못하는 이유를 정확히 알려면 몇 가지 테스트를 수행해야 합니다.
일반 테스트 를 비활성화하고 cabal
패키지 재정의 config.nix
를 cabalNoTest
.cabal
나는 보통 다음과 같이 쓴다.
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
cabal = pkgs.haskellPackages.cabalNoTest;
};
};
};
}