12. واژهنامه
-
نماد مجموعه خالی. در زمینه تاریخچه پروفایل، این نشان میدهد که یک بسته در نسخه خاصی از پروفایل حضور ندارد.
-
نماد اپسیلون. در زمینه یک بسته، این به معنای خالی بودن نسخه است. بهویژه، این derivation فاقد صفت نسخه است.
[دایرکتوری پایه (base directory)]
مکان و مسیری که مسیرهای نسبی بر اساس آن حل میشوند.
- برای عبارتها در یک فایل، دایرکتوری پایه، پوشهای است که آن فایل را در خود جای داده است. این مشابه دایرکتوری یک URL پایه است.
برای عبارتهای نوشتهشده در آرگومانهای خط فرمان با استفاده از
--expr، دایرکتوری پایه، دایرکتوری کاری فعلی است.-
یک کَش باینری انبار Nixی است که از قالب متفاوتی استفاده میکند: فراداده (metadata) و امضاهای آن به جای [پایگاهداده Nix] در فایلهای
.narinfoنگهداری میشوند. این قالب متفاوت، سرویسدهی اشیاء انبار را از طریق شبکه سادهتر میکند، اما نمیتواند میزبان ساختها باشد. نمونههایی از کشهای باینری شامل باکتهای S3 و کَش باینری NixOS میشوند. -
اصطلاحی عمومی برای نرمافزاری که با خودکارسازی فراخوانی کامپایلرها، لینکرها و سایر ابزارها، ساخت نرمافزار را تسهیل میکند.
Nix میتواند به عنوان یک سیستم ساخت عمومی استفاده شود. این ابزار هیچ شناختی از هیچ زبان برنامهنویسی یا زنجیره ابزار خاصی ندارد. این جزئیات در عبارتهای derivation مشخص میشوند.
-
بسته یک مسیر انبار، مجموعه ای از مسیرهای انبار است که مستقیماً یا غیرمستقیم از آن مسیر انبار «قابل دسترسی» هستند؛ یعنی بستهٔ آن مسیر تحت رابطهٔ ارجاعات است. برای یک بسته، بستهٔ derivation آن معادل وابستگیهای زمان ساخت است، در حالی که بستهٔ مسیر خروجی آن معادل وابستگیهای زمان اجرای آن است. برای استقرار صحیح، لازم است کل بستهها مستقر شوند، در غیر این صورت ممکن است در زمان اجرا فایلها گم شوند. دستور
nix-store --query --requisitesبستههای مسیرهای انبار را چاپ میکند.به عنوان مثال، اگر [شیء انبار] در مسیر
Pشامل یک [ارجاع] به یک شیء انبار در مسیرQباشد، آنگاهQدر بستهٔPقرار دارد. علاوه بر این، اگرQبهRارجاع دهد، آنگاهRنیز در بستهٔPقرار دارد.برای جزئیات بیشتر به ارجاعات مراجعه کنید.
[آدرس محتوا (content address)]
یک آدرس محتوا، روشی امن برای ارجاع به دادههای تغییرناپذیر است. این ارجاع مستقیماً از محتوای دادههایی که به آنها ارجاع داده میشود محاسبه میشود، به این معنی که ارجاع ضد دستکاری است — تغییرات دادهها همیشه باید به آدرسهای محتوای متمایز منتهی شوند.
برای اطلاع از نحوه استفادهٔ Nix از آدرسدهی محتوا (content-addressing)، به موارد زیر مراجعه کنید:
derivation مبتنی بر آدرس محتوا
مقالهی Software Heritage در مورد شناسههای ذاتی و بیرونی نیز مقدمهٔ خوبی برای درک ارزش آدرسدهی محتوا در مقایسه با سایر طرحهای ارجاع است.
علاوه بر آدرسدهی محتوا، انبار Nix از آدرسدهی ورودی نیز استفاده میکند.
-
اصطلاح صنعتی برای سیستمهای ذخیرهسازی و بازیابی که از آدرسدهی محتوا استفاده میکنند. انبار Nix همچنین دارای آدرسدهی ورودی و فراداده (metadata) است.
[شیء انبار مبتنی بر آدرس محتوا]
یک [شیء انبار] که مبتنی بر آدرس محتوا است، یعنی [مسیر انبار] آن توسط محتوای آن تعیین میشود. این مورد شامل derivationها، خروجیهای derivationهای مبتنی بر آدرس محتوا و خروجیهای derivationهای با خروجی ثابت میشود.
برای جزئیات بیشتر به اشیای انبار مبتنی بر آدرس محتوا مراجعه کنید.
[derivation مبتنی بر آدرس محتوا]
یک derivation که صفت
__contentAddressedدر آن روی مقدارtrueتنظیم شده است.-
میتوان یک derivation را به عنوان یک تابع خالص در نظر گرفت که اشیای انبار جدیدی را از اشیای انبار موجود تولید میکند.
Derivationها به شکل فرآیندهای سیستمعامل که در یک sandbox اجرا میشوند پیادهسازی میشوند. این sandbox بهطور پیشفرض تنها اجازهٔ خواندن از اشیای انباری را میدهد که به عنوان ورودی مشخص شدهاند، و تنها اجازهٔ نوشتن روی [خروجیهای][output] تعیینشده را میدهد تا به عنوان اشیای انبار ثبت شوند.
یک derivation معمولاً به عنوان یک عبارت derivation در [زبان Nix] مشخص میشود، و به یک derivation انبار فراوانی مییابد. راههای متعددی برای به دست آوردن اشیای انبار از derivationهای انبار وجود دارد که به طور جمعی تحققیافتن نامیده میشوند.
-
توصیفی از یک [derivation انبار] با استفاده از [مقدمات
derivation(پیشفرض)][./language/derivations.md] در [زبان Nix]. -
یک [مسیر انبار] که به طور منحصربهفرد یک [derivation انبار] را شناسایی میکند.
برای جزئیات بیشتر به ارجاع به derivationهای انبار مراجعه کنید.
نباید با [مسیر در حال اشتقاق] اشتباه گرفته شود.
[سازندهٔ derivation (deriver)]
آن [derivation انبار] که یک مسیر خروجی را تولید کرده است.
سازندهٔ یک مسیر خروجی را میتوان با گزینهی
--deriverدر دستورnix-store --queryاستعلام کرد.[مسیر در حال اشتقاق (deriving path)]
مسیرهای در حال اشتقاق راهی برای ارجاع به اشیای انبار هستند که ممکن است هنوز تحقق نیافته باشند.
برای جزئیات بیشتر، به مسیر derivation مراجعه کنید.
نباید با مسیر derivation اشتباه گرفته شود.
-
یک گراف جهتدار بدون دور (DAG) گرافی است که یالهای آن دارای جهت هستند («a به b» با یال «b به a» یکی نیست) و هیچ مسیر ممکنی (که از به هم پیوستن یالها ایجاد شود) یک چرخه تشکیل نمیدهد.
گرافهای DAG برای Nix بسیار مهم هستند. بهویژه، خودارجاعیهای غیر-شیء انبار یک چرخه تشکیل میدهند.
-
قابلیتی که هنوز تثبیت نشده است و توسط پرچمهای ویژگیهای آزمایشی نامگذاریشده محافظت میشود. این پرچمها با تنظیم
experimental-featuresفعال یا غیرفعال میشوند.راهنمای مشارکت در خصوص هدف و چرخه عمر ویژگیهای آزمایشی را مطالعه کنید.
-
مدل دادهی Nix برای نمایش دادههای سادهشدهی سیستمفایل.
برای جزئیات بیشتر، به شیء سیستمفایل مراجعه کنید.
-
یک store derivation که در آن هش رمزنگاریشدهی خروجی از پیش با استفاده از صفت
outputHashتعیین میشود، و در آن فایل اجراییbuilderبه شبکه دسترسی دارد. -
یک فرآیند ارزیابی یا ساخت زمانی هرمتیک است که بتوان مجموعه تمام ورودیهای تأثیرگذار بر آن را به صورت مکانیکی شناسایی کرد. در سطح ساخت، این امر از طریق ایزولهسازی (sandboxing) حاصل میشود؛ و در سطح ارزیابی، با محدود کردن دسترسی ناخالص (همانند ارزیابی خالص) به همراه قفلگذاری یا سنجاق کردن ورودیهای دریافتشده، که به صورت گذرا روی دریافتهای خالص اعمال میشوند.
-
یک ویژگی آزمایشی که به derivationها اجازه میدهد به صراحت به عنوان ناخالص علامتگذاری شوند، تا همیشه بازسازی شوند و خروجیهای آنها توسط فرایندهای بعدی برای تحققبخشیدن (realise) مجدداً استفاده نشوند.
[شیء انبار آدرسدهیشده با ورودی]
یک شیء انبار که با ساخت یک derivation غیر-مبتنی بر محتوا و غیر-خروجیثابت تولید میشود.
برای جزئیات بیشتر، به خروجیهای derivation آدرسدهیشده با ورودی مراجعه کنید.
-
چیزی که میتواند در انبار Nix محقق (realise) شود.
برای جزئیات بیشتر درباره
دستورات nix(آزمایشی)، به قابلنصبها مراجعه کنید. [instantiate کردن (ساخت شیء derivation)]، instantiation
ترجمه یک عبارت derivation به یک store derivation.
به
nix-instantiateمراجعه کنید که یک store derivation از یک عبارت Nix که به یک derivation ارزیابی میشود، تولید میکند.
در مدیریت بسته، ثابتسازی نسخه (Pinning) مفهوم یا فرآیندی است که طی آن یک فایل قفل ایجاد میشود. این فایل هر ورودی ارزیابی تغییرپذیری را به یک مرجع تغییرناپذیر نگاشت میکند، به طوری که ارزیابیهای آینده به جای اشاره به آنچه مراجع تغییرپذیر در حال حاضر نشان میدهند، به همان نسخههای تغییرناپذیر منتهی شوند.
-
یک بایگانی نیکس (Nix ARchive). این یک سریالسازی از یک مسیر در انبار نیکس است. این بایگانی میتواند شامل فایلهای معمولی، پوشهها و پیوندهای نمادین باشد. بایگانیهای NAR با استفاده از
nix-store --dumpوnix-store --restoreتولید و استخراج میشوند.برای جزئیات بیشتر به بایگانی نیکس مراجعه کنید.
-
یک پایگاهداده SQLite برای ردیابی [مرجع]ها بین [شیء انبار]ها. این یک جزئیات پیادهسازی از [انبار محلی] است.
مکان پیشفرض:
/nix/var/nix/db. -
یک استفاده از [زبان نیکس] که از نظر نحوی معتبر است.
مثال
محتویات یک فایل
.nixیک عبارت نیکس را تشکیل میدهند.عبارتهای نیکس، [عبارتهای درایویشن][derivation expression] را مشخص میکنند که در انبار نیکس به عنوان درایویشنهای انبار مؤسس میشوند. سپس این درایویشنها میتوانند برای تولید [خروجیها][output] محقق شوند.
مثال
ساخت و استقرار نرمافزار با استفاده از نیکس مستلزم نوشتن عبارتهای نیکس برای توصیف [بستهها][package] و ترکیبهای آنها است.
-
- یک نصب از نیکس، که شامل حضور یک [انبار] و مدیر بسته نیکس است که روی آن انبار کار میکند. یک نصب محلی نیکس و یک سازنده راه دور دو نمونه از نمونههای نیکس هستند.
- یک فرآیند در حال اجرای نیکس، مانند دستور
nix.
-
یک [شیء انبار] که توسط یک [درایویشن انبار] تولید میشود. برای جزئیات بیشتر به آرگومان
outputsبرای تابعderivationمراجعه کنید. [بسته خروجی (output closure)]\ [بسته (closure)] یک مسیر خروجی. این بسته فقط شامل مواردی است که از خروجی [قابلدستیابی] هستند.
-
[مسیر انبار] به خروجی یک [درایویشن انبار].
-
یک بسته نرمافزاری؛ فایلهایی که برای یک هدف خاص به هم تعلق دارند، به همراه فراداده (metadata).
نیکس فایلها را به عنوان شیء سیستمفایل نمایش میدهد و نحوه تعلق آنها به یکدیگر به عنوان [مرجع]ها بین [شیء انبار]هایی که حاوی این اشیاء سیستمفایل هستند، کدگذاری میشود.
[زبان نیکس] امکان نامگذاری بستهها را بر حسب مجموعههای صفت شامل موارد زیر فراهم میکند:
- صفاتی که به فایلهای یک بسته اشاره دارند، معمولاً در قالب خروجیهای درایویشن،
- صفاتی با فراداده، مانند اطلاعاتی درباره نحوه استفاده از بسته.
شکل دقیق این مجموعههای صفت بستگی به توافق دارد.
مانند قفل کردن، اما یک پین تنها یک ورودی را قفل میکند. یک راهکار پینکردن ممکن است مجموعهای از پینها را مدیریت کند، اما هدف از پایین به بالا (bottom-up) را برای تثبیت مرجع یک ورودی بر اساس تقاضا برآورده میکند، در حالی که قفل کردن دلالت بر رویکردی از بالا به پایین دارد که در آن همه پینها در یک مکان واحد «وادار» میشوند. این «وادارسازی» عموماً به واسطه مکانیسمهای سطح بالایی مانند سیستمهای ماژول زبان برنامهنویسی به دست میآید. نیکس چنین سیستم ماژول محدودکنندهای ندارد، زیرا حتی یک فلیک نیز میتواند از عبارتهایی استفاده کند که به تنهایی پین یا قفل میشوند. این امر متکی بر کامل بودن قفل نیست، بلکه بر یک ویژگی دریافت گذرا (transitive) متکی است؛ نگاه کنید به هرمسیت.
-
یک پیوند نمادین به محیط کاربر فعلی یک کاربر، برای نمونه:
/nix/var/nix/profiles/default. [خلوص]<a id="gloss-خلوص"></a>
این فرض که درایویشنهای مساوی نیکس هنگام اجرا همواره خروجی یکسانی تولید میکنند. این موضوع را بهطور کلی نمیتوان تضمین کرد (برای نمونه، یک سازنده میتواند به ورودیهای خارجی مانند شبکه یا زمان سیستم متکی باشد) اما مدل نیکس آن را فرض میگیرد.
-
یک مسیر انبار
Qاز مسیر انبار دیگری چونPقابلدسترس است اگرQدر بستار رابطهٔ ارجاعات باشد.برای جزئیات به ارجاعات مراجعه کنید.
-
اطمینان از اینکه یک [مسیر انبار][معتبر]validity است.
این کار از راههای زیر قابل دستیابی است:
- دریافت یک [شیء انبار] پیشساخته از یک [جایگزینساز]
- ساختن derivation متناظر با آن
- تفویض به یک ماشین راه دور و بازیابی خروجیها
برای توضیحات دقیق درباره الگوریتم، به
nix-store --realiseمراجعه کنید. -
یک یال از یک [شیء انبار] به شیء دیگر.
برای جزئیات به ارجاعات مراجعه کنید.
برای جزئیات به ارجاعات مراجعه کنید.
-
یک یال معکوس از یک [شیء انبار] به شیء دیگر.
-
یک شیء انبار که از یک [شیء انبار] دادهشده توسط یک مسیر (زنجیرهای از ارجاعات) [قابلدسترس] است. [بستار] مجموعهٔ ملزومات است.
برای جزئیات به ارجاعات مراجعه کنید.
-
مجموعهای از اشیاء انبار، به همراه عملکردهایی برای دستکاری آن مجموعه. برای جزئیات به انبار نیکس مراجعه کنید.
انواع زیادی از انبارها وجود دارد، برای جزئیات به انواع انبار مراجعه کنید.
-
یک derivation که به عنوان یک [شیء انبار] نمایش داده میشود.
برای جزئیات به Store Derivation مراجعه کنید.
-
بخشی از محتوای یک [انبار].
یک شیء انبار شامل یک [شیء سیستمفایل]، ارجاعات به سایر اشیاء انبار، و سایر فرادادهها است. میتوان توسط یک [مسیر انبار] به آن ارجاع داد.
برای جزئیات به شیء انبار مراجعه کنید.
مکان یک store object در سیستمفایل، یعنی یک فرزند مستقیم از پوشهی انبار Nix.
مثال
/nix/store/jf6gn2dzna4nmsfbdxsd7kwhsk6gnnlr-git-2.38.1
برای جزئیات بیشتر به Store Path مراجعه کنید.
-
گسترش دادن عبارتهای محصور شده در
${'{'} {'}'}درون یک string، path یا attribute name.برای جزئیات بیشتر به String interpolation مراجعه کنید.
-
Subresource Integrity (SRI) یک مشخصه W3C برای فرادادههای یکپارچگی است. Nix از فرمت هش SRI (
<algorithm>-<Base64 hash>) استفاده میکند تا هشهای محتوا را به شکلی خودتوصیف مشخص کند، زیرا الگوریتم هش بخشی از این فرمت است. -
یک substitute (جایگزین) یک فراخوانی فرمان ذخیرهشده در [Nix database] است که نحوه ساخت یک store object را توصیف میکند و مکانیزم ساخت عادی (یعنی derivationها) را دور میزند. معمولاً substitute با بارگیری یک نسخه پیشساخته از store object از یک سرور، آن را میسازد.
-
یک store اضافی که Nix میتواند به جای ساختن store objectها، آنها را از آن دریافت کند. اغلب substituter یک binary cache است، اما هر انبار دیگری نیز میتواند به عنوان substituter عمل کند.
برای جزئیات بیشتر به
substitutersconfiguration option مراجعه کنید. -
یک store object خودکار ساختهشده که شامل مجموعهای از پیوندهای نمادین (symlinks) به برنامههای «فعال»، یعنی سایر مسیرهای انبار (store paths) است. این موارد به طور خودکار توسط
nix-envتولید میشوند. به profiles مراجعه کنید. -
یک مسیر انبار (store path) در صورتی معتبر است که تمام store objectهای موجود در [closure] آن قابل خواندن از store باشند.
برای یک local store، این به معنای موارد زیر است:
- مسیر انبار به یک store object موجود در آن store منتهی شود.
- مسیر انبار در [Nix database] به عنوان معتبر فهرست شده باشد.
- تمام مسیرهای موجود در [closure] مسیر انبار معتبر باشند.