Notamock

Материал из Rosalab Wiki
Перейти к: навигация, поиск

Notamock - набор утилит создающих окружения для сборки rpm пакетов.

Частично пересекается по задачам с mock, отсюда и название.

  • notamock - утилита для запуска одиночного процесса локальной сборки проекта
  • notamocks - (+ s - множественное число) утилита для запуска локальной массовой сборки проектов с использованием notamock
  • notamockc - (+ c - от chroot) утилита для создания контейнеров аналогично тому как делает notamock, но запустить в нем можно любую команду, по умолчанию bash
  • notamockd - (+ в - от daemon) утилита для создания контейнеров для сборки с abf
  • notamocka - (+ a - от abf) скрипт запуска abf билдеров в контейнере, используется только внутри контейнера в отличии от остальных утилит находится в отдельном пакете notamock-abf

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

notamock

Скрипт в первую очередь предназначен для локальной сборки проектов с abf. Но может собрать и по src.rpm. Например для локальной пересборки текущей версии lsof можно использовать такие команды:

   dnf install abb notamock
   abb clone lsof
   cd lsof
   notamock

Первая сборка будет достаточно продолжительной, так как создается rootfs. Последующие сборки в том числе и других проектов, будут значительно быстрее. notamock как и остальные утилиты проекта имеет встроенный --help, кроме параметров в справке можно переопределить любое значение установленное в /etc/notamock.cfg в cmdline notamock, например:

   notamock BUILD_cmd="abb build -ba" RPMSAVE=yes

Наиболее полезные, на мой взгляд, опции:

  • -v - более подробный выхлоп
  • -r - сборка для платформы отличной от текущей, например: -r 2023.1
  • -e - остановка в сборочном контейнере перед запуском BUILD_cmd, можно править спек и запускать сборку с abb build. Полезно когда сборка падает. Два важных момента:
  1. не работает совместно с ключом -v
  2. измененный вами спек при выходе из этого режима (exit) не сохранится, но можно сделать копию спека с другим именем она сохранится.
  • RPMSAVE=yes - заставит сохранить все скачанные сборочные зависимости во внутренний репозиторий notamock. Этот репозиторий подключается всегда, но пакеты попадают в этот реп только при наличии RPMSAVE=yes. То есть достаточно добавить при сборке конкретного проекта один раз и для последующих сборок зависимости будут устанавливаться из локального репозитория.
  • REUSABLE=yes - заставит notamock использовать один и тот же контейнер с установленными BR для каждой сборки проекта. То есть это максимально быстрая сборка при работе над одним проектом. Важно:
  1. контейнер будет сброшен если запустить сборку без REUSABLE=yes
  2. контейнер будет сброшен если запустить сборку другого проекта
  • PM_config=/home/user/dnf.conf - сборка с подменой конфига пакетного менеджера

Более подробно в notamock --help и cat /etc/notamock.cfg. В notamock.cfg вынесено достаточно много настроек, например можно перевести сборку с dnf на yum только изменениями в этом конфиге.

notamocks

Утилита для локальных массбилдов с notamock. Сборки идут параллельно в несколько процессов. Для запуска массбилда вам нужен каталог в котором находятся папки с git проектами с abf.io или сделанными в том же формате. В простейшем виде достаточно запустить в этом каталоге:

   notamocks

Полезные опции:

  • -p - количество параллельно запускаемых сборок
  • -s - не собирать проекты, который уже собраны
  • -n или --chain сборка по цепочке, все что собралось за итерацию добавляется во временный реп и запускается следующая итерация с подключением этого репа, так до тех пор пока не соберется все.
  • -l -каталог для логов

Для notamocks тоже можно передавать параметры из конфига в формате КЛЮЧ=ЗНАЧЕНИЕ, а также ключи notamock, которые будут переданы в каждое сборочное задание notamock.

notamockd

Утилита собирает контейнеры для запуска в них builder-c. Это программа, которая забирает сборочные задания с abf и возвращает собранное. В отличии от mock notamock может в одном контейнере собирать несколько заданий, для того чтобы использовать такую возможность в пакет notamock-abf входят модифицированные для сборки с notamock сборочные скрипты.

Notamockd имеет два режима работы.

  1. Основной, notamockd создает контейнер и сразу запускает в нем необходимое количество билдеров.
  2. notamockd создает образ для docker, а контейнер запускает докер.