回页首
参考
前提条件
软件包
安装后端 (backend)
错误处理
安装 workers
安装到本机
安装到其他主机
安装配置 MySQL database
配置和启动 frontend 和 webclient
Setup Initial Distributions
访问 webclient
创建 project
为 project 添加 "standard" Repository
/srv/obs/projects/XXX.xml
准备 Repository
使用 bs_admin 扫描 Repository
使用 openSUSE 发行版配置
配置 backend
问题解决
Build.pm
IP 接口

参考

前提条件

软件包

系统上要安装这些包:

按照完 obs ,系统会有这些包:

# rpm -qa|grep obs
obs-server-1.6.0-14.1
obs-signd-1.6.0-14.1
obs-utils-1.6.0-14.1
obs-api-1.6.0-14.1
obs-productconverter-1.6.0-14.1
obs-worker-1.6.0-14.1

安装后端 (backend)

backend 存放所有的 sources 和 built packages,同时也执行任务。backend 在 obs 里由 obs-server 包提供。

rpm -ivh obs-server-1.6.0-14.1.noarch.rpm

安装好 obs-server 后,按顺序启动服务:

rcobsrepserver start
rcobssrcserver start
rcobsscheduler start
rcobsdispatcher start
rcobspublisher  start

这些脚本路径在:

# ls -l /usr/sbin/rcobs*
lrwxrwxrwx 1 root root 25 08-20 15:56 /usr/sbin/rcobsdispatcher -> /etc/init.d/obsdispatcher
lrwxrwxrwx 1 root root 24 08-20 15:56 /usr/sbin/rcobspublisher -> /etc/init.d/obspublisher
lrwxrwxrwx 1 root root 24 08-20 15:56 /usr/sbin/rcobsrepserver -> /etc/init.d/obsrepserver
lrwxrwxrwx 1 root root 24 08-20 15:56 /usr/sbin/rcobsscheduler -> /etc/init.d/obsscheduler
lrwxrwxrwx 1 root root 24 08-20 15:56 /usr/sbin/rcobssrcserver -> /etc/init.d/obssrcserver
lrwxrwxrwx 1 root root 21 08-20 15:56 /usr/sbin/rcobsworker -> /etc/init.d/obsworker

默认配置下,数据都存储在 /srv/obs 目录下。

错误处理

如果我们直接拿 openSUSE 的包来编译或者直接安装,很可能有下面这些错误出现:

没有 /etc/rc.status

# rcobsrepserver start
/usr/sbin/rcobsrepserver: line 19: /etc/rc.status: 没有那个文件或目录

注意: openSUSE 系统中有 /etc/rc.status 文件,如果我们安装在其他系统上 (比如 CentOS ,需要修改脚本文件,否则上面服务启动不了。

也可以用这个 rc.status 文件

没有 /etc/sysconfig/obs-server

# rcobsrepserver start
/usr/sbin/rcobsrepserver: line 21: /etc/sysconfig/obs-server: No such file or directory

在这里有些示例配置文件:

# ls -l /var/adm/fillup-templates/
总计 8
-rw-r--r-- 1 root root 306 2008-04-25 sysconfig.obs-server
-rw-r--r-- 1 root root 876 2008-03-31 sysconfig.obs-worker
# cp /var/adm/fillup-templates/sysconfig.obs-server \
     /etc/sysconfig/obs-server

如果提示找不到文件 /etc/sysconfig/osb-server ,可以拷贝一份 sysconfig.obs-server 。查看示例: obs-server

同理,如果缺少 /etc/sysconfig/osb-worker,可以拷贝一份。查看示例: obs-worker

没有 startproc 命令

# rcobsrepserver start
Initializing obsrepserverchown: `obsrun:obsrun': invalid user
/usr/sbin/rcobsrepserver: line 47: startproc: command not found

自带脚本需要 killproc/checkproc/startproc 等命令支持,编译安装 ftp://ftp.suse.com/pub/projects/init/killproc-2.13.tar.gz 即可。

或者从本站下载 killproc-2.13

安装 workers

workers 向 backend 发送 open build jobs 请求,然后执行 build。

rpm -ivh obs-worker-1.6.0-14.1.noarch.rpm

安装到本机

worker 可以安装在本地(本机)

# rcobsworker start
/usr/sbin/rcobsworker: line 71: [: : integer expression expected
Run 4 obsworker using /tmp
/var/run/obsworker/boot /dist/osc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 99144    0 99144    0     0  4223k      0 --:--:-- --:--:-- --:--:-- 11.8M
194 blocks
/dist/osc
/usr/sbin/rcobsworker: line 92: [: : integer expression expected
/usr/sbin/rcobsworker: line 92: [: : integer expression expected
/usr/sbin/rcobsworker: line 92: [: : integer expression expected
/usr/sbin/rcobsworker: line 92: [: : integer expression expected
/var/run/obsworker/boot /dist/osc
/dist/osc

安装到其他主机

worker 可以安装到其他机器,这些机器可以在您的局域网内,也可以在 Internet 上,不过需要快速的网速。在其他主机上安装好 worker 后,需要修改 一些配置文件使用这些 worker :

修改 "main" 机器配置文件

请修改 /usr/lib/obs/server/BSConfig.pm 文件的具体配置

修改 "worker" 机器配置文件

默认安装有 /var/adm/fillup-templates/sysconfig.obs-worker 文件,拷贝到 /etc/sysconfig/obs-worker , 修改相应的配置项即可。

# cp /var/adm/fillup-templates/sysconfig.obs-worker  /etc/sysconfig/obs-worker
# rpm -qf /var/adm/fillup-templates/sysconfig.obs-worker
obs-worker-0.9.1-4.1

obs-worker-0.9.1-4.1.noarch.rpm* 运行 frontend

还需要安装 "obs-api" 及 MySQL server 才能运行 frontend 。

安装配置 MySQL database

启动 MySQL server

# /etc/init.d/mysqld start
启动 MySQL:                                               [确定]

设置 root 密码

mysqladmin -u root password 'turbolinux'

有些系统这样设置不成功,可以查看这里, 重置MySQL管理员密码

创建空的 production database

# mysql -u root -p
mysql> create database frontend_production;
mysql> create database webclient_production;
mysql> quit

如果这个 MySQL 还提供其他服务,建议创建一个分开的 MySQL 用户,比如 “obs”:

# mysql -u root -p'your-password'
GRANT all privileges
ON frontend_production.*
TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY 'obs-password';

GRANT all privileges
ON webclient_production.*
TO 'obs'@'%', 'obs'@'localhost' IDENTIFIED BY 'obs-password';

FLUSH PRIVILEGES;

在下列配置文件的 "production_slave:" 字段配置刚才设置好的 MySQL 用户名/密码。

/srv/www/obs/frontend/config/database.yml
/srv/www/obs/webclient/config/database.yml

例如(文件 /srv/www/obs/frontend/config/database.yml ):

...
  9 production_slave:
 10   adapter: mysql
 11   database: frontend_production
 12   username: root
 13   password: turbolinux
 14   socket: /var/lib/mysql/mysql.sock
...

创建 database

# cd /srv/www/obs/frontend/
# chown -R lighttpd.lighttpd db/
# sudo -u lighttpd RAILS_ENV="production_slave" rake db:migrate

配置和启动 frontend 和 webclient

默认的配置文件在 /etc/lighttpd/vhosts.d/obs.conf ,默认配置提供

http://127.0.42.1http://127.0.42.2 接口。可以自行配置访问接口:

$HTTP["host"] =~ "buildserver.my.domain.example.org" {
 ...
}

注意 :如果你改变默认的Web接口,需要相应的修改 /srv/www/obs/webclient/config/environments/production_slave.rb 文件中 的配置。

注意 : 如果你的 backend 和 frontend 不在同一台机器上,你需要修改 /srv/www/obs/frontend/config/environments/production_slave.rb 文件中的 SOURCE_HOST 值!

在 /etc/lighttpd/lighttpd.conf 中激活 obs.conf 配置可以这样:

include "vhosts.d/obs.conf"

或者

include_shell "cat vhosts.d/*.conf"

同时, "mod_magnet" , "mod_rewrite" 和 fastcgi 模块也要激活。

...
14 server.modules              = (
15                                "mod_rewrite",
...
24                                "mod_fastcgi",
...
36                                 "mod_magnet",
...
## mod_magnet
include "conf.d/magnet.conf"

## FastCGI (mod_fastcgi)
include "conf.d/fastcgi.conf"

修改 /srv/www/obs/webclient/config/environments/production_slave.rb

如果修改过 /etc/lighttpd/vhosts.d/obs.conf ,那么也要相应修改 /srv/www/obs/webclient/config/environments/production_slave.rb 的配置内容。

重启 lighttpd

# /etc/init.d/lighttpd start
启动 lighttpd:                                            [确定]

Setup Initial Distributions

访问 webclient

使用默认用户名密码 — "Admin"/"opensuse" 访问 http://127.0.42.1 (如果你 修改过,那么你应该知道这个IP改成什么了 :-) ) 。

创建 project

创建 “GTES:11.3” project

为 project 添加 "standard" Repository

在这个 project 里,添加一个 "standard" Repository

/srv/obs/projects/XXX.xml

如果我们创建的 GTES:11.3 project 成功,会有这样一个文件 /srv/obs/projects/GTES:11.3.xml

<project name="GTES:11.3">
  <repository status='disabled' name='standard'>
    <arch>i586</arch>
  </repository>
  <title>GTES 11.3 test environment</title>
  <description>GTES 11.3 test enviroment, at 172.16.70.30 host!

-- Jian Lee</description>
  <person role="maintainer" userid="Admin" />
  <person role="bugowner" userid="Admin" />
  <person role="maintainer" userid="Admin" />
</project>

"disabled" 的状态会阻止在这个 project 之中的编译,这样它就可以作为一基 本的项目了。

准备 Repository

现在从基础发行版拷贝 rpms 到 /srv/obs/build/GTES\:11.3/standard/i586/\:full/ 目录,如果目录不存在, 就手动创建它:

# mkdir -pv "/srv/obs/build/GTES:11.3/standard/i586/:full/"

拷贝完所有的 i568 和 noarch 包之后:

# chown -R obsrun.obsrun /srv/obs

现在重启 obs 的服务。

使用 bs_admin 扫描 Repository

在我们添加一个 Repository 后,需要重新扫描:

# /usr/lib/obs/server/bs_admin --rescan-repository "GTES:11.3" "standard" "i586"

使用 openSUSE 发行版配置

本地拷贝发行版配置文件:

# cp /usr/lib/obs/server/build/configs/sl11.0.conf "/srv/obs/projects/GTES:11.3.conf"

osc 获取

# osc meta prjconf Fedora:11 > "Fedora:11.conf"
# osc meta prjconf "CentOS:CentOS-5" > "CentOS:CentOS-5.conf"
# osc meta prjconf "RedHat:RHEL-5" > "RedHat:RHEL-5.conf"

配置 backend

配置 backend 很重要,默认在 /usr/lib/obs/server/ 下有一个配置文件 BSConfig.pm

意义也很明了,这个和 /srv/www/obs/frontend/config/environments/production_slave.rb 的关系密 切。

问题解决

Build.pm

安装 openSUSE 的包 http://download.opensuse.org/repositories/openSUSE:/Tools/openSUSE_10.3/src/build-2009.07.27-49.2.src.rpm 即可。

# ls /usr/lib/obs/server/Build
Deb.pm  Kiwi.pm  Rpm.pm  Susetags.pm

IP 接口

默认的配置文件 /etc/lighttpd/vhosts.d/obs.conf 使用 localhost IP 地址, 修改为局域网 IP。

# grep HTTP /etc/lighttpd/vhosts.d/obs.conf
$HTTP["host"] =~ "127.0.42.2\.?" {
$HTTP["host"] =~ "127.0.42.2\.?" {
$HTTP["host"] =~ "127.0.42.3\.?" {

修改为基于端口的虚拟主机

# grep SERVER /etc/lighttpd/vhosts.d/obs.conf
$SERVER["socket"] == "172.16.70.30:81\.?" {
$SERVER["socket"] == "172.16.70.30:82\.?" {

注意 : 要用 "==" ,而不是 "=~" !