参考
前提条件
软件包
系统上要安装这些包:
- mysql
- lighttpd
- ruby
- rails
- ruby-mysql
按照完 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.1 和 http://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\.?" {
注意 : 要用 "==" ,而不是 "=~" !
