The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Установка Open Build Service и организация сборки пакетов для разных дистрибутивов Linux
В заметке рассказано, как при помощи открытой платформы  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)
 
Ключи: obs, build, package, rpm, deb
Раздел:    Корень / Администратору / Система / Linux специфика / Установка и работа с пакетами программ в Linux

Обсуждение [ RSS ]
  • 1, Карбофос (ok), 12:17, 27/12/2012 [ответить]  
  • –1 +/
    спасибо за инфу! для меня сейчас тоже актуально.
    а в целом как, пользоваться удобно? есть ли какие мелочи, или ошибки после сборки пакетов?
     
  • 2, Michael Shigorin (ok), 02:18, 14/01/2013 [ответить]  
  • +/
    В целом небыстро, kvm на каждый чих...
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру