NixOS первые шаги

NixOS первые шаги


Материал написан пользователем сайта.

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:

  • https://search.nixos.org

Сначала жмём кнопку 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

Поначалу эту команду придётся применять часто.