Начало работы с менеджером пакетов 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