В заметке рассказано, как при помощи открытой платформы Open Build Service (OBS) упростить поддержку собственных репозиториев и организовать сборку бинарных пакетов для популярных дистрибутивов Linux. При водится пример установки в openSUSE 12.1 серверной части OBS и настройки клиентского окружения для сборки пакетов в Ubuntu.++ Установка сервера OBS
Прежде всего, нужно убедиться, что подключен репозиторий oss (это основной репозиторий openSUSE, где находится только программное обеспечение с открытым кодом). Он необходим для установки таких пакетов как Apache2, MySQL-server и т.д.
Добавим репозиторий для установки Open Build Server.
zypper addrepo download.opensuse.org/distribution/12.1/repo/oss/ openSUSE-12.1-Oss
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 и сгенерируем сертификаты:
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".
Перезапускаем Apache и OBS для применения изменений:
rcapache2 restart
rcobsapidelayed restart
Проверяем работоспособность.
После перезапуска Apache API должен быть доступен по адресу servername:444.
WebUI будет доступен по адресу servername.
Логин и пароль по умолчанию Admin/opensuse.
Подробно останавливаться на использовании WebUI не буду. Интерфейс интуитивно понятный и удобный.
++ Использование клиента для сборки в OBS - OSC (openSUSE Build Service Commander)
Данный пакет доступен практически для всех дистрибутивов Linux. С его помощью мы сможем создавать проекты, пакеты, загружать исходные файлы.
Для установки в Ubuntu выполним:
apt-get install osc
Следующим шагом нужно создать файл конфигурации, который необходим для работы с нашим сервером. Создать его можно в автоматическом режиме, используя любую команду osc, к примеру, osc ls. Но проще создать в корне домашней директории файл .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
Попробуем создать новый проект (MyProject - название вашего проекта):
osc meta prj -e MyProject
После этого откроется xml-файл конфигурации нового проекта, где вам нужно будет, как минимум, указать Title и Description. Здесь же можно раскомментировать строки, в которых указано под какую систему будут собираться пакеты в данном проекте.
<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>
Создание пакета происходит по такой же схеме (MyProject - название вашего проекта, MyPackage - ваш новый пакет)
osc meta pkg -e 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
Теперь приведу отдельно краткий перечень команд для работы с проектами и пакетами из консоли.
Вывести список проектов:
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)
URL: http://cgit.sugarlabs.org/0sugar/bazaar.git/plain/dist/READM...
Обсуждается: http://www.opennet.dev/tips/info/2726.shtml