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
завершился во время транзакции, или
произошёл сбой питания во время транзакции, тогда профиль пользователя
остаётся в исходном состоянии, готовом к использованию.
In addition, any package transaction may be rolled back. So, if, for example, an upgrade installs a new version of a package that turns out to have a serious bug, users may roll back to the previous instance of their profile, which was known to work well. Similarly, the global system configuration on Guix is subject to transactional upgrades and roll-back (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]