Nixを使用して、リソースが限られている共有ホストの自宅の下にパッケージをインストールしています(バイナリパッケージはありません)。 git-annexをインストールしようとしています。その依存関係の1つであるhaskell-lensを構築するとき、単体テストは大量のメモリを消費するため、それらが強制終了され、インストールが失敗します。
パッケージをインストールするために単体テストをスキップする方法はありますか? Cabalビルダーとhaskell-packages.nix
を調べましたが、enableCheckPhase
をfalseに設定することでテストを無効にできるようです。 ~/.nixpkgs/config.nix
で次のことを試しましたが、テストはまだ実行されています。
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
self.lens = self.disableTest self.lens;
};
};
};
}
haskell-package.nix
にある disableTest
を使用して、レンズパッケージからテストを削除しようとしているようです。それがあなたのニーズを満たしていない理由を正確に伝えるために、私はいくつかのテストをしなければならないでしょう。
一般に、config.nix
のcabal
パッケージをcabalNoTest
にオーバーライドするテストを無効にしました。これは、テストをオフにする残りのhaskellパッケージで使用されるcabal
パッケージをオーバーライドします。
これは私が通常それを書く方法です:
{
packageOverrides = pkgs: with pkgs; {
# ...other customizations...
haskellPackages = haskellPackages.override {
extension = self : super : {
cabal = pkgs.haskellPackages.cabalNoTest;
};
};
};
}
nixpkgs
受け入れられた回答が投稿されてから再編成され、テストを無効にするための新しい機能があります。ここで、Haskellパッケージをpkgs.haskell.lib.dontCheck
関数でラップして、テストを無効にします。これは、OSXでビルドするときにshared-memory
依存関係のテストを無効にしなければならなかったHaskellプロジェクトの1つからの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マニュアルを参照してください。
これは、nixのパッケージ管理へのアプローチを可能にする素晴らしい機能です。私はよくこの機能を逆に使用し、より強力なリモートマシンを使用して、ローカルマシン用に大量のソフトウェアを構築しました。