pkgs.mkBinaryCache
pkgs.mkBinaryCache تابعی برای ایجاد کشهای باینری فایل مسطح Nix است.
چنین کشی به عنوان یک پوشه روی دیسک وجود دارد و میتوان با دادن --substituter file:///path/to/cache به دستورات Nix، از آن به عنوان یک جایگزینکننده (substituter) Nix استفاده کرد.
بستههای Nix معمولاً از طریق HTTP, SSH, or S3 بین ماشینها به اشتراک گذاشته میشوند، اما کش باینری فایل مسطح هنوز هم در برخی موقعیتها میتواند مفید باشد. به عنوان مثال، میتوانید آن را مستقیماً به ماشین دیگری کپی کنید، یا آن را روی یک سیستمفایل شبکهای در دسترس قرار دهید. همچنین میتواند روشی راحت برای در دسترس قرار دادن برخی بستههای Nix در داخل یک کنتینر از طریق bind-mounting باشد.
mkBinaryCache منتظر یک آرگومان با صفت rootPaths است. rootPaths باید لیستی از درایویشنها باشد.
بستار متعدی (transitive closure) خروجیهای این درایویشنها درون کش کپی خواهد شد.
آرگومانهای اختیاری
compression ("none" یا "xz" یا "zstd"؛ اختیاری)
: الگوریتم فشردهسازی مورد استفاده.
مقدار پیشفرض: zstd.
> > > **مثال** > > # کپی کردن یک بسته و بستار آن به ماشینی دیگر با `mkBinaryCache` > > درایویشن زیر یک کش باینری فایل مسطح شامل بستار `hello` خواهد ساخت. >نکته
این تابع برای موارد استفاده پیشرفته در نظر گرفته شده است. روش رایجتر برای کار با کشهای باینری فایل مسطح، استفاده از دستور nix-copy-closure است. همچنین ممکن است بخواهید dockerTools را برای نیازهای کانتینرسازی خود در نظر بگیرید.
{ mkBinaryCache, hello }: mkBinaryCache { rootPaths = [ hello ]; }کش (Cache) را روی یک ماشین بسازید. توجه داشته باشید که این دستور همچنان همان بسته Nix دقیق بالا را میسازد، اما برای ساخت آن مستقیماً از یک عبارت، کمی کد boilerplate اضافه میکند.
$ nix-build -E 'let pkgs = import <nixpkgs> {}; in pkgs.callPackage ({ mkBinaryCache, hello }: mkBinaryCache { rootPaths = [hello]; }) {}' /nix/store/azf7xay5xxdnia4h9fyjiv59wsjdxl0g-binary-cacheپوشه حاصل را به ماشین دیگری که آن را
host2مینامیم، کپی کنید:
$ scp result host2:/tmp/hello-cacheدر این مرحله، هنگام ساخت درایویشنها روی
host2میتوان از کش به عنوان یک substituter استفاده کرد:
$ nix-build -A hello '<nixpkgs>' \ --option require-sigs false \ --option trusted-substituters file:///tmp/hello-cache \ --option substituters file:///tmp/hello-cache /nix/store/zhl06z4lrfrkw5rp0hnjjfrgsclzvxpm-hello-2.12.1