GearRepo

Материал из ALT Linux Wiki
ALT-review logo.png
[[Annotation::GearRepo - это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них бинарные RPM-пакеты и формировать APT-репозитории]]

Автор: Author::ALT Club   Раздел: Section::технологии   Выпуск: Issue::pilot   Тег: Tag::сборка

Alt Club.png
Alt linux team.png

GearRepo

GearRepo - это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них бинарные RPM-пакеты и формировать APT-репозитории, пригодные для использования в дистрибутивах на базе стабильных бранчей ALTLinux и/или нестабильной ветки Sisyphus.
На данный момент GearRepo находится в процессе разработки. Хочется привлечь текущих участников команды ALT к тестированию проекта и озвучиванию своих предложений и критики.

От первого лица

Здравствуйте, Владимир! В рамках подготовки роллинг-релиз журнала ALT-review хотелось бы задать Вам несколько вопросов относительно ресурса GearRepo и не только. На портале http://gear.truecrux.org есть пояснение о назначении ресурса, также там размещен практически исчерпывающий работу с ресурсом скринкаст. Однако, хотелось бы детальнее осветить создание этого ресурса и того,что с ним связано. Ниже приведены вопросы, однако хотелось бы оставить за собой право задать дополнительные позже (если такие появятся). Также сами ответы Вы сможете найти на вики a.o (в категории ALT-review) до анонса статьи и сообщить о необходимых корректировках.


         Torabora.jpg    Вопросы (Q): Михаил Радюк torabora                        Crux.jpg    Ответы (A): Владимир Леттиев crux

GearRepo

Q: Скажите, это те самые "карманы", обсуждение которых давно ведется?

A: Это несколько шире, чем "карманы". Да, там можно создать свой apt-репозиторий (оверлей/карман ...), но этим дело не ограничивается.


Q: Почему о разработке этого портала не знают даже многие тимовцы? Вы его пока специально широко не афишировали или есть какие-то иные причины?

A: Анонс был и достаточно давно http://lists.altlinux.org/pipermail/sisyphus/2011-May/353930.html

Протестировать альфа-релиз я приглашал на irc-канале #altlinux, откликнулся raorn@, за что ему спасибо. Было исправлено несколько серьёзных недочётов.

После завершения вёрстки текущего дизайна сайта, я также делал анонс в G+ (подавляющее большинство моих друзей в нём - участники ALT Linux Team) для проведения тестирования.

Никакого ажиотажа это не вызвало и, как я и предполагал с самого начала, никому, на самом деле, это не интересно. У большинства участников уже сложился свой собственный workflow и менять его и лениво, и трудно (вспоминаем переезд с srpm на gear).


Q: На какой основе он создан - при чьей-то поддержке или самостоятельно?

A: Сделан он самостоятельно, прежде всего для создания комфортного инструмента для ведения пакетов в Sisyphus и бранчах, проведения экспериментов и т.п. Например, последний perl 5.16.1 с зависимостями был как раз собран в "кармане" GearRepo.


Q: Сколько времени и сил Вам потребовалось для его создания?

A: Сейчас трудно уже посчитать, но практически целый месяц (август 2011) я всё свободное время программировал. Дальше уже было значительно меньше времени затрачено.

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


Q: Глупый наверное вопрос - на чем он написан и почему?

A: Кое-какие техн. детали реализации я опубликовал http://blog.truecrux.org/post/xiii

Серверная часть пишется на Perl, клиент на JavaScript с использованием фреймворка JQuery. Выбор определён опытом и вкусом.


Q: Планируются и возможны ли дополнительные возможности ресурса?

A: Фичи добавляются по мере необходимости.


Q: На сколько стабильным и надежным будет ресурс, когда будет запущен в качестве "боевого"?

A: Всё зависит от числа пользователей. Основная нагрузка идёт на сборочные мощности. Увеличивая число сборочных контейнеров, можно обслуживать большое кол-во одновременно работающих пользователей.


Q: На чьих серверах он "крутится"? Нет ли вероятности, что его прикроют при росте его популярности (и соответственно гигантской нагрузке)?

A: Хостится на своём выделенном железе, с этим проблемы нет. Если ресурс вдруг станет популярным и ему станет тесно в рамках имеющихся ресурсов, то можно будет заняться поиском соответствующего хостинга.


Q: Несет ли какую-то смысловую нагрузку слово truecrux в названии? Или он чему-то посвящен?

A: Нет. В теории он должет переехать на домен второго уровня, имя которому пока не придумалось. Сейчас просто используется существующиий личный домен.


Q: Надеюсь Вы ответите на вопросы. Срочности нет никакой. Заранее спасибо!

A: Вам спасибо.


Цель проекта

Цель проекта - упростить совместную работу разработчиков команды ALT и привлечь новичков к работе над пакетной базой Sisyphus. Проект позволит снизить порог вхождения для новых разработчиков, но не просто за счёт упрощения и автоматизирования рутинных операций, но также - документирования и разъяснения на пальцах каждого шага в работе (контекстные подсказки и т.д.)

Возможности

Сейчас работает:

  • Базовый просмотр gear-репозиториев. Примитивный git-браузер показывает все ветки, теги, последние 10 коммитов истории и дерево файлов (tree) последнего коммита. Тут работы непочатый край, но планируется сделать конфетку, в стиле gitg.
  • Регистрация пользователей
  • Скринкаст по работе с сайтом
  • Загрузка своего публичного ssh-ключа
  • Создание gear-репозиториев (а также переименование и удаление)
  • RW доступ к своим gear-репозиториям через ssh
  • RO доступ ко всем gear-репозиториям через git
  • Сборка rpm-пакетов из gear-репозитория с отображением логов сборки в прямом эфире! apt-репозитории появляются здесь
  • Просмотр истории логов последних 10 сборок

Основные положения проекта

  • Что это?

Это веб-ресурс, где каждый желающий может создавать публичные GR, управлять, а также вести совместную работу с другими пользователями. Система позволяет собирать из GR готовые rpm-пакеты для требуемого окружения (Sisyphus или бранч), объединять группы rpm-пакетов в apt-репозитории и публиковать всё это для общего доступа.


  • Что требуется для работы?

Отличительной чертой ресурса является простота и невысокие начальные требования к работе. Основные инструменты - git и веб-браузер (не нужны ни локальные зеркала sisyphus, ни gear, ни hasher, ни rpm).
К примеру, для создания нового или клонирования существующего GR потребуется лишь один клик мышью.


  • Возможна ли совместная работа над GR?

Конечно. Возможный сценарий. Вы нашли ошибку в сборке пакета чьего-либо пакета и хотите её исправить. Клонируйте GR, создаёте ветку, вносите исправление, проверяете сборку и отправляете pull request. Основной майнтейнер GR будет проинформирован о пришедшем запросе и сможет одним нажатием кнопки merge включить изменения в основную ветку.
Всё наглядно, каждый шаг задокументирован, и доступно даже для новичка.


  • Чем это отличается от git.alt?

Основное отличие - это свободный доступ для всех желающих попробовать свои силы в сборке ПО, не требуя глубоких знаний gear и прочего.
Веб-интерфейс управления всеми операциями, наличие механизмов для совместной работы, детальная и наглядная информация о GR (коммиты, ветки, теги...) и rpm.
Предполагается, что будут узаконено несколько типичных схем ведения GR с целью упрощения совместной работы и возможности автоматизации рутинных операций.


  • Что получит ${простой} пользователь?

Получить софт в таком виде и с такими фичами, которые нужны ему. Не секрет, что некоторые заточенные решения не подходят для общего случая или версия ПО экспериментальная, а где взять такие специфические сборки? Здесь!


  • Что получит ${непростой} пользователь?

Возможность собрать нужный ему пакет, например, с немножко другими опциями configure. При этом от него потребуется лишь базовые знания и никаких локальных сборочных ресурсов.
(Потом он втянется и плавно станет следующим видом пользователя ↓)


  • Что получит ${искушенный в сборке, но не из ALT Team} пользователь?

Донести до всего мира, свои сборки, с вылизанными и отточенными спеками, свои apt-репозитории. Увидеть статистику скачанных пакетов, узнать сколько людей пользуются его сборками, прочитать их отзывы.


  • Что получит ${ALT Team} пользователь?

Простоту в работе: долой локальные зеркала, долой все rpm-macros' из системы, долой алиасы вокруг gear* rpm* команд и т.д.
Простота совместной работы - сидя в кафе, с мобильного, замержить чей-нибудь GR.
Представьте возможность наблюдать в браузере процесс сборки, запустить параллельно две-три сборки, заглянуть в сборочный чрут, подсмотреть config.log.


  • Что получит ${корпоративный} пользователь?

Возможность поддерживать свои наработки, своё ПО в готовом для установки виде для различных дистрибутивов/бранчей без вложений в инфраструктуру сборки.


  • Что ещё там может быть?
    • Веб-конструктор спеков с готовыми шаблонами.
    • Кнопка "попробовать собрать новую версию" для автоматической сборки новой версии пакета.
    • Интеграция с prometheus.altlinux.org/sisyphus.ru
    • Вероятно можно будет создавать свои собственные бранчи в виде среза Sisyphus за какой-либо день + небольшой apt-репозиторий сверху (aka overlay)
    • Возможно появится возможность из таких бранчей сгенерировать установочные iso одним кликом и сразу их опубликовать.

Техническая реализация

Созданы 3 контейнера OpenVZ: сервер веб-приложения, сервер с gear/apt репозиториями, сборочный сервер. Общая схема выглядит так:

Схема GearRepo


  • Http-запрос клиента идёт на фронтенд apache, который затем проксируется на бэкенд Twiggy, который передаёт данные в веб-приложение GearRepo::Web (на веб-фреймворке Dancer ).

Веб-сервер Twiggy используется по причине необходимости использования AnyEvent в веб-приложении.

  • Веб-приложение обрабатывает запрос и если в результате потребуется выполнить какое-либо действие с gear-репозиторием, например, создать/переименовать или выполнить сборку, формируется запрос на демона задач gearmand, который передаёт задачу в соответствующий worker (отдельный процесс), который асинхронно выполняет эту операцию и возвращает результат.
  • Использование сервера задач необходимо, поскольку не все задачи могут выполняться за приемлемое время (~1 сек) и следовательно должны выполняться асинхронно, при этом не требовать ресурсоёмких операций (как например, fork() на каждую новую задачу).
  • Worker'ы для выполнения операций подключаются по ssh к серверу (gear/apt или build-server). Используется одно постоянное ssh-соединение, в рамках которого мультиплексируются новые сеансы. Команды выполняются с правами непривилегированных пользователей, через специальный враппер команд, проверяющий корректность команд и выполняющих их.
  • Число сборочных серверов может неограниченно расширяться, они могут находиться где угодно. Пока налажен только один, на картинке два, но это обман - ресурсов всё-таки маловато.
  • На данный момент используется быстрая и лёгкая СУБД SQLite, которая в принципе легко может быть заменена на любую другую если это потребуется.
  • Помимо веб-интерфейса есть также доступ по протоколам ssh и git. Для ssh используется также враппер команд, сходный gitolite. Для git развёрнут git-daemon, который обслуживает только RO-запросы к публичным репозиториям.
  • Также стоит упомянуть и сторону клиента. Сейчас строк в проекте написанных на JavaScript больше, чем кода серверной части на Perl. Используется фреймворк JQuery. Пока раздумываю стоит ли искать фреймворк пользовательского интерфейса или обойтись своими силами. Для git-браузера обмен с сервером ведётся с использованием JSON, в котором передаются структуры с данными git-репозитория, а вывод формируется уже в браузере. Будет использоваться кэширование на стороне клиента, что позволит быстро и удобно работать с gear-репозиторием.

__SHOWFACTBOX__