NixOS
Розробник | NixOS contributors (NixOS Foundation[1][2]) |
---|---|
Написано на | Nix expression language[note 1] |
Родина ОС | Linux (Unix-like) |
Робочий стан | Current |
Вихідна модель | Open source |
Початковий випуск | 0.1 / 3 2003 |
Випущено у виробництво | 2003 |
Репозиторій | |
Цільовий ринок | Загального призначення |
Менеджер пакетів | Менеджер пакетів Nix |
Платформи | i686, x86-64, ARMv7, AArch64 |
Тип ядра | Монолітне (ядро Linux) |
Ліцензія | MIT[3][note 2] |
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, є частиною того, що дозволяє одночасно існувати кілька версій пакунка.
Джессі Сміт, оглядаючи NixOS 15.09 для DistroWatch Weekly у 2015,[18] написав:
Мені дуже подобається шлях який NixOS бере, щоб позбавитися від турботи про оновлення пакетів, розміщуючи кожну зміну у своє окреме "покоління", та я виявив, що з погляду кінцевого користувача NixOS працює так само як і будь-який інший дистрибутив Linux. Налаштувати NixOS не для початківців, та я не думаю, що NixOS призначена для використання як операційна система для настільних ПК загального призначення. Але те, що робить NixOS, це дає нам корисний майданчик у якому розглянути менеджер пакунків Nix, та я вважаю, що це дуже цікава технологія, яка заслуговує на подальше дослідження та прийняття додатковими дистрибутивами.
Огляд NixOS 21.11 "Porcupine" за 2022 рік у журналі Full Circle зробив висновок:
Загалом NixOS Gnome 21.11 вражає своєю серйозністю, акуратністю та елегантністю. Якщо ви є шанувальником немодифікованого робочого столу Gnome, то ви знайдете тут багато до вподоби. Зворотною стороною цього дистрибутива є крута крива навчання для керування пакетами, включаючи оновлення тощо. Незалежно від того, з якого дистрибутива ви прийшли, вам доведеться багато чого навчитися, щоб мати змогу зробити Nix добре працювати для вас у командному рядку.[19]
NixOS 22.11 "Raccoon" перевірено Liam Proven у The Register:
Порівняно зі звітами про NixOS лише два-три роки тому, ми виявили, що її було дуже просто встановити та працювати. Це свідчить про те, що інструменти добре дозрівають та досягають певного рівня досконалості, але з погляду першого використання у нас немає попереднього базового рівня для порівняння. Це дуже не традиційний дистрибутив чи навіть традиційний Unix, але він працює, та ми бачимо його привабливість. [20]
NixOS 23.11 "Tapir" перевірено Джессі Смітом на DistroWatch:
NixOS є рідкісним самоцвітом бо, я не думаю, що стикався з будь-якими помилками під час його використання. Дистрибутив був стабільним, він добре працював із моїм обладнанням, та я не зіткнувся з жодною проблемою під час його використання. Я відчуваю, що NixOS варто спробувати, особливо якщо ви системний адміністратор та хочете розгорнути (або підтримувати) ідентичні дистрибутиви на кількох машинах.[21]
- ↑ Різні інші мови програмування використовуються у NixOS (станом на грудень 2023).
- ↑ Різні інші ліцензії використовуються для програмного забезпечення, що входить до складу NixOS, наприклад, ядро Linux ліцензовано під GNU GPL версії 2.0 (станом на грудень 2023)
- GNU Guix System – операційна система, побудована на GNU Guix, натхненна Nix [22]
- ↑ Community - nixos.org. Архів оригіналу за 23 вересня 2022. Процитовано 23 вересня 2022.
- ↑ NixOS/nixos-foundation - Github. GitHub. Архів оригіналу за 23 вересня 2022. Процитовано 23 вересня 2022.
- ↑ nixpkgs/COPYING at master · NixOS/nixpkgs · GitHub. Github.com. Процитовано 19 вересня 2015.
- ↑ DistroWatch.com: NixOS. Distrowatch.com. Процитовано 19 вересня 2015.
- ↑ Nix channels - NixOS Wiki. wiki.nixos.org. Процитовано 10 лютого 2022.
- ↑ NixOS Infra Status. status.nixos.org. Процитовано 10 лютого 2022.
- ↑ NixOps - The NixOS Cloud Deployment Tool. Nixos.org. Процитовано 19 вересня 2015.
- ↑ svanderburg/disnix. Nixos.org. Процитовано 19 вересня 2015.
- ↑ 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.
- ↑ Dolstra, Eelco (2006). The Purely Functional Software Deployment Model (PDF) (Ph.D.). Архів оригіналу (PDF) за 9 червня 2019.
- ↑ Stichting NixOS Foundation. Nixos.org. Процитовано 19 вересня 2015.
- ↑ Governance. Nixos.org. Архів оригіналу за 16 серпня 2020. Процитовано 28 серпня 2020.
- ↑ Nix RFCS (Request for Comments). GitHub. 17 грудня 2021.
- ↑ Dolstra, Eelco; Hemel, Armijn (2007). Purely Functional System Configuration Management (PDF). Архів оригіналу (PDF) за 6 липня 2019.
- ↑ About NixOS. Nixos.org. Процитовано 19 вересня 2015.
- ↑ van der Burg, Sander; Dolstra, Eelco; de Jonge, Merijn (2008). Atomic Upgrading of Distributed Systems (PDF). Архів оригіналу (PDF) за 15 січня 2019.
- ↑ Dolstra, Eelco (2005). Secure Sharing Between Untrusted Users in a Transparent Source/Binary Deployment Model (PDF). Архів оригіналу (PDF) за 26 вересня 2019.
- ↑ DistroWatch Weekly, Issue 637, 23 November 2015
- ↑ Hunt, Adam (28 October 2022). Review - NixOS (PDF). Full Circle magazine. Архів (PDF) оригіналу за 28 October 2022. Процитовано 28 October 2022.
- ↑ Proven, Liam. NixOS 22.11 'Raccoon': Like a proof of concept you can do things with OSes.
- ↑ Smith, Jesse. NixOS 23.11.
- ↑ About — GuixSD. www.gnu.org (англ.). Процитовано 3 травня 2018.