![image](https://habrastorage.org/getpro/habr/post_images/fa5/3d5/8e9/fa53d58e99ce183e99d6e32175dac658.png)
Open Build Service – программное обеспечение с открытым исходным кодом, распространяющееся под лицензией GPL, которое заметно упрощает организацию собственных репозиториев для популярных дистрибутивов Linux и сборку бинарных пакетов.
В статье я приведу способ быстрой установки серверной части на openSUSE 12.1, настройки окружения для пользователя и дам перечень полезных команд для работы из консоли. Вы, конечно, можете использовать готовые образы Open Build Server, которые можно скачать на сайте разработчика. Но, к примеру, на VirtualBox, установка с этих образов не идёт. В любом случае, когда сам проходишь путь установки, всегда легче разобраться как устроена система. Итак, приступим.
Прежде всего, нужно убедиться, что у вас подключен репозиторий Oss (это основной репозиторий openSUSE, но почему-то он не включен сразу в новых версиях). Он необходим для установки таких пакетов как Apache2, MySQL-server и т.д.
#zypper addrepo download.opensuse.org/distribution/12.1/repo/oss/ openSUSE-12.1-Oss
Добавим репозиторий для установки, собственно, самого Open Build Server.
#sudo zypper addrepo zypper addrepo download.opensuse.org/repositories/openSUSE:/Tools:/Unstable/openSUSE_12.1/openSUSE:Tools:Unstable.repo
#sudo zypper refresh
Теперь можно начать установку.
#sudo zypper in obs-server obs-api
Установка потянет за собой пачку необходимых пакетов, таких как apache, mysql-server, rubygems и т.д. Всего примерно на 90Мб.
Когда установка завершена, внесём пару изменений в файл конфигурации. Для этого открываем /etc/sysconfig/obs-server, находим и приводим их к следующему виду строки:
OBS_SRC_SERVER=«localhost:5352»
OBS_REPO_SERVERS=«localhost:5252»
Запускаем сервисы:
rcobsrepserver start
rcobssrcserver start
rcobsscheduler start
rcobsdispatcher start
rcobspublisher start
Переходим к созданию баз данных и их наполнению:
mysql> create database api_production;
mysql> create database webui_production;
mysql> create user 'obs'@'%' identified by 'obspassword';
mysql> create user 'obs'@'localhost' identified by 'obspassword';
mysql> GRANT all privileges ON api_production.* TO 'obs'@'%', 'obs'@'localhost';
mysql> GRANT all privileges ON webui_production.* TO 'obs'@'%', 'obs'@'localhost';
mysql> FLUSH PRIVILEGES;
Настроим подключение к mysql API и WebUI. Для этого в любом удобном редакторе открываем файлы /srv/www/obs/api/config/database.yml и
/srv/www/obs/webui/config/database.yml, находим и редактируем следующий блок:
production:
adapter: mysql2
database: api_production
username: obs
password: obspassword
Наполним базы и установим необходимые права на папки tmp и log
cd /srv/www/obs/api/
sudo RAILS_ENV=«production» rake db:setup
sudo chown -R wwwrun.www log tmp
cd /srv/www/obs/webui/
sudo RAILS_ENV=«production» rake db:setup
sudo chown -R wwwrun.www log tmp
Настроим Apache. Установим модуль apache2-mod_xforward. Для этого подключим ещё один репозиторий.
zypper addrepo download.opensuse.org/repositories/openSUSE:/Tools/SLE_11/ Tools-SLE
zypper refresh
zypper in apache2-mod_xforward
Подключим необходимые модули в /etc/sysconfig/apache2.
APACHE_MODULES="… passenger rewrite proxy proxy_http xforward headers"
Включим поддержку SSL и сгенерируем сертификаты. Снова открываем /etc/sysconfig/apache2 и находим строку:
APACHE_SERVER_FLAGS="-DSSL"
mkdir /srv/obs/certs
openssl genrsa -out /srv/obs/certs/server.key 1024
openssl req -new -key /srv/obs/certs/server.key -out /srv/obs/certs/server.csr
openssl x509 -req -days 365 -in /srv/obs/certs/server.csr -signkey /srv/obs/certs/server.key -out /srv/obs/certs/server.crt
cat /srv/obs/certs/server.key /srv/obs/certs/server.crt > /srv/obs/certs/server.pem
Установим use_xforward:true в /srv/www/obs/webui/config/options.yml и /srv/www/obs/api/config/options.yml
Теперь один очень важный нюанс. Открываем файл /srv/www/obs/webui/config/environments/production.rb, ищем строчку CONFIG['frontend_host'] = «localhost» и вместо localhost пишем имя сервера, которое мы указали при генерации сертификата.
Если этого не сделать, то при попытке открыть WebUI или API, будете получать ошибку “ hostname does not match the server certificate”.
Выполним рестарт.
rcapache2 restart
rcobsapidelayed restart
Проверяем работоспособность.
После перезапуска Apache API должен быть доступен по адресу
servername:444.
WebUI будет доступен по адресу
servername
.Логин и пароль по умолчанию Admin/opensuse.
Подробно останавливаться на использовании WebUI не буду. Интерфейс интуитивно понятный и удобный.
Лучше больше внимания уделим использованию OSC (openSUSE Build Service Commander). Данный пакет доступен практически для всех дистрибутивов Linux. С его помощью мы сможем создавать проекты, пакеты, загружать исходные файлы.
Я пользуюсь Ubuntu, поэтому для установки использую:
apt-get install osc
Следующим шагом нужно создать файл конфигурации, который необходим для работы с нашим сервером. Создать его можно в автоматическом режиме, используя любую команду osc, к примеру, osc ls. Но проще создать в корне домашней директории файл .oscrc следующего содержания:
.oscrc
[general] apiurl = https://servername:444 use_keyring = 0 [https://servername:444] user = Admin pass = opensuse keyring = 0
Вместо servername пишем имя своего сервера. Имя опять же должно совпадать с указанным во время создания сертификата, иначе получите ошибку «Certificate Verification Error: Peer certificate commonName does not match host»
Проверяем подключение, выполнив команду osc ls (вывести листинг проектов).
Принимаем сертификат.
The server certificate failed verification
Would you like to
0 — quit (default)
1 — continue anyways
2 — trust the server certificate permanently
9 — review the server certificate
Enter choice [0129]: 2
Попробуем создать новый проект.
osc meta prj -e MyProject
где MyProject – название вашего проекта.
После этого откроется xml-файл конфигурации нового проекта, где вам нужно будет, как минимум, указать Title и Description. Здесь же можно раскомментировать строки, в которых указано под какую систему будут собираться пакеты в данном проекте.
Пример xml конфигурации для проекта:
project.xml
<project name="MyProject"> <title>MyProject</title> <description>MyTestProject</description> <person role="maintainer" userid="Admin" /> <person role="bugowner" userid="Admin" /> <publish> <disable /> </publish> <build> <enable /> </build> <debuginfo> <disable /> </debuginfo> <repository name="openSUSE_Factory"> <path project="openSUSE:Factory" repository="standard" /> <arch>x86_64</arch> <arch>i586</arch> </repository> <repository name="openSUSE_11.2"> <path project="openSUSE:11.2" repository="standard"/> <arch>x86_64</arch> <arch>i586</arch> </repository> <repository name="openSUSE_11.1"> <path project="openSUSE:11.1" repository="standard"/> <arch>x86_64</arch> <arch>i586</arch> </repository> <repository name="Fedora_12"> <path project="Fedora:12" repository="standard" /> <arch>x86_64</arch> <arch>i586</arch> </repository> <repository name="SLE_11"> <path project="SUSE:SLE-11" repository="standard" /> <arch>x86_64</arch> <arch>i586</arch> </repository> </project>
Создание пакета происходит по такой же схеме
osc meta pkg -e MyProject MyPackage
где MyProject – название вашего проекта, MyPackage – ваш новый пакет.
Теперь, когда проект и пакет созданы, нам нужно отправить на сервер файлы исходников, из которых будут собираться бинарные пакеты.
Сначала создадим локальную копию проекта у себя на рабочей машине.
osc co MyProject
После этого у вас должна появиться иерархия каталогов MyProject/MyPackage. Помещаем свои файлы исходников в каталог MyPackage, после чего добавляем их в контроль версий командой:
osc add MyProject/MyPackage/MyFiles
и закачиваем на сервер
osc ci MyProject/MyPackage -m «Your comment» –skip-validation
После того как исходники попадают на сервер, система автоматически начинает собирать бинарные пакеты.
Результат сборки смотрим командой
osc results MyProject/MyPackage
Теперь получим линк для .repo файла проекта. Для этого нужно перейти в каталог проекта и выполнить команду:
osc repourls
Всё, теперь мы можем подключать наши репозитории к Linux-машинкам и устанавливать свои пакеты.
Теперь, как и обещал, приведу отдельно краткий перечень команд для работы с проектами и пакетами из консоли.
#Вывести список проектов.
osc ls
#Создать проект.
osc meta prj -e ProjectName
#Создать пакет.
osc meta pkg -e ProjectName PackageName
#Удалить проект или пакет.
osc rdelete ProjectName/PackageName
#Сделать локальную копию проекта.
osc co ProjectName
#Добавить новые файлы в контроль версий.
osc add ProjectName/PackageName/YourFiles
#Удалить исходные файлы.
osc rremove ProjectName PackageName SourceName
osc update ProjectName
#Подтвердить изменения в проекте.
osc ci ProjectName -m «Your comment» --skip-validation
#Подтвердить изменения в пакете.
osc ci Project Name/Package Name -m «Your comment»
#Показать результат сборки
osc results Project Name/Package Name
#Показать лог сборки (выполнять в каталоге пакета).
osc buildlog Platform Arch (osc buildlog xUbuntu_12.04 i586)
#Показать URLs .repo файлов (выполнять в каталоге проекта)
osc repourls