GNU Guix в вычислительной системе ИМИТ
На рабочих станциях вычислительной системы ИМИТ и на сервере kappa установлен пакетный менеджер GNU Guix («Гикс»).
Возможности:
- индивидуальные профили пользователей;
- атомарные обновления с возможностью отката к предыдущим состояниям;
- создание временных окружений и контейнеров с требуемым ПО;
- побитово воспроизводимые сборки (собранный пакет можно проверить на соответствие исходному коду);
- работа с исходным кодом + кэширование результатов сборки (пакет идентифицируется хэш-кодом от его конфигурации и всех зависимостей);
- позволяет генерировать docker-контейнеры, образы виртуальных машин и самодостаточные переносимые tar-архивы с нужным ПО и всеми его зависимостями;
- работает поверх любого дистрибутива с достаточно новой версией ядра Linux (все остальное свое, начиная с glibc, и размещается в отдельном дереве каталогов), также доступен собственный дистрибутив;
- Дистрибутив Guix позволяет полностью воспроизводить систему из декларативного описания конфигурации или применять новую версию конфигурации к работающей системе с возможностью возврата к прошлым состояниям;
- предметно-ориентированный язык для описания пакетов и конфигурации системы на основе Guile, описания пакетов являются ссылающимися друг на друга объектами, которые конструируются программно, можно выполнять преобразования над графом пакетов.
Guix используется различными научными организациями (включая Институт исследований в информатике и автоматике INRIA, Центр молекулярной медицины имени Макса Дельбрюка, Центр биоинформатики Ультрехта) для создания воспроизводимых программных окружений для исследовательских проектов.
Работа с Guix в системе ИМИТ
- Документация (русский, английский)
- GNU Guix Cookbook
- Локальная копия документации доступна в справочной системе info, для
просмотра —
командаinfo guix
илиC-h i m guix
в Emacs.
Пользователи могут создавать свои профили пакетов и устанавливать туда желаемое ПО. Например, команда
guix install hello
установит программу hello
в профиль пользователя по умолчанию
~/.guix-profile
.
В системе размещен скрипт, который при входе в систему устанавливает
переменные окружения для работы с ПО из системного и пользовательского
профилей. После инициализации профиля пользователя или добавления
пакетов, требующих установки дополнительных переменных окружения,
нужно сделать это вручную или выполнить повторный вход в систему
(команда guix install
сообщит об этом).
В текущей конфигурации профили размещены локально (пакет будет установлен только на одном компьютере). Для синхронизации состояния профилей пользователей можно использовать манифесты (описания профилей).
Можно создавать временные окружения и изолированные контейнеры с требуемым ПО, например:
$ gcc --version # GCC из openSUSE gcc (SUSE Linux) 7.5.0... $ guix shell gcc-toolchain@11 # создание окружения $ gcc --version # GCC из нового окружения gcc (GCC) 11.2.0... $ exit # возврат из окружения
См. документацию по использованию guix shell
.
Код пакетного менеджера и определения пакетов (кроме добавленных
локально) размещены в гит-репозитории проекта. Команда guix pull
получает последнюю версию из репозитория, собирает и размещает
обновленный Guix в профиле ~/.config/guix/current
. Таким образом у
каждого пользователя может быть своя версия (доступные пакеты и их
версии определяются версией Guix).
По умолчанию используется версия Guix из профиля пользователя root,
который периодически обновляется, так что необходимости выполнять
guix pull
для каждого пользователя нет.
После обновления Guix можно обновить и пакеты в профиле пользователя:
guix upgrade
Посмотреть историю изменений профиля:
guix package -l
И историю установленных пользователем версий Guix:
guix pull -l
Удалить старые версии профиля можно с помощью guix package -d
.
Сборки пакетов удаляются из хранилища сборщиком мусора (guix gc
),
если на них не ссылаются (непосредственно или через зависимости)
никакие профили. Старые неактивные поколения профилей периодически
удаляются.
Для поиска пакетов доступна команда guix search
.
Помимо командного интерфейса есть еще интерфейс на основе Emacs
(M-x guix-about
). Его удобно использовать для поиска пакетов (M-x
guix-packages-by-name
, M-x guix-all-packages
) и просмотра
информации о них. Также можно быстро найти определение пакета в
исходном коде (M-x guix-edit
) и экспериментировать с Guix в
интерактивной среде программирования REPL.
Установленное ПО
Сейчас в общий для всех пользователей системный профиль установлено:
- Emacs с различными дополнениями.
- Для курса «Функциональное программирование»: Racket, Guile и книга «Structure and interpretation of computer programs» в формате справочной системы info.
- Преобразователь документов Pandoc.
- Tectonic — альтернативный модернизированный дистрибутив TeX/LaTeX.
Виртуальная машина для студентов
На базе Guix предоставляется готовый образ виртуальной машины, который можно запустить в программе виртуализации VirtualBox и использовать для выполнения лабораторных работ на собственном компьютере без необходимости самостоятельно устанавливать и настраивать ОС и требуемое программное обеспечение.
Инфраструктура
Под управлением дистрибутива Guix работает виртуальная машина guix.cs.prv, которая предоставляет остальным компьютерам подстановки (готовые бинарные сборки) для нужных пакетов в дополнение к официальным серверам. Если готовая сборка пакета не доступна на серверах подстановок, пакет будет локально собираться из исходных кодов.