Отдадим проект в хорошие руки

в 5:04, , рубрики: CentOS, linux, nginx, rpm, говнокод, репозиторий, системное администрирование, метки: , , , ,

Отдадим проект в хорошие руки

Доброго времени суток уважаемые пользователи ! Хотелось бы с вами поделиться своими переживаниями по поводу одного проекта и передать его в добрые руки.

Несколько лет занимаясь сборкой RPM пакетов для CentOS и ведя свой общедоступный репозиторий пакетов CentALT, я постоянно сталкивался с одной и той же проблемой. Многие пользователи просили включать в сборку пакет с взаимоисключающими опциями, аргументация могла быть различной, но факт имел место быть.

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

Обсудив эту тему с комрадом Wendor, мы прикинули, что проект будет востребован и полезен людям. Обмозговав затею и прикинув техническую часть мы со словами «Г… о вопрос сделаем.» приступили к работе. Если говорить честно, то к работе приступил Wendor, а я все время мешал ему давая свои «ценные» советы.

В проект мы закладывали очень простую философию — «Собери свой репозиторий». Пользователь мог бы выбрать необходимые ему пакеты, с необходимыми ему модулями, а на выходе получить ссылку на готовый к употреблению репозиторий. При обновлении пакета, он бы автоматически пересобирался для всех репозиториев пользователей. В планах было добавление возможности запила собственного конфига в пакет. Мы с упоением представляли как будет удобно обновлять парк серверов прямо из репозитория.

Через два дня сервис был написан Антоном от и до (он хоть и тоже админ, но немного кодит). Для начала решили собирать пакет nginx, отладить на нем всю систему, а уже после начать добавлять другие. Поправив SRPMS пакет Nginx я внес в БД опции которые можно было выбирать при сборке. Вуаля — сервис заработал, на выходе мы получили RPM пакет под нужную ОС (CentOS5/CentOS 6) с нужными нам опциями сборки. Мы внесли в список опция порядка 50 сторонних модулей для Nginx и в 95% процентов случаев сборка проходила успешно. Оставшиеся 5% составляли случаи когда мы выбирали несовместимые друг с другом опции типа «отключить поддержку http» и например «поддержка gzip». В систему были внесены всевозможные форки и доработки Nginx такие и сейчас можно осуществлять сборку следующих пакетов:

Поигравшись со сборкой мы поняли, что вдвоем на голом энтузиазме волочить такой проект и развивать его нам не удастся. Проект забросили на пару месяцев «до лучших времен». Время текло, а воз и ныне там.

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

Если найдутся люди желающие поддержать данное начинание, то мы с радостью объясним и покажем как развернуть им всю систему сборки с нуля и передадим все исходные коды.

Монетизация. Заинтересованный читатель скажет а «Где деньги Зин? (с)». Видятся простые и прозрачные схемы монетизации сервиса:

  1. Поставить ограничение для бесплатных аккаунтов в 5 пакетов в репозитории.
  2. В платных аккаунтах добавить возможность сборки с редкими, но нужными модулями например passenger для Nginx.
  3. Можно ограничить обновления на бесплатных учетных записях.

Ссылка на работающий сервис http://repobuild.com/.
Для тех, кто не хочет регистрироваться:
username: user
password: user

Создаем репозиторий, добавляем пакеты, выбираем опции для сборки выбранных пакетов
Отдадим проект в хорошие руки

Отдадим проект в хорошие руки

Ждем пока пакет соберется и получаем ссылку на репозиторий
Отдадим проект в хорошие руки

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

Вот как-то так. Если есть желающие продолжить наше дело, просим вас откликнуться.

Автор: CentALT

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js