NixOS — це дистрибутив Linux, побудований на основі менеджера пакунків Nix . Він використовує декларативну систему конфігурації та дозволяє надійно оновлювати систему. [4] Пропонується кілька офіційних «каналів» пакунків [5] [6], включаючи поточний стабільний випуск (Stable) і нестабільний (Unstable) випуск, який слідує за останніми розробками. NixOS має інструменти, присвячені DevOps і завданням розгортання. [7] [8]

NixOS
NixOS snowflake with text
Розробник NixOS contributors (NixOS Foundation[1][2])
Написано на Nix expression language
Родина ОС Linux (Unix-like)
Робочий стан Current
Вихідна модель Open source
Початковий випуск 0.1 / 2003; 20 років тому (2003-06-03)
Репозиторій
Цільовий ринок Загального призначення
Менеджер пакетів Менеджер пакетів Nix
Платформи i686, x86-64, ARMv7, AArch64
Тип ядра Монолітне (ядро Linux)
Ліцензія MIT[3]
nixos.org

Історія ред.

У 2003 році Елко Дольстра запустив NixOS як дослідницький проект. [9] [10] У 2015 році було засновано фонд NixOS з метою підтримки таких проектів, як NixOS, які реалізують суто функціональну модель розгортання. [11]

Версії ред.

NixOS публікує випуски двічі на рік. [12] Раніше це відбувалося приблизно в березні та вересні, але, починаючи з 21.05, NixOS націлена на травень і листопад. [13] Кожен номер версії має формат «YY. MM", наприклад, "20.03" була версія, випущена в березні 2020 року. Кожна версія NixOS має назву, наприклад «Markhor» для випуску 20.03.

Особливості ред.

Декларативна конфігураційна модель ред.

У NixOS уся операційна система – ядро, програми, системні пакунки, конфігураційні файли тощо – будується менеджером пакунків Nix із опису функціональною мовою збірки. Це означає, що створення нової конфігурації не може перезаписати попередні конфігурації. [14]

Система NixOS налаштовується шляхом запису специфікації функціональних можливостей, які користувач бажає мати на своєму пристрої, у файлі глобальної конфігурації. Наприклад, ось мінімальна конфігурація машини, на якій працює демон SSH: [15]

{
  boot.loader.grub.device = "/dev/sda";
  fileSystems."/".device = "/dev/sda1";
  services.sshd.enable = true;
}

Після зміни конфігураційного файлу систему можна оновити за допомогою команди nixos-rebuild switch . Ця команда виконує все необхідне для застосування нової конфігурації, включаючи завантаження та компіляцію пакунків і генерацію файлів конфігурації.

Надійні оновлення ред.

Оскільки файли Nix є чистими та декларативними, їх оцінка завжди дасть однаковий результат, незалежно від того, які пакунки чи файли конфігурації є в системі. Таким чином, оновити систему так само надійно, як і перевстановити з нуля.

Атомарні оновлення ред.

NixOS має транзакційний підхід до керування конфігурацією, вносячи атомарні зміни конфігурації, наприклад оновлення. Це означає, що якщо оновлення до нової конфігурації буде перервано – скажімо, на півдорозі зникне живлення – система все одно перебуватиме в узгодженому стані: вона завантажуватиметься у старій або новій конфігурації. В інших системах машина може опинитися в неузгодженому стані та навіть більше не завантажуватися. [16]

Відкати ред.

Якщо після оновлення системи нова конфігурація є небажаною, її можна відкотити за допомогою спеціальної команди ( nixos-rebuild switch --rollback ). Кожна версія конфігурації системи автоматично відображається в меню завантаження системи. Якщо нова конфігурація виходить з ладу або не завантажується належним чином, можна вибрати старішу версію. Відкат — це легка операція, яка не передбачає відновлення файлів із копій.

Відтворювані конфігурації системи ред.

Декларативна модель конфігурації NixOS дозволяє легко відтворити конфігурацію системи на іншому пристрої. Копіювання файлу конфігурації на цільову машину та виконання команди оновлення системи генерує ту саму конфігурацію системи (ядро, програми, системні служби тощо), за винятком частин системи, якими не керує менеджер пакунків, наприклад даних користувача.

Модель на основі вихідного коду з бінарним кешем ред.

Мова збірки Nix, яка використовується NixOS, визначає, як створювати пакунки з вихідного коду. Це дозволяє легко адаптувати систему до потреб користувача. Однак, оскільки створення з джерела є повільним процесом, менеджер пакунків автоматично завантажує попередньо зібрані двійкові файли з кеш-серверу, коли вони доступні. Це забезпечує гнучкість моделі керування пакунками на основі вихідного коду з ефективністю двійкової моделі. [17]

Послідовність ред.

Менеджер пакунків Nix гарантує, що працююча система відповідає логічній специфікації системи, тобто він перебудує всі пакунки, які потрібно перебудувати. Наприклад, якщо ядро змінено, менеджер пакунків забезпечить перебудову зовнішніх модулів ядра. Так само, коли бібліотеку оновлено, це гарантує, що всі системні пакунки використовують нову версію, навіть пакунки, статично пов’язані з нею.

Багатокористувацьке керування пакунками ред.

Для встановлення програмного забезпечення в NixOS не потрібні спеціальні привілеї. Окрім загальносистемного профілю, кожен користувач має спеціальний профіль, у якому він може інсталювати пакунки. Nix також дозволяє одночасно існувати кілька версій пакунка, тому різні користувачі можуть мати різні версії одного пакунка, встановлені у відповідних профілях. Якщо два користувачі інсталюють одну версію пакунка, буде створено або завантажено лише одну копію. Модель безпеки Nix гарантує, що це безпечно, оскільки лише користувачі, яким конфігурація системи явно довіряє, можуть використовувати параметри збірки, які дозволять їм контролювати вміст вихідних даних (наприклад, додавання домішок до пісочниці або використання ненадійної заміни) . Без цих параметрів шляхи можуть бути замінені лише замінником, якому довіряє система, або локальною збіркою ізольованого програмного середовища, якій неявно довіряють.

Реалізація ред.

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, є частиною того, що дозволяє одночасно існувати кілька версій пакунка.

Див. Також ред.

  • Система GNU Guix – операційна система, побудована на GNU Guix, натхненна Nix [18]

Посилання ред.

  1. Community - nixos.org. Архів оригіналу за 23 вересня 2022. Процитовано 23 вересня 2022.
  2. NixOS/nixos-foundation - Github. GitHub. Архів оригіналу за 23 вересня 2022. Процитовано 23 вересня 2022.
  3. nixpkgs/COPYING at master · NixOS/nixpkgs · GitHub. Github.com. Процитовано 19 вересня 2015.
  4. DistroWatch.com: NixOS. Distrowatch.com. Процитовано 19 вересня 2015.
  5. Nix channels - NixOS Wiki. nixos.wiki. Процитовано 10 лютого 2022.
  6. NixOS Infra Status. status.nixos.org. Процитовано 10 лютого 2022.
  7. NixOps - The NixOS Cloud Deployment Tool. Nixos.org. Процитовано 19 вересня 2015.
  8. svanderburg/disnix. Nixos.org. Процитовано 19 вересня 2015.
  9. Dolstra, Eelco (2003). Integrating Software Construction and Software Deployment (PDF). Lecture Notes in Computer Science. 2649: 102—117. doi:10.1007/3-540-39195-9_8. ISBN 978-3-540-14036-8. Архів оригіналу (PDF) за 21 квітня 2019.
  10. (Дипломна робота). {{cite thesis}}: |archive-date= вимагає |archive-url= (довідка); Вказано більш, ніж один |archivedate= та |archive-date= (довідка); Пропущений або порожній |title= (довідка)Обслуговування CS1: Сторінки з параметром url-status, але без параметра archive-url (посилання)
  11. Stichting NixOS Foundation. Nixos.org. Процитовано 19 вересня 2015.
  12. Governance. Nixos.org. Архів оригіналу за 16 серпня 2020. Процитовано 28 серпня 2020.
  13. Nix RFCS (Request for Comments). GitHub. 17 грудня 2021.
  14. Dolstra, Eelco; Hemel, Armijn (2007). Purely Functional System Configuration Management (PDF). Архів оригіналу (PDF) за 6 липня 2019.
  15. About NixOS. Nixos.org. Процитовано 19 вересня 2015.
  16. van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn (2008). Atomic Upgrading of Distributed Systems (PDF). Архів оригіналу (PDF) за 15 січня 2019.
  17. Dolstra, Eelco (2005). Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model (PDF). Архів оригіналу (PDF) за 26 вересня 2019.
  18. About — GuixSD. www.gnu.org (англ.). Процитовано 3 травня 2018.

Зовнішні посилання ред.