NixOS — это бесплатный дистрибутив Linux с открытым исходным кодом, основанный на менеджере пакетов Nix . NixOS настраивается с использованием составных модулей и опирается на пакеты, определенные в проекте Nixpkgs. Рецепты и конфигурации пакетов написаны на специально созданном «языке Nix», который поставляется с менеджером пакетов Nix.
NixOS использует неизменяемый дизайн и модель атомарного обновления. [5] Использование декларативной системы конфигурации обеспечивает воспроизводимость и переносимость. [6]
В 2003 году Eelco Dolstra запустила Nix как исследовательский проект. [7] [8] Долстра говорит, что целью проекта было создание системы для правильного развертывания программного обеспечения. [9] В 2006 году Армейн Хемель представил NixOS как результат своей магистерской диссертации. [10] В 2015 году в Нидерландах был основан NixOS Foundation с целью поддержки таких проектов, как NixOS, которые реализуют чисто функциональную модель развертывания. [11]
NixOS публикует стабильные выпуски два раза в год, примерно в конце мая и конце ноября. [12] [13] [14]
В NixOS вся операционная система, включая ядро , приложения, системные пакеты и файлы конфигурации , создается менеджером пакетов Nix на основе описания на языке Nix. Создание новой версии не перезапишет предыдущие версии. [15]
Система NixOS настраивается путем записи спецификации функций, которые пользователь хочет использовать на своем компьютере, в глобальном файле конфигурации (обычно расположенном в /etc/nixos
). Ниже приводится минимальная спецификация машины, на которой работает демон SSH: [16]
{ ботинок . погрузчик . жратва . устройство = "/dev/sda" ; файловые системы . "/" . устройство = "/dev/sda1" ; услуги . сшд . включить = правда ; }
После изменения файла спецификации систему можно обновить с помощью nixos-rebuild
команды. При этом делается все необходимое для создания новой версии системы, включая загрузку и установку пакетов, а также создание файлов конфигурации.
Поскольку файлы Nix являются чистыми и декларативными , их оценка всегда будет давать один и тот же результат, независимо от того, какие пакеты или файлы конфигурации находятся в системе.
NixOS использует транзакционный подход к управлению конфигурацией, внося изменения в конфигурацию, такие как атомарные обновления . Например, если обновление до новой конфигурации прервется из-за сбоя питания, система по-прежнему будет находиться в согласованном состоянии: она будет загружаться либо в старой, либо в новой конфигурации. [17]
Если после обновления системы новая конфигурация нежелательна, ее можно откатить с помощью специальной команды ( nixos-rebuild switch --rollback
). Каждая версия конфигурации системы автоматически отображается в меню загрузки системы. Если новая конфигурация дает сбой или не загружается должным образом, можно выбрать более старую версию. Откат — это упрощенная операция, не требующая восстановления файлов из копий. [18]
Декларативная модель конфигурации NixOS позволяет легко воспроизвести конфигурацию системы на другом компьютере. Копирование файла конфигурации на целевой компьютер и запуск команды обновления системы создает ту же конфигурацию системы (ядро, приложения, системные службы и т. д.), за исключением частей системы, не управляемых менеджером пакетов, таких как пользовательские данные.
Язык сборки Nix, используемый NixOS, определяет, как собирать пакеты из исходного кода. Это позволяет легко адаптировать систему к потребностям пользователя. Однако, поскольку сборка из исходного кода является медленным процессом, менеджер пакетов автоматически загружает предварительно созданные двоичные файлы с кэш-сервера, когда они становятся доступными. Можно отключить двоичный кеш и принудительно выполнить сборку из исходного кода, используя его --option substitute false
в качестве аргумента. Это обеспечивает гибкость модели управления пакетами на основе исходного кода и эффективность двоичной модели. [19]
Менеджер пакетов Nix гарантирует, что работающая система соответствует логической спецификации системы, а это означает, что он пересоберет все пакеты, которые необходимо пересобрать. Например, если ядро изменено, менеджер пакетов обеспечит пересборку внешних модулей ядра. Аналогичным образом, когда библиотека обновляется, она гарантирует, что все системные пакеты используют новую версию, даже пакеты, статически связанные с ней.
Для установки программного обеспечения в NixOS не требуются специальные права. В дополнение к общесистемному профилю у каждого пользователя есть специальный профиль, в котором он может устанавливать пакеты. Nix также позволяет сосуществовать нескольким версиям пакета, поэтому разные пользователи могут иметь разные версии одного и того же пакета, установленные в их соответствующих профилях. Если два пользователя устанавливают одну и ту же версию пакета, будет собрана или загружена только одна копия. Модель безопасности Nix гарантирует, что это безопасно, поскольку только пользователям, которым явно доверяет конфигурация системы, разрешено использовать параметры сборки, которые позволят им контролировать содержимое выходных данных производного продукта (например, добавление примесей в песочницу или использование ненадежного заменитель). [ необходимы пояснения ] Без этих параметров пути можно заменить только заменителем, которому доверяет система, или локальной изолированной сборкой, которой неявно доверяют.
NixOS основана на менеджере пакетов Nix , который хранит все пакеты изолированно друг от друга в хранилище пакетов.
Установленные пакеты идентифицируются по криптографическому хешу всех входных данных, использованных для их сборки. Изменение инструкций сборки пакета приводит к изменению его хеша, что приведет к установке другого пакета в хранилище пакетов. Эта система также используется для управления файлами конфигурации, гарантируя, что новые конфигурации не перезапишут старые.
Следствием этого является то, что NixOS не соответствует стандарту иерархии файловой системы . Единственным исключением является то, что в хранилище Nix /bin/shсоздается символическая ссылка на версию bash/nix/store/s/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-bash-4.3.43/
(например , ), и хотя в NixOS есть /etcкаталог для хранения общесистемных файлов конфигурации, большинство файлов в этом каталоге являются символическими ссылками на сгенерированные файлы в /nix/storeформате . как /nix/store/s2sjbl85xnrc18rl4fhn56irkxqxyk4p-sshd_config
. Неиспользование глобальных каталогов, например, /binявляется частью того, что позволяет сосуществовать нескольким версиям пакета.
Джесси Смит, рассматривая NixOS 15.09 для DistroWatch Weekly в 2015 году, [20] написал:
Мне очень нравится, как NixOS избавляет вас от необходимости обновлять пакеты, помещая каждое изменение в отдельное «поколение», и я обнаружил, что с точки зрения конечного пользователя NixOS работает точно так же, как и любой другой дистрибутив Linux. Настройка NixOS не для новичков, и я не думаю, что NixOS предназначена для использования в качестве настольной операционной системы общего назначения. Но NixOS дает нам полезную площадку для изучения менеджера пакетов Nix, и я думаю, что это очень интересная технология, которая заслуживает дальнейшего изучения и внедрения в дополнительных дистрибутивах.
В обзоре NixOS 21.11 «Porcupine» за 2022 год, опубликованном в журнале Full Circle, сделан вывод:
В целом NixOS Gnome 21.11 производит впечатление серьезного, аккуратного и элегантного. Если вы являетесь поклонником немодифицированного рабочего стола Gnome, то здесь вам есть что понравиться. Недостатком этого дистрибутива является крутая кривая обучения управлению пакетами, включая обновления и тому подобное. Независимо от того, из какого дистрибутива вы родом, вам придется многому научиться, чтобы заставить Nix хорошо работать в командной строке. [21]
Обзор NixOS 22.11 «Енот» Лиама Провена из The Register :
По сравнению с отчетами о NixOS всего два или три года назад, мы обнаружили, что установить и запустить ее было очень просто. Это говорит о том, что инструменты хорошо созревают и достигают определенного уровня отшлифовки, но с точки зрения первого использования у нас нет предварительной базовой линии, с которой можно было бы сравнивать. Это совсем не традиционный дистрибутив и даже не традиционный Unix, но он работает, и мы видим его привлекательность. [22]