⌨ Labor omnia vincit ☮

Setup and configure OBS

Posted in SuSE [ru] by anaumov on 10.01.2012

Об установке и настройке 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

2 Responses

Subscribe to comments with RSS.

  1. Tuoma said, on 17.01.2012 at 21:51

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

    • Alex said, on 17.01.2012 at 22:38

      Представь компанию, которая делает ПО, но не хочет его расшаривать для всех.
      Или просто “OBS-зеркало” где-нить, к примеру, на дальнем востоке, которое синхронизируется с build.opensuse.org.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: