Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017)

Материал из 0x1.tv

Докладчик
Андрей Черепанов.jpg
Андрей Черепанов

В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности пакетов в рамках репозитория Sisyphus.

Видео

on youtube


Презентация

Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf

Thesis

При сопровождении большой пакетной базы, которым является репозиторий Sisyphus, для каждого мейнтейнера становятся важными следующие факторы:

  • упрощение сборки новых пакетов;
  • единообразие типовых файлов .spec (спеков);
  • снижение рисков ошибок при написании спеков;
  • снижение трудозатрат для создания и сопровождения своих пакетов.

Для решения этих задач были созданы различные инструменты, облегчающие сопровождение пакетов.

Сборка новых пакетов

Для создания спеков по типовым шаблонам был написан простой скрипт genspec на Python с шаблонами для обычного пакета со сборкой на autotools (configure;make;make install), noarch (для скриптов), модулей Python, Ruby и Java (со сборкой посредством Maven). В отличие от специализированных скриптов (типа gem2spec) было выбрано создание универсального решения.

Изначально все параметры нужно было указывать в параметрах командной строки:

genspec \ 
-t python \ 
-n aeroolib \ 
-v 1.0.0 \ 
-s "Low level python library for Aeroo Reports" \ 
-l 'GPLv3' \ 
-u 'https://github.com/aeroo/aeroolib' \ 
-c '- Initial build in Sisyphus' \ 
-d "Low level python library for Aeroo Reports."

Позднее скрипт стал работать в том числе и в интерактивном режиме, запрашивая у пользователя поля подстановки. Наличие стандартизованного API у github.com, на котором расположены огромное количество свободных проектов (особенно это касается модулей Ruby), привело к созданию скрипта github2spec, который может брать сам код и метаданные для заполнения спека, преобразовывать в gear-репозиторий и добавлять заполненный спек:

github2spec -u https://github.com/cryptosphere/rbnacl

После этого достаточно закоммитить изменения и отправить на сборку.

Обновление пакетов

Отслеживание новой версии пакета может осуществляться как традиционным способом — через файл .watch (в стиле Debian), так и современным способом — через отслеживание новых тегов в апстримных репозиториях Git ([1]). Обновление пакета с помощью файла .watch осуществляется командой rpm-uscan, которая не только скачает архив с новой версией, но и правильно обновит gear-репозиторий и спек.

Использование утилит gear-remotes* из пакета perl-Gear-Remotes состоит из следующих этапов:


  1. сохранение ссылки на апстримный репозиторий Git: gear-remo\-tes-save;
  2. возможное исправление фильтрования и преобразования тегов;
  3. вызов gear-remotes-watch для поиска нового тега;
  4. вызов gear-remotes-uscan для собственно сборки новой версии в текущем gear-репозитории.

Пересборка пакетов

Ещё одной достаточно трудоёмкой задачей становится массовая пересборка пакетов при обновлении системообразующих тулкитов и библиотек. Например, для обновления версии Ruby потребовалось пересобрать более 80 пакетов. Для массовой пересборки пакетов потребовалось всего лишь для каждого пакета склонировать и обновить gear-репозиторий с [2] и воспользоваться утилитой srpmnmu из пакета perl-RPM-Source-Editor:

srpmnmu -i "$(gear-rules-print-specfile)" \
  -ch "- Rebuild with Ruby 2.4.1" \
  --nextrel nmuadd

после чего закоммитить, установить тег и добавить в общее задание на пересборку.

Примечания и ссылки

Plays:3   Comments:0