NixOS – интересный дистрибутив. Операционная система в основном служит для демонстрации продвинутого пакетного менеджера Nix, который предлагает атомарные обновления, откат к предыдущим поколениям пакетов и воспроизводимые сборки. Это делает дистрибутив с Nix в качестве пакетного менеджера достаточно гибким, а также надежным при возникновении проблем с обновлением пакетов.
Менеджер пакетов Nix составляет сердце дистрибутива NixOS и может использоваться в других дистрибутивах. Переносимость Nix дает любому, кто его установит, доступ к более чем 80 000 пакетов, которые увеличились с 60 000 за последние два года.
NixOS доступна в трех редакциях. Есть две графические редакции, одна из которых включает рабочий стол GNOME и имеет размер 2,0 Гб, а другая – KDE Plasma и имеет размер 1,6 Гб. Третья редакция – это версия только для командной строки под названием Minimal, размер которой составляет 824 МБ. Одним из важных изменений в двух графических редакциях является внедрение системной программы установки Calamares.
В прошлом, когда я использовал предыдущие версии NixOS, пользователь должен был вручную разбить жесткий диск на разделы. Затем нам предлагалось отредактировать конфигурационный файл в текстовом редакторе, внеся изменения в пакеты программного обеспечения, настройки загрузчика и включив учетные записи пользователей. Хотя этот процесс был достаточно хорошо документирован, он не был ориентирован на начинающих или даже более опытных пользователей. Включение Calamares означает, что пользователи могут разбивать жесткий диск, изменять настройки и создавать учетные записи пользователей, не выходя из приложения “наведи и щелкни”, которое успешно используется во многих дистрибутивах на базе Arch.
Live-версия
Live-версия NixOS предлагает ряд вариантов загрузки. Они включают запуск программы установки, запуск с параметром nomodeset (в других дистрибутивах это называется “безопасный графический режим”) или с параметром copytoram (который загружает всю операционную систему в память). Конечным результатом использования любого из этих параметров является запуск NixOS, начало сеанса рабочего стола (в моем случае KDE Plasma) и автоматическое открытие программы установки Calamares.
Если мы захотим изучить живую сессию, рабочий стол Plasma имеет толстую панель в нижней части экрана, которая содержит меню приложений, переключатель задач и системный трей. На рабочем столе есть значки, которые открывают менеджер разделов, запускают программу установки, открывают терминал и отображают локальную копию руководства в формате HTML. По умолчанию установлено не так много приложений, хотя веб-браузер Firefox включен.
Установка
Calamares представляет собой графическую программу установки, которая проводит пользователя через выполнение некоторых основных шагов по настройке. На первой странице мы можем выбрать язык и кнопки, которые откроют Firefox для отображения документации, сообщений об ошибках и заметок о выпуске дистрибутива. На следующей странице нам предлагается выбрать часовой пояс на карте. Затем нам предлагается выбрать раскладку клавиатуры и создать имя пользователя и пароль. По умолчанию пароль должен быть сложным, длинным и не состоять из словарных слов. Честно говоря, я не смог заставить поле пароля принять что-либо, так как все случайные буквы и цифры, которые я вводил, отмечались как взятые из словаря. Есть флажок, который можно установить, чтобы отключить проверку пароля, что позволяет использовать любой пароль.
Затем программа установки просит нас выбрать один рабочий стол (предлагаются GNOME, KDE Plasma, Xfce, Pantheon, Cinnamon, MATE, Enlightenment и LXQt). Мы также можем не устанавливать среду рабочего стола. Нас спросят, хотим ли мы включить несвободные пакеты, которые включают драйверы оборудования. Я решил включить несвободные элементы. Затем нам предлагается разбить диск на разделы. Ручной вариант довольно дружелюбный и обтекаемый. Calamares также предлагает управляемый вариант, при котором весь диск будет занят одной файловой системой ext4. Стоит отметить, что в управляемом варианте не создается пространство подкачки – ни файловое, ни в виде раздела. Программа установки копирует свои файлы на диск и предлагает перезагрузить компьютер.
Первые впечатления
Когда я впервые загрузился в свою новую копию NixOS, дистрибутив предложил мне войти либо в Plasma, работающую на X11, либо в Plasma на Wayland. По умолчанию используется сеанс X11. Plasma загружалась необычайно медленно: первый запуск занял около 30 секунд на системе, где вход в систему обычно занимает менее 5 секунд. Последующие входы происходили быстрее.
Войдя в Plasma (версия 5.24), я заметил, что рядом с меню приложений есть четыре значка быстрого запуска. Эти значки служат для панели настроек, отображения рабочего стола, запуска файлового менеджера Dolphin и браузера Firefox. Нажатие на значок рабочего стола привело к появлению уведомления об ошибке, которое гласило: “Plasma Workspace: Неизвестная папка приложения”. Остальные три значка работали, как и ожидалось.
По умолчанию включено не так много приложений. NixOS поставляется с Firefox, Dolphin, Gwenview, просмотрщиком документов Okular и музыкальным плеером Elisa. Панель системных настроек KDE также включена, чтобы помочь нам настроить рабочий стол. В фоновом режиме мы находим утилиты командной строки GNU и страницы руководства. Программа systemd init включена вместе с версией 5.15 ядра Linux.
Nix
Основная причина, по которой мне нравится экспериментировать с NixOS каждые несколько лет, заключается в том, что это дает мне возможность поэкспериментировать с продвинутым менеджером пакетов Nix. Большинство операций в Nix можно выполнить с помощью команды nix-env. Эта утилита командной строки помогает нам находить, устанавливать, удалять и обновлять пакеты. Мы также можем составлять список установленных пакетов и перемещаться вперед и назад между поколениями пакетов. Подробнее о поколениях я расскажу чуть позже.
Инструменты командной строки Nix имеют сопроводительные страницы руководства, и выполнение команды “nix-env –help” из командной строки открывает соответствующую страницу руководства в терминале. Также у нас есть список удобных функций Nix на странице “Управление пакетами”.
Когда я только начинал использовать Nix, процесс запроса пакетов был медленным, необычайно медленным. Обычно Nix работает примерно с такой же скоростью, как APT или Zypper, но Nix потребовалось несколько минут для поиска пакета. Я подумал, что это может быть связано с необходимостью обновления базы данных. Я выполнил ручное обновление базы данных, а затем попытался выполнить обновление всех пакетов в системе. После пяти минут без каких-либо признаков прогресса я прервал обновление. Затем я попытался установить пакет, и через 5 минут nix-env сообщил, что пытается установить пакет. Через 15 минут я сдался и остановил процесс. Такая медленная работа Nix 2.8.1 удивила меня, поскольку прошлые версии Nix работали хорошо и быстро.
Я решил перезагрузиться и попробовать еще раз. На этот раз полное обновление системы завершилось за 4 минуты. Несколько больших пакетов установились менее чем за 2 минуты каждый. Вновь установленные приложения не появились в меню приложений ни сразу, ни после того, как я вышел из системы и снова вошел в свой аккаунт.
В следующий раз, когда я перезапустил NixOS, система загрузилась в текстовый терминал и не смогла запустить графическую среду. Очевидно, что-то сломалось в процессе обновления. Вот здесь-то и пригодится генерация пакетов. Каждый раз, когда мы выполняем какое-либо действие с помощью nix-env, например, устанавливаем новый пакет или выполняем обновление, Nix делает снимок своих пакетов в системе. Каждый снимок называется поколением. Мы можем мгновенно переключаться между поколениями для использования различных версий пакетов или для отката проблемы. Это полезно как для тестирования различных версий программного обеспечения, так и для устранения проблем.
В моем случае я вошел в терминал как пользователь root. Затем я выполнил команду
nix-env --list-generations
которая показала, что в системе было три предыдущих поколения, а последнее поколение было отмечено как “текущее”. Затем я мог выполнить команду
nix-env -G 1
чтобы вернуть систему к ее первому поколению. После этого я перезагрузил систему, NixOS запустилась и отобразила ожидаемый графический экран входа в систему. Возможно, в ближайшем будущем то, что вызвало проблему с экраном входа в систему, будет исправлено, и я снова смогу обновить систему.
Эта возможность мгновенного отката или перемещения вперед через снимки пакетов довольно удобна. Она не занимает много места, и если мы захотим очистить старые поколения пакетов, мы можем удалить их, чтобы освободить больше места на диске.
Аппаратное обеспечение
Я экспериментировал с NixOS в среде VirtualBox и на рабочей станции. На рабочей станции производительность была хорошей, система была стабильной, и, если отбросить некоторые опасения по поводу застревания Nix, в основном все работало хорошо. Я мог подключаться к сети, слушать музыку и воспроизводить видео на YouTube.
Когда я запустил NixOS в VirtualBox, все пошло не так хорошо. Производительность была довольно сильно снижена на рабочем столе. Я также не смог заставить систему воспроизводить звук, например, при открытии аудиофайлов в медиаплеере Elise. Я также не смог заставить видео с YouTube воспроизводиться ни в Firefox (браузер по умолчанию), ни в Falkon, который я установил позже. Я не уверен, но подозреваю, что проблемы со звуком могут быть связаны с использованием PipeWire в NixOS.
Свежая установка KDE Plasma версии NixOS заняла 6 ГБ дискового пространства. При входе в сеанс Plasma система использовала 430 МБ оперативной памяти, что ниже среднего.
Nix на AlmaLinux OS
Одна из вещей, которые мне нравятся в Nix, – это менеджер пакетов, предназначенный для работы с другими дистрибутивами. Проект предоставляет сценарий, который мы можем запустить для установки менеджера пакетов на выбранный нами дистрибутив Linux:
sh <(curl -L https://nixos.org/nix/install) --no-daemon
Этот сценарий запрашивает у нас пароль sudo, а затем советует нам использовать сценарий Nix для установки переменной окружения. В качестве альтернативы мы можем выйти из системы и войти снова, чтобы получить новые настройки.
Я установил Nix в AlmaLinux OS, просто потому что у меня была уже установленная и доступная копия. Одним из первых моих действий была попытка обновить базу данных пакетов и проверить наличие обновлений. Проверка обновлений не удалась с ошибкой, которая гласила: “неожиданный конец файла”. Это было не очень элегантно, но неудивительно, поскольку я еще не установил ни одного пакета.
Затем я попытался установить несколько пакетов, таких как Falkon, GIMP и Firefox. Это не удалось, поскольку утилита nix-env столкнулась с segfault (сбой из-за проблем с памятью). Я обновил базу данных пакетов и повторил попытку. При попытке установить новые пакеты на этот раз каждый раз возникало больше ошибок “неожиданный конец файла”.
Я был удивлен этим. В прошлом я использовал более ранние версии Nix в других дистрибутивах и никогда не сталкивался с подобными проблемами. Похоже, что-то в обработке конфигурации сломалось в этом выпуске там, где в прошлых версиях все работало.
Выводы
С одной стороны, я был рад услышать, что NixOS добавил Calamares в live media, чтобы облегчить установку дистрибутива. Мне понравился мой прошлый опыт работы с NixOS, и одной из немногих проблем, с которыми я сталкивался в предыдущих пробных версиях, была правильная настройка конфигурационного файла Nix. Nix может многое предложить, и меня удручала необходимость проходить через медленный процесс чтения документации и настройки текстового файла, чтобы настроить систему. Calamares – это удобная графическая программа установки, которая значительно снижает барьер для того, чтобы попробовать NixOS и менеджер пакетов Nix.
Однако в этот раз с Nix возникли серьезные проблемы. В прошлом я пробовал NixOS и Nix на других дистрибутивах, и раньше все было гладко, отполировано и функционально. Хотя иногда мне приходилось немного почитать страницы руководства, чтобы получить максимум от Nix, прошлые версии работали хорошо, и NixOS в целом работала довольно хорошо, как и другие минимальные дистрибутивы для рабочего стола.
В этот раз, хотя NixOS в целом работала нормально на моей рабочей лошадке, она столкнулась с многочисленными проблемами производительности и звука при запуске в VirtualBox. Nix иногда блокировался, когда я только начал его использовать. В первый раз, когда я успешно обновил пакеты, он сломал экран входа в систему, и Nix вообще не работал, когда я установил его в AlmaLinux OS.
Я не уверен, что произошло с Nix за последний год или около того с тех пор, как я в последний раз экспериментировал с ним (и NixOS), но это было похоже на большой шаг назад. И функциональность Nix, и стабильность пакетов, доступных в репозиториях, не соответствовали прежним высоким стандартам. Тот факт, что я вообще не смог заставить Nix работать в AlmaLinux после установки прошлых версий на дистрибутивы вроде Debian, вызывает беспокойство, и я надеюсь, что эти проблемы будут решены. Пользователь не должен видеть отладочные сообщения и сегфолты при попытке выполнить обновление или установку пакетов.
Тем не менее, я хочу отметить, что первое обновление NixOS дало мне шанс проверить и подтвердить ценность поколений пакетов. Это не очень хорошо, что обновление NixOS все сломало, но это показывает, как быстро Nix может исправить проблемы, когда обновление повреждает систему.