Docker – удобный и популярный инструмент контейнеризации, который позволил ускорить процесс развертывания и запуска приложения и инфраструктуры для него. Этот эффект достигается за счет того, что в контейнер запаковывается образ вашего приложения, который и становится исполняемым пакетом и включает в себя все, что нужно для запуска, - начиная с...
Базовая работа с nix. Каналы
Visitors have accessed this post 4960 times.
Автор — Юрий Изоркин
В предыдущей статье мы познакомились с ОС NixOS. Теперь рассмотрим возможности пакетного менеджера nix. Источником обновления пакетов для менеджера nix служат каналы.
Применение каналов позволяет:
- зафиксировать ПО на определенной версии;
- использовать устаревшее ПО, например, если какие-либо скрипты не поддерживают новую версию и требуют доработки.
Давайте посмотрим, как работать с каналами.
По умолчанию в системе прописан стабильный канал:
sudo nix-channel --list
nixos https://channels.nixos.org/nixos-20.03
Так как мы используем нестабильную ветку, канал обновления будет таким:
sudo nix-channel --list
nixos https://nixos.org/channels/nixos-unstable
Список всех каналов обновления можно посмотреть на странице https://channels.nixos.org/. Для каждого пользователя можно прописать отдельные каналы. Сейчас в нашем случае у пользователя rebrain каналы не прописаны и команда nix-channel —list выдаст пустую строку. Добавим канал с последними обновлениями пакетов и обновим его:
nix-channel --add https://channels.nixos.org/nixos-unstable-small nixpkgs nix-channel --update
Поиск пакетов производится командой nix search <FLAGS>… <REGEX>…, флаг -u обновляет кеш программ. Например:
nix search htop
выдаст:
warning: using cached results; pass '-u' to update the cache * nixpkgs.bpytop (bpytop-1.0.0) A resource monitor; python port of bashtop * nixpkgs.htop (htop) An interactive process viewer for Linux * nixpkgs.zenith (zenith-0.10.0) Sort of like top or htop but with zoom-able charts, network, and disk usage
где nixpkgs — имя нашего канала, bpytop — имя пакета.
Установить пакет можно несколькими способами:
- прописать название пакета в /etc/nixos/configuration.nix, в нашем случае — в /etc/nixos/nix-config/generic/pkgs.nix в блоке environment.systemPackages, и перезапустить сборку системы;
- выполнить команду nix-env -i bpytop, но в этом случае, из-за специфики работы, пакетный менеджер начнет анализировать содержимое канала и потреблять много оперативной памяти;
- рекомендуется указать флаг -A, канал обновления и полное имя пакета:
nix-env -iA nixpkgs.bpytop
installing 'bpytop-1.0.0' these paths will be fetched (0.33 MiB download, 1.63 MiB unpacked): /nix/store/k9spzc7yhj99a0pi19ryxmr4a2kz1zf5-python3.8-psutil-5.7.0 /nix/store/xgd78r2k3n38pqagnrrkh1mn8fwdlkr9-bpytop-1.0.0 copying path '/nix/store/k9spzc7yhj99a0pi19ryxmr4a2kz1zf5-python3.8-psutil-5.7.0' from 'https://cache.nixos.org'... copying path '/nix/store/xgd78r2k3n38pqagnrrkh1mn8fwdlkr9-bpytop-1.0.0' from 'https://cache.nixos.org'... building '/nix/store/pffd5xbrbz7xrg07in0gz8jy4vgqlzd7-user-environment.drv'... created 3 symlinks in user environment Time: 0h:00m:03s
bpytop --version
bpytop version: 1.0.0 psutil version: 5.7.0
Список установленных пакетов можно посмотреть командой:
nix-env -q | cat
bpytop-1.0.0
Как в системе поддерживаются точки отката, можно посмотреть командой:
nix-env --list-generations | cat
1 2020-08-09 12:08:56 (current)
Поставим еще один пакет:
nix-env -iA nixpkgs.mariadb-client
installing 'mariadb-client-10.4.13' these paths will be fetched (1.84 MiB download, 40.25 MiB unpacked): /nix/store/48xcq4hxg78y1shn1wfg3z4xvcmim865-mariadb-client-10.4.13-man /nix/store/9i890ymiw4njc26d6ccjwlgkw2v4g6vs-mariadb-client-10.4.13 copying path '/nix/store/48xcq4hxg78y1shn1wfg3z4xvcmim865-mariadb-client-10.4.13-man' from 'https://cache.nixos.org'... copying path '/nix/store/9i890ymiw4njc26d6ccjwlgkw2v4g6vs-mariadb-client-10.4.13' from 'https://cache.nixos.org'... building '/nix/store/r03ghp0kr48nsab4mavnq4hczfrsih8i-user-environment.drv'... warning: skipping dangling symlink '/nix/store/f1lgp5c7qypy6ggf3wa36p65i9451iqs-user-environment/bin/mariadb-test' created 33 symlinks in user environment Time: 0h:00m:03s
И посмотрим точки отката:
nix-env --list-generations | cat
1 2020-08-09 12:08:56 2 2020-08-09 12:11:30 (current)
Переключаться между точками отката можно командой:
nix-env --switch-generation 1
switching from generation 2 to 1
mysql --version
mysql: command not found
nix-env --switch-generation 2
switching from generation 1 to 2
mysql --version
mysql Ver 15.1 Distrib 10.4.13-MariaDB, for Linux (x86_64) using readline 5.1
Также пакетный менеджер nix поддерживает профили установленных пакетов и возможность переключения между ними:
nix-env --switch-profile /nix/var/nix/profiles/per-user/rebrain/profile-test
Команда nix-env -q | cat выдаст пустой результат.
В итоге, для каждого набора пакетов мы можем создать свой профиль и переключаться между ними. Актуально, если нужны разные версии пакетов.
Например, нам требуется две версии nodejs 12_x и nodejs 8_x, которая сейчас уже не поддерживается. Версию nodejs 8_x можно найти на канале nixos-19.03. Добавляем канал:
nix-channel --add https://channels.nixos.org/nixos-19.03 nixpkgs-1903 nix-channel --update
Создаем новый профиль:
nix-env --switch-profile /nix/var/nix/profiles/per-user/rebrain/profile-nodejs-8x
И устанавливаем nodejs 8_x:
nix-env -iA nixpkgs-1903.nodejs-8_x
installing 'nodejs-8.15.1' these paths will be fetched (29.48 MiB download, 141.05 MiB unpacked): /nix/store/0d12kpv6fp3w2p9bjskbrhyx1vjz7384-http-parser-2.9.0 /nix/store/0f1bal83favkgrr5mp5crw9mqrzi85b7-zlib-1.2.11 /nix/store/4g3g1l0vii6nj6jiq70gpbikb7vclmcj-bzip2-1.0.6.0.1 /nix/store/5my64vz61d64dppj1bdhax4mnc8x6rpa-nodejs-8.15.1 /nix/store/5s4v1ska7pgdfj4brzkcab9kq56a0jzc-acl-2.2.53 /nix/store/94faqmx1gwc88lrgj5dnfm9xxaf54cc0-openssl-1.0.2u /nix/store/9sp131l64cxncjxr2znk5v797vbl57ch-gdbm-1.18.1 /nix/store/a13810j3gfm6nss503qwnqc2pgsawmlw-db-5.3.28 /nix/store/czqwvknixch95pw1kcvrj5zzwk7r4py6-python-2.7.17 /nix/store/f09zmq3sqiy0dnx8g4f1arngkjd4kih7-gcc-7.4.0-lib /nix/store/h0p0h3rh1q4i2yavzm3yqi716s9yaj2f-glibc-2.27 /nix/store/issgq20n7k0z2dvgdsdgijrbd7j5fqvn-ncurses-6.1-20190112 /nix/store/jargvpajyq21wxjaib1fj4lbnapmd7d2-libuv-1.26.0 /nix/store/jyxphfkij1il4ip6y34832v9gakg3pqy-attr-2.4.48 /nix/store/kzv56yx369j0jvcza2cphj2pv8xmqga4-bash-4.4-p23 /nix/store/pqx8wsc4kx87f587b81aj4fgjshgjvi8-readline-6.3p08 /nix/store/q2s80z6hhw1gi3wa14v5a1zppkqk9c2p-coreutils-8.30 /nix/store/ya74davhsdfa5y0dycj75am4pps5cdq9-sqlite-3.28.0 copying path '/nix/store/h0p0h3rh1q4i2yavzm3yqi716s9yaj2f-glibc-2.27' from 'https://cache.nixos.org'... copying path '/nix/store/jyxphfkij1il4ip6y34832v9gakg3pqy-attr-2.4.48' from 'https://cache.nixos.org'... copying path '/nix/store/kzv56yx369j0jvcza2cphj2pv8xmqga4-bash-4.4-p23' from 'https://cache.nixos.org'... copying path '/nix/store/4g3g1l0vii6nj6jiq70gpbikb7vclmcj-bzip2-1.0.6.0.1' from 'https://cache.nixos.org'... copying path '/nix/store/5s4v1ska7pgdfj4brzkcab9kq56a0jzc-acl-2.2.53' from 'https://cache.nixos.org'... copying path '/nix/store/f09zmq3sqiy0dnx8g4f1arngkjd4kih7-gcc-7.4.0-lib' from 'https://cache.nixos.org'... copying path '/nix/store/9sp131l64cxncjxr2znk5v797vbl57ch-gdbm-1.18.1' from 'https://cache.nixos.org'... copying path '/nix/store/q2s80z6hhw1gi3wa14v5a1zppkqk9c2p-coreutils-8.30' from 'https://cache.nixos.org'... copying path '/nix/store/0d12kpv6fp3w2p9bjskbrhyx1vjz7384-http-parser-2.9.0' from 'https://cache.nixos.org'... copying path '/nix/store/a13810j3gfm6nss503qwnqc2pgsawmlw-db-5.3.28' from 'https://cache.nixos.org'... copying path '/nix/store/jargvpajyq21wxjaib1fj4lbnapmd7d2-libuv-1.26.0' from 'https://cache.nixos.org'... copying path '/nix/store/issgq20n7k0z2dvgdsdgijrbd7j5fqvn-ncurses-6.1-20190112' from 'https://cache.nixos.org'... copying path '/nix/store/94faqmx1gwc88lrgj5dnfm9xxaf54cc0-openssl-1.0.2u' from 'https://cache.nixos.org'... copying path '/nix/store/0f1bal83favkgrr5mp5crw9mqrzi85b7-zlib-1.2.11' from 'https://cache.nixos.org'... copying path '/nix/store/pqx8wsc4kx87f587b81aj4fgjshgjvi8-readline-6.3p08' from 'https://cache.nixos.org'... copying path '/nix/store/ya74davhsdfa5y0dycj75am4pps5cdq9-sqlite-3.28.0' from 'https://cache.nixos.org'... copying path '/nix/store/czqwvknixch95pw1kcvrj5zzwk7r4py6-python-2.7.17' from 'https://cache.nixos.org'... copying path '/nix/store/5my64vz61d64dppj1bdhax4mnc8x6rpa-nodejs-8.15.1' from 'https://cache.nixos.org'... building '/nix/store/gdzf45fk3x6zqvdpswndjlg2mlgirxmw-user-environment.drv'... created 4 symlinks in user environment Time: 0h:00m:12s
Проверяем версию:
node --version
v8.15.1
Ставим nodejs 12_x уже с последнего канала:
nix-env --switch-profile /nix/var/nix/profiles/per-user/rebrain/profile-nodejs-12x
nix-env -iA nixpkgs.nodejs-12_x
installing 'nodejs-12.18.3'
these paths will be fetched (11.78 MiB download, 61.21 MiB unpacked):
/nix/store/97fy125s2km6j82qm1449qf4sqr3qski-libuv-1.38.1
/nix/store/bn3n6aa85xifhnidqq31679iszr3xvmr-nodejs-12.18.3
/nix/store/rdvambcpxagx4z91fyy69zgm71ibz6bh-icu4c-67.1-dev
copying path '/nix/store/rdvambcpxagx4z91fyy69zgm71ibz6bh-icu4c-67.1-dev' from 'https://cache.nixos.org'...
copying path '/nix/store/97fy125s2km6j82qm1449qf4sqr3qski-libuv-1.38.1' from 'https://cache.nixos.org'...
copying path '/nix/store/bn3n6aa85xifhnidqq31679iszr3xvmr-nodejs-12.18.3' from 'https://cache.nixos.org'...
building '/nix/store/4ap8npfayfjwai58v6hdyrgpaqvb4fzz-user-environment.drv'...
created 4 symlinks in user environment
Time: 0h:00m:05s
node --version
v12.18.3
В зависимости от того, какая версия nodejs требуется, переключаемся между профилями profile-nodejs-8x и profile-nodejs-12x.
В последующем, чтобы обновить пакеты, сперва обновляем каналы:
nix-channel --update
Потом пакеты:
nix-env -u
Также пакетный менеджер nix можно установить и на другой дистрибутив Linux командой:
curl -L https://nixos.org/nix/install | sh
% Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 2490 100 2490 0 0 2011 0 0:00:01 0:00:01 --:--:-- 3351 downloading Nix 2.3.7 binary tarball for x86_64-linux from 'https://releases.nixos.org/nix/nix-2.3.7/nix-2.3.7-x86_64-linux.tar.xz' to '/tmp/nix-binary-tarball-unpack.wglugpsGP1'... % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 16.4M 100 16.4M 0 0 8536k 0 0:00:01 0:00:01 --:--:-- 8536k Note: a multi-user installation is possible. See https://nixos.org/nix/manual/#sect-multi-user-installation performing a single-user installation of Nix... directory /nix does not exist; creating it by running 'mkdir -m 0755 /nix && chown rebrain /nix' using sudo copying Nix to /nix/store...................................... installing 'nix-2.3.7' building '/nix/store/b64sdzfcc4wd2p656i9jskxdmhjkq0cv-user-environment.drv'... created 6 symlinks in user environment unpacking channels... created 1 symlinks in user environment modifying /home/rebrain/.profile... modifying /home/rebrain/.zshrc... Installation finished! To ensure that the necessary environment variables are set, either log in again, or type . /home/rebrain/.nix-profile/etc/profile.d/nix.sh in your shell. Time: 0h:00m:16s
После перезахода в шелл:
nix --version
nix (Nix) 2.3.7
nix-channel --list
nixpkgs https://nixos.org/channels/nixpkgs-unstable
Принцип работы на других дистрибутивах с nix сохраняется прежним.
От редакции
Если вам интересно посещать бесплатные онлайн-мероприятия по DevOps, Kubernetes, Docker, GitlabCI и др. и задавать вопросы в режиме реального времени, подключайтесь к каналу DevOps by REBRAIN.
*Анонсы мероприятий каждую неделю
Практикумы для специалистов по инфраструктуре и разработчиков — https://rebrainme.com.
Наш Youtube-канал — https://www.youtube.com/channel/UC6uIx64IFKMVmj12gKtSgBQ.
Агентство Fevlake, проектируем и поддерживаем IT-инфраструктуры с 2012 года — https://fevlake.com.
Вам также может понравится
Автор - Александр Пряхин
Все! Хочу работать с высоконагруженными системами, - решили вы. Начинаю учиться.
Ну что ж, давайте попробуем. Разберем пошагово, какие этапы вам нужно пройти, чтобы стать специалистом по высоким нагрузкам.
Предположим, у нас есть проект. Сайт, который пропускает через себя за день очень много клиентов. Посмотрим,...
Как у любой методологии, у DevOps есть свои сторонники, а есть и критики. И как любая методология, DevOps не является чудесной таблеткой или серебряной пулей, которая способна по волшебству решить все ваши проблемы. У нее есть и преимущества, и некоторые недостатки. О них мы и поговорим.
Преимущества DevOps
Как мы помним, методология DevOps...