8.4.3. nix-copy-closure
نام
nix-copy-closure - کپی کردن شیءهای انبار به یا از یک ماشین راه دور از طریق SSH
خلاصه
nix-copy-closure [--to | --from ][`--gzip`]
[--include-outputs][`--use-substitutes` | `-s`]
[-v][_user_@]machine[:port] paths
توضیحات
با داشتن paths از یک ماشین، nix-copy-closure closure آن مسیرها (یعنی تمام وابستگیهای آنها در انبار Nix) را محاسبه کرده و store objects موجود در آن closure را از طریق SSH به ماشینی دیگر کپی میکند.
این ابزار شیءهای انباری را که در حال حاضر روی ماشین دیگر موجود هستند، کپی نمیکند.
نکته
در حالی که انبار Nix مورد استفاده روی ماشین محلی را میتوان در خط فرمان با گزینه
--storeمشخص کرد، انبار Nix قابل دسترس روی ماشین راه دور تنها میتواند روی همان ماشین راه دور پیکربندی استاتیک شود.
از آنجا که nix-copy-closure تابع ssh را فراخوانی میکند، ممکن است لازم باشد با ماشین راه دور احراز هویت کنید.
در واقع، ممکن است از شما دو بار درخواست احراز هویت شود؛ زیرا nix-copy-closure در حال حاضر دو بار به ماشین راه دور متصل میشود: بار اول برای دریافت مجموعه مسیرهای گمشده روی ماشین مقصد، و بار دوم برای ارسال دامپ آن مسیرها.
هنگام استفاده از احراز هویت کلید عمومی، میتوانید با استفاده از ssh-agent از تایپ کردن عبارت عبور جلوگیری کنید.
گزینهها
--toکپی کردن closure مربوط به paths از یک انبار Nix قابل دسترس از ماشین محلی به انبار Nix روی machine راه دور. این رفتار پیشفرض است.
--fromکپی کردن closure مربوط به paths از انبار Nix روی machine راه دور به انبار Nix مشخصشدهی ماشین محلی.
--gzipفعالسازی فشردهسازی اتصال SSH.
--include-outputsهمچنین کپی کردن خروجیهای store derivationهایی که در closure گنجانده شدهاند.
--use-substitutes/-sتلاش برای بارگیری شیءهای انبار مفقود روی مقصد از substituters. هر شیء انباری که نتواند روی مقصد جایگزین شود، همچنان به طور معمولی از مبدأ کپی میشود. این کار برای مثال زمانی مفید است که اتصال بین ماشین مبدأ و مقصد کند است، اما اتصال بین ماشین مقصد و
cache.nixos.org(سرور کش باینری پیشفرض) سریع است.
متغیرهای محیطی
NIX_SSHOPTSگزینههای اضافی که باید در خط فرمان به
sshپاس داده شوند.
مثالها
مثال
کپی کردن GNU Hello به همراه تمام وابستگیهای آن به یک ماشین راه دور:
$ storePath="$(nix-build '<nixpkgs>' -I nixpkgs=channel:nixpkgs-unstable -A hello --no-out-link)" $ nix-copy-closure --to alice@itchy.example.org "$storePath" copying 5 paths... copying path '/nix/store/h6q8sqsqfbd3252f9gixqn3z282wds7m-xgcc-13.2.0-libgcc' to 'ssh://alice@itchy.example.org'... copying path '/nix/store/imnwvn96lw355giswsk36hx105j4wnpj-libunistring-1.1' to 'ssh://alice@itchy.example.org'... copying path '/nix/store/85301indj7scg34spnfczkz72jgv8wa9-libidn2-2.3.7' to 'ssh://alice@itchy.example.org'... copying path '/nix/store/ypwfsaljwhzw9iffiysxmxnhjj8v7np0-glibc-2.39-31' to 'ssh://alice@itchy.example.org'... copying path '/nix/store/0dklv59zppdsqdvgf0qdvjgzcs5wbwxa-hello-2.12.1' to 'ssh://alice@itchy.example.org'...
مثال
کپی کردن GNU Hello از یک ماشین راه دور با استفاده از یک مسیر انبار شناختهشده و اجرای آن:
$ storePath="$(nix-instantiate --eval --raw '<nixpkgs>' -I nixpkgs=channel:nixpkgs-unstable -A hello.outPath)" $ nix-copy-closure --from alice@itchy.example.org "$storePath" $ "$storePath"/bin/hello Hello, world!