Nix: Bỏ qua kiểm tra đơn vị khi cài đặt gói Haskell


9

Tôi đang sử dụng Nix để cài đặt các gói dưới nhà của tôi (vì vậy không có gói nhị phân) trên máy chủ được chia sẻ với tài nguyên hạn chế. Tôi đang cố gắng cài đặt git-annex. Khi xây dựng một trong những phụ thuộc của nó, ống kính haskell, các thử nghiệm đơn vị tiêu thụ rất nhiều bộ nhớ đến nỗi chúng bị giết và cài đặt thất bại.

Có cách nào để bỏ qua các bài kiểm tra đơn vị để cài đặt gói không? Tôi đã xem xét trình xây dựng Cabal và haskell-packages.nixdường như tôi có thể vô hiệu hóa các bài kiểm tra bằng cách đặt enableCheckPhasethành false. Tôi đã thử các cách sau ~/.nixpkgs/config.nix, nhưng các bài kiểm tra vẫn đang chạy:

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

Câu trả lời:


2

Tôi thấy bạn đang cố gắng sử dụng disableTesttìm thấy haskell-package.nixđể loại bỏ kiểm tra khỏi các gói ống kính. Tôi sẽ phải làm một số thử nghiệm để cho bạn biết chính xác lý do tại sao nó không đáp ứng nhu cầu của bạn.

Tôi có kiểm tra khuyết tật nói chung trọng các cabalgói trong config.nixđể cabalNoTest. Điều này ghi đè cabalgói được sử dụng bởi phần còn lại của gói haskell tắt kiểm tra.

Đây là cách tôi thường viết nó:

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

12

nixpkgssắp xếp lại mọi thứ kể từ khi câu trả lời được chấp nhận được đăng và có một chức năng mới để vô hiệu hóa các bài kiểm tra. Bây giờ bạn bọc bất kỳ gói Haskell nào với pkgs.haskell.lib.dontCheckchức năng để vô hiệu hóa các bài kiểm tra. Dưới đây là một biểu thức Nix từ một trong các dự án Haskell của tôi, nơi tôi đã phải vô hiệu hóa các kiểm tra cho sự shared-memoryphụ thuộc khi xây dựng trên OS X:

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

Có cách nào để vô hiệu hóa thử nghiệm (từ quan điểm sử dụng tương tác như thế nào nix-build --disable-check-phase) mà không thay đổi hàm băm / đầu ra không?
CMCDragonkai

@CMCDragonkai: Bạn không thể vô hiệu hóa các kiểm tra mà không thay đổi hàm băm (ngoại trừ các dẫn xuất đầu ra cố định có đầu ra nhị phân xác định). Ngay cả khi bạn ổn với việc thay đổi hàm băm thì cũng không có cách nào thuận tiện để thực hiện điều đó từ dòng lệnh mà tôi biết
Gabriel Gonzalez

3

Một câu trả lời khác, giải quyết mối quan tâm của bạn từ một góc độ khác, là xây dựng các gói của bạn bằng thử nghiệm trên một máy mạnh hơn. Sau đó, khi cần sao chép việc đóng cửa vào máy chủ từ xa.

Điều này hoạt động tốt nếu bạn có cùng kiến ​​trúc và phần mềm được đề cập không được kết hợp chặt chẽ với bất kỳ phần cứng nào khác nhau trên hai máy.

Đọc về cách chia sẻ các gói giữa các máy trong hướng dẫn sử dụng nix.

Đây là một tính năng hay được cho phép tiếp cận quản lý gói của nix. Tôi thường sử dụng tính năng này ngược lại, sử dụng các máy từ xa mạnh hơn để xây dựng số lượng lớn phần mềm cho máy cục bộ của tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.