Перейти до вмісту

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-env -iA або nix-env --install --attr для встановлення пакунків до /nix/store і уможливлення доступ до них у шляху пошуку вашого користувача:

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

Це створює нове «середовище», яке містить усі зміни стану, необхідні для того, щоб став доступним пакунок mc, і ці зміни можна накочувати чи відкочувати. Це «справжня» привабливість системи керування пакетами Nix, але це виходить за межі цього підручника.

Перевірка, що команда mc тепер доступна вашому користувачу:

$ which mc
/home/користувач/.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), але на практиці він широко використовується та є більш ергономічним. Автозаповнення та параметри --help для різних підкоманд nix також працюватимуть «з коробки» при встановленні «з нуля». Як і nix-env, nix profile встановить пакунки до /nix/store і зробить їх доступними у вашому шляху пошуку, зберігаючи їх між сеансами входу до системи.

Ось тривіальний приклад використання nix profile для встановлення інструменту пошуку у програмному коді ag:

$ 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

Див. розділ щодо garbage collection нижче, щоб дізнатися про способи отримання місця, яке використовується пакунками, якими ви вже не користуєтеся.

Див. 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, віддайте такі команди:

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

sudo 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 sudo userdel nixbld$i; done

sudo groupdel nixbld

Див. також


Статтю надіслано Ernstki, умови ліцензування — CC-BY-4.0.