7.2. ساختهای راه دور
یک نصب محلی از Nix میتواند ساختهای Nix را به ماشینهای دیگر ارجاع دهد؛ این امر امکان انجام چندین ساخت را به صورت موازی فراهم میکند.
بیلدهای راه دور همچنین به Nix اجازه میدهند تا بیلدهای چندپلتفرمی را به روشی نسبتاً شفاف انجام دهد. برای مثال، اگر ساختی را برای x86_64-darwin روی یک ماشین i686-linux انجام دهید، Nix میتواند به صورت خودکار ساخت را به یک ماشین x86_64-darwin ارجاع دهد، مشروط بر اینکه چنین ماشینی در دسترس باشد.
الزامات
برای اینکه یک ماشین محلی بتواند یک ساخت را به یک ماشین راه دور ارجاع دهد، ماشین راه دور باید شرایط زیر را داشته باشد:
- Nix روی آن نصب باشد.
- یک سرور SSH (مانند
sshd) را اجرا کند. - از طریق شبکه و با استفاده از SSH از ماشین محلی قابل دسترس باشد.
- کلید عمومی SSH ماشین محلی را در
/etc/ssh/authorized_keys.d/<username>داشته باشد. - نام کاربری کاربر SSH را در تنظیمات
trusted-usersدر فایلnix.confداشته باشد.
آزمایش
برای آزمایش اتصال به یک [نمونه Nix] راه دور (در اینجا mac)، دستور زیر را اجرا کنید:
nix store info --store ssh://username@mac برای مشخص کردن یک فایل هویت SSH به عنوان بخشی از URI انبار راه دور، یک پارامتر کوئری اضافه کنید، به عنوان مثال:
nix store info --store ssh://username@mac?ssh-key=/home/alice/my-key از آنجا که ساختها باید غیرتعاملی باشند، کلید نباید دارای عبارت عبور (passphrase) باشد. به عنوان راه حل جایگزین، میتوانید هویتها را از پیش در ssh-agent یا gpg-agent بارگذاری کنید.
در یک نصب چندکاربره (پیشفرض)، ساختها توسط خدمت پسزمینه Nix اجرا میشوند. خدمت پسزمینه Nix نمیتواند از طریق ترمینال یا ssh-agent درخواست عبارت عبور کند، بنابراین کلید SSH نباید عبارت عبور داشته باشد.
علاوه بر این، کاربر خدمت پسزمینه Nix (معمولاً root) باید به سازنده راه دور دسترسی SSH داشته باشد.
دسترسی را میتوان با اجرای sudo su و سپس اعتبارسنجی دسترسی SSH، مثلاً با اجرای ssh mac بررسی کرد. فایلهای هویت SSH برای کاربران root معمولاً در /root/.ssh/ (در لینوکس) یا /var/root/.ssh (در macOS) ذخیره میشوند.
اگر خطای زیر را دریافت کردید
bash: nix: command not found
error: cannot connect to 'mac' سپس باید مطمئن شوید که PATH در شلهای ورود به سیستم غیرتعاملی (non-interactive login shells) شامل Nix باشد.
فهرست ماشینهای بیلدرسازه راه دور را میتوان روی خط فرمان یا در فایل پیکربندی Nix مشخص کرد.
برای مثال، دستور زیر به شما اجازه میدهد یک derivation برای x86_64-darwin را روی یک ماشین لینوکس بسازید:
uname Linux nix build --impure \
--expr '(with import <nixpkgs> { system = "x86_64-darwin"; }; runCommand "foo" {} "uname > $out")' \
--builders 'ssh://mac x86_64-darwin' [1/0/1 built, 0.0 MiB DL] building foo on ssh://mac cat ./result Darwin امکان مشخص کردن چندین ماشین ساخت که با نقطه ویرگول یا خط جدید از هم جدا شدهاند وجود دارد، برای مثال:
--builders 'ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd' ماشینهای ساخت راه دور را میتوان در nix.conf نیز پیکربندی کرد، به عنوان مثال:
builders = ssh://mac x86_64-darwin ; ssh://beastie x86_64-freebsd
پس از اعمال تغییرات در nix.conf، برای اعمال تغییرات، خدمت پسزمینه (daemon) نیکس را مجدداً راهاندازی کنید.
در نهایت، ماشینهای ساخت راه دور را میتوان در یک فایل پیکربندی جداگانه که از طریق نحو @/path/to/file در builders گنجانده شده است، پیکربندی کرد. به عنوان مثال،
builders = @/etc/nix/machines
باعث میشود فهرست ماشینهای موجود در /etc/nix/machines گنجانده شود.
(این حالت پیشفرض است.)
nix.dev/manual/nix/stable/advanced-topics/distributed-builds.html