Setup and configure OBS
Об установке и настройке Open Build Service (OBS) можно найти подробную документацию на официальных openSUSE-страницах. Так же скоро должна выйти книга с описанием OBS и примерами его конфигурации. Пока же исходники книги в factory, а русского перевода официальной документации нет, я решил написать этот пост. Тут рассказывается об установке OBS из RPM (из официального oS-репозитория). Все сервисы запускаются на одной машине. В моем случае это виртуальная машина c openSUSE 11.4.
OBS состоит из 2х основных частей: backend и frontend. На backend будут находятся исходники и пакеты. Там же реализован процесс сборки. Frontend отвечает за доступ к backend (по средствам OBS API). Обе части разделены с целью безопасности. Frondend мы будем опрашиваить с помощью WebUI или OSC.

Запуск Backend
Архитектурой OBS предусмотренна система из нескольких build-хостов. Если же все OBS сервисы будут запущенны на одной машине, то одновремено мы сможем собирать лишь столько пакетов, сколько эта машина будет иметь CPU Core. В будущем количество параллельных сборок можно будет увеличить настроив еще один backend на другой машине. Кластерная модель поддерживается OBS очень хорошо и совсем не сложно настраивается. Тут я не буду заострять на этом внимание, но если понадобится увеличить мощность OBS (параллельную сборку), загляните в файл /usr/share/doc/packages/obs-api/README.SETUP из пакета obs-api.
Для настройки backend подключите репозиторий openSUSE:Tools:
# zypper ar -f http://download.opensuse.org/repositories/openSUSE:/Tools:/2.1/openSUSE_11.4 Tools
и установите пакет obs-server:
# zypper in obs-server
По умолчанию сервер будет установлен в /srv/obs. После этого запускаем сервисы в таком порядке:
# rcobsrepserver start # rcobssrcserver start # rcobsscheduler start # rcobsdispatcher start # rcobspublisher start
Запускаем workers
Workers опрашивает backend о пакетах, которые нужно собрать. Если такие есть, и есть свободные CPU Core, то workers начинает сборку. Устанавливаем:
# zypper in obs-worker
Запускаем:
# rcobsworker start Run 8 obsworker using /var/cache/obs/worker
В моем случае 8 параллельных процессов. Тут же можно дебажить поломанные сборки (/var/cache/obs/worker/root_n) на стороне сервера.
Настраиваем Frontend (obs-api) и MySQL
Устанавливаем пакет obs-api, а так же MySQL. Запускаем MySQL:
# rcmysql start
При первом запуске mysql предложит установить пароль для доступа к базе данных.
После первого запуска mysql запустите так же
# mysql_secure_installation
Если Вы хотите, чтобы root всегда имел доступ к базе данных, создайте файл /root/.my.cnf с таким содержанием:
[client] user = root password = foobar [mysqladmin] user= root password = foobar
Скроем его содержание от любопытных, но чужих глаз:
# chmod 0600 /root/.my.cnf # l /root/.my.cnf -rw------- 1 root root 86 Jan 2 12:18 /root/.my.cnf
Теперь создаем новую базу данных production:
# mysql -u root -p mysql> create database api_production; mysql> create database webui_production; mysql> quit
Указываем имя пользователя и пароль для доступа к mysql в секции “production:” для конфигов api и webui:
/srv/www/obs/api/config/database.yml
/srv/www/obs/webui/config/database.yml
Заполняем базу данных:
# cd /srv/www/obs/api/ # sudo RAILS_ENV="production" rake db:setup # sudo chown lighttpd.lighttpd log/* # cd /srv/www/obs/webui/ # sudo RAILS_ENV="production" rake db:setup # sudo chown lighttpd.lighttpd log/*
Устанавливаем и настраиваем lighttpd
Теперь надо установить и настроить web-сервер для работы с OBS-API и WebUI. Для это раскомментируйте несколько строчек (секция ‘custom includes’) в /etc/lighttpd/lighttpd.conf:
## ## custom includes like vhosts. ## #include "conf.d/config.conf" # following line uncommented as per # /usr/share/doc/packages/obs-api/README.SETUP include_shell "cat vhosts.d/*.conf"
Так же должны быть добавленны модули “mod_magnet”, “mod_rewrite” и “fastcgi”. Раскоментируйте для этого соотвествующие строчки в файле /etc/lighttpd/modules.conf:
server.modules = ( "mod_access", "mod_rewrite", ) ## ## mod_magnet ## include "conf.d/magnet.conf" ## ## FastCGI (mod_fastcgi) ## include "conf.d/fastcgi.conf"
Если Вы изменили имя машины, на которой установлен OBS, поменяйте значения FRONTEND_HOST, FRONTEND_PORT and DOWNLOAD_URL в файле /srv/www/obs/webui/config/environments/production.rb.
После этого можно запускать lighttpd:
# rclighttpd start
Добавление базы дистрибутив
Самым простым способом добавление дистрибутивов – синхонизация с opensuse.org. Это можно сделать через “Setup OBS” на главной странице OBS или просто выполните следующую команду:
# curl -0 --user "Admin:opensuse" -X PUT \
-T /usr/share/doc/packages/obs-api/openSUSE.org.xml \
http://localhost:81/source/openSUSE.org/_meta
That’s all
Все. Open Build Service готов к сборке пакетов.
Для запуска OBS используйте следующую последовательность команд:
rcmysql start rcobsrepserver start rcobssrcserver start rcobsscheduler start rcobsworker start rcobsdispatcher start rcobspublisher start rclighttpd start
Останавливать сервисы рекомендуется в обратной последовательности.
OBS-API досупен по адресу http://$servername:81, WebUI – http://$servername.
Репозитории будут доступны (http://$servername:82) после первой удачной сборки (succeeded) пакета
По умолчанию имя пользователя “Admin” и пароль “opensuse”.
Логи:
webui – /srv/www/obs/webui/log
api – /srv/www/obs/api/log
obs – /srv/obs/log
lighttpd – /var/log/lighttpd


отлично.
Вот только не совсем понятно, для чего OBS нужен на локальной тачке? есть же OBS на opensuse.org, заодно и репы доступны всем желающим. хотя…. если интересах какого-либо сообщества… да на сайте этого сообщества…
Представь компанию, которая делает ПО, но не хочет его расшаривать для всех.
Или просто “OBS-зеркало” где-нить, к примеру, на дальнем востоке, которое синхронизируется с build.opensuse.org.