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

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

(Новая страница: «;{{SpeakerInfo}}: {{Speaker|Андрей Черепанов}} <blockquote> В докладе рассматриваются процедуры и программ…»)
 
;{{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

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

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

Видео

Презентация

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

\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 состоит из следующих этапов:


  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

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

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