NixOS - дистрибутив Linux, основанный на пакетном менеджере nix.
Nix это не просто очередной пакетный менеджер со своими плюсами и минусами, nix использует совершенно непривычную для пользователей Linux декларативную конфигурацию. То есть конфигурация системы, перечень программ, сервисов и их настроек и так далее, хранятся в одном текстовом файле configuration.nix. Используя информацию из него, nix устанавливает и конфигурирует вашу систему.
Например, чтобы перенести свою настроенную систему со всеми программами на новый компьютер, вам понадобится только один текстовый файл configuration.nix. Но это ещё не всё, что умеет nix.
Ещё одна из многих особенностей nix в том, что устанавливая программу он не раскидывает её по всей системе, как привычный Linux, а установит её в отдельный каталог.
Для каждой программы свой каталог, в котором находится всё что нужно для работы программы. Если программе нужны какие-то данные из /etc или /use и так далее, nix создаст эти каталоги с файлами в каталоге программы, которые будет видеть не только одна программа, но и вся система. Если разным программам нужна одна и та же библиотека, nix оставит один экземпляр этого файла, а в других каталогах установит жёсткие ссылки на него удалив многочисленные копии. Но обо всех особенностях, что умеет nix в одной статье подробно не расскажешь. Поэтому сейчас мы просто приведём систему в нормальное рабочее состояние и ознакомимся с базовыми принципами работы в NixOS.
Установка NixOS
NixOS можно установить с live образа в графическом режиме с привычным установщиком Calamares. На сегодня есть две версии образа с DE, в которых запускается установщик, GNOME и KDE. Так же есть минималистичный .iso без графической оболочки. Я выбрал Calamares, для меня так проще.
В самой установке ничего сложного нет, но хочется обозначить один нюанс с разбивкой дисков.
Все установленные программы, библиотеки и прочее, хранятся в /nix/store/. По сути вся ОС находится в /nix/store. В корне / ничего не хранится, кроме структуры каталогов и ссылок. Если вы что-то захотите добавить или отредактировать в этих каталогах, это не повлияет ни на что, и вообще работать не будет. Все настройки и прочее нужно прописывать только в файле /etc/nixos/configuration.nix.
Я устанавливал NixOS на SSD диск 60Гб, разбил его так:
/boot/efi - 512МБ, под корень оставил / - 2 ГБ ( даже этого оказалось много, сейчас используется всего 450МБ), и, главное, смонтировал 37ГБ в /nix (сюда ОС будет устанавливать всё и вся, сейчас у меня использовано 17 ГБ), всё остальное, 20ГБ, смонтировал под /home
Во время установки полоска прогресса застревает на, примерно, 46%, но установка продолжается, можно кликнуть на кнопочку справа в конце прогресса, что-то вроде log...
Ещё нам предложат поставить галочку на разрешение использования проприетарного ПО. Ставим.
Настройка NixOS
И так, система установилась, перезагружаемся и видим привычную DE, которую вы выбрали на каком-то этапе установки. Я выбрал Cinnamon.
Первое, что мы сделаем, перейдём на Unstable channels.
В Nix подобие репозиториев называются channels (каналы).
Переход на Unstable версию обусловлен тем, что в стабильной версии может не оказаться нужного и привычного ПО, да и версии пакетов устаревшие, как Debian stable. Нестабильный, это не значит, что тут же в любой момент всё сломается. Версии пакетов будут, что-то вроде Debian testing + sid. Да и в любой момент можно будет с лёгкостью перезагрузиться в предыдущее состояние системы. Рабочую систему невозможно сломать, какими-то неправильными действиями. Это ещё одна замечательная особенность nix, но об этом позже.
Добавляем каналы:
sudo nix-channel --add https://nixos.org/channels/nixos-unstable nixos
sudo nix-channel --add https://nixos.org/channels/nixpkgs-unstable nixos
Обновляем каналы:
sudo nix-channel -update
Обновляем всю систему:
sudo nixos-rebuild switch --upgrade
От привычного в NixOS только de, которое вы можете потыкать, покликать, но установить с его помощью ни чего не получится. Все DE в NixOS максимально урезаны. Даже некоторые штатные программы не работают. В nix всё делается через configuration.nix
Установка программ
Все программы устанавливаются простым перечислением названий пакетов в configuration.nix. Но тут тоже есть несколько особенностей:
- Название программ может кардинально отличаться от привычных из других дистрибутивов.
- Некоторые популярные программы существуют в двух видах. В виде подключаемых сервисов и просто программ.
Очень много распространённого софта в NixOs существует в виде сервисов. Steam, wine, waydroid и пр., и пр.
Поэтому, прежде чем вписывать что-то в configuration.nix, сначала нужно найти название интересующей вас программы на сайте поиска NixOS:
Сначала жмём кнопку unstable внизу формы поиска. Потом NixOS options. Если ничего не находим, то ищем в Packages.
Для примера установим игровой клиент Steam:
Набираем в форме поиска Steam. Выходит много разных названий сервисов и опций для Steam. Нужное нам называется programs.steam.enable. Узнаём из описания, кликнув на ссылку, как его включить.
Теперь включаем его, просто вписывая в cofigutation.nix:
programs.steam.enable = true;
Не забываем соблюдать все знаки пунктуации, особенно в конце точка с запятой.
Для этого откроем терминал и отредактируем файл configuration.nix в редакторе nano.
sudo nano /etc/nixos/configuration.nix
Если удобней, в Cinnamon можно открыть штатным редактором xed. Или какой найдёте в зависимости от выбранного при установке DE. Но nano в системе установлен всегда.
sudo xed /etc/nixos/configuration.nix
В нём уже прописаны куча всяких первоначальных настроек и блоков.
Вписываем где-нибудь, чтоб не попасть в какой-нибудь блок заключённый между всевозможными скобками.
programs.steam.enable = true;
Для запуска некоторых игр в Steam понадобится доустановить пакет Steam-runtime.
Опять открываем сайт поиска и ищем Steam-runtime. В NixOS options ничего не находит, поэтому кликаем по Packages. Нужный нам пакет называется steamPackages.steam-runtime.
И ещё одна особенность. Пакеты, программы вписываем в определённый блок.
Можно установить набор программ для конкретного пользователя или для всей системы. Программы для всей системы будут доступны всем пользователям, а программы для конкретного пользователя будут доступны только этому пользователю.
Если устанавливаем программу или пакет для конкретного пользователя то название прописываем в блок:
users.users.evu = {
isNormalUser = true;
description = "evu";
extraGroups = [ "networkmanager" "wheel" ];
packages = with pkgs; [
steamPackages.steam-runtime
firefox
];
};
evu - имя моего пользователя.
extraGroups - группы пользователя.
packages = with pkgs; [ ]; - внутри скобок вписываем список программ.
Если устанавливаем для всей системы то прописываем в этот блок:
environment.systemPackages = with pkgs; [
steamPackages.steam-runtime
firefox
];
Теперь сохраняем то что изменили в configuration.nix и переходим к установке. Текстовый редактор можно не закрывать.
Открываем терминал и запускаем команду переконфигурации:
sudo nixos-rebuild switch
После запуска команды все программы установятся.
И тут произойдёт самая интересная особенность nix. NixOS сохранит атомарный снимок всей вашей предыдущей системы до всех внесённых исправлений. То есть, если вы что-то не то натворили, можно перезагрузится в то состояние ОС, которое было до исправлений. В загрузочном меню появится соответствующий пункт.
Настройка, конфигурация и установка драйверов оборудования
Настройка и драйвера оборудования также прописываются в файле configuration.nix.
В только что установленной системе в /etc/nixos/ есть еще один файл hardware-configuration.nix, который считается частью configuration.nix, потому что он прописан в configuration.nix в верхних строках как:
imports =
[
./hardware-configuration.nix
];
Так же можно подключать и другие созданные вами файлы конфигурации. Либо всё перенести в один configuration.nix.
На самом деле, nix использует модульную систему для своей декларативной конфигурации, configuration.nix это тоже модуль, в который можно подключать другие модули.
Структура модуля выглядет вот так:
{ config, pkgs, ... }:
{
imports =
[ путь к импортируемуму другому модулю, например:
./hardware-configuration.nix
];
options = {
объявления опций
};
config = {
конфигурация опций
};
}
Откроем hardware-configuration.nix в редакторе также, как configuration.nix и будем разбираться что там есть.
boot.initrd.availableKernelModules - включаемые первые при загрузке модули ядра.
boot.initrd.kernelModules - тоже подключаемые модули, но только которые должны быть загружены после основных модулей ядра.
Здесь можно включить встроенный в ядро драйвер видеокарты и модуль виртуализации процессора.
Например, для включения драйвера видеокарт от AMD и виртуализацию процессора AMD, строка будет выглядеть так:
boot.initrd.kernelModules = [ "amdgpu" "kvm-amd" ];
Также можно управлять утилитой sysctl.
Например, известный трюк, чтоб скорость при копировании на другой накопитель, например на флешку, показывала как в Windows, а не какие-то запредельные скорости копирования в ОЗУ. Строка с параметрами будет выглядеть так:
boot.kernel.sysctl = { "vm.dirty_bytes" = 2097152; "vm.dirty_background_bytes" = 2097152; };
Чтобы система видела файловую систему ntfs, ниже добавим строки:
boot.supportedFilesystems = [ "ntfs" ];
Монтирование дисков
Про монтирование дисков, хочу предупредить, ни какие программы по типу gnome-disk-utility не смогут переписать fstab. Такими утилитами можно смонтировать диск, но при следующей загрузке системы параметры не сохранятся.
Чтобы смонтировать диск, который вы не смонтировали при установке, можно добавить в конфигурацию таким образом. Пишем в hardware-configuration.nix:
fileSystems."/mnt/nvme0n1p1" =
{ device = "/dev/disk/by-uuid/5c9fc239-e0d2-45d5-a960-90869da63e99";
fsType = "ext4";
options = [ "noatime" "nodiratime" "discard" "x-gvfs-show" ];
};
Тут нужно указать, куда монтировать, uuid - вашего диска и параметры монтирования.
Открываем терминал. Применяем реконфигурацию.
sudo nixos-rebuild switch
Поначалу эту команду придётся применять часто.
Я думаю для начала хватит. Но, если возникнет интерес продолжу.
Спасибо за внимание!
Комментарии
10:42
10:53
13:25
fonts.fonts = with pkgs; [
corefonts
];
или средствами DE если отдельный шрифт нужен.
11:04
11:09
16:09
11:24
12:41
13:30
11:40
13:37
В введении
2-й абзац: после Nix нужно поставить тире.
5-й: нужна запятая "...ссылки на него, удалив..."
В главе Установка NixOS
Удалить запятую между словами в: "...ничего не хранится кроме.."
и в: "...это не повлияет ни на что и вообще работать не будет."
В главе Настройка NixOS
1-й абзац: "Итак" пишется вместе
4-й: удалить запятую между словами
"Версии пакетов будут что-то вроде ..."
и "сломать какими-то"
В главе Установка программ
Офрмить пункт 2 корректно: "Некоторые популярные программы существуют в двух видах: в виде подключаемых сервисов и просто программ."
Перед скриншотом одним предложением: "Сначала жмём кнопку unstable внизу формы поиска, потом NixOS options."
Далее ниже пропущены запятые:
"... чтоб не попасть в какой-нибудь блок, заключённый между всевозможными скобками."
"Если устанавливаем программу или пакет для конкретного пользователя, то название прописываем в блок:"
"Если устанавливаем для всей системы, то прописываем в этот блок:"
"Теперь сохраняем то, что изменили в configuration.nix и переходим к установке."
В главе Настройка, конфигурация...
Пропущена тире "...configuration.nix - это тоже модуль,..."
И в самом конце можно так:
"Я думаю, для начала хватит. Но если возникнет интерес, продолжу." А лучше в одно предложение с запятой перед "но".
15:12
14:03
14:09
15:13
15:28
16:15
На этапе изучения удобно переместить /etc/nixos в домашнюю папку и править от имени пользователя.
16:40
19:18
В nixos есть разные драйвера. Есть даже готовые конфигурационные файлы для некоторых моделей ноутбуков на github.
19:38
От себя добавлю что мой Wi-Fi от интел работать отказался и ещё при установке меня об этом предупреждали
19:57
20:34
18:04
19:24
22:41
16:06
Но есть НО, если вдруг так получилось, что в софтине захардожены пути до привычных линуксу приложения, то начинаются танцы с бубном.
А так всегда можно воспользоваться flake и сделать конфиг который можно будет легко переносить между сисетмами.
Важно для того что бы это попровть не обязательно ставить всю ОС. Достаточно поставить shell вариант на любой Linux
22:37
13:50
15:15
19:28
А для приложений уровня пользователя home-manager значительно приятнее configuration.nix
16:57
Вопрос из стана дилетантов:
Зачем выносили каталоги nix и /nix/store на отдельный раздел? Что это дает?
21:58
Много ручной работы там где она не нужна (хорошо, что скопировать файлы не нужно в редакторе описывать какой файл и куда со всеми конфигами и описаниями какие файловые системы используются и методы копирования, а потом запустить его на выполнение - я шучу конечно). Ну, на мой взгляд - может я не прав и есть применение такому труду.
15:04
15:34
15:52
15:43
15:50
https://releases.nixos.org/nixos/23.05/nixos-23.05.2209.ac1acba43b2/nixos-plasma5-23.05.2209.ac1acba43b2-x86_64-linux.iso
Мой линк:
https://channels.nixos.org/nixos-23.05/latest-nixos-plasma5-x86_64-linux.iso
Разница в данном случае не в версии, а откуда качаете)))
15:55
16:08
В чем дело?
16:16
16:27
17:28
systemctl start display-manager
Ввожу результат нулевой. Сколько я дистрибутивов линукс не перепробовал с такой ситуацией столкнулся впервые.Сейчас в чистом arch linux
13:17
13:25
14:00
14:24