私はNixを使用して制限されたリソースを使用する共有ホスティングの私の家の下にパッケージをインストールしています(したがってバイナリパッケージはありません)。 git-annexをインストールしようとしています。依存関係の1つであるhaskell-lensをビルドすると、単体テストは大量のメモリを消費し、そのテストが終了し、インストールが失敗します。
パッケージをインストールするために単体テストをスキップする方法はありますか? Cabal Builderを見てみると、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プロジェクトの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アプローチを可能にする優れた機能です。私はしばしばこの機能を逆にして、より強力なリモートシステムを使用してローカルシステム用の多くのソフトウェアを構築します。
答え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;
};
};
};
}