worker
原理
默认 $OBS_RUN_DIR 为 /var/run/obs/ ,可以在 /etc/sysconfig/obs-worker 里设置。
通过/proc/cpuinfo判断机器cpu个数为 N ,把 N 条要执行的命令放到 $OBS_RUN_DIR/worker/boot/screenrc 文件里存放,用 screen 一次执行,这样 可以用 screen 在后台查看(screen -r XXX;C-a n/p)。
screenrc (也就是 obs worker 要执行的命令)实例:
screen -t builder3-ia64.koji.turbolinux.com.cn/1 ./bs_worker --root /dist/abuild/root_1 --statedir /var/run/obs/worker/1 --id builder3-ia64.koji.turbolinux.com.cn/1 --reposerver http://172.16.70.54:6262 --srcserver http://172.16.70.54:6362 screen -t builder3-ia64.koji.turbolinux.com.cn/2 ./bs_worker --root /dist/abuild/root_2 --statedir /var/run/obs/worker/2 --id builder3-ia64.koji.turbolinux.com.cn/2 --reposerver http://172.16.70.54:6262 --srcserver http://172.16.70.54:6362
rcobsworker 和 obs-worker
/usr/sbin/rcobsworker 启动文件先读取 /etc/sysconfig/obs-worker 配置文 件,如果某些变量没有设置,就自动设置。在 obs-worker 中可以设置的变量包 括:
# 定义临时worker工作目录,默认为/tmp,如果有/BUILD或/abuild就用它们, # 或者在这里设置 OBS_WORKER_DIRECTORY="/dist/abuild" # 定义两个资源服务器,默认为localhost:6262和localhost:6362 OBS_REPO_SERVER="172.16.70.54:6262" OBS_SRC_SERVER="172.16.70.54:6362"
bs_publish
这是发布服务程序,主要包括最后的repodata数据库生成。
repoview
repoview 程序可以帮助我们 html 页面,这些页面的信息由 createrepo 创建的 repodata 数据库得到。
需要在 /usr/lib/obs/server/BSConfig.pm 里面设置 $repodownload 才会有 repoview 步骤。
/usr/lib/obs/server/bs_publish 有下面代码:
309 if ($BSConfig::repodownload) {
310 print " running repoview\n";
311 qsystem('repoview', '-f', "-u$BSConfig::repodownload/$prp_ext", "-t$repoinfo->{'title'}", $extrep) && print(" repoview failed: $? \n");
312 }
如果日志文件 /srv/obs/log/publisher.log 有 repoview 错误,如下:
running createrepo
running repoview
repoview failed: 256
主要原因可能是 createrepo 命令没有生成 sqlite 数据库!可以在 bs_publish 源码修改。
bs_sched
用 rcobsscheduler 脚本启动的实际进程是这个。
指定 OBS 架构
通常在 /etc/sysconfig/obs-server 文件中配置 OBS_SCHEDULER_ARCHITECTURES 变量,这个变量指明包含的架构:
OBS_SCHEDULER_ARCHITECTURES="i586 x86_64 ia64"
在 rcobsscheduler 里面循环用下面命令创建进程:
./bs_sched $i >> "$logdir"/scheduler_$i.log 2>&1 &
这样在运行 bs_sched 进程的系统上才有
# ps aux|grep bs_sched root 13871 0.0 0.0 61156 756 pts/1 S+ 17:43 0:00 grep bs_sched obsrun 30752 6.0 0.2 116524 39672 pts/1 S 17:42 0:01 /usr/bin/perl -w ./bs_sched i586 obsrun 30753 12.1 0.2 117568 40732 pts/1 S 17:42 0:02 /usr/bin/perl -w ./bs_sched x86_64 obsrun 30754 5.1 0.2 110656 33732 pts/1 S 17:42 0:01 /usr/bin/perl -w ./bs_sched ia64
改进
删除 pushd 和 popd 的无用信息
/usr/sbin/rcobsworker 脚本有些动作不好,比如 pushd 和 popd 使用,如果不 把无用信息输出定向到 /dev/null 中,这些信息容易误导用户。
pushd "$workerbootdir" > /dev/null popd > /dev/null
"No News is Good News" !
进制 Release 自动改变
/usr/lib/build/substitutedeps 修改 spec 文件,同时包括修改 Release 信息,可以注释掉
117 # if ($l =~ /^Release:/i) {
118 # my $oldl = $l;
...
204 # }
注释掉会产生什么影响,我会继续观察.
