Nix: Überspringen von Komponententests bei der Installation eines Haskell-Pakets

9

Ich verwende Nix, um Pakete unter meinem Haus (also keine Binärpakete) auf einem gemeinsam genutzten Host mit begrenzten Ressourcen zu installieren. Ich versuche, git-annex zu installieren. Beim Erstellen einer seiner Abhängigkeiten, der Haskell-Linse, verbrauchen die Komponententests so viel Speicher, dass sie getötet werden und die Installation fehlschlägt.

Gibt es eine Möglichkeit, die Komponententests zu überspringen, um das Paket zu installieren? Ich habe haskell-packages.nixmir den Cabal Builder angesehen und es scheint mir, dass Sie die Tests deaktivieren können, indem Sie enableCheckPhaseauf false setzen. Ich habe Folgendes versucht ~/.nixpkgs/config.nix, aber die Tests werden noch ausgeführt:

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

Antworten:

2

Ich sehe, dass Sie versuchen, disableTestgefundene Daten zu verwenden haskell-package.nix, um Tests aus den Objektivpaketen zu entfernen. Ich müsste einige Tests durchführen, um Ihnen genau zu sagen, warum es nicht Ihren Anforderungen entspricht.

Ich habe deaktiviert Tests im Allgemeinen das Überschreiben der cabalVerpackung in config.nixzu cabalNoTest. Dies überschreibt das cabalPaket, das von den übrigen Haskell-Paketen verwendet wird, um das Testen zu deaktivieren.

So schreibe ich es normalerweise:

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

nixpkgsDie Dinge wurden neu organisiert, da die akzeptierte Antwort veröffentlicht wurde und es eine neue Funktion zum Deaktivieren von Tests gibt. Sie verpacken jetzt jedes Haskell-Paket mit der pkgs.haskell.lib.dontCheckFunktion zum Deaktivieren von Tests. Hier ist ein Beispiel für einen Nix-Ausdruck aus einem meiner Haskell-Projekte, bei dem ich Tests für die shared-memoryAbhängigkeit deaktivieren musste, wenn ich auf OS X aufbaute:

{ 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;
    }
Gabriel Gonzalez
quelle
Gibt es eine Möglichkeit, das Testen selektiv zu deaktivieren (aus Sicht der interaktiven Nutzung nix-build --disable-check-phase), ohne den Ableitungs- / Ausgabe-Hash zu ändern?
CMCDragonkai
@CMCDragonkai: Sie können Tests nicht deaktivieren, ohne den Hash zu ändern (mit Ausnahme von Ableitungen mit fester Ausgabe, die eine deterministische Binärausgabe haben). Selbst wenn Sie mit dem Ändern des Hashs einverstanden sind, gibt es keine ergonomische Möglichkeit, dies über die mir bekannte Befehlszeile zu tun
Gabriel Gonzalez
3

Eine alternative Antwort, die Ihr Anliegen aus einem anderen Blickwinkel anspricht, besteht darin, Ihre Pakete mit Tests auf einem leistungsstärkeren Computer zu erstellen. Kopieren Sie dann bei Bedarf den Abschluss auf den Remote-Host.

Dies funktioniert gut, wenn Sie sich auf derselben Architektur befinden und die betreffende Software nicht eng an Hardware gekoppelt ist, die sich auf den beiden Computern unterscheidet.

Weitere Informationen zum Freigeben von Paketen zwischen Computern finden Sie im nix-Handbuch.

Dies ist eine nette Funktion, die den Ansatz von nix zur Paketverwaltung ermöglicht. Ich habe diese Funktion oft umgekehrt verwendet und leistungsstärkere Remotecomputer verwendet, um reichlich Software für meinen lokalen Computer zu erstellen.

Davorak
quelle