Перейти к содержимому

Nix

Диспетчер пакетов Nix — развитое средство для опытных пользователей, позволяющее получить практически любой пакет свободного программного обеспечения из обширного репозитория, который поддерживает сообщество.

В KDE Linux он устанавливается в однопользовательском режиме. Nix хранит программы и зависимости в /nix/store и сам обновляет путь поиска по мере добавления и удаления средств.

Установка

Диспетчер пакетов Nix устанавливается для текущего пользователя так:

sh <(curl --proto '=https' --tlsv1.2 -L https://nixos.org/nix/install) --no-daemon

Завершите сеанс, войдите снова и проверьте:

nix-shell -p mc emacs-nox  # теперь вы в оболочке с mc и emacs

Учтите: после выхода из этой оболочки mc и emacs исчезают из её пути поиска. Как сделать такие средства доступными постоянно, описано в следующем разделе.

Подробности — на https://nixos.org/download/#nix-install-linux.

Постоянная установка пакетов

Чтобы установить пакеты в /nix/store и добавить их в путь поиска пользователя, используйте nix-env -iA или nix-env --install --attr:

$ nix-env -f '' -iA mc
⋮
building '/nix/store/1q2sh2f178jx9fl37gd9ks85ysfvpwd9-user-environment.drv'...

При этом создаётся новое «окружение» со всеми изменениями состояния, которые нужны для доступа к пакету mc; такие изменения можно откатывать и применять заново. В этом и состоит ''главная'' привлекательность системы управления пакетами Nix, но эта тема выходит за рамки руководства.

Убедитесь, что команда mc теперь доступна пользователю:

$ which mc
/home/username/.nix-profile/bin/mc

Пакеты удаляются командой nix-env --uninstall или nix-env -e:

$ nix-env -e mc
uninstalling 'mc-4.8.33'
building '/nix/store/rqbghiyds6f7a49qiwi9gmq7bnkgn9qi-user-environment.drv'...

Как освободить место, занятое ненужными пакетами, описано ниже в разделе о [[#garbage-collection|сборке мусора]].

Подробности — на https://nix.dev/manual/nix/latest/command-ref/nix-env.html.

Использование nix profile

Формально интерфейс nix <command> до сих пор считается экспериментальным (подробнее об «экспериментальном» статусе nix profile — в этом RFC), но на деле он широко используется и удобнее. Автодополнение по клавише Tab и параметр --help у различных подкоманд nix работают сразу после установки. Как и nix-env, nix profile устанавливает пакеты в /nix/store и добавляет их в путь поиска, причём они сохраняются между сеансами.

Простой пример: установка средства поиска по коду ag с помощью nix profile:

$ mkdir -p ~/.config/nix
$ cat >> ~/.config/nix/nix.conf <<EOF
experimental-features = nix-command flakes
EOF

$ nix search nixpkgs silver searcher
⋮
* legacyPackages.x86_64-linux.silver-searcher (2.2.0)
  Code-searching tool similar to ack, but faster

$ nix profile add nixpkgs#silver-searcher
$ which ag
/home/username/.nix-profile/bin/ag

Вывод списка установленных пакетов и их удаление:

$ nix profile list
⋮
Name:               silver-searcher
Flake attribute:    legacyPackages.x86_64-linux.silver-searcher
Original flake URL: flake:nixpkgs
Locked flake URL:   github:NixOS/nixpkgs/f08e6b11a5ed43637a8ac444dd44118bc7d273b9?narHash=sha256-7vUo0qWCl/rip%2Bfzr6lcMlz9I0tN/8m7d5Bla/rS2kk%3D
Store paths:        /nix/store/l120si3zsshmf3jr7dkn5dvcj0n586xb-silver-searcher-2.2.0

$ nix profile remove silver-searcher

Как освободить место, занятое ненужными пакетами, описано ниже в разделе о сборке мусора.

Подробности — на https://nix.dev/manual/nix/latest/command-ref/new-cli/nix3-profile.html.

Переустановка Nix

Если «экспериментальная» возможность nix profile включена, то перед переустановкой её нужно отключить и удалить файлы состояния профиля пользователя, иначе появится сообщение об ошибке вида:

error: profile '/home/username/.local/state/nix/profiles/profile' is incompatible with 'nix-env'; please use 'nix profile' instead

Закомментируйте строку experimental-features в файле настройки Nix, затем удалите каталог состояния профиля:

$ sed -i'' 's/^experimental-features = nix-command flakes$/#&/' ~/.config/nix/nix.conf
$ rm -rf ~/.local/state/nix/profiles/profile

Теперь можно повторить установку.

Сборка мусора для освобождения места на диске

Учтите: nix-env -e и nix profile remove убирают команды пакета из текущего окружения пользователя, но сами программы остаются в /nix/store, пока не будут удалены при сборке мусора.

Запустить сборку мусора и освободить место на диске можно одной из следующих команд:

nix-store --gc           # обычная сборка мусора
nix-collect-garbage -d   # удалить «недостижимые» пакеты из хранилища

Удаление Nix

Чтобы удалить диспетчер пакетов Nix, выполните следующие команды:

run0 systemctl disable --now nix-daemon.service nix-daemon.socket

run0 rm -rf /nix /etc/nix /etc/profile.d/nix.sh /etc/tmpfiles.d/nix-daemon.conf /nix /root/.nix-channels /root/.nix-defexpr /root/.nix-profile /root/.cache/nix ~/.nix-channels ~/.nix-defexpr ~/.nix-profile ~/.cache/nix

for i in $(seq 1 32); do run0 userdel nixbld$i; done

run0 groupdel nixbld

Дополнительные сведения


Статья предоставлена Ernstki и распространяется под лицензией CC-BY-4.0.