Next: Поддержка SELinux, Previous: Установка окружения сборки, Up: Настройка демона [Contents][Index]
При желании демон сборки может offload производные сборки на других
машинах, на которых запущен Guix, используя offload
build
hook7. Когда
данная функция включена, список указанных пользователем машин для сборки
считывается из /etc/guix/machines.scm; каждый раз, когда
запрашивается сборка, например через guix build
, демон пытается
выгрузить ее на одну из машин, удовлетворяющих ограничениям производной
сборки, в частности, ее системным типам—например, x86_64-linux
. На
одной машине можеь быть несколько типов систем, либо потому, что архитектура
изначально поддерживает ее, либо через эмуляцию
(see Transparent Emulation with QEMU).
Отсутствующие необходимые условия для сборки копируются по SSH на целевой
компьютер, который затем продолжает сборку; в случает успеха выходные данные
копируются на исходную машину. Средство разгрузки поставляется с базовым
планировщиком, который пытается выбрать лучшую машину. Лучшая машина
выбирается среди доступных машин на основании такиз критериев как:
parallel-builds
определения объекта build-machine
.
speed
определения
объекта build-machine
.
overload-threshold
объекта build-machine
.
Файл /etc/guix/machines.scm обычно выглядит так:
(list (build-machine (name "eightysix.example.org") (systems (list "x86_64-linux" "i686-linux")) (host-key "ssh-ed25519 AAAAC3Nza…") (user "bob") (speed 2.)) ;incredibly fast! (build-machine (name "armeight.example.org") (systems (list "aarch64-linux")) (host-key "ssh-rsa AAAAB3Nza…") (user "alice") ;; Remember 'guix offload' is spawned by ;; 'guix-daemon' as root. (private-key "/root/.ssh/identity-for-guix")))
В примере выше мы обозначили список, состоящий из двух машин: одна — для
архитектуры x86_64
, а другая — для архитектуры mips64el
.
По факту, этот файл, что не удивительно, является файлом Scheme, и он имеет
значение, когда запускается хук разгрузки
. Он возвращает объекты
класса build-machine
. Приведённый пример показывает фиксированный
список машин для сборки, но можно представить, скажем, используя DNS-SD, он
может возвращать список потенциальных машин, обнаруженных в локальной сети
(see Guile-Avahi in Using Avahi in Guile Scheme
Programs). Тип данных build-machine
описан ниже.
Этот тип данных представляет машины для сборки, на которые демон может разгружать сборки. Важные поля:
name
Имя хоста удалённой машины.
systems
Тип системы удалённой машины, то есть x86_64-linux
.
user
Аккаунт пользователя, используемый для соединения с удалённой машиной через SSH. Отметим, что ключ-пара SSH не должна быть защищена парольной фразой, чтобы разрешить не интерактивные авторизации.
host-key
Это публичный ключ хоста в формает OpenSSH. Он используется при аутентификации машины, когда мы подсоединяемс к ней. Это длинная строка, которая выглядит примерно так:
ssh-ed25519 AAAAC3NzaC…mde+UhL hint@example.org
Если на машине запущен демон OpenSSH sshd
, ключ хоста может быть
найден в файле под директорией /etc/ssh, например,
/etc/ssh/ssh_host_ed25519_key.pub.
Если на машине запущен демон SSH GNU lsh, lshd
, тогда ключ
хоста расположен в /etc/lsh/host-key.pub или подобном файле. Его
можно конвертировать в формат OpenSSH, используя lsh-export-key
(see Converting keys in LSH Manual):
$ lsh-export-key --openssh < /etc/lsh/host-key.pub ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV…
Список необязательных полей:
port
(default: 22
)Номер порта сервера SSH на машине.
private-key
(default: ~root/.ssh/id_rsa)Файл приватного ключа в формате OpenSSH, используемого в соединении с машиной. Этот ключ не должен быть защищён парольной фразой.
Отметим, что значение по умолчанию — приватный ключ аккаунта root. Убедитесь, что он существует, если вы используете настройки по умолчанию.
compression
(default: "zlib@openssh.com,zlib"
)compression-level
(default: 3
)Методы компрессии уровня SSH и уровень компрессии.
Отметим, что разгрузка зависит от компрессии SSH, что уменьшает использование траффика при передаче файлов на и с машин для сборки.
daemon-socket
(default: "/var/guix/daemon-socket/socket"
)Имя файла сокета Unix-домена, который слушает guix-daemon
на
удалённой машине.
port
(default: 22
)Порог нагрузки, выше которого потенциальная offload машина не учитывается
offload планировщиком. Это значение примерно соответствует общему
использованию процессора машиной сборки в диапазоне от 0,0 (0%) до 1,0
(100%). Это также можно отключить, установив overload-threshold
в
#f
.
parallel-builds
(default: 1
)Число сборок, которые могут быть запущены на машине.
speed
(default: 1.0
)Показатель скорости. Планировщик разгрузки предпримет попытку выбрать машину с наибольшим показателем скорости.
features
(default: '()
)Набор строк, описывающий специфические функции, которые поддерживаются на
машине. Например, "kvm"
для машин, которые имеют модули Linux KVM и
соответствующую поддерку аппаратного обеспечения. Деривации могут
запрашивать функции по имени, и тогда они будут запранированы на
соответствующих машинах для сборки.
Команда guix
должна быть в путях для поиска на машинах лоя
сборки. Можно проверить это, выполнив:
ssh build-machine guix repl --version
Есть ещё одна вещь, которую нужно выполнить после размещения machines.scm. Выше описано, что при разгрузке файлы передаются вперёд и назад между складами на машинах. Для этого необходимо сгенерировать ключ-пару на кадой машине, чтобы позволить демону экспортировать подписанные архивы файлов из склада (see Вызов guix archive):
# guix archive --generate-key
Каждая машина для сорки должна авторизовать ключ машины-инициатора, чтобы принимать элементы из склада, которые присылает инициатор:
# guix archive --authorize < master-public-key.txt
Точно так же машина-инициатор должна авторизовать ключ каждой машины для сборки.
Всё движение с ключами, описанное здесь, создаёт надёжную двустороннюю свзь между инициатором и машинами для сборки. А именно, когда машина-инициатор принимает файлы из машины для сборки (или наборот), её демон может удостоверить их подлинность и невмешательство других, а также то, что они подписаны авторизованным ключом.
Чтобы проверить работоспособность настроек, запустите следующую команду на инициирующем узле:
# guix offload test
Это выполнит попытку соединиться с каждой из машин для сборки, обозначенных в /etc/guix/machines.scm, проверит наличие модулей Guile и Guix на каждой машине, а также сделает попытку экспортировать и импортировать, а затем выведет отчёт об этом процессе.
Если нужно тестировать другой файл с описанием машин, просто приведите его в командной строке:
# guix offload test machines-qualif.scm
И последнее, можно тестировать набор машин, чьи имена соответствуют регулярному выражению, например:
# guix offload test machines.scm '\.gnu\.org$'
Чтобы отобразить текущую загрузку всех машин для сборки, запустите команду на инициирущем узле:
# guix offload status
Next: Поддержка SELinux, Previous: Установка окружения сборки, Up: Настройка демона [Contents][Index]