NixOS

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

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

Історія

[ред. | ред. код]

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

У травні 2024 року лідер проекту NixOS Елко Долстра звільнився з посади голови керуючої ради після публікації відкритого листа з критикою його дій. Автори листа звинувачують Долстру в авторитарному стилі керівництва, нездатності вирішувати проблеми спільноти та створенні токсичної атмосфери. Долстра відкинув звинувачення, але погодився передати повноваження новій структурі управління, підпорядкованій спільноті. Нова структура управління матиме ширші повноваження для вирішення питань, таких як політика щодо спонсорів, залагодження конфліктів інтересів, повноваження при модеруванні та захист меншин.

Версії

[ред. | ред. код]

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. wiki.nixos.org. Процитовано 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.

Зовнішні посилання

[ред. | ред. код]