Назначение

FirstBoot - модуль AccentOS, обеспечивающий установку и настройку программного обеспечения при первом запуске физического или виртуального сервера. Может быть также использован для обеспечения корректного запуска служб при последующих запусках.

Способ установки

Служба установки при работе использует Cobbler и файлы ответов.

Пример части файла ответов:

d-i preseed/late_command string wget -O- \
   http://$http_server/init/update_kernel | chroot /target /bin/sh -s; wget -O- \
   http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_late_default | \
   chroot /target /bin/sh -s; wget -O- \
   http://$http_server/cblr/svc/op/nopxe/$what/$name; wget -O- \
   http://$http_server/server | /bin/sh -s;

Команда, сохраненная в d-i preseed/late_command, запускается в самом конце запуска инсталлятора и предназначена для установки пользовательского программного обеспечения.

В данном примере производится обновление ядра, затем производится обращение к Cobbler с целью запуска скрипта preseed_late_default и снятия флага сетевой загрузки сервера, затем на стороне устанавливаемого сервера запускается скрипт http://$http_server/server (в данном случае), который устанавливает службу FirstBoot и скачивает необходимые скрипты-модули для установки программного обеспечения сервера при первом запуске. Server - файл-скрипт, размещенный на стороне Cobbler, в котором прописываются скрипты установки программного обеспечения.

Пример такого скрипта:

#!/bin/bash

http_server=cobbler.test.loc

wget -O-  http://$http_server/init/firstboot | chroot /target /bin/sh -s
wget -O /target/var/lib/firstboot/scripts/15-install.sh http://$http_server/init/rc-local
wget -O /target/var/lib/firstboot/scripts/05-initrc.source http://$http_server/init/initrc.controllerone
wget -O /target/var/lib/firstboot/scripts/20-install_bind9.sh http://$http_server/init/install_bind9
wget -O /target/var/lib/firstboot/scripts/20-install_ntp.sh http://$http_server/init/install_ntp
wget -O /target/var/lib/firstboot/scripts/20-install_update-dns.sh http://$http_server/init/install_update-dns
wget -O /target/var/lib/firstboot/scripts/25-install_consul.sh http://$http_server/init/install_consul
wget -O /target/var/lib/firstboot/scripts/25-install_openstackclient.sh http://$http_server/init/install_openstackclient
wget -O /target/var/lib/firstboot/scripts/45-install_nova-compute.sh http://$http_server/init/install_nova-compute
wget -O /target/var/lib/firstboot/scripts/40-install_neutron-compute.sh http://$http_server/init/install_neutron-compute
wget -O /target/var/lib/firstboot/scripts/80-install_install_vm_controllerdb.sh http://$http_server/init/install_vm_controllerdb
wget -O /target/var/lib/firstboot/scripts/50-install_ceilometer-compute.sh http://$http_server/init/install_ceilometer-compute
wget -O /target/var/lib/firstboot/scripts/90-correct_nova_shell.sh http://$http_server/init/correct_nova_shell

Скрипт http://$http_server/server скачивает с сервера Cobbler (или иного сервера) скрипт модули и сохраняет их с цифровым префиксом для обеспечения требуемого порядка запуска. Путь для сохранения имеет префикс /target, так как данный скрипт выполняется в окружении инсталлятора дистрибутива, и файловая система устанавливаемого сервера смонтирована в каталог /target. Пути хранения исходных скриптов могут быть в дальнейшем изменены для создания соответствующей иерархии каталогов для установки различных дистрибутивов и их версий.

Первый скачиваемый скрипт запускается сразу после загрузки. Именно данный скрипт создает службу FirstBoot и формирует необходимую иерархию каталогов для данной службы. Порядок загрузки других скриптов не важен, но следует обратить внимание на цифровой префикс имен сохраняемых скриптов с целью обеспечения необходимого приоритета их выполнения службой FirstBoot.

Необходимо настроить файлы с переменными initrc и openrc.

Все переменные для настройки облака указываются в файле openrc.

Описание работы службы FirstBoot

Служба FirstBoot - это bash скрипт, который при первом запуске сортирует скрипты в каталоге /var/lib/firstboot/scripts по имени и запускает их. Для простоты восприятия имена скриптов начинаются с чисел.

Скрипты делятся на два типа: скрипты определение переменных и установочные скрипты. Для определения переменных скрипты должны иметь суффикс .source, вызов данных скриптов производится через команду source. Остальные скрипты запускаются через вызов /bin/bash вне зависимости от расширения.

Вывод работы скриптов сохраняется в файл /var/log/firstboot или journalctl -u firstboot.

Окончание работы первого запуска службы завершается созданием файла /var/lib/firstboot/onstart. С помощью удаления данного файла можно протестировать работу службы повторно.

Наличие файла /var/lib/firstboot/onstart сигнализирует службе FirstBoot, что осуществляется повторный, а не первичный запуск сервера, и служба запускает скрипты из каталога /var/lib/firstboot/boot. Данный режим является удобным, если процесс запуска службы является сложным: использующим таймауты или иные условия запуска того или иного сервиса, но при этом нежелательные к размещению в файлах systemd, например, для оперативного перазапуска в процессе работы сервера.