8.3.4.11. nix-env --upgrade
نام
nix-env --upgrade - ارتقای بستهها در پروفایل کاربر
خلاصه دستور
nix-env {--upgrade | -u} args [--lt | --leq | --eq | --always][{`--prebuilt-only` | `-b`}]
[{--attr | -A}][`--from-expression`] [-E][`--from-profile` *path*]
[--preserve-installed | -P]
توضیحات
عملیات ارتقا، یک پروفایل کاربر جدید بر اساس نسل فعلی از پروفایل فعال ایجاد میکند که در آن تمام مسیرهای انبار با نسخههای جدیدتری که در مجموعه مسیرهای توصیفشده توسط args وجود دارند، جایگزین میشوند. مسیرهایی که نسخه جدیدتری برای آنها وجود ندارد، دستنخورده باقی میمانند؛ این یک خطا محسوب نمیشود. همچنین اگر عضوی از args با هیچکدام از derivationهای نصبشده مطابقت نداشته باشد، خطایی رخ نمیدهد.
برای آگاهی از نحوه نگاشت args به مجموعهای از مسیرهای انبار، به --install مراجعه کنید. اگر args چندین مسیر انبار را با یک نام نمادین یکسان توصیف کند، تنها مسیری که بالاترین نسخه را دارد نصب میشود.
پرچمها
--ltفقط ارتقای یک derivation به نسخههای جدیدتر. این گزینه پیشفرض است.
--leqعلاوه بر ارتقا به نسخههای جدیدتر، «ارتقا» به derivationهایی که نسخه یکسانی دارند را نیز انجام میدهد. نسخه، شناسهای منحصربهفرد برای یک derivation نیست، بنابراین ممکن است derivationهای زیادی وجود داشته باشند که نسخه یکسانی دارند. این پرچم ممکن است برای اجبار «همگامسازی» بین derivationهای نصبشده و موجود مفید باشد.
--eqفقط «ارتقا» به derivationهایی که نسخه یکسانی دارند. این ممکن است خیلی مفید به نظر نرسد، اما در واقع مفید است؛ مثلاً زمانی که نسخه جدیدی از Nixpkgs عرضه شده و میخواهید برنامههای نصبشده را با همان نسخهها که با وابستگیهای جدیدتر ساخته شدهاند جایگزین کنید (تا تعداد وابستگیهای معلق در سیستم شما کاهش یابد).
--alwaysعلاوه بر ارتقا به نسخههای جدیدتر، «ارتقا» به derivationهایی که نسخه مساوی یا پایینتر دارند را نیز انجام میدهد. یعنی بسته به آنچه در عبارت Nix فعال موجود است، ممکن است derivationها در واقع تنزل نسخه (downgrade) داده شوند.
--prebuilt-only/-bفقط از derivationهایی استفاده کنید که یک جایگزین (substitute) برای آنها ثبت شده است، یعنی یک باینری پیشساختهی قابل دانلود به جای ساختن derivation موجود است. بنابراین، هیچ بستهای از روی کد منبع ساخته نخواهد شد.
--preserve-installed/-Pderivationهایی را که نامشان با یکی از derivationهای در حال نصب مطابقت دارد، حذف نکنید. معمولاً تلاش برای داشتن دو نسخه از یک بسته در یک نسل از یک پروفایل، به دلیل تداخل نام فایلها بین دو نسخه، منجر به بروز خطا در ساخت آن نسل میشود. با این حال، این موضوع برای همه بستهها صدق نمیکند.
مثالها
$ nix-env --upgrade --attr nixpkgs.gcc
upgrading `gcc-3.3.1' to `gcc-3.4' هنگامی که هیچ بهروزرسانیای در دسترس نباشد، هیچ اتفاقی نمیافتد:
$ nix-env --upgrade --attr nixpkgs.pan استفاده از -A در صورت امکان ترجیح داده میشود، زیرا سریعتر و بدون ابهام است، اما ارتقا به یک نسخهٔ خاص با تطبیق دادن نام derivation نیز امکانپذیر است:
$ nix-env --upgrade gcc-3.3.2 --always
upgrading `gcc-3.4' to `gcc-3.3.2' برای تلاش جهت ارتقای همه چیز (تطبیق بستهها بر اساس بخشی از نام derivation بدون در نظر گرفتن نسخه):
$ nix-env --upgrade
upgrading `hello-2.1.2' to `hello-2.1.3'
upgrading `mozilla-1.2' to `mozilla-1.4' نسخهها
عملیات ارتقا با بررسی صفات name مربوطه، تعیین میکند که آیا یک derivation به نام y ارتقایی برای یک derivation به نام x محسوب میشود یا خیر. نامها (مثلاً gcc-3.3.1) به دو بخش تقسیم میشوند: نام بسته (gcc) و نسخه (3.3.1). بخش نسخه پس از اولین خط تیره (dash) که پس از آن حرفی نیامده باشد، شروع میشود. اگر نامهای بسته با یکدیگر مطابقت داشته باشند و نسخه y بالاتر از نسخه x باشد، y به عنوان ارتقایی برای x در نظر گرفته میشود.
نسخهها با تقسیم شدن به کامپوننتهای متوالی از اعداد و حروف مقایسه میشوند. مثلاً 3.3.1pre5 به بخشهای [3, 3, 1, "pre", 5] تقسیم میشود. سپس این فهرستها به روش لغتنامهای (از چپ به راست) مقایسه میشوند. کامپوننتهای متناظر a و b به شکل زیر مقایسه میشوند: اگر هر دو عدد باشند، از مقایسه عدد صحیح استفاده میشود. اگر a یک رشته خالی و b یک عدد باشد، a کوچکتر از b در نظر گرفته میشود. کامپوننت رشتهای خاص pre (برای پیشانتشار) کوچکتر از سایر کامپوننتها در نظر گرفته میشود. کامپوننتهای رشتهای کوچکتر از کامپوننتهای عددی در نظر گرفته میشوند. در غیر این صورت، آنها به صورت لغتنامهای (یعنی با استفاده از مقایسه رشتهای حساس به بزرگ و کوچک بودن حروف) مقایسه میشوند.
این موضوع با مثالهای زیر نشان داده شده است:
1.0 < 2.3 2.1 < 2.3 2.3 = 2.3 2.5 > 2.3 3.1 > 2.3 2.3.1 > 2.3 2.3.1 > 2.3a 2.3pre1 < 2.3 2.3pre3 < 2.3pre12 2.3a < 2.3c 2.3pre1 < 2.3c 2.3pre1 < 2.3q