GearRepo: различия между версиями

Материал из ALT Linux Wiki
мНет описания правки
Нет описания правки
 
(не показано 26 промежуточных версий 5 участников)
Строка 1: Строка 1:
{{review
{{review
|Title          = GearRepo - ресурс для разработчиков и майнтейнеров
|Title          = GearRepo ресурс для разработчиков и майнтейнеров
|Annotation    = GearRepo - это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них бинарные RPM-пакеты и  формировать APT-репозитории
|Annotation    = GearRepo это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них бинарные RPM-пакеты и  формировать APT-репозитории
|Author        = ALT Club
|Author        = ALT Club
|Tag            = сборка
|Tag            = сборка
Строка 7: Строка 7:
|Issue          = pilot
|Issue          = pilot
}}
}}
[[Image:Alt_Club.png|right|thumb|125px]][[Image:Alt_linux_team.png|right|thumb|125px]]
{{review-nav
==GearRepo==
|link=http://gear.truecrux.org/#!/ GearRepo
 
}}
'''GearRepo''' - это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них
===GearRepo===
'''GearRepo''' это ресурс для разработчиков и майнтейнеров, где можно создавать Gear-репозитории исходного кода программ, собирать из них
бинарные RPM-пакеты и формировать APT-репозитории, пригодные для
бинарные RPM-пакеты и формировать APT-репозитории, пригодные для
использования в дистрибутивах на базе стабильных бранчей ALTLinux
использования в дистрибутивах на базе стабильных бранчей ALT Linux
и/или нестабильной ветки Sisyphus.<br>
и/или нестабильной ветки Sisyphus.<br>
На данный момент GearRepo находится в процессе разработки.
На данный момент GearRepo находится в процессе разработки.
Хочется привлечь текущих участников команды ALT к тестированию проекта и озвучиванию своих предложений и критики.
Хочется привлечь текущих участников команды ALT к тестированию проекта и озвучиванию своих предложений и критики.


==От первого лица==
===От первого лица===
Здравствуйте, Владимир!
Здравствуйте, Владимир!
В рамках подготовки роллинг-релиз журнала ALT-review хотелось бы задать Вам
В рамках подготовки роллинг-релиз журнала ALT-review хотелось бы задать Вам
несколько вопросов относительно ресурса GearRepo и не только.
несколько вопросов относительно ресурса GearRepo и не только.
На портале http://gear.truecrux.org есть пояснение о назначении ресурса, также там размещен практически исчерпывающий работу с ресурсом скринкаст.
На портале http://gear.truecrux.org есть пояснение о назначении ресурса, также там размещен скринкаст — практически исчерпывающий ответ на вопрос о том, как работать с ресурсом.
Однако, хотелось бы детальнее осветить создание этого ресурса и того,что с ним связано.
Однако, хотелось бы детальнее осветить создание этого ресурса и того, что с ним связано.
Ниже приведены вопросы, однако хотелось бы оставить за собой право
Ниже приведены вопросы, но хотелось бы оставить за собой право
задать дополнительные позже (если такие появятся). Также сами ответы
задать дополнительные позже (если такие появятся). Также сами ответы
Вы сможете найти на вики a.o (в категории ALT-review) до анонса статьи
Вы сможете найти на вики a.o (в категории ALT-review) до анонса статьи
и сообщить о необходимых корректировках.
и сообщить о необходимых корректировках.
----
----
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Image:torabora.jpg|90px]]&nbsp;&nbsp;&nbsp; Вопросы ('''Q'''): Михаил Радюк '''torabora''' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Image:crux.jpg|90px]] &nbsp;&nbsp;&nbsp;Ответы ('''A'''): Владимир Леттиев '''crux''' [[Image:gearrepo_logo.png|300px|right|GearRepo]]
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[[Image:torabora.jpg|90px]]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
[[Image:crux.jpg|90px]] <br>Вопросы ('''Q'''): Михаил Радюк '''torabora'''  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Ответы ('''A'''): Владимир Леттиев '''crux''' &nbsp;&nbsp;&nbsp;
----
----
'''Q:''' Скажите, это те самые "карманы", обсуждение которых давно ведется?
'''Q:''' Скажите, это те самые "карманы", обсуждение которых давно ведется?
Строка 44: Строка 49:


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


Строка 52: Строка 57:
(вспоминаем переезд с srpm на gear).
(вспоминаем переезд с srpm на gear).
----
----
'''Q:''' На какой основе он создан - при чьей-то поддержке или самостоятельно?
'''Q:''' На какой основе он создан при чьей-то поддержке или самостоятельно?


'''A:''' Сделан он самостоятельно, прежде всего для создания комфортного
'''A:''' Сделан он самостоятельно, прежде всего для создания комфортного
Строка 69: Строка 74:
легко.
легко.
----
----
'''Q:''' Глупый наверное вопрос - на чем он написан и почему?
'''Q:''' Глупый наверное вопрос на чем он написан и почему?


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


Строка 80: Строка 85:
'''A:''' Фичи добавляются по мере необходимости.
'''A:''' Фичи добавляются по мере необходимости.
----
----
'''Q:''' На сколько стабильным и надежным будет ресурс, когда будет запущен в качестве "боевого"?
'''Q:''' Насколько стабильным и надежным будет ресурс, когда будет запущен в качестве "боевого"?


'''A:''' Всё зависит от числа пользователей. Основная нагрузка идёт на сборочные
'''A:''' Всё зависит от числа пользователей. Основная нагрузка идёт на сборочные
Строка 95: Строка 100:


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


'''A:''' Вам спасибо.
'''A:''' Вам спасибо.
----
----
==Цель проекта==
 
Цель проекта - упростить совместную работу разработчиков команды ALT и привлечь новичков к работе над пакетной базой Sisyphus. Проект позволит снизить порог вхождения для новых разработчиков, но не просто за счёт упрощения и автоматизирования рутинных операций, но также - документирования и разъяснения на пальцах каждого шага в работе (контекстные подсказки и т.д.)  
===Цель проекта===
==Возможности==
Цель проекта упростить совместную работу разработчиков команды ALT и привлечь новичков к работе над пакетной базой Sisyphus. Проект позволит снизить порог вхождения для новых разработчиков, но не только за счёт упрощения и автоматизации рутинных операций, но и документирования, разъяснения на пальцах каждого шага в работе (контекстные подсказки и т.д.)
 
===Возможности===
Сейчас работает:  
Сейчас работает:  
* Базовый просмотр gear-репозиториев. Примитивный git-браузер показывает все ветки, теги, последние 10 коммитов истории и дерево файлов (tree) последнего коммита. Тут работы непочатый край, но планируется сделать конфетку, в стиле gitg.  
* Базовый просмотр gear-репозиториев. Примитивный git-браузер показывает все ветки, теги, последние 10 коммитов истории и дерево файлов (tree) последнего коммита. Тут работы непочатый край, но планируется сделать конфетку в стиле gitg.  
* Регистрация пользователей  
* Регистрация пользователей.
* Скринкаст по работе с сайтом  
* Скринкаст по работе с сайтом.
* Загрузка своего публичного ssh-ключа  
* Загрузка своего публичного ssh-ключа.
* Создание gear-репозиториев (а также переименование и удаление)  
* Создание gear-репозиториев (а также переименование и удаление).
* RW доступ к своим gear-репозиториям через ssh  
* RW доступ к своим gear-репозиториям через ssh.
* RO доступ ко всем gear-репозиториям через git  
* RO доступ ко всем gear-репозиториям через git.
* Сборка rpm-пакетов из gear-репозитория с отображением логов сборки в прямом эфире! apt-репозитории появляются [http://git.truecrux.org/overlays/ здесь]
* Сборка rpm-пакетов из gear-репозитория с отображением логов сборки в прямом эфире! apt-репозитории появляются [http://git.truecrux.org/overlays/ здесь].
* Просмотр истории логов последних 10 сборок
* Просмотр истории логов последних 10 сборок.


==Основные положения проекта==
[[Image:gearrepo_logo.png|300px|center|thumb|http://gear.truecrux.org/]]
 
===Основные положения проекта===
*Что это?
*Что это?
Это веб-ресурс, где каждый желающий может создавать публичные GR,
Это веб-ресурс, где каждый желающий может создавать публичные GR,
Строка 125: Строка 134:
*Что требуется для работы?
*Что требуется для работы?
Отличительной чертой ресурса является простота и невысокие начальные требования
Отличительной чертой ресурса является простота и невысокие начальные требования
к работе. Основные инструменты - git и веб-браузер (не нужны ни
к работе. Основные инструменты git и веб-браузер (не нужны ни
локальные зеркала sisyphus, ни gear, ни hasher, ни rpm).<br>
локальные зеркала sisyphus, ни gear, ни hasher, ни rpm).<br>
К примеру, для создания нового или клонирования существующего GR потребуется
К примеру, для создания нового или клонирования существующего GR потребуется
Строка 139: Строка 148:
----
----
*Чем это отличается от git.alt?
*Чем это отличается от git.alt?
Основное отличие - это свободный доступ для всех желающих попробовать свои силы
Основное отличие это свободный доступ для всех желающих попробовать свои силы
в сборке ПО, не требуя глубоких знаний gear и прочего.<br>
в сборке ПО, не требуя глубоких знаний gear и прочего.<br>
Веб-интерфейс управления всеми операциями, наличие механизмов для совместной
Веб-интерфейс управления всеми операциями, наличие механизмов для совместной
работы, детальная и наглядная информация о GR (коммиты, ветки, теги...) и rpm.<br>
работы, детальная и наглядная информация о GR (коммиты, ветки, теги...) и rpm.<br>
Предполагается, что будут узаконено несколько типичных схем ведения GR с целью
Предполагается, что будет узаконено несколько типичных схем ведения GR с целью
упрощения совместной работы и возможности автоматизации рутинных операций.
упрощения совместной работы и возможности автоматизации рутинных операций.
----
----
Строка 158: Строка 167:
----
----
*Что получит <code>${искушенный в сборке, но не из ALT Team}</code> пользователь?
*Что получит <code>${искушенный в сборке, но не из ALT Team}</code> пользователь?
Донести до всего мира, свои сборки, с вылизанными и отточенными спеками, свои
Донести до всего мира свои сборки, с вылизанными и отточенными спеками, свои
apt-репозитории. Увидеть статистику скачанных пакетов, узнать сколько людей
apt-репозитории. Увидеть статистику скачанных пакетов, узнать сколько людей
пользуются его сборками, прочитать их отзывы.
пользуются его сборками, прочитать их отзывы.
Строка 165: Строка 174:
Простоту в работе: долой локальные зеркала, долой все rpm-macros' из системы,
Простоту в работе: долой локальные зеркала, долой все rpm-macros' из системы,
долой алиасы вокруг gear* rpm* команд и т.д.<br>
долой алиасы вокруг gear* rpm* команд и т.д.<br>
Простота совместной работы - сидя в кафе, с мобильного, замержить чей-нибудь GR.<br>
Простота совместной работы сидя в кафе, с мобильного замержить чей-нибудь GR.<br>
Представьте возможность наблюдать в браузере процесс сборки, запустить
Представьте возможность наблюдать в браузере процесс сборки, запустить
параллельно две-три сборки, заглянуть в сборочный чрут, подсмотреть config.log.
параллельно две-три сборки, заглянуть в сборочный чрут, подсмотреть config.log.
Строка 176: Строка 185:
** Веб-конструктор спеков с готовыми шаблонами.
** Веб-конструктор спеков с готовыми шаблонами.
** Кнопка "попробовать собрать новую версию" для автоматической сборки новой версии пакета.
** Кнопка "попробовать собрать новую версию" для автоматической сборки новой версии пакета.
** Интеграция с prometheus.altlinux.org/sisyphus.ru
** Интеграция с packages.altlinux.org/sisyphus.ru
** Вероятно можно будет создавать свои собственные бранчи в виде среза Sisyphus за какой-либо день + небольшой apt-репозиторий сверху (aka overlay)
** Вероятно можно будет создавать свои собственные бранчи в виде среза Sisyphus за какой-либо день + небольшой apt-репозиторий сверху (aka overlay).
** Возможно появится возможность из таких бранчей сгенерировать установочные iso одним кликом и сразу их опубликовать.
** Возможно появится возможность из таких бранчей сгенерировать установочные iso одним кликом и сразу их опубликовать.
----
----


==Техническая реализация==
===Техническая реализация===
Созданы 3 контейнера OpenVZ: сервер веб-приложения, сервер с gear/apt репозиториями, сборочный сервер.  
Созданы 3 контейнера OpenVZ: сервер веб-приложения, сервер с gear/apt репозиториями, сборочный сервер.  
Общая схема выглядит так:<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], который передаёт задачу в соответствующий worker (отдельный процесс), который асинхронно выполняет эту операцию и возвращает результат.  
*Веб-приложение обрабатывает запрос и, если в результате потребуется выполнить какое-либо действие с gear-репозиторием, например, создать/переименовать или выполнить сборку, то формируется запрос на демона задач [http://gearman.org/ gearmand]. Этот демон передаёт задачу в соответствующий worker (отдельный процесс), который асинхронно выполняет эту операцию и возвращает результат.  


*Использование сервера задач необходимо, поскольку не все задачи могут выполняться за приемлемое время (~1 сек) и следовательно должны выполняться асинхронно, при этом не требовать ресурсоёмких операций (как например, fork() на каждую новую задачу).  
*Использование сервера задач необходимо, поскольку не все задачи могут выполняться за приемлемое время (~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]]
[[Категория:gear]]
[[Категория:girar]]
{{Category navigation|title=Журнал ALT-review|category=ALT-review|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=gear|category=gear|sortkey={{SUBPAGENAME}}}}

Текущая версия от 09:50, 17 июля 2015

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

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

Alt Club.png
Alt linux team.png

Навигация

Главная: ALT-review

Все статьи

Предложения и пожелания

Ресурсы

GearRepo


GearRepo

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

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

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


                     Torabora.jpg                                                                 Crux.jpg
Вопросы (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.


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

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


  • Что ещё там может быть?
    • Веб-конструктор спеков с готовыми шаблонами.
    • Кнопка "попробовать собрать новую версию" для автоматической сборки новой версии пакета.
    • Интеграция с packages.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__