تا اینجا Nix را برای package و محیطهای توسعه بهکار بردیم. حالا همان ایده را به کل سیستمعامل میبریم: NixOS یک توزیع لینوکس است که در آن تمام سیستم (بوتلودر، کاربران، سرویسها، شبکه) در یک فایل پیکربندی اعلانی توصیف میشود. یک دستور آن را میسازد و فعال میکند، و هر تغییر یک نسل تازه است که میتوان به آن برگشت.
یک سیستم در یک فایل
قلب NixOS فایل /etc/nixos/configuration.nix است. این فایل کل سیستم را توصیف میکند و در کنارش hardware-configuration.nix قرار دارد که بهصورت خودکار برای سختافزار (یا ماشین مجازی) شما ساخته میشود. اینجا یک پیکربندی کوچک و کامل داریم: بوتلودر، نام میزبان، کاربر با کلید SSH، سرویس SSH و چند package:
configuration.nix. بهجای اجرای دستورهای پیدرپی، وضعیت نهایی سیستم را توصیف میکنیم و NixOS آن را میسازد.ساخت و فعالسازی با یک دستور
با nixos-rebuild switch پیکربندی ساخته میشود، بهعنوان یک نسل تازه ثبت میشود و بلافاصله فعال میشود؛ بدون نیاز به راهاندازی مجدد. هر بار که این دستور را اجرا کنیم، یک نسل جدید به فهرست اضافه میشود:
nixos-rebuild switch: سیستم ساخته و فعال میشود و یک نسل تازه ثبت میگردد. list-generations نسلهای موجود و نسل فعلی را نشان میدهد.تغییر بده، و اگر لازم شد برگرد
مهمترین ویژگی NixOS همینجاست. یک package (مثلاً htop) را به پیکربندی اضافه میکنیم و دوباره switch میزنیم؛ یک نسل جدید ساخته میشود. اگر تغییری مشکلساز بود، با یک دستور به نسل قبلی rollback میکنیم و سیستم دقیقاً به وضعیت قبل برمیگردد:
htop یک نسل تازه میسازد و ابزار در دسترس قرار میگیرد. سپس nixos-rebuild switch --rollback در یک قدم سیستم را به نسل قبلی برمیگرداند و آن package دیگر نیست. همین رفتار برای هر تغییری (سرویس، کاربر، کرنل) هم صادق است.این یعنی بهروزرسانیها و تغییرات سیستم دیگر ترسناک نیستند: هر تغییر اتمی است و اگر خراب شد، مسیر بازگشت همیشه یک دستور فاصله دارد. حتی نسلهای قبلی در منوی بوت هم میمانند، پس یک تغییر خراب هم شما را از سیستم بیرون نمیاندازد.
جمعبندی و بخش بعد
در این بخش دیدیم که NixOS کل سیستم را اعلانی توصیف میکند، با nixos-rebuild switch آن را میسازد و فعال میکند، و هر تغییر یک نسل قابلبازگشت است. تا اینجا پیکربندی ما کوچک بود؛ در بخش بعد آن را به یک سرور واقعی تبدیل میکنیم.
در بخش بعد NixOS را در عمل بهکار میگیریم: سرویسها (nginx)، کاربران، فایروال و مدیریت secretها، همه بهصورت اعلانی.
بخشهای این مجموعه
- بخش ۱: مفاهیم Nix، نصب و Nix store
- بخش ۲: زبان Nix و کار با Nixpkgs
- بخش ۳: Flakes و محیطهای توسعهی بازتولیدپذیر
- بخش ۴: نصب و پیکربندی اعلانی NixOS (همین بخش)
- بخش ۵: NixOS در عمل؛ سرویسها، کاربران و شبکه
- بخش ۶: home-manager و استقرار از راه دور