Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, 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:49 Comments:0