Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) (Новая страница: «;{{SpeakerInfo}}: {{Speaker|Андрей Черепанов}} <blockquote> В докладе рассматриваются процедуры и программ…») |
StasFomin (обсуждение | вклад) |
||
;{{SpeakerInfo}}: {{Speaker|Андрей Черепанов}}
<blockquote>
В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности пакетов в рамках репозитория Sisyphus.
</blockquote>
{{VideoSection}}
{{vimeoembed||800|450}}
<!-- {{youtubelink|}} -->
{{SlidesSection}}
[[File:Процедуры и программные средства, упрощающие сборку и сопровождение пакетов (Андрей Черепанов, OSSDEVCONF-2017).pdf|left|page=-|300px]]
{{----}}
== Thesis ==
\title{Процедуры и программные средства, упрощающие сборку и сопровождение пакетов}
\author{Андрей Черепанов}
\city{Москва}
\affiliation{ООО «Базальт СПО»}
\projecttitle{Sisyphus}
\projecturl{altlinux.org} \maketitle
\begin{abstract}
В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности
пакетов в рамках репозитория Sisyphus
\end{abstract}
При сопровождении большой пакетной базы, которым является репозиторий Sisyphus, для каждого мейнтейнера становятся
важными следующие факторы:
* упрощение сборки новых пакетов;
* единообразие типовых файлов .spec (спеков);
* снижение рисков ошибок при написании спеков;
* снижение трудозатрат для создания и сопровождения своих пакетов.
Для решения этих задач были созданы различные инструменты, облегчающие сопровождение пакетов.
=== Сборка новых пакетов ===
Для создания спеков по типовым шаблонам был написан простой скрипт <tt>genspec</tt> на Python с шаблонами для обычного
пакета со сборкой на autotools (configure;make;make install), noarch (для скриптов), модулей Python, Ruby и Java (со
сборкой посредством Maven). В отличие от специализированных скриптов (типа gem2spec) было выбрано создание
универсального решения.
Изначально все параметры нужно было указывать в параметрах командной строки:
<pre>
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."
</pre>
Позднее скрипт стал работать в том числе и в интерактивном режиме, запрашивая у пользователя поля подстановки. Наличие
стандартизованного API у github.com, на котором расположены огромное количество свободных проектов (особенно это
касается модулей Ruby), привело к созданию скрипта <tt>github2spec</tt>, который может брать сам код и метаданные для
заполнения спека, преобразовывать в gear-репозиторий и добавлять заполненный спек:
<pre>
github2spec -u https://github.com/cryptosphere/rbnacl
</pre>
После этого достаточно закоммитить изменения и отправить на сборку.
=== Обновление пакетов ===
Отслеживание новой версии пакета может осуществляться как традиционным способом — через файл .watch (в стиле Debian),
так и современным способом — через отслеживание новых тегов в апстримных репозиториях Git
([https://www.altlinux.org/Gear/remotes]). Обновление пакета с помощью файла .watch осуществляется командой
<tt>rpm-uscan</tt>, которая не только скачает архив с новой версией, но и правильно обновит gear-репозиторий и спек.
Использование утилит gear-remotes* из пакета <tt>perl-Gear-Remotes</tt> состоит из следующих этапов:
# сохранение ссылки на апстримный репозиторий Git: <tt>gear-remo\-tes-save</tt>;
# возможное исправление фильтрования и преобразования тегов;
# вызов <tt>gear-remotes-watch</tt> для поиска нового тега;
# вызов <tt>gear-remotes-</tt><tt>uscan</tt> для собственно сборки новой версии в текущем gear-репозитории.
=== Пересборка пакетов ===
Ещё одной достаточно трудоёмкой задачей становится массовая пересборка пакетов при обновлении системообразующих тулкитов
и библиотек. Например, для обновления версии Ruby потребовалось пересобрать более 80 пакетов. Для массовой пересборки
пакетов потребовалось всего лишь для каждого пакета склонировать и обновить gear-репозиторий с
[https://git.altlinux.org] и воспользоваться утилитой <tt>srpmnmu</tt> из пакета <tt>perl-RPM-Source-Editor</tt>:
<pre>
srpmnmu -i "$(gear-rules-print-specfile)" \
-ch "- Rebuild with Ruby 2.4.1" \
--nextrel nmuadd
</pre>
после чего закоммитить, установить тег и добавить в общее задание на пересборку.
{{LinksSection}}
<!-- <blockquote>[©]</blockquote> -->
<references/>
[[Категория:OSSDEVCONF-2017]] |
Версия 18:45, 3 октября 2017
- Докладчик
- Андрей Черепанов
В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности пакетов в рамках репозитория Sisyphus.
Содержание
Видео
Презентация
Thesis
\title{Процедуры и программные средства, упрощающие сборку и сопровождение пакетов} \author{Андрей Черепанов} \city{Москва} \affiliation{ООО «Базальт СПО»} \projecttitle{Sisyphus} \projecturl{altlinux.org} \maketitle
\begin{abstract} В докладе рассматриваются процедуры и программные средства, снижающие трудозатраты по сборке и поддержки актуальности пакетов в рамках репозитория Sisyphus \end{abstract}
При сопровождении большой пакетной базы, которым является репозиторий 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
после чего закоммитить, установить тег и добавить в общее задание на пересборку.