Open Build Service — создаём свои репозитории

в 15:28, , рубрики: linux, opensuse, системное администрирование, метки: ,

image
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 должен быть доступен по адресу https://servername:444.
WebUI будет доступен по адресу https://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

Автор: camec

Источник

Поделиться

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