Next: Вызов guix package, Up: Управление пакетами [Contents][Index]
Здесь мы предполагаем, что вы уже сделали свои первые шаги с Guix (see Начиная) и хотели бы получить обзор того, что происходит под капотом.
При использовании 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).
Control over the build environment is a feature that is also useful for
developers. The guix shell
command allows developers of a package
to quickly set up the right development environment for their package,
without having to manually install the dependencies of the package into
their profile (see Запуск guix shell).
Guix и его определения пакетов подчняются контролю версиями, и guix
pull
позволяет "путешествовать во времени" по истории Guix (see Запуск guix pull). Это позволяет повторять инстанцию Guix на разных машинах или по
прошествию времени, что в свою очередь позволяет вам повторять
полностью программное окружение из достпуных трекеров источников
программного обеспечения.
Next: Вызов guix package, Up: Управление пакетами [Contents][Index]