合格」インストールパッケージ「私の言葉は、Nixビルド式(などを使用して)を評価することが、使用するのではなくソースコードからビルドされるということですnix-env
。nix-shell -p
変える。
最初はStackoverflowに投稿しかし、[Charles Duffyは] [3]コマンドラインツールや設定に関するものであれば、ここがより適切であると指摘します。それでもそのままにしておきます。 Nix言語自体を使用すると、パッケージが常にソースでコンパイルされるように強制できると仮定するため、まだ方法はわかりません。 (または実際には可能ではありませんが、誰かが指摘している場合は、質問はここにあります。)
答え1
どちらにしても設定substitute
オプションfalse
~へnix.conf
(デフォルトtrue
)または--option substitute false
Nixコマンドを呼び出すときに使用されます。
nix-env --options substitute false -i hello
nix-shell --options substitute false -p hello
あなたが探しているロボットではないかもしれません。
ロバートヘンシング(コメント、チャット)、ヘンリー・メンケ(コメント)とウラジミールチュヌート(コメント)はこれが実際に望むものではないかもしれないことを指摘しています。
詳しく説明すると、私はいつも最も基本的なNix機能の使用に自信を持っていましたが、Cで書かれた大規模アプリケーションのカスタムフォークを維持してデプロイする必要があるポイントに到達することは最初は非常に恐れていました。
最も簡単な方法で問題を解決してください。インポート私はそれをフォークして新しいソースコードで再構築したので、この問題が原因だと思いました。しかし、私にとって正しい方向は次のとおりです。Nixpkgs/パッケージの作成とデバッグ内部にNixOS Wiki。
パッケージ自体のみを再構築してください。
ウラジミールクナートコメントそれ」回避策を無効にすると、ローカルで見つからないすべてのアイテムを再構築できます。しかし、このような質問をする人は通常、指定されたパッケージ自体だけを再構築したいようです。」
(これは次のように達成できます。nix-build
あるいは、「ただ」は元のパッケージを上書きしますが、間違っている可能性があります。後者はNixOS Wikiの記事で言及されています。開発環境課nix-shell
しかし、私はまだそれを完全に理解していません。 )
テストの再現性
後者のビルドが決定的であることを確認したい場合は、同じ質問をすることができます。 〜のようにヘンリー・メンケのコメントnix-build --check
、この目的に使用する必要があります。
この--check
オプションは見逃しやすいです。man nix-build
またはnix-build
内部にニックスマニュアルしかし、なぜならnix-store --realize
(例えばman nix-build
説明する):
nix-build
nix-instantiate
本質的に(高レベルNix表現を低レベルリポジトリ派生に変換)と(ストレージデリバティブ構築)を取り巻くラッパーですnix-store --realise
。したがって、ここにリストされていないすべてのオプションは、および/をnix-store --realise
除いてに渡されます。--arg
--attr
-A
nix-instantiate
詳細な例については、以下をご覧ください。ニックスマニュアル存在する18.1 確実性を高めるための即時点検そして次の部分は次のとおりです。
構成オプションの関連部分はsubstitute
次のとおりです。このnix.conf
部分~からニックスマニュアル:
名前
nix.conf
— Nix 構成ファイル説明する
Nixは2つの設定ファイルから設定を読み込みます。
システム全体の設定ファイル
sysconfdir/nix/nix.conf
(/etc/nix/nix.conf
ほとんどのシステムなど)、またはすでに設定されている$NIX_CONF_DIR/nix.conf
場合。NIX_CONF_DIR
ユーザープロファイル
$XDG_CONFIG_HOME/nix/nix.conf
または設定されていない~/.config/nix/nix.conf
場合XDG_CONFIG_HOME
。
--option
フラグを使用してコマンドラインで設定を上書きできます。、例えば--option keep-outputs false
。現在、次の設定が利用可能です。
[..]
変える
true(デフォルト)に設定すると、Nixは可能であればバイナリ代替を使用します。このオプションを無効にすると、ソースから強制的にビルドできます。
(元の名前use-binary-caches
。)
ノート
これを(withまたはin)substitute
に設定すると、コマンドが複数回実行されるとパッケージは再コンパイルされません。つまり、上記のコマンドは、最初にソースでコンパイルしてから再度コマンドを実行すると、すでに存在するストレージパスにアクセスします。false
--options
nix.conf
hello
これがあいまいになる部分です。パッケージのNixビルド式が変更されない限り、保存された出力ハッシュも変更されず、次のコンパイル出力が前のコンパイル出力と同じになるため、再コンパイルは発生しません。したがって、重複します。
したがって、誰かがパッケージに対して軽いハッキングを実行し、ローカルで試したい場合(たとえば、次をnix-shell
使用)-I nixpkgs=a/local/nixpkgs/dir
、または使用する必要がありますかnix-build
?
質問も参照してくださいnix-build
ストアパスを書き換える方法は?