معرفی NixOS
NixOS یک توزیع لینوکس است که بر پایه یک مدیر بسته به نام Nix ساخته شده است. این سیستم از طراحی تغییرناپذیر (Immutable) و مدل بهروزرسانی اتمی استفاده میکند. استفاده از سیستم پیکربندی توصیفی و برنامهنویسی عملکردی، قابلیت تکرار و قابلیت حمل را فراهم میکند. NixOS نرمافزاری آزاد و متنباز با مجوز MIT است.
پیکربندی NixOS با استفاده از ماژولهای ترکیبی انجام میشود و به بستههایی که در پروژه Nixpkgs تعریف شدهاند وابسته است. دستورالعملهای ساخت بسته و پیکربندیها در زبان اختصاصی “Nix” نوشته میشوند که همراه با مدیر بسته Nix ارائه میشود.
Nix در سال 2003 به عنوان یک پروژه تحقیقاتی توسط Eelco Dolstra آغاز شد. هدف او توسعه سیستمی برای استقرار قابل اعتماد نرمافزار بود. این تحقیق منجر به پایاننامه دکترای او با عنوان “مدل استقرار نرمافزار کاملاً تابعی” شد که رویکردی نوآورانه برای پیکربندی نرمافزار به صورت توصیفی و تابعی ارائه میکرد. تحقیقات او زیر نظر Eelco Visser در دانشگاه اوترخت انجام شد و پایههای نظری Nix را ایجاد کرد.
در سال 2006، NixOS به عنوان بخشی از پایاننامه کارشناسی ارشد Armijn Hemel معرفی شد، که بررسی کرد چگونه اصول Nix را میتوان در یک توزیع لینوکس به کار برد. این امر منجر به ایجاد یک مدل پیکربندی توصیفی منحصربهفرد شد که NixOS را از دیگر سیستمهای عامل متمایز کرد.
بنیاد NixOS در سال 2015 در هلند تأسیس شد تا از پروژههایی که مدل استقرار کاملاً تابعی را پیادهسازی میکنند پشتیبانی کند و توسعه و پایداری NixOS و اکوسیستم آن را تضمین کند.
این پروژه از زمان آغاز به رشد قابل توجهی رسیده است. از جمله دستاوردهای مهم میتوان به معرفی ماژولهای NixOS در سال 2009 اشاره کرد که پیکربندی سیستم را سادهتر کرد، و توسعه Nixpkgs که به یکی از بزرگترین مخازن بسته با بیش از 80,000 بسته تا سال 2024 تبدیل شده است.
ویژگیهای کلیدی
- پشتیبانی از معماریهای x86-64 و AArch64 به صورت کامل؛ پشتیبانی محدود برای i686 (باید از سورس ساخته شود).
- هسته لینوکس یکپارچه (Monolithic).
- مدیریت بسته با Nix و پیکربندی توصیفی.
- مجوز MIT و متنباز بودن.
- استفاده از طراحی تغییرناپذیر و بهروزرسانی اتمی.
لینکها و منابع
وبسایت رسمی: nixos.org
مخزن گیتهاب: github.com/NixOS/nixpkgs
تاریخچه و تکامل ویکی NixOS
اولین ویکی جامعه NixOS حدود سالهای 2010–2011 راهاندازی شد تا مستندات را متمرکز کرده و امکان به اشتراکگذاری دانش به صورت مشارکتی را فراهم کند. با این حال، با کاهش علاقه جامعه به نگهداری ویکی، اطلاعات قدیمی و نادرست جمع شد و مفید بودن آن کاهش یافت. در نوامبر 2015، Rok Garbas در سخنرانی خود با عنوان «دوستانهتر کردن Nix برای مبتدیان» به وضعیت رو به زوال ویکی اشاره کرد و بحث گستردهای در جامعه ایجاد شد. بسیاری از توسعهدهندگان معتقد بودند که مستندات رسمی Nix* بهتر میتواند به عنوان مرجع مورد استفاده قرار گیرد، اما هیچ راهحل فوری اجرا نشد.
تا اواسط سال 2016، رباتهای هرزنامه ویکی را تحت تاثیر قرار دادند و به دلیل نبود محافظت کافی، ویکی در آگوست همان سال قفل شد. در فوریه 2017، یک مسئله در گیتهاب باز شد تا بحث درباره بازگشایی ویکی انجام شود، اما نتیجهای حاصل نشد. نهایتاً، در ماه مه 2017، ویکی به طور دائم غیرفعال شد و صفحات وب آن در آرشیو اینترنت حفظ شدند.
برای پر کردن این خلأ، Jörg Thalheim (Mic92) در آوریل 2017 ویکی GitHub تحت نام nixos-users را راهاندازی کرد. اگرچه این پلتفرم امکان ویرایش سریع و مشارکت جامعه را فراهم میکرد، اما فاقد امکاناتی مانند جستجو و فهرست محتوا بود. کمی بعد، Tristan Helmich (fadenb) به صورت مستقل ویکی جدیدی بر اساس MediaWiki ایجاد کرد و به تجربه کاربری ضعیف ویکی GitHub اشاره کرد. Felix Richter (makefu) بعداً محتوای ویکی GitHub را به ویکی Helmich منتقل کرد.
در ژانویه 2024، ابتکار جدیدی برای ایجاد ویکی رسمی آغاز شد که منجر به راهاندازی ویکی رسمی فعلی در 1 آوریل 2024 شد.
تاریخچه نسخههای NixOS
| نسخه و نام | تاریخ |
|---|---|
| 13.10, Aardvark | اکتبر 2013 |
| 14.04, Baboon | آوریل 2014 |
| 14.12, Caterpillar | دسامبر 2014 |
| 15.09, Dingo | سپتامبر 2015 |
| 16.03, Emu | مارس 2016 |
| 16.09, Flounder | سپتامبر 2016 |
| 17.03, Gorilla | مارس 2017 |
| 17.09, Hummingbird | سپتامبر 2017 |
| 18.03, Impala | مارس 2018 |
| 18.09, Jellyfish | سپتامبر 2018 |
| 19.03, Koi | مارس 2019 |
| 19.09, Loris | سپتامبر 2019 |
| 20.03, Markhor | مارس 2020 |
| 20.09, Nightingale | سپتامبر 2020 |
| 21.05, Okapi | مه 2021 |
| 21.11, Porcupine | نوامبر 2021 |
| 22.05, Quokka | مه 2022 |
| 22.11, Raccoon | نوامبر 2022 |
| 23.05, Stoat | مه 2023 |
| 23.11, Tapir | نوامبر 2023 |
| 24.05, Uakari | مه 2024 |
| 24.11, Vicuña | نوامبر 2024 |
| 25.05, Warbler | مه 2025 |
| 25.11, Xantusia | نوامبر 2025 |
NixOS نسخههای پایدار خود را دو بار در سال، نزدیک به پایانهای ماه مه و نوامبر منتشر میکند.
پیادهسازی NixOS
NixOS بر اساس مدیر بسته Nix ساخته شده است، که تمام بستهها را بهطور جداگانه و ایزوله در فروشگاه بسته نگهداری میکند.
بستههای نصب شده با استفاده از هش رمزنگاری تمام ورودیهای مورد استفاده برای ساخت آنها شناسایی میشوند. تغییر دستورالعملهای ساخت یک بسته، هش آن را تغییر میدهد و نتیجه آن نصب یک نسخه متفاوت از بسته در فروشگاه بسته خواهد بود. این سیستم همچنین برای مدیریت فایلهای پیکربندی استفاده میشود و اطمینان حاصل میکند که پیکربندیهای جدید بر پیکربندیهای قدیمی بازنویسی نمیشوند.
یکی از پیامدهای این طراحی این است که NixOS از استاندارد سلسله مراتب فایل سیستم پیروی نمیکند. تنها استثناها عبارتند از:
- یک لینک نمادین
/bin/shبه نسخه bash موجود در فروشگاه Nix ایجاد میشود (مثلاً/nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/) - در حالی که NixOS دارای دایرکتوری
/etcبرای نگهداری فایلهای پیکربندی سراسری است، بیشتر فایلهای موجود در این دایرکتوری لینکهای نمادین به فایلهای تولید شده در/nix/storeهستند، مانند/nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config
عدم استفاده از دایرکتوریهای سراسری مانند /bin یکی از دلایلی است که امکان coexistence نسخههای مختلف یک بسته فراهم میشود.
نقد و بررسیها
Jesse Smith در بررسی NixOS 15.09 برای DistroWatch Weekly در سال 2015 نوشت:
“من بسیار از رویکرد NixOS در کاهش نگرانیهای مربوط به ارتقا بستهها با قرار دادن هر تغییر در ‘نسل’ خود خوشم آمد و از دید کاربر نهایی، NixOS مانند هر توزیع لینوکس دیگری کار میکرد. راهاندازی NixOS برای مبتدیان نیست و فکر نمیکنم NixOS برای استفاده به عنوان سیستم دسکتاپ عمومی در نظر گرفته شده باشد. اما NixOS به ما یک زمین بازی مفید میدهد تا مدیر بسته Nix را بررسی کنیم، و این فناوری جالبی است که سزاوار بررسی بیشتر و پذیرش توسط سایر توزیعها است.”
یک بررسی در سال 2022 از NixOS 21.11 “Porcupine” در مجله Full Circle نتیجهگیری کرد:
“به طور کلی، NixOS Gnome 21.11 به عنوان یک سیستم جدی، مرتب و زیبا تأثیرگذار است. اگر طرفدار دسکتاپ Gnome بدون تغییر هستید، اینجا چیزهای زیادی برای دوست داشتن پیدا خواهید کرد. نقطه ضعف این توزیع، منحنی یادگیری تند برای مدیریت بسته، شامل ارتقاها و مشابه آن است. هر توزیعی که آمده باشید، برای کار کردن خوب با Nix در خط فرمان، چیزهای زیادی برای یادگیری خواهید داشت.”
NixOS 22.11 “Raccoon” توسط Liam Proven در The Register بررسی شد:
“در مقایسه با گزارشهای NixOS تنها دو یا سه سال گذشته، نصب و راهاندازی آن بسیار ساده بود. این نشان میدهد که ابزارها در حال بلوغ هستند و به سطحی از پختگی رسیدهاند، اما از دیدگاه کاربر تازهکار، هیچ پایه مقایسهای نداریم. این سیستم به هیچ وجه یک توزیع سنتی یا حتی یک یونیکس سنتی نیست، اما کار میکند و جذابیت آن قابل مشاهده است.”
NixOS 23.11 “Tapir” توسط Jesse Smith در DistroWatch بررسی شد:
“NixOS یک گوهر نادر است، زیرا فکر نمیکنم در طول استفاده با هیچ خطایی مواجه شدم. این توزیع پایدار بود، با سختافزار من خوب کار کرد و هیچ مشکلی در حین اجرا نداشتم. احساس میکنم NixOS ارزش امتحان کردن دارد، به ویژه اگر مدیر سیستم هستید و میخواهید توزیعهای یکسان را روی چندین دستگاه مستقر یا نگهداری کنید.”
NixOS یک توزیع لینوکس آزاد و متنباز است که بر پایه مدیر بسته Nix ساخته شده است. این توزیع از طراحی ایمنناپذیر (immutable) و مدل بهروزرسانی اتمی استفاده میکند. پیکربندی توصیفی (Declarative) در NixOS امکان تکرارپذیری و انتقالپذیری را فراهم میکند.
NixOS از ماژولهای ترکیبی برای پیکربندی بهره میبرد و به بستههایی متکی است که در پروژه Nixpkgs تعریف شدهاند. زبان Nix که همراه با مدیر بسته عرضه میشود، برای تعریف دستورالعملها و پیکربندیها مورد استفاده قرار میگیرد.
تاریخچه
در سال ۲۰۰۳، Eelco Dolstra پروژه Nix را بهعنوان یک پروژه تحقیقاتی آغاز کرد. هدف او ساخت سیستمی برای استقرار صحیح نرمافزار بود.
در سال ۲۰۰۶، Armijn Hemel توزیع NixOS را بهعنوان بخشی از پایاننامه کارشناسی ارشد خود در دانشگاه اوترخت ارائه کرد.
در سال ۲۰۱۵، بنیاد NixOS Foundation در هلند برای پشتیبانی از این پروژه و اجرای مدل استقرار تابعی تأسیس شد.
مقدمهای بر Nix و NixOS
Nix یک مدیر بسته توصیفی است که به کاربران اجازه میدهد وضعیت مطلوب سیستم را در فایلهای پیکربندی مشخص کنند. این ابزار سپس جزئیات مربوط به نصب، حذف و پیکربندی را بهطور خودکار مدیریت میکند.
برای نمونه، اگر بخواهید i3 را با sway جایگزین کنید، تنها کافی است آن را در پیکربندی اعلام کنید؛ باقی کارها توسط Nix انجام میشود.
NixOS توزیعی بر پایه Nix است و میتوان آن را «سیستمعامل بهعنوان کد» نامید. این سیستم از فایلهای پیکربندی برای تعریف کل وضعیت سیستم استفاده میکند.
چرا NixOS؟
NixOS توانایی بازگشت به هر حالت قبلی سیستم را فراهم میکند. این ویژگی به من اجازه داد پس از مشکلات متعدد با EndeavourOS، به NixOS مهاجرت کنم.
به لطف NixOS، اکنون میتوانم تنها با یک دستور تمام محیط کاری خود را بازیابی کنم:
این قابلیت اعتماد به نفس زیادی به من داده و دیگر نگران شکستن سیستم نیستم. همچنین، مدیریت چندین میزبان مختلف (سرورها و دسکتاپها) از طریق Git و Home Manager بسیار سادهتر شده است.
مزایا و معایب NixOS
مزایای NixOS
- پیکربندی اعلامی (OS as Code): مدیریت کل سیستم از طریق فایلهای پیکربندی و قابلیت بازگشت به وضعیتهای قبلی.
- سفارشیسازی آسان: امکان تغییر راحت اجزای سیستم، مانند محیطهای دسکتاپ.
- قابلیت بازگشت: همه نسخههای قبلی در منوی بوت ذخیره میشوند.
- بدون مشکل وابستگی: هر بسته مسیر نصب منحصر به فرد دارد.
- جامعه فعال: پروژههای متعدد شخص ثالث و مخزن قدرتمند nixpkgs.
معایب NixOS
- منحنی یادگیری بالا: نیاز به یادگیری زبان Nix و مدل پیکربندی.
- اسناد ناکامل: بهویژه در مورد Nix Flakes.
- مصرف بالای فضای دیسک: نگهداری از محیطهای قبلی بهصورت پیشفرض.
- پیامهای خطای مبهم: عیبیابی بعضی خطاها دشوار است.
- پیچیدگی پیادهسازی: کد زیربنایی پیچیدهتر نسبت به ابزارهای سنتی.
NixOS انتخاب مناسبی برای توسعهدهندگانی است که تجربه کافی در لینوکس و برنامهنویسی دارند. این توزیع برای تازهکاران چندان توصیه نمیشود، زیرا یادگیری آن زمانبر و گاهی دشوار است.
مبانی زبان Nix
زبان Nix برای تعریف پیکربندیها استفاده میشود. اگر تجربه برنامهنویسی داشته باشید، یادگیری اصول آن کمتر از دو ساعت زمان میبرد. منابع مفید:
تاریخچه نسخهها (Release History)
| نام | تاریخ |
|---|---|
| NixOS 13.10 “Aardvark” | October 2013 |
| NixOS 14.04 “Baboon” | April 2014 |
| NixOS 14.12 “Caterpillar” | December 2014 |
| NixOS 15.09 “Dingo” | September 2015 |
| NixOS 16.03 “Emu” | March 2016 |
| NixOS 16.09 “Flounder” | September 2016 |
| NixOS 17.03 “Gorilla” | March 2017 |
| NixOS 17.09 “Hummingbird” | September 2017 |
| NixOS 18.03 “Impala” | March 2018 |
| NixOS 18.09 “Jellyfish” | September 2018 |
| NixOS 19.03 “Koi” | March 2019 |
| NixOS 19.09 “Loris” | September 2019 |
| NixOS 20.03 “Markhor” | March 2020 |
| NixOS 20.09 “Nightingale” | September 2020 |
| NixOS 21.05 “Okapi” | May 2021 |
| NixOS 21.11 “Porcupine” | November 2021 |
| NixOS 22.05 “Quokka” | May 2022 |
| NixOS 22.11 “Raccoon” | November 2022 |
| NixOS 23.05 “Stoat” | May 2023 |
| NixOS 23.11 “Tapir” | November 2023 |
| NixOS 24.05 “Uakari” | May 2024 |
نصب گرافیکی NixOS مدل پیکربندی توصیفی
در NixOS، کل سیستم عامل – شامل کرنل، برنامهها، بستههای سیستم و فایلهای پیکربندی – توسط مدیر بسته Nix از یک توصیف در زبان Nix ساخته میشود. ساخت نسخه جدید بر روی نسخههای قبلی بازنویسی نمیشود.
یک سیستم NixOS با نوشتن مشخصاتی از عملکردی که کاربر میخواهد روی دستگاه خود داشته باشد در یک فایل پیکربندی سراسری (معمولاً در /etc/nixos قرار دارد) پیکربندی میشود. در زیر یک مشخصه حداقل از یک ماشین در حال اجرای دامین SSH آمده است:
boot.loader.grub.device = “/dev/sda”;
fileSystems.”/”.device = “/dev/sda1”;
services.sshd.enable = true;
}
پس از تغییر فایل مشخصات، سیستم میتواند با استفاده از دستور زیر بهروزرسانی شود:
بهروزرسانیهای قابل اعتماد و اتمی
از آنجایی که فایلهای Nix خالص و توصیفی هستند، ارزیابی آنها همیشه نتیجه یکسانی را تولید میکند…
بازگرداندن به نسخه قبلی
اگر پس از بهروزرسانی سیستم، پیکربندی جدید مطلوب نباشد، میتوان آن را با دستور زیر بازگرداند:
پیکربندیهای سیستم قابل تکرار
مدل پیکربندی توصیفی NixOS باعث میشود تکرار پیکربندی سیستم روی دستگاه دیگری آسان شود…
مدل مبتنی بر سورس با کش باینری
زبان ساخت Nix نحوه ساخت بستهها از سورس را مشخص میکند…
مدیریت بسته چند کاربره
نیازی به امتیازات ویژه برای نصب نرم افزار در NixOS وجود ندارد…
پیادهسازی
NixOS بر اساس مدیر بسته Nix ساخته شده است که تمام بستهها را جداگانه ذخیره میکند…
پذیرش
نظرات و بررسیهای مختلفی درباره NixOS منتشر شده است…
بوت شدن از رسانه نصب
- درایو نصب را وصل کنید و کامپیوتر را ریبوت کنید.
- کلید منوی بوت (مانند F12 یا Esc) را فشار دهید و USB را انتخاب کنید.
نصب گرافیکی
- انتخاب زبان نصبگر
- انتخاب مکان جغرافیایی
- انتخاب طرحبندی صفحه کلید
- ایجاد کاربر و رمز عبور
- انتخاب محیط دسکتاپ (GNOME یا Plasma)
- پارتیشنبندی و رمزگذاری دیسک
- تأیید و نصب
نصب Nix با دستور زیر انجام میشود:
برای مشاهده بستهها:
نصب برخی بسته ها از کانال
بررسی عملکرد بستهها:
/home/user/.nix-profile/bin/hello
$ hello
Hello, world!
حذف بسته:
اجرای موقت بستهها:
بهروزرسانی کانال و بستهها:
$ nix-env –upgrade ‘*’
بازگردانی تغییرات:
پاکسازی بستههای قدیمی:
مدیر بسته Nix
Nix یک مدیر بسته و سیستم ساخت است…
نصب
راهنمای نصب Nix شامل جزئیات نصب باینری و سورس است…
دستورات Nix
از nix 2.0 سبک جدیدی از دستورات معرفی شد…
پیکربندی توصیفی
تنها فایل پیکربندی مرتبط با Nix، nix.conf است…
عملیات امری
مدیریت بستهها با nix-env و nix-channels انجام میشود…
محیطهای کاربر
Nix ابزار nix-env را برای مدیریت بستهها فراهم کرده است:
| دستورات پرکاربرد nix-env | |
| جستجو | nix search nixpkgs packagename |
| نصب | nix-env -iA packagename |
| لیست بستههای نصب شده | nix-env -q |
| حذف | nix-env -e packagename |
| بروزرسانی | nix-env -u |
کانالها
بستههای Nix از طریق کانالها توزیع میشوند…
| لیست کانالها | nix-channel –list |
| افزودن کانال اصلی | nix-channel –add https://nixos.org/channels/channel-name nixos |
| حذف کانال | nix-channel –remove channel-alias |
| بروزرسانی کانالها | nix-channel –update |
Nixpkgs
Nixpkgs مجموعهای بزرگ از بستههاست…
دستور nix-env: یک راهنمای جامع
گزینهها:
- –install (-i): نصب بستهها
- –uninstall (-u): حذف بستهها
- –upgrade: بروزرسانی همه
- –query (-q): نمایش اطلاعات
- -A: نصب با مسیر کامل
مثالهای بیشتر
nix-env –uninstall {vim,git}
nix-env -qaP ‘.*vim.*’
nix-env -qP nixpkgs.firefox –meta