[ここで部分的に解決: https://plus.google.com/110416349762686874861/posts/PVGHL1Tpeb9 ;完全ではありません]
NixOSマシンの1つをパッケージのキャッシュとして使用し、アップグレードのたびにHydraからすべてをプルしないようにします。だから私はこれをやろうとします: https://nixos.org/nix/manual/#sec-sharing-packages 。だが
nix-serve -p <port>
を使おうとすると、nix-env --option extra-binary-caches http://<Host>:<port>/
(root
として実行されている場合でも)はこのキャッシュを無視し、「NAR情報ファイル」...「署名がない」と言います。 cache.nixos.org
への切り替えを試みます。したがって、nix-serve
は期待どおりに機能しません。ドキュメントが実際のものではなくなったということですか、それともnix-serve
が壊れているということですか?
nix-copy-closure --to <user>@<Host>
は機能しますが(<user>
が信頼できるユーザーとしてnix.trustedUsers
に追加された場合)。しかし、アップグレードのたびにこれを行うのは非常に不便です。ところで。ここで私を困惑させるのは、--from
がどのように使用されることになっているのかということです。
私は、暗号化署名がどのように機能するか、およびそれらがパッケージ(およびリポジトリ)に署名するために使用される理由について一般的に理解しています。だが
このような状況では、私は単にそれを必要としません。MITMのリスクは心配する必要はありません。いくつかのGiBのバイナリを、定期的かつ簡単に、あるマシンから別のマシンにコピーしたいだけです。もちろん、nix.requireSignedBinaryCaches = false
を使用して検証を完全に無効にすることもできますが、それほど根本的な方法はありませんか?たとえば、nix-env
をroot
として、または「信頼できるユーザー」として呼び出し、この「追加の」バイナリキャッシュを「信頼できるバイナリキャッシュ」として登録した場合。それは、私が何をしているのかを知っていることを意味するのではなく、システムが署名の欠落についてしつこくする必要がないのですか? (チェックを完全に無効にする必要はありません)特定の「信頼できる」ソース/ユーザーに対してのみ検証を無効にする方法が見つかりませんでした。検証が存在しない(つまりバグ)と思われます。
また、この署名メカニズムに準拠するために、nix-store --generate-binary-cache-key
、次にnix-Push --dest <somewhere> --key-file <secret-1> --none <cherrypicked-paths>
を使用し、クライアントに公開鍵を登録することで、「本格的な」バイナリキャッシュを設定することもできます。 (s)。しかし、それは私が望んでいることではありません。アーカイブを「サーバー」に保存し、nix-Push
のパスを明示的に設定します。 nix-serve
が配達前にこれらの共有パッケージに署名して、受信側が満足するようにするか、nix-env
が署名の欠如について文句を言わないようにしたいだけです。ソースは信頼できます!
結論:nix-serve
または署名チェックメカニズム(またはその両方)が単に壊れているか、維持されていないことは間違いありません。したがって、それをすべて質問としてではなく、バグレポートの候補として考えることができます。しかし、私が間違っている場合は、さらに良いです。
nix-serve
コマンドを介して提供される署名付きバイナリキャッシュを使用するようにサーバーとクライアントを構成する方法は次のとおりです。これには、キャッシュを生成するためにnix-Push
を使用する必要はなく、このメソッドを使用して/nix/store
を直接提供できます。
これは、nix-Push
のman
-ページに記載されているため、詳細が必要な場合は、それも確認できます。
この例では、サーバーのホスト名がcache.example.com
であると想定しています。
まず、次のように、nix-store --generate-binary-cache-key
を使用して署名鍵ペアを生成する必要があります。
$ nix-store --generate-binary-cache-key cache.example.com-1 nix-serve.sec nix-serve.pub
... cache.example.com
をサーバーに適したホスト名に置き換えるだけです。実際のホスト名と一致する必要はありませんが、一致すると、公開鍵がどのサーバーに属しているかを簡単に区別できるようになります。
キャッシュサーバーがNixOS
を実行している場合は、次の2行をNixOS
構成ファイルに追加することでキャッシュを提供できます。
nix-serve = {
enable = true;
secretKeyFile = "/path/to/nix-serve.sec";
};
...そして、nix-serve
ユーザーがnix-serve.sec
キーへの読み取りアクセス権を持っていることを確認してください。
NixOS
を使用しておらず、nix-serve
実行可能ファイルを使用してキャッシュを直接提供する場合は、NIX_SECRET_KEY_FILE
環境変数を使用して秘密鍵へのパスを指定する必要があります。このような:
NIX_SECRET_KEY_FILE=/path/to/nix-serve.sec nix-serve ...
クライアントマシンがNixOS
マシンの場合、次の行をNixOS
構成ファイルに追加できます。
nix.binaryCaches = [
"https://cache.nixos.org/"
# This assumes that you use the default `nix-serve` port of 5000
"http://cache.example.com:5000"
];
nix.binaryCachePublicKeys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
# Replace the following string with the contents of the
# `nix-serve.pub` file you generated in the "Server configuration"
# section above
"cache.example.com-1:...="
];
NixOS
マシンを使用していない場合は、nix.conf
ファイルを手動で編集して次の設定を行うことができます。
binary-caches = https://cache.nixos.org/ http://cache.example.com
binary-cache-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.example.com-1:...=
1つのビルドに対してバイナリキャッシュを有効にする場合は、代わりに、次のように、これらのバイナリキャッシュ構成フラグをnix-build
やnixos-rebuild
などのNixユーティリティに直接渡すことができます。
nixos-rebuild build --option binary-caches "https://cache.nixos.org/ http://cache.example.com" --option binary-cache-public-keys "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= cache.example.com-1:...="