Автоматическая сборка и модификация образа Клевера

Иногда возникает необходимость в сборке модифицированного образа системы, например для своего проектаopen in new window на базе Клевераopen in new window. За основу можно взять, например, чистый образ Raspbian Stretch и модифицировать его с нуля, пройдя те же этапы, через который проходит сборка образа Клевера, добавив свои модификации. Однако на данный момент времени сборка образа Клевера занимает чуть больше часаopen in new window, что превышает ограничения бесплатной сборки в Travis (50 минут). Соответственно для проектов на базе Клевера имеет смысл брать за основу уже готовый образ и кастомизировать его. Концепция и основные этапы для автоматизированной сборки изложены ниже.

Концепция

Имеется Dockeropen in new window образ, который содержит инструментарий для выполнения скриптов, копирования файлов и увеличения/сжатия размера образа системы на требуемой платформе для сборки (например сборка для Raspberry Pi 3 осуществляется через qemu-arm-static, пример Docker образа для сборки находится здесьopen in new window). При запуске Docker образа выполняется скрипт builder/image-build.sh, в котором описан процесс сборки (например скачивание опорного образа - увеличение свободного места на образе - установка необходимого софта - сжатие образа), в результате которого создаётся файл образа системы. Триггер сборки, запуск Docker образа для сборки, выкладка образа осуществляется с помощью CI (continuous integration) системы Travisopen in new window.

Добавление скриптов сборки

  1. Для осуществления сборки образа добавьте в свой проект build скрипты, модифицирующие исходный образ. За основу можно взять скрипты из репозитория Клевера (папка builderopen in new window) или из репозитория шоу дронов на основе Клеверов (тоже папка builderopen in new window). Опорный скрипт, который исполняется безусловно Docker образом в этих проектах - builder/image-build.sh.
  2. Для автоматического запуска сборки в облаке добавьте в свой проект .travis.yml файл, описывающий последовательность этапов выполнения сборки и правила для выкладки образов. Примерopen in new window из репозитория Клевера, примерopen in new window из репозитория шоу дронов. Документация по составлению .travis.yml файла находится здесьopen in new window.

Настройка инструмента сборки travis-ci.comopen in new window

  1. Войдите в Travisopen in new window через свой GitHub аккаунт.
  2. Проверьте, что файл .travis.yml добавлен правильно: выберите свой проект, нажмите Trigger build из выпадающего меню справа сверху. Сборка должна начаться и успешно завершиться через некоторое время, если всё правильно.
  3. Настройте проект. Основные настройки можно оставить по умолчанию. Если необходимы ключи авторизации (токены) для доступа к репозиторию (например для того, чтобы выложить образ прикреплённым файлом в релиз), нужно сгенерировать их в своём аккаунте и добавить под названием переменной, которая используется для передачи токена.

Запуск сборки в облаке travis-ci.comopen in new window

По умолчанию скрипт сборки из .travis.yml файла выполняется автоматически при любом изменении GitHub репозитория. Есть возможность добавить скрипты, которые будут выполняться только при создании релиза (публикации тега), пример здесьopen in new window.

Запуск сборки на локальной машине

Если есть необходимость собрать образ быстрее, чем в облаке, или поэкспериментировать со сборкой локально, можно запустить Docker образ на локальной машине. Для этого необходимо в консоли перейти в папку с репозиторием, где прописаны скрипты автоматической сборки, и запустить оттуда Docker, например (подробнее здесьopen in new window):

cd repo-w-instructions

docker run --privileged -it --rm -v /dev:/dev -v $(pwd):/mnt goldarte/img-tool:v0.5

Пример запуска автоматической сборки образа из форка репозитория шоу дронов

  • Сделайте форк репозиторияopen in new window:

  • Склонируйте репозиторий к себе на компьютер:

    git clone <адрес репозитория>
    
  • Зайдите на travis-ci.orgopen in new window под своим аккаунтом GitHub.

  • Выберите среди проектов форк репозитория шоу дронов и запустите тестовую сборку, нажав Trigger build из выпадающего меню:

  • Проверьте, что сборка запустилась:

  • Добавьте ключ аутентификации к вашему репозиторию для прикрепления файла образа к релизу. Зайдите в настройки токеновopen in new window своего аккаунта и сгенерируйте новый токен для доступа к вашему репозиторию:

  • Скопируйте получившийся токен:

  • Перейдите в настройки сборки travis-ci.comopen in new window и добавьте скопированный токен под именем GITHUB_OAUTH_TOKEN:

  • В терминале перейдите в папку со скопированным репозиторием, создайте и опубликуйте тег для создания пре-релиза, автоматической сборки и выкладки образа на GitHub:

    git tag <имя тега>
    
    git push --tags
    
  • Дождитесь окончания сборки образа и проверьте раздел Releases в вашем репозитории:

  • Нажмите на кнопку Draft a new release и выпустите pre-releaseopen in new window или release собранного образа и исходным кодом: