Next: Использование функционала разгрузки, Up: Настройка демона [Contents][Index]
В случае стандартной многопользовательской установки Guix и его демон
(программа guix-daemon
) установливаются системным администратором;
/gnu/store принадлежит root
, и guix-daemon
запущен
от root
. Непривилегированные пользователи могут пользоваться
инструментами Guix, чтобы собирать пакеты или получить доступ к складу с
какой-либо целью, и демон выполнит это по их запросу, убедившись, что склад
находится в должном состоянии, и разрешив сборку пакетов и разделение их
между пользователями.
Когда guix-daemon
запущен от root
, возможно, из соображений
безопасности вы не примете того, что процессы сборки пакетов тоже
выполняются от root
. Чтобы избежать этого, необходимо создать
специальных пользователей для сборки. Ими будет пользоваться процесс
сборки, запускаемый демоном. Эти пользователи сборки не должны иметь
оболочки и домашней директории — они просто будут использоваться, когда
демон сбрасывает привилегии root
в процессе сборки. Наличие
нескольких таких пользователей позволит демону запускать отдельные процессы
сборки под отдельными UID, что гарантирует, что они не будут помехой друг
другу — важная особенность, учитывая, что сборка рассматривается как
чистая функция (see Введение).
В системе GNU/Linux набор пользователей для сборки может быть создан так
(используя синтаксис команды Bash shadow
):
# groupadd --system guixbuild # for i in `seq -w 1 10`; do useradd -g guixbuild -G guixbuild \ -d /var/empty -s `which nologin` \ -c "Guix build user $i" --system \ guixbuilder$i; done
Число пользователей для сборки определяет, сколько задач сборки может быть
запущено параллельно. Это задаётся опцией --max-jobs
(see --max-jobs). Чтобы использовать
guix system vm
и подобные, вам потребуется добавить пользователей
для сборки в группу kvm
, так чтобы они имели доступ к
/dev/kvm, используя -G guixbuild,kvm
вместо -G
guixbuild
(see Invoking guix system
).
The guix-daemon
program may then be run as root
with the
following command6:
# guix-daemon --build-users-group=guixbuild
Так демон стартует процессы сборки в chroot под одним из пользователей
группы guixbuilder
. В GNU/Linux по умолчанию окружение chroot
содержит только следующее:
/dev
, созданной максимально независимо
от исходной /dev
7;
/proc
; она показывает только процессы контейнера, так как
используется отдельное пространство имён процессов PID;
localhost
на
127.0.0.1
;
The chroot does not contain a /home directory, and the HOME
environment variable is set to the non-existent /homeless-shelter.
This helps to highlight inappropriate uses of HOME
in the build
scripts of packages.
Можно указать директорию, в которую демон сохраняет деревья сборки через
переменную окружения TMPDIR
. Однако дерево сборки внутри chroot
всегда называется /tmp/guix-build-name.drv-0, где name -
это имя деривации, то есть, например, coreutils-8.24
. Так значение
TMPDIR
не проникает внутрь окружения сборки, что предотвращает
расхождения и случаях, когда процессы сборки имеют иные имена их деревьев
сборки.
Демон также уважаем переменную окружения http_proxy
, когда выполняет
скачивание по HTTP как для дериваций с фиксированным результатом
(see Деривации), так и для подстановок (see Подстановки).
Если вы устанавливаете Guix как непривилегированный пользователь, всё ещё
возможно запустить guix-daemon
с указанием
--disable-chroot
. Однако процессы сборки не будут изолированы один от
другого, а также от остальной системы. Так процессы сборки смогут внести
помехи в работу друг друга, смогут получить доступ к программам, библиотекам
и другим файлам, доступным в системе, что конечно, делает затруднительным
рассмотрение сборки как чистой функции.
If your machine uses the systemd init system,
copying the prefix/lib/systemd/system/guix-daemon.service file
to /etc/systemd/system will ensure that guix-daemon
is
automatically started. Similarly, if your machine uses the Upstart init
system, copy the prefix/lib/upstart/system/guix-daemon.conf
file to /etc/init.
"Максимально", потому что файлы, доступные
в chroot под /dev
, могут быть созданы только, если машина их имеет
Next: Использование функционала разгрузки, Up: Настройка демона [Contents][Index]