GearRepo: различия между версиями
Sb (обсуждение | вклад) |
Sb (обсуждение | вклад) |
||
Строка 195: | Строка 195: | ||
Общая схема выглядит так:<br> | Общая схема выглядит так:<br> | ||
[[Image:Gearrepo.png|center|Схема GearRepo]]<br> | [[Image:Gearrepo.png|center|Схема GearRepo]]<br> | ||
*Http-запрос клиента идёт на фронтенд apache, который затем проксируется на бэкенд [https://metacpan.org/module/Twiggy Twiggy], который передаёт данные в веб-приложение GearRepo::Web (на веб-фреймворке [http://perldancer.org/ Dancer] ). | *Http-запрос клиента идёт на фронтенд apache, который затем проксируется на бэкенд [https://metacpan.org/module/Twiggy Twiggy], который, в свою очередь, передаёт данные в веб-приложение GearRepo::Web (на веб-фреймворке [http://perldancer.org/ Dancer] ). | ||
Веб-сервер Twiggy используется по причине необходимости использования [https://metacpan.org/module/AnyEvent AnyEvent] в веб-приложении. | Веб-сервер Twiggy используется по причине необходимости использования [https://metacpan.org/module/AnyEvent AnyEvent] в веб-приложении. | ||
*Веб-приложение обрабатывает запрос и если в результате потребуется выполнить какое-либо действие с gear-репозиторием, например, создать/переименовать или выполнить сборку, формируется запрос на демона задач [http://gearman.org/ gearmand] | *Веб-приложение обрабатывает запрос и, если в результате потребуется выполнить какое-либо действие с gear-репозиторием, например, создать/переименовать или выполнить сборку, то формируется запрос на демона задач [http://gearman.org/ gearmand]. Этот демон передаёт задачу в соответствующий worker (отдельный процесс), который асинхронно выполняет эту операцию и возвращает результат. | ||
*Использование сервера задач необходимо, поскольку не все задачи могут выполняться за приемлемое время (~1 сек) и следовательно должны выполняться асинхронно | *Использование сервера задач необходимо, поскольку не все задачи могут выполняться за приемлемое время (~1 сек) и, следовательно, должны выполняться асинхронно и при этом не требовать ресурсоёмких операций (как например, fork() на каждую новую задачу). | ||
*Worker'ы для выполнения операций подключаются по ssh к серверу (gear/apt или build-server). Используется одно постоянное ssh-соединение, в рамках которого мультиплексируются новые сеансы. Команды выполняются с правами непривилегированных пользователей, через специальный враппер команд, проверяющий корректность команд и выполняющих их. | *Worker'ы для выполнения операций подключаются по ssh к серверу (gear/apt или build-server). Используется одно постоянное ssh-соединение, в рамках которого мультиплексируются новые сеансы. Команды выполняются с правами непривилегированных пользователей, через специальный враппер команд, проверяющий корректность команд и выполняющих их. | ||
*Число сборочных серверов может неограниченно расширяться, они могут находиться где угодно. Пока налажен только один | *Число сборочных серверов может неограниченно расширяться, они могут находиться где угодно. Пока налажен только один (хотя на картинке два), но это обман — ресурсов всё-таки маловато. | ||
*На данный момент используется быстрая и лёгкая СУБД SQLite, которая в принципе легко может быть заменена на любую другую если это потребуется. | *На данный момент используется быстрая и лёгкая СУБД SQLite, которая в принципе легко может быть заменена на любую другую, если это потребуется. | ||
*Помимо веб-интерфейса есть также доступ по протоколам ssh и git. Для ssh используется также враппер команд, сходный с [https://github.com/sitaramc/gitolite gitolite]. Для git развёрнут git-daemon, который обслуживает только RO-запросы к публичным репозиториям. | *Помимо веб-интерфейса есть также доступ по протоколам ssh и git. Для ssh используется также враппер команд, сходный с [https://github.com/sitaramc/gitolite gitolite]. Для git развёрнут git-daemon, который обслуживает только RO-запросы к публичным репозиториям. | ||
*Также стоит упомянуть и сторону клиента. Сейчас строк в проекте написанных на JavaScript больше, чем кода серверной части на Perl. Используется фреймворк [http://jquery.com/ JQuery]. Пока раздумываю стоит ли искать фреймворк пользовательского интерфейса или обойтись своими силами. Для git-браузера обмен с сервером ведётся с использованием JSON, в котором передаются структуры с данными git-репозитория, а вывод формируется уже в браузере. Будет использоваться кэширование на стороне клиента, что позволит быстро и удобно работать с gear-репозиторием. | *Также стоит упомянуть и сторону клиента. Сейчас строк в проекте, написанных на JavaScript, больше, чем кода серверной части на Perl. Используется фреймворк [http://jquery.com/ JQuery]. Пока раздумываю, стоит ли искать фреймворк пользовательского интерфейса или можно обойтись своими силами. Для git-браузера обмен с сервером ведётся с использованием JSON, в котором передаются структуры с данными git-репозитория, а вывод формируется уже в браузере. Будет использоваться кэширование на стороне клиента, что позволит быстро и удобно работать с gear-репозиторием. | ||
__SHOWFACTBOX__ | __SHOWFACTBOX__ | ||
[[Категория:ALT-review]] | [[Категория:ALT-review]] |
Версия от 15:25, 9 ноября 2012
Журнал ALT-review
Title::GearRepo - ресурс для разработчиков и майнтейнеров- Автор: Author::ALT Club Раздел: Section::технологии Выпуск: Issue::pilot Тег: Tag::сборка
|
GearRepo
GearRepo — это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них
бинарные RPM-пакеты и формировать APT-репозитории, пригодные для
использования в дистрибутивах на базе стабильных бранчей ALTLinux
и/или нестабильной ветки Sisyphus.
На данный момент GearRepo находится в процессе разработки.
Хочется привлечь текущих участников команды ALT к тестированию проекта и озвучиванию своих предложений и критики.
От первого лица
Здравствуйте, Владимир! В рамках подготовки роллинг-релиз журнала ALT-review хотелось бы задать Вам несколько вопросов относительно ресурса GearRepo и не только. На портале http://gear.truecrux.org есть пояснение о назначении ресурса, также там размещен практически исчерпывающий работу с ресурсом скринкаст. Однако, хотелось бы детальнее осветить создание этого ресурса и того, что с ним связано. Ниже приведены вопросы, но хотелось бы оставить за собой право задать дополнительные позже (если такие появятся). Также сами ответы Вы сможете найти на вики a.o (в категории ALT-review) до анонса статьи и сообщить о необходимых корректировках.
Вопросы (Q): Михаил Радюк torabora
Ответы (A): Владимир Леттиев crux
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 репозиториями, сборочный сервер.
Общая схема выглядит так:
- 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__