NixOS - Полный Разбор: Nixpkgs, Flakes, home-manager
Обзор Nix и его функционального пакетного менеджера
- Приветствие и анонс обзора дистрибутива Nix, включая функциональный пакетный менеджер NX.
- Объяснение декларативного подхода в программировании, который фокусируется на том, что нужно сделать.
- Сравнение императивного и декларативного программирования через аналогию с естественными языками.
Проблемы развёртывания программного обеспечения
- Описание проблемы различий между системами разработчика и конечного пользователя.
- Упоминание о библиотеках, необходимых для работы программ, и их отсутствии у пользователей.
- Интерференция обновлений пакетов может привести к несовместимости.
Решения Nix для проблем с пакетами
- Пакетный менеджер изолирует пакеты в директориях с криптографическими хэшами.
- Файлы пакетов аккуратно организованы, что предотвращает разброс по файловой системе.
- Детерминизм: одинаковые входные данные дают одинаковый результат независимо от окружения.
Функциональные особенности Nix
- Возможность иметь две версии одного пакета на одной системе без конфликтов.
- Декларативный подход позволяет создавать функции установки пакетов как деривации.
- Обновления на Nix являются атомными и не создают временных окон для ошибок.
Конвертация и установка пакетов
- Перед установкой создаётся экземпляр файла default.NX для упрощения процесса.
- Язык NX меняется, поэтому используется более примитивный язык для конвертации инструкций.
Как работает пакетный менеджер NX?
Основные концепции
- Пакетный менеджер NX использует хэширование, обрезая его до 160 бит для получения длины в 32 символа.
- NX управляет пакетами аналогично языкам программирования, используя диск вместо оперативной памяти и деривации вместо адресов.
- Доступ к деривациям осуществляется через их путь, что упрощает работу с зависимостями.
Проблемы традиционных подходов
- Традиционные пакетные менеджеры основываются на предположениях о путях к файлам и адресам в памяти.
- Если предположение верно, система работает гладко; иначе возникают проблемы с репродукцией.
- Высокоуровневые языки и системы управления пакетов стремятся уменьшить зависимость от предположений.
Разработка Nyx OS
- После появления NX началась работа над Nyx OS для упорядочивания конфигураций операционных систем.
- Конфигурация описана как чистые функции, что обеспечивает детерминированность системы.
- Изоляция пакетов позволяет легко откатываться к предыдущим конфигурациям.
Установка дистрибутива Nyx OS
Процесс установки
- Установка системы похожа на Arch, но проще благодаря графическому интерфейсу или утилите командной строки.
- Для генерации конфигурации используется команда
N generate config Root Mount.
Основы языка NX
- Язык NX поддерживает строки, числа, логические значения и массивы (списки).
- Создание переменных происходит с помощью синтаксиса
let in, а доступ к свойствам объектов — через оператор точка.
Конфигурация системы
- Файл
configuration.nixпринимает аргументы и выдает изменённую конфигурацию системы.
Создание конфигурации диска
- Находим репозитории на GitHub, создаём файл и копируем код из репозитория. Создаём таблицу разделов с Бут разделом 500 Мб и Root разделом.
- Заменяем файловую систему на bfs для виртуальной машины. Конфигурация дисков готова, ссылки на документацию будут в описании.
- Сохраняем файл и вводим команду для указания пути к конфигурации. После завершения все разделы автоматически примонтируются.
Редактирование конфигурационного файла
- Устанавливаем текстовый редактор Vim через конфигурационный файл, открываем config и раскомментируем нужные строки.
- Для установки дополнительных программ добавляем их в массив без точек с запятой. Можно искать пакеты через сайт или консоль.
- После добавления пакетов сохраняем файл и обновляем конфигурацию командой
nixos-rebuild switch.
Обновление системы и управление версиями
- Перезагружаемся, чтобы увидеть новые опции в загрузчике после установки Vim. Старые пакеты не удаляются при обновлении.
- Команда
nixos-rebuild switchвыполняет несколько этапов: пересмотр конфигурации, установка необходимых пакетов и перезапуск сервисов systemd.
- Новый системный профиль хранится в определённой директории, что позволяет создавать новую систему без перезагрузки.
Создание учётной записи пользователя
- Создаём учётную запись пользователя, задаём пароль и выходим из Рута для входа под обычным пользователем.
- Устанавливаем графическое окружение Xfce, меняем свойства в конфиге X сервера на True и обновляем конфигурацию.
Обновление каналов и управление пакетами
- Команда
nixos-channel --listпоказывает доступные каналы. Можно заменить стабильный канал на unstable для новых версий пакетов.
- Обновляем каналы с помощью
nixos-channel --updateиnixos-rebuild switch --upgrade. Старые версии пакетов остаются доступны.
Очистка системы от старых поколений
- Удаляем старые поколения nixos для освобождения места с помощью команды
nix-env --delete-generations.
Создание конфигурации Home Manager
- Для начала необходимо указать имя пользователя, путь к домашней директории и версию.
- Настройка Neo Vim с плагинами через Home Manager; добавление необходимых строк в конфигурацию.
- Обновление каналов на NixOS императивное, что может вызвать проблемы с TCI.
Использование флейков
- Флейки позволяют писать код на языке НИКС с зависимостями, разделенными на inputs и outputs.
- После выполнения кода создается файл flake.log с версиями использованных зависимостей.
- Написание собственного флейка для конфигурации системы.
Настройка инпутов и аутпутов
- Указание канала N packages как инпута и создание функции для вывода конфигурации.
- Задание архитектуры системы и модулей в функции outputs.
- Сохранение изменений и обновление флейка командой
nixos-rebuild switch.
Добавление Home Manager в флейк
- Добавление атрибута Home Manager в инпуты флейка для синхронизации версий.
- Создание конфигурации Home Manager с указанием имени пользователя и пакетов.
- Использование синтаксиса
inheritдля упрощения кода.
Разделение конфигурации на модули
- Разделение конфигурации на модули для удобства управления настройками.
Конфигурация NixOS
- Выход из виртуальной машины и демонстрация конфигурации NixOS с использованием unstable ветки.
- Конфигурационные файлы разбиты на две папки: nxs и Home Manager, каждая программа имеет свой модуль.
- Плюсы NixOS: идентичная система, контроль версий пакетов, откаты к предыдущим конфигурациям.
Плюсы и минусы NixOS
- Декларативные файлы пакетов упрощают управление по сравнению с другими дистрибутивами.
- Установка пакетов занимает больше времени из-за необходимости расчета дериваций.
- Сложность в изучении системы на начальном этапе, но со временем становится проще.
Ресурсы для изучения NixOS
- Рекомендуется использовать N Man для инструкций по установке и настройке пакетов.
- Полезен ресурс Zero To NX для глубокого изучения языка NX и пакетного менеджера.
- Кандидатская диссертация разработчика NixOS содержит подробное объяснение всех аспектов системы.
Заключение