Next: , Up: Управление пакетами   [Contents][Index]


4.1 Особенности

При использовании Guix каждый пакет после установки размещается в package store, в собственной директории, например, /gnu/store/xxx-package-1.2, где xxx - это строка base32.

Вместо того, чтобы ссылаться на эти директории, пользователям нужно обращаться к их профилям, профиль указывает на пакеты, которые они хотят использовать. Эти профили хранятся в домашней директории каждого пользователя в $HOME/.guix-profile.

Например, alice устанавливает GCC 4.7.2. В результате /home/alice/.guix-profile/bin/gcc указывает на /gnu/store/…-gcc-4.7.2/bin/gcc. Допустим, на той же машине bob установил GCC 4.8.0. Профиль пользователя bob просто указывает на /gnu/store/…-gcc-4.8.0/bin/gcc. То есть обе версии GCC присутствуют в одной системе без помех.

Команда guix package — главный инструмент для управления пакетами (see Вызов guix package). Она работает с профилями пользователей, которые имеют права обычных пользователей.

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

В дополнение, каждую транзакцию, которая работает с пакетами, можно откатить. Так если, например, обновление устанавливает новую версию пакета, которая имеет серьёзный баг, пользователи могут откатиться до предыдущей инстанции своего профиля, который работал нормально. Точно так же, глобальные настройки системы Guix являются объектом транзакционных обновлений и откатов (see Использование системы конфигурации).

Все пакеты на складе могут быть собраны как мусор. Guix может определить, какие пакеты всё ещё используются профилями пользователей, и удалить те, которые однозначно больше не используются (see Вызов guix gc). Также пользователи могут явно удалить старые поколения (generations) их профилей, поэтому пакеты, на которые ссылались старые профили, могут быть удалены.

Guix реализует чисто функциональный подход к управлению пакетами, как описано во введении (see Введение). В /gnu/store имя директории каждого пакета содержит хеш всех входных данных, которые использовались при сборке пакета: компилятор, библиотеки, скрипты сборки и т.д. Это прямое соответствие позволяет пользователям убедиться, что данная установка пакета соответствует текущему состоянию дистрибутива. Также это помогает улучшить воспроизводимость сборки: благодаря изолированному окружению сборки, которая используется при установке пакета, результат сборки содержит точно такие же файлы на разных машинах (see container).

Эта концепция позволяет Guix поддерживать прозрачное внедрение бинарников/исходников. Когда доступен элемент /gnu/store, собранный заранее на внешнем источнике, то есть готова подстановка, Guix просто скачивает и распаковывает его. В противном случае он собирает пакет из исходников на локальной машине (see Подстановки). Так как результаты сборки обычно воспроизводимы бит-к-биту, пользователи не должны доверять серверам, которые поставляют подстановки — они могут целенаправленно запросить локальную сборку и не пользоваться серверами подстановки (see Запуск guix challenge).

Управление окружением сборки — функция, которая полезна для разработчиков. Команда guix environment позволяет разработчикам пакетов быстро установить требуемое окружение разработки без необходимости устанавливать в свой профиль зависимости пакета вручную (see Запуск guix environment).

Guix и его определения пакетов подчняются контролю версиями, и guix pull позволяет "путешествовать во времени" по истории Guix (see Запуск guix pull). Это позволяет повторять инстанцию Guix на разных машинах или по прошествию времени, что в свою очередь позволяет вам повторять полностью программное окружение из достпуных трекеров источников программного обеспечения.


Next: , Up: Управление пакетами   [Contents][Index]