バイナリディストリビューションに基づく新しいnixosフォークでNativeBuildInputsを参照しているときにエラーが発生するのはなぜですか?

バイナリディストリビューションに基づく新しいnixosフォークでNativeBuildInputsを参照しているときにエラーが発生するのはなぜですか?

バイナリ形式でのみ配布されるプログラムでnixosパッケージを作成しようとしています。ほとんどの場合と同様に、標準リンカとライブラリへのリンクはnixosシステムと一致しないため、patchelfこれらのリンクを更新する新しいフォークを作成しました。私はzoom-usすでにパッケージリポジトリにあるパッケージ作業をしています。

ただし、パッケージをインストールしようとすると、次のエラーが発生します。

savanni@lapis:~  $ nix-env -i all --show-trace
replacing old ‘all’
installing ‘all’
error: while evaluating the attribute ‘pkgs’ of the derivation ‘all’ at /nix/store/1fxfp03ya08rnzrzyxy7dhca3c5qm0jk-nixos-16.09.1829.c88e67d/nixos/pkgs/build-support/trivial-builders.nix:10:14:
while evaluating the attribute ‘nativeBuildInputs’ of the derivation ‘GoPanda’ at /home/savanni/.nixpkgs/gopanda2.nix:9:5:
cannot coerce a set to a string, at /home/savanni/.nixpkgs/gopanda2.nix:9:5

これは私の派生テキストです。

{ cairo, fetchurl, glib, patchelf, stdenv, xorg }:
stdenv.mkDerivation rec {
    name = "GoPanda";
    version = "2";
    meta = {
        homepage = "http://pandanet-igs.com/communities/gopanda2";
    };

    src = fetchurl {
        url = "http://pandanet-igs.com/gopanda2/installer/stable/linux-64/gopanda2-linux-64.tar.gz";
        sha256 = "6d0a13e81a4646779331ff182acdbf9fe7982b2659f12a794a50897ea7368e1c";
    };  

    phases = [ "unpackPhase" "installPhase" ];
    nativeBuildInputs = [ ];
    buildInputs = [
        cairo
        glib
        xorg
    ];

    libPath = stdenv.lib.makeLibraryPath buildInputs;

    installPhase = ''
        mkdir -p $out/bin
        cp GoPanda2 $out/bin/GoPanda2
        patchelf \
            --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
            --set-rpath ${libPath} \
            $out/bin/GoPanda2
    '';
}

nativeBuildInputsこの行、このbuildInputs行、この行、およびへlibPathの参照を削除すると、成功したlibPathビルドが得られますが、実行可能ファイルはライブラリを見つける場所を知りません。そのため、ライブラリを指定する必要があることを知っています。また、上記のコードから始めてコンテンツを追加できますが、nativeBuildInputsまだ同じエラーが発生します。

しかし、問題はキャストが失敗する理由nativeBuildInputsとそれをどのように解決できるかということです。

ベストアンサー1

問題はのxorg項目にありますbuildInputs

xorg単一モジュールではなくコレクションです。私が知っている限り、buildInputs予想リストのすべての項目は文字列にキャストでき、明らかにモジュールはこのようにキャストできます(おそらくモジュール名)。このようにしてリストを強制的に登録することはできません。

ペアへの参照はnativeBuildInputsおそらく。buildInputsnativeBuildInputs

以下はビルドの派生テキストですが、まだ含まれていないいくつかのライブラリがありませんxorg。アプリケーションが完全に実行されたら、完全な派生バージョンに置き換えます。

{ pkgs ? import <nixpkgs> {}
, cairo ? pkgs.cairo
, fetchurl ? pkgs.fetchurl
, glib ? pkgs.glib
, patchelf ? pkgs.patchelf
, stdenv ? pkgs.stdenv
, xorg ? pkgs.xorg
}:
stdenv.mkDerivation rec {
    name = "GoPanda";
    version = "2";
    meta = {
        homepage = "http://pandanet-igs.com/communities/gopanda2";
    };

    src = fetchurl {
        url = "http://pandanet-igs.com/gopanda2/installer/stable/linux-64/gopanda2-linux-64.tar.gz";
        sha256 = "6d0a13e81a4646779331ff182acdbf9fe7982b2659f12a794a50897ea7368e1c";
    };

    phases = [ "unpackPhase" "installPhase" ];
    buildInputs = [
        cairo
        glib
        xorg.libX11
    ];

    libPath = stdenv.lib.makeLibraryPath buildInputs;

    installPhase = ''
        mkdir -p $out/share
        mkdir -p $out/bin
        cp -r locales $out/share
        cp GoPanda2 $out/bin/GoPanda2
        patchelf \
            --set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
            --set-rpath ${libPath} \
            $out/bin/GoPanda2
    '';
}

おすすめ記事