Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017)
Материал из 0x1.tv
- Докладчик
- Андрей Черепанов
В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности пакетов в рамках репозитория Sisyphus.
Содержание
Видео
Презентация
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 состоит из следующих этапов:
- сохранение ссылки на апстримный репозиторий Git: gear-remo\-tes-save;
- возможное исправление фильтрования и преобразования тегов;
- вызов gear-remotes-watch для поиска нового тега;
- вызов 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:37 Comments:0