Поиск по сайту:

Начало работы с менеджером пакетов Nix

В этом руководстве объясняется, как выполнять операции управления пакетами, такие как установка, удаление, обновление и обновление пакетов, с помощью диспетчера пакетов Nix. Если вы еще не установили менеджер пакетов Nix, обратитесь к нашему предыдущему руководству «Nix — мощный менеджер пакетов для Linux и Unix». Как вы, возможно, уже знаете, вам не обязательно быть пользователем root или sudo, чтобы выполнять все операции по управлению пакетами с помощью Nix.

Начало работы с менеджером пакетов Nix

У Никса много команд. Основная команда управления пакетами — nix-env. Эта команда используется для просмотра, установки, обновления, отката, удаления и запроса пакетов. Давайте посмотрим некоторые команды на примерах.

Обновление каналов Nix

Канал Nix — это просто URL-адрес, указывающий на место, содержащее набор выражений Nix и манифест. По умолчанию канал Nixpkgs автоматически добавляется в список «подписанных» каналов при установке Nix.

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

nix-channel --update

Пример вывода:

downloading Nix expressions from ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’...
downloading ‘https://d3g5gsiof5omrk.cloudfront.net/nixpkgs/nixpkgs-17.09pre108299.ec9a23332f/nixexprs.tar.xz’... [8335/8656 KiB, 206.5 KiB/s]
unpacking channels...

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

nix-channel --add https://nixos.org/channels/nixpkgs-unstable

После подписки (добавления) канала не забудьте обновить канал, чтобы получить последние доступные выражения Nix, используя команду:

nix-channel --update

Чтобы удалить канал, просто запустите:

nix-channel --remove nixpkgs

Поиск/запрос доступных пакетов

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

nix-env -qa

Пример вывода приведенной выше команды будет:

2048-in-terminal-2015-01-15
2bwm-0.2
389-ds-base-1.3.5.15
3dpong-0.5
4store-1.1.6
8086tiny-1.25
90secondportraits-1.01b
915resolution-0.5.3
9pfs
a2jmidid-8
a2ps-4.14
a52dec-0.7.4p4
aacgain-1.9.0
aacskeys-0.4.0e
aalib-1.4rc5
abc-verifier-20160818
abcde-2.7.2
abcl-1.4.0

[...]

Здесь «-q» указывает на операцию запроса. «-a» указывает все доступные (т. е. устанавливаемые) пакеты.

Вы можете запросить конкретный пакет, как показано ниже.

nix-env -qa chromium

Выход:

chromium-58.0.3029.110

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

nix-env -qaP | grep python3-3

Пример вывода:

nixpkgs.python33 python3-3.3.6
nixpkgs.python33Full python3-3.3.6
nixpkgs.python34 python3-3.4.6
nixpkgs.python34Full python3-3.4.6
nixpkgs.python35 python3-3.5.3
nixpkgs.python35Full python3-3.5.3
nixpkgs.python3Full python3-3.6.1
nixpkgs.python36Full python3-3.6.1
nixpkgs.python3 python3-3.6.1

Чтобы просмотреть все установленные пакеты, просто запустите:

nix-env -q

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

nix-env -qas gcc

Пример вывода:

IPS gcc-5.4.0

Здесь «I» указывает, что указанный пакет установлен, «P» указывает на то, что пакет присутствует в нашей системе, а «S» указывает на то, существует ли так называемый заменитель для пакета.

Вы можете запрашивать/перечислять пакеты, используя регулярные выражения. Вот несколько примеров регулярных выражений.

хром

Соответствует имени пакета chromium и любой версии.

хром-58,0

Соответствует названию пакета chromium и версии 58.0.

Пример :

nix-env -qa chromium-58.0

gtk\\+

Соответствует имени пакета gtk+. Символ + необходимо экранировать с помощью обратной косой черты, чтобы предотвратить его интерпретацию как квантификатор, а обратную косую черту необходимо, в свою очередь, экранировать другой обратной косой чертой, чтобы гарантировать, что оболочка передает ее дальше.

.\*

Соответствует любому имени пакета. Это значение по умолчанию для большинства команд.

'.*zip.*'

Соответствует любому имени пакета, содержащему строку zip. Обратите внимание на точки: '*zip*' не работает, поскольку в регулярном выражении символ * интерпретируется как квантификатор.

'.*(firefox|chromium).*'

Соответствует любому имени пакета, содержащему строки firefox или chromium.

Установка пакетов

Как я упоминал в предыдущем руководстве, все пакеты будут храниться в Nix Store, обычно в каталоге /nix/store.

Чтобы установить пакет, просто запустите:

nix-env --install gcc

Или,

nix-env -i gcc

Приведенная выше команда установит последний доступный пакет gcc.

Пример вывода приведенной выше команды будет:

installing ‘gcc-5.4.0’
download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i.narinfo’ after 5 seconds...
download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/dyj2k6ch35r1ips4vr97md2i0yvl4r5c.narinfo’ after 5 seconds...
download-from-binary-cache.pl: still waiting for ‘https://cache.nixos.org/g25gnfmd8i392ahiip9nwfv80szqbkcs.narinfo’ after 5 seconds...
these paths will be fetched (38.94 MiB download, 150.45 MiB unpacked):
 /nix/store/7n45x3waczv1smsdkax2dy4j2zhbfk82-glibc-2.25-bin
 /nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0
 /nix/store/f05gsfcilsczwic8aga0cgl0sygbw5lc-zlib-1.2.11
 /nix/store/f111ij1fc83965m48bf2zqgiaq88fqv5-glibc-2.25
 /nix/store/g25gnfmd8i392ahiip9nwfv80szqbkcs-gcc-5.4.0-man
 /nix/store/n5k6yqf81jp4qbay2czaqciimhxikcq8-linux-headers-4.4.10
 /nix/store/vrr9maj9lqj2xwndlx3kh07vhnc111i2-glibc-2.25-dev
 /nix/store/xfrkm34sk0a13ha9bpki61l2k5g1v8dh-gcc-5.4.0-lib
 /nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info
fetching path ‘/nix/store/zx0i63k1qswsfjj3kxhwk1vqa9i5ys8i-gcc-5.4.0-info’...

[...]

fetching path ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’...

*** Downloading ‘https://cache.nixos.org/nar/00y98z7i8a1a8d3nkv4dbbfbwwvznccbvmjdhaay0gqc0gfgb020.nar.xz’ to ‘/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0’...
 % Total % Received % Xferd Average Speed Time Time Time Current
 Dload Upload Total Spent Left Speed
100 29.5M 100 29.5M 0 0 373k 0 0:01:21 0:01:21 --:--:-- 365k

building path(s) ‘/nix/store/nxx0bfg3n685fl0l3m2gbjqannh0wb9i-user-environment’
created 78 symlinks in user environment

Давайте проверим, установлен ли gcc или нет, с помощью команды:

gcc -v

Пример вывода:

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/nix/store/dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0/libexec/gcc/x86_64-unknown-linux-gnu/5.4.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: 
Thread model: posix
gcc version 5.4.0 (GCC)

Как вы заметили в приведенном выше выводе, gcc находится в подкаталоге с именем "dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0" в /nix/store. Здесь мы называем dyj2k6ch35r1ips4vr97md2i0yvl4r5c-gcc-5.4.0 уникальным идентификатором. В этом подкаталоге хранятся все необходимые зависимости и библиотеки пакета gcc.

Тестовые пакеты без установки

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

  • Как протестировать пакет без его установки в Linux

Обновление пакетов

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

nix-env --upgrade vim

Или просто:

nix-env -u vim

Приведенная выше команда обновит пакет vim только в том случае, если существует «более новая» версия.

Кроме того, вы можете обновить все установленные пакеты одновременно, выполнив следующую команду:

nix-env -u

Откат пакетов

Вы установили пакет, но он бесполезен или работает неправильно. Вам нужна более низкая версия того же пакета. Что вы будете делать? Простой. Просто откатитесь к предыдущей рабочей версии с помощью следующей команды:

nix-env --rollback

Удаление пакетов

Чтобы удалить пакет, выполните:

nix-env -e gcc

Приведенная выше команда удалит пакет под названием gcc из вашей системы.

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

nix-env -e gcc vim

Пример вывода:

uninstalling ‘vim-8.0.0442’
uninstalling ‘gcc-5.4.0’
building path(s) ‘/nix/store/mxpikbq3l08379h8ik8mrj3fcw6mh6y4-user-environment’
created 6 symlinks in user environment

Удаление неиспользуемых пакетов

Когда пакет удаляется, он не удаляется из Nix Store (т. е. каталога /nix/store/). Только символические ссылки будут удалены из вашего профиля.

Чтобы фактически удалить неустановленные пакеты, запустите:

nix-collect-garbage -d

Пример вывода:

finding garbage collector roots...
deleting garbage...
deleting ‘/nix/store/s4jr4dc9gghldr3xza23rw0gm9kp21kl-nix-prefetch-scripts.drv’
deleting ‘/nix/store/km2gyzlvs9vkrr52wxfyhinv4r52ksrj-nix-prefetch-bzr.drv’
deleting ‘/nix/store/7mi73sdc1p349vmpb5nyxsrv8ayk5hly-bazaar-2.7.0.drv’

[...]

deleting ‘/nix/store/8ckmcs9hx1qm0yxdnv892vrvx49zm1sq-setup-hook-2.0.sh’
deleting ‘/nix/store/trash’
deleting unused links...
note: currently hard linking saves -0.00 MiB
1447 store paths deleted, 12.65 MiB freed

Вам следует периодически запускать эту команду, чтобы избавиться от неиспользуемых пакетов из вашей системы.

И это все на данный момент. Надеюсь, у вас есть представление об основах использования менеджера пакетов Nix. Того, что я только что рассказал, достаточно, чтобы начать работу с менеджером пакетов Nix. Конечно, команд много. Чтобы узнать больше о командах Nix, обратитесь к официальному руководству Nix, приведенному в конце этого руководства.

Если вы найдете это руководство полезным, поделитесь им в своих социальных и профессиональных сетях и поддержите OSTechNix. Впереди еще больше хороших вещей. Следите за обновлениями!

Ваше здоровье!

Ресурс:

  • Руководство по Nix

Статьи по данной тематике