8.3.4.2. nix-env --install
نام
nix-env --install - افزودن بستهها به پروفایل کاربر
خلاصه دستور
nix-env {--install | -i} args… [{--prebuilt-only | -b}][{`--attr` | `-A`}]
[--from-expression][`-E`]
[--from-profile path][`--preserve-installed` | `-P`]
[--remove-all | -r][`--priority` *priority*]
توضیحات
عملیات --install یک پروفایل جدید ایجاد میکند.
این عملیات بر اساس نسل فعلی [profile] فعال است، که مجموعهای از store paths توصیفشده توسط args به آن اضافه میشوند.
آرگومانهای args به روشهای مختلفی به مسیرهای انبار نگاشت میشوند:
بهطور پیشفرض، args مجموعهای از نامها است که نمایانگر derivationها در default Nix expression هستند. این موارد realised شده و مسیرهای خروجی حاصل نصب میشوند. در صورتی که گزینه
--preserve-installedمشخص نشده باشد، derivationهای در حال حاضر نصبشدهای که نامشان با نام derivation در حال افزودن برابر است، حذف خواهند شد.اگر چندین derivation مطابق با یک نام در args وجود داشته باشد که دارای نام یکسانی هستند (مثلاً
gcc-3.3.6وgcc-4.1.1)، آنگاه derivation با بالاترین priority استفاده میشود. یک derivation میتواند با اعلام صفتmeta.priorityیک اولویت تعریف کند. این صفت باید یک عدد باشد که مقدار بالاتر نشاندهنده اولویت پایینتر است. اولویت پیشفرض5است.اگر چندین derivation منطبق با اولویت یکسان وجود داشته باشد، آنگاه derivation با بالاترین نسخه نصب خواهد شد.
شما میتوانید با مشخص کردن دقیق نسخهها، نصب چندین derivation با نام یکسان را اجبار کنید. برای نمونه، دستور
nix-env --install gcc-3.3.6 gcc-4.1.1هر دو نسخه GCC را نصب خواهد کرد (و احتمالاً باعث ایجاد تداخل در پروفایل کاربر خواهد شد!).اگر
--attr/-Aمشخص شده باشد، آرگومانها مسیرهای صفت (attribute paths) هستند که صفتها را از default Nix expression انتخاب میکنند. این روش سریعتر از استفاده از نامهای derivation بوده و بدون ابهام است. مسیرهای صفت بستههای موجود را باnix-env --queryنمایش دهید:
nix-env --query --available --attr-path اگر
--from-profileبه همراه path داده شود، args مجموعهای از نامهاست که store paths نصبشده در پروفایل path را نشان میدهند. این یک روش آسان برای کپی کردن عناصر محیط کاربر از یک پروفایل به پروفایلی دیگر است.اگر
--from-expressionداده شود، args Nix language functions هستند که با default Nix expression به عنوان تنها آرگومانشان فراخوانی میشوند. درایویشنهای بازگرداندهشده توسط آن فراخوانیهای تابع، نصب میشوند. این امر اجازه میدهد تا درایویشنها به روشی غیرقابلابهام مشخص شوند، که اگر چندین درایویشن با نام یکسان وجود داشته باشد، ضروری است.اگر
--priorityبه همراه priority داده شود، اولویت درایویشنهایی که در حال نصب هستند روی priority تنظیم میشود. از این قابلیت میتوان برای بازنویسی اولویت درایویشنهایی که در حال نصب هستند استفاده کرد. این کار زمانی مفید است که args شامل store paths باشد که هیچ اطلاعات اولویتی ندارند.اگر args شامل store paths باشد که به store derivations اشاره میکنند، آنگاه آن store derivations realised شده و مسیرهای خروجی حاصل نصب میشوند.
اگر args شامل store paths باشد که به store derivations اشاره نمیکنند، آنگاه این موارد realised و نصب میشوند.
به طور پیشفرض، تمام outputs برای هر store derivation نصب میشوند. این رفتار را میتوان با افزودن صفت
meta.outputsToInstallروی درایویشن که زیرمجموعهای از نامهای خروجی را فهرست میکند، بازنویسی کرد.مثال:
فایل
example.nixیک درایویشن با دو خروجیfooوbarتعریف میکند که هر کدام شامل یک فایل هستند.
# example.nix
let
pkgs = import <nixpkgs> {};
command = ''
${pkgs.coreutils}/bin/mkdir -p $foo $bar
echo foo > $foo/foo-file
echo bar > $bar/bar-file
'';
in
derivation {
name = "example";
builder = "${pkgs.bash}/bin/bash";
args = [ "-c" command ];
outputs = [ "foo" "bar" ];
system = builtins.currentSystem;
} نصب از روی این عبارت نیکس باعث میشود فایلهای هر دو خروجی در پروفایل فعلی ظاهر شوند.
$ nix-env --install --file example.nix
installing 'example'
$ ls ~/.nix-profile
foo-file
bar-file
manifest.nix افزودن meta.outputsToInstall به آن derivation باعث میشود که nix-env فقط فایلها را از خروجیهای مشخصشده نصب کند.
# example-outputs.nix
import ./example.nix // { meta.outputsToInstall = [ "bar" ]; } $ nix-env --install --file example-outputs.nix
installing 'example'
$ ls ~/.nix-profile
bar-file
manifest.nix گزینهها
--prebuilt-only/-bفقط از درایویشنهایی استفاده کنید که برای آنها یک جایگزین ثبت شده است؛ یعنی یک باینری پیشساخته وجود دارد که میتوان آن را به جای ساختن درایویشن بارگیری کرد. بنابراین، هیچ بستهای از روی کد منبع ساخته نخواهد شد.
--preserve-installed/-Pدرایویشنهایی را که نام آنها با یکی از درایویشنهای در حال نصب مطابقت دارد، حذف نکنید. معمولاً تلاش برای داشتن دو نسخه از یک بسته در یک نسل از یک پروفایل، به دلیل تداخل نام فایل بین دو نسخه، منجر به خطایی در ساخت آن نسل میشود. با این حال، این موضوع برای همه بستهها صدق نمیکند.
--remove-all/-rابتدا تمام بستههای ازپیشنصبشده را حذف کنید. این کار معادل اجرای اولیه
nix-env --uninstall '.*'است، با این تفاوت که همهچیز در یک تراکنش واحد انجام میشود.
مثالها
برای نصب یک بسته با استفاده از یک مسیر صفت خاص از عبارت Nix فعال:
$ nix-env --install --attr gcc40mips
installing `gcc-4.0.2'
$ nix-env --install --attr xorg.xorgserver
installing `xorg-server-1.2.0' برای نصب نسخه مشخصی از gcc با استفاده از نام derivation:
$ nix-env --install gcc-3.3.2
installing `gcc-3.3.2'
uninstalling `gcc-3.1' استفاده از مسیر صفت (attribute path) برای انتخاب یک بسته ترجیح داده میشود، زیرا بسیار سریعتر است و هیچگونه تداخل یا چند تطابق (multiple matches) رخ نخواهد داد.
توجه داشته باشید که نسخهٔ ازپیشنصبشده حذف میشود، زیرا گزینهٔ --preserve-installed مشخص نشده بود.
برای نصب یک نسخهٔ دلخواه:
$ nix-env --install gcc
installing `gcc-3.3.2' برای نصب تمام درایویشنها در عبارت نیکس (Nix expression) foo.nix:
$ nix-env --file ~/foo.nix --install '.*' برای کپی کردن مسیر انبار با نام نمادین gcc از یک پروفایل دیگر:
$ nix-env --install --from-profile /nix/var/nix/profiles/foo gcc برای نصب یک [derivation] مشخص (که معمولاً توسط nix-instantiate ایجاد میشود):
$ nix-env --install /nix/store/8la6y31fmm6i4wfmby6avly1wf718xnj-gcc-3.4.3.drv برای نصب یک مسیر خروجی خاص:
$ nix-env --install /nix/store/y3cgx0xj1p4iv9x0pnnmdhr8iyg741vk-gcc-3.4.3 برای نصب از روی یک عبارت نیکس (Nix expression) که در خط فرمان مشخص شده است:
$ nix-env --file ./foo.nix --install --expr \
'f: (f {system = "i686-linux";}).subversionWithJava' یعنی این عبارت به (f: (f {'{'}system = "i686-linux";{'}'}).subversionWithJava) (import ./foo.nix) ارزیابی میشود؛ در نتیجه صفت subversionWithJava را از مجموعهٔ بازگرداندهشده با فراخوانی تابع تعریفشده در ./foo.nix انتخاب میکند.
یک اجرای آزمایشی (dry-run) به شما میگوید چه مسیرهایی بارگیری یا از روی کد منبع ساخته خواهند شد:
$ nix-env --file '<nixpkgs>' --install --attr hello --dry-run
(dry run; not doing anything)
installing ‘hello-2.10’
this path will be fetched (0.04 MiB download, 0.19 MiB unpacked):
/nix/store/ikwkxz4wwlp2g1428n7dy729cg1d9hin-hello-2.10
... برای نصب Firefox از آخرین نسخه در کانال Nixpkgs/NixOS 14.12:
$ nix-env --file https://github.com/NixOS/nixpkgs/archive/nixos-14.12.tar.gz --install --attr firefox