koji的部署与配置

koji的安装配置

koji 的一些术语

N-V-R


   即Name-Version-Release
   对于unzip-6.0-2.fc13.i686.rpm来说,Name="unzip",Version="6.0",Release="2.fc13"
   NVR其实来自SPEC文件中的对应字段而非rpm文件名,该例只是正好相同而已,比如gcc- 4.4.4-2.fc13.i686.rpm和gcc-c++-4.4.4-2.fc13.i686.rpm其实是由一个srpm即gcc- 4.4.4-2.fc13.src.rpm编译出来的,所以package name都是gcc,即同属一个package 

package


    package name(比如unzip) 

build


   即NVR(比如:unzip-6.0-2.fc13)
   koji系统内的build是唯一的;但是没有编译通过的可以继续提交该build直到编译成功为止 

rpm


   指*.rpm文件
   一个package(N)可能有多个build(NVR);一个build可能有多个rpm,比如unzip-6.0-2.fc13可 能包括unzip-6.0-2.fc13.i686.rpm,unzip-6.0-2.fc13.x86_64.rpm和unzip- 6.0-2.fc13.src.rpm等。 

tag


   koji使用tag来引用package或build的集合。也就是说可以给多个package或build打上同一个tag。
   必须先给package打上tag以后才能给属于该包的build打tag 

build tag


   其实就是tag,只是有不同的用途,tag只是一个package的集合,build-tag一般从某个tag继承而来且还包含arch和build- group信息,可用来创建不同体系的build任务,比如可以为i386和x86_64各创建一个build tag,每次只引用其中一个来为其parent tag创建不同体系的build版本。 

build target


   标明一次build从哪个build tag确定包及编译体系,build完了以后放到哪个tag(默认是源tag)。 

build group


   用于指定mock chroot中需要安装的所有rpm包,然后mock还会安装要编译包的所有依赖,一起构成基础编译系统


Koji 架构

术语

Koji 中有时需要分清通常的 package ,一个包的特定 build ,和一个 build 产生的各种 rpm 文件。下面详细解释:


   Package: source rpm 的名字(仅仅name字段!)。如: kernel , glibc 等等 

   Build: source 包的一个特定 build,特指 source rpm 的name+version+release。例如:kernel-2.6.9-34.EL , glibc-2.3.4-2.19 

   RPM: 一个特定的 rpm。 例如: kernel-2.6.9-34.EL.x86_64,kernel-devel-2.6.9-34.EL.s390, glibc-2.3.4-2.19.i686,glibc-common-2.3.4-2.19.ia64 

Koji 包含几个部分 : koji-hub

它是所有 Koji 操作的核心,通过 XML-RPC 运行于 Apache 的 mod_python 模块下。koji-hub 采用被动方式,仅仅接受 XML-RPC 请求,依 赖编译守护模块和其他模块来进行交互。koji-hub是唯一直接访问数据库的 模块,而且是有读写文件系统的权限的两个模块之一(另外一个是koji)。

kojid

它是编译守护模块,运行在每一个执行编译任务的机器上。主要任务 是对编译请求分析处理。Koji除了编译外也支持其他任务,如创建安装 images。kojid同样也可以完成这样的任务。kojid使用mock来编译。它为每 一个build创建一个干净的编译环境。kojid使用python编写,通过 XML-RPC 和 koji-hub 通信。

koji-web

它包含一套脚本,运行在 mod_python 下,使用 Cheetah 模板引 擎为 Koji 提供一个 Web 接口。

koji

它是一个用 python 写的 CLI 程序,提供对于 Koji 最多的操作。它 能让用户查询信息,也能执行编译操作。

kojira

它是一个后台守护程序,可以实时更新 build root repodata 一个示例架构图

koji 的安装

必须预先安装的包

  • Koji Server

 httpd koji koji-hub koji-web mod_ssl mod_python postgresql-server 

  • Koji Builder

koji-builder mock koji-utils rpm-build createrepo
setarch (for some archs you'll require a patched version)(暂时没用到)

Koji Server服务端的配置

创建SSL配置文件


mkdir /etc/pki/koji/ &&  touch /etc/pki/koji/ssl.cnf

写入配置文件  /etc/pki/koji/ssl.cnf 如下内容(可根据自己的情况修改)


HOME                    = .
RANDFILE                = .rand

[ca]
default_ca              = ca_default

[ca_default]
dir                     = .
certs                   = $dir/certs
crl_dir                 = $dir/crl
database                = $dir/index.txt
new_certs_dir           = $dir/newcerts
certificate             = $dir/%s_ca_cert.pem
private_key             = $dir/private/%s_ca_key.pem
serial                  = $dir/serial
crl                     = $dir/crl.pem
x509_extensions         = usr_cert
name_opt                = ca_default
cert_opt                = ca_default
default_days            = 3650
default_crl_days        = 30
default_md              = md5
preserve                = no
policy                  = policy_match

[policy_match]
countryName             = match
stateOrProvinceName     = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[req]
default_bits            = 1024
default_keyfile         = privkey.pem
distinguished_name      = req_distinguished_name
attributes              = req_attributes
x509_extensions         = v3_ca # The extentions to add to the self signed cert
string_mask             = MASK:0x2002

[req_distinguished_name]
countryName                     = Country Name (2 letter code)
countryName_default             = CN									# you can modify
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Beijing								# you can modify
localityName                    = Locality Name (eg, city)
localityName_default            = Beijing								# you can modify
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = Linux									# you can modify
organizationalUnitName          = Organizational Unit Name (eg, section)
commonName                      = Common Name (eg, your name or your server\'s hostname)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_default            = [email protected]						# you can modify
emailAddress_max                = 64

[req_attributes]
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20
unstructuredName                = An optional company name

[usr_cert]
basicConstraints                = CA:FALSE
nsComment                       = "OpenSSL Generated Certificate"
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid,issuer:always

[v3_ca]
subjectKeyIdentifier            = hash
authorityKeyIdentifier          = keyid:always,issuer:always
basicConstraints                = CA:true


创建CA (以下命令需要ROOT权限)


cd /etc/pki/koji/ && mkdir {certs,private}
touch index.txt
echo 01 > serial
caname=koji
openssl genrsa -out private/${caname}_ca_cert.key 2048
openssl req -config ssl.cnf -new -x509 -days 3650 -key private/${caname}_ca_cert.key -out ${caname}_ca_cert.crt -extensions v3_ca

注意:直接回车就行(Common Name 填 koji)

创建koji各组件和kojiadmin需要的证书 (以下命令需要ROOT权限)


for user in kojira kojiweb kojihub kojiadmin kojibuilder1 kojibuilder2 kojibuilder3; 
do
    openssl genrsa -out certs/${user}.key 2048
    openssl req -config ssl.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key
    openssl ca -config ssl.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt -out certs/${user}.crt -outdir certs -infiles certs/${user}.csr
    cat certs/${user}.crt certs/${user}.key > ${user}.pem
done

注意: Common Name字段依次输入kojira、kojiweb、kojihub、kojiadmin、kojibuilder1、kojibuilder2、kojibuilder3 [y/n]选y 其它直接回车

创建Web浏览器需要的证书 以下命令需要ROOT权限


caname=koji
for user in kojiadmin;
do
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt -out certs/${user}_browser_cert.p12
done

注意:直接回车 使用方式:浏览器访问时,点击右上角的login会提示需要证书,导入方法为“编辑” -> “首选项” -> “高级” -> “加密” -> “查看证书” -> “您的证书” -> 导入kojiadmin_browser_cert.p12

添加koji 管理专用用户

koji 自动编译平台需要对应一个操作系统用户,用来执行管理koji,理论上root用户也可以用来管理koji,但是建立一个专有的用户更妥当


useradd kojiadmin


koji的通讯是通过SSL证书验证来实现的,因此要为kojiadmin 用户准备证书


mkdir ~/.koji
cp -pv /etc/pki/koji/kojiadmin.pem ~/.koji/client.crt
cp -pv /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt
cp -pv /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt

注意:~表示当前用户(即kojiadmin),建议不要使用root用户。

配置koji CLI

koji 命令行程序默认使用 /etc/koji.conf 配置文件,但是每个用户的 ~/.koji/config 文件会覆盖全局文件的设置

修改文件/etc/koji.conf


server = http://localhost/kojihub
weburl = http://localhost/koji
pkgurl = http://localhost/packages
topdir = /mnt/koji
cert = ~/.koji/client.crt
ca = ~/.koji/clientca.crt
serverca = ~/.koji/serverca.crt

初始化数据库

初始化数据库

如果数据库安装后尚未初始化则执行: 


service postgresql initdb        
service postgresql start 

添加一个koji数据库专用系统用户,并清空该用户的密码


useradd koji
passwd -d koji

su - postgres
    createuser koji
    createdb -O koji koji
exit 

当询问到y/n 全部 “n”

# su - koji
psql koji koji < /usr/share/doc/koji-1.6.0/docs/schema.sql

配置koji数据库

(修改文件/var/lib/pgsql/data/pg_hba.conf,注意该文件必须要用root用户去修改,否则无法进入/var/lib/pgsql目录。)

设置koji用户访问postgresql数据库权限,本例中,kojiweb和kojihub都是在本地localhost上运行。在 /var/lib/pgsql/data/pg_hba.conf文件中增加下面一行:


host    koji        koji        127.0.0.1/32          trust

应用改变:


su - postgres
pg_ctl reload
exit

原有配置如下,


# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

可考虑更改为如下:


local   all         all                               trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128               trust

PostgreSQL Server 配置文件列表


/var/lib/pgsql/data/pg_hba.conf
/var/lib/pgsql/data/postgresql.conf

创建koji管理员账号

这里最重要,管理员账号要手动创建,其他用户可以用管理员权限创建,如果使用username/password验证方式访问数据库,那么管理员创建的其他用户的密码需要手动设置。


su - koji
psql
insert into users (name, password, status, usertype) values ('kojiadmin', '3460572', 0, 1);
select * from users;     # 这里要注意!例子中 id=1
insert into user_perms (user_id, perm_id,creator_id) values (1, 1,1);
exit

Koji Hub 配置文件列表


/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/kojihub.conf
/etc/httpd/conf.d/ssl.conf (when using ssl auth)

修改配置文件 /etc/httpd/conf/httpd.conf

修改apache的性能(留作疑问?)


<IfModule prefork.c>
...
MaxRequestsPerChild  100
</IfModule>
<IfModule worker.c>
...
MaxRequestsPerChild  100
</IfModule>

修改配置文件 /etc/httpd/conf.d/kojihub.conf

通常这个文件中包含这样一行:


PythonOption ConfigFile /etc/koji-hub/hub.conf

如果使用 ssl 认证,kojihub.conf文件中设置:


<Location /kojihub>
        SSLOptions +StdEnvVars
</Location>

修改配置文件 /etc/koji-hub/hub.conf

我们可以配置 /etc/koji-hub/hub.conf 文件,下面值设置要注意(本例都使用ssl认证方式):


DBName = koji
DBUser = koji
#DBHost = localhost
#DBPass = 密码字符串
KojiDir = /mnt/koji
...
DNUsernameComponent = CN
ProxyDNs = /C=CN/ST=BeiJing/L=Beijing/O=TurboLinux/CN=koji/[email protected]
KojiWebURL = http://172.16.70.48/koji

其中 ProxyDNs 和 kojiweb 认证文件的 DirName 字段一样。

其中密码是这样设置的:


[root@dev koji]# su - postgres
psql
postgres=# ALTER USER koji with password '密码字符串'


配置 /etc/httpd/conf.d/ssl.conf


SSLCertificateFile /etc/pki/koji/certs/kojihub.crt
SSLCertificateKeyFile /etc/pki/koji/certs/kojihub.key
SSLCertificateChainFile /etc/pki/koji/koji_ca_cert.crt
SSLCACertificateFile /etc/pki/koji/koji_ca_cert.crt
SSLVerifyClient require
SSLVerifyDepth  10


设置 SELinux

如果运行了 SELinux,那么要容许 apache 访问 sql:


[root@dev koji]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   enforcing
Mode from config file:          enforcing
Policy version:                 21
Policy from config file:        targeted
[root@dev koji]# setsebool -P httpd_can_network_connect_db 1

停用 selinux


#cd /selinux
#echo 0 > enforce

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /selinux
Current mode:                   permissive
Mode from config file:          enforcing
Policy version:                 24
Policy from config file:        targeted

文件系统设置


例子设置了 KojiDir 为 /mnt/koji

cd /mnt
mkdir koji
cd koji
mkdir {packages,repos,work,scratch}
chown apache.apache *


重启httpd使以上设置生效


service httpd restart

增加kojira用户


koji add-user kojira          // 正确返回:Added user kojira (n),否则前面配置有问题,解决后再继续!
koji grant-permission repo kojira

   注意:要用前面被配置了证书的用户(kojiadmin)执行该命令,否则会显示“Unable to log in, no authentication methods available

配置kojiweb

修改配置文件/etc/httpd/conf.d/kojiweb.conf


PythonOption KojiHubURL http://10.1.81.87/kojihub
PythonOption KojiPackagesURL http://10.1.81.87/packages
PythonOption WebCert /etc/pki/koji/kojiweb.pem
PythonOption ClientCA /etc/pki/koji/koji_ca_cert.crt
PythonOption KojiHubCA /etc/pki/koji/koji_ca_cert.crt

<Location /koji/login>
     SSLOptions +StdEnvVars
</Location>

添加如下选项


Alias  /packages  /mnt/koji/packages
<Directory "/mnt/koji/packages">
    Options all
</Directory>

重启Apache(httpd)使以上设置生效 


service httpd restart

kojibuilder管理

添加分布式 koji builder

koji CLI 的操作

假设主机A 10.1.81.87 为koji-server 假设主机B 10.1.83.63 为kojibuilder1

在koji-server端执行

添加 kojibuilder1 到 createrepo channel



koji add-host kojibuilder1 mips64el
koji add-host-to-channel kojibuilder1 createrepo

检查 Koji Builder 软件包是否安装完全


koji koji-builder mock koji-utils rpm-build createrepo
setarch (for some archs you'll require a patched version)(暂时没用到)

在编译机端导入服务器端生成的证书

在服务端生成kojibuilder证书

如果服务端已经预留足够的kojibuilder证书 此步骤可以跳过

caname=koji
for user in kojibuilder1 ; 
do
    openssl genrsa -out certs/${user}.key 2048
    openssl req -config ssl.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key
    openssl ca -config ssl.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt -out certs/${user}.crt -outdir certs -infiles certs/${user}.csr
    cat certs/${user}.crt certs/${user}.key > ${user}.pem
done

修改kojibuilder 配置文件(/etc/koji.conf),指定证书的位置:

server = http://10.1.81.87/kojihub
weburl = http://10.1.81.87/koji
pkgurl = http://10.1.81.87/packages
cert = ~/.koji/client.crt
ca = ~/.koji/clientca.crt
serverca = ~/.koji/serverca.crt

配置kojid

修改kojibuilder 配置文件/etc/kojid/kojid.conf,参考配置信息如下:


[kojid]
maxjobs=10
vendor=regulus
packager=regulus
distribution=regulus
mockhost=regulus-linux
server=http://10.1.81.87/kojihub
pkgurl=http://10.1.81.87/packages
allowed_scms=10.1.81.87:/cvs/pkgs

from_addr= REGULUS <[email protected]>
cert = /etc/pki/koji/kojibuilder1.pem
ca = /etc/pki/koji/koji_ca_cert.crt
serverca = /etc/pki/koji/koji_ca_cert.crt

配置kojira

修改kojibuilder配置文件 /etc/kojira/kojira.conf 


server=http://10.1.81.87/kojihub
cert = /etc/pki/koji/kojira.pem
ca = /etc/pki/koji/koji_ca_cert.crt
serverca = /etc/pki/koji/koji_ca_cert.crt

查看配置信息 


sed -e '/^;/d;/^$/d' /etc/kojid/kojid.conf

将服务器生成的证书传到客户端

mkdir ~/.koji
scp -pv [email protected]:/etc/pki/koji/kojibuilder1.pem ~/.koji/client.crt
scp -pv [email protected]:/etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt
scp -pv [email protected]:/etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt

su - root
mkdir /etc/pki/koji/
scp -pv [email protected]:/etc/pki/koji/kojira.pem /etc/pki/koji/kojira.pem
scp -pv [email protected]:/etc/pki/koji/kojibuilder1.pem /etc/pki/koji/kojibuilder1.pem
scp -pv [email protected]:/etc/pki/koji/koji_ca_cert.crt /etc/pki/koji/koji_ca_cert.crt


测试 和kojiserver 通讯

在编译机端执行


service kojid start

在server端执行koji list-hosts 如果显示如下,说明通讯成功


[kojiadmin@koji-server]$ koji list-hosts
Hostname                     Enb Rdy Load/Cap Arches           Last Update
kojibuilder1                 Y   Y    0.0/2.0 mips64el         2012-07-12 13:44:49

启动kojira

service kojira start

koji 的分布式编译

在服务器A上启动portmap服务

service rpcbind start
service nfs start

对nfs进行配置(/etc/exports)

修改配置文件/etc/exports


/mnt/koji *(rw,sync,no_root_squash)

注:其中/mnt/koji为服务器的koji文件,是所有ip主机都可以挂载服务器A的文件。可以改为特别ip地址段如:10.1. 则10.1..的主机B都可以挂载服务器的/mnt/koji文件系统。之后,输入


exportfs -rv
service nfs start

使配置文件生效。

在服务器A上启动nfs服务

service nfs start

在编译机B上挂载服务器的/mnt/koji

mount -t nfs -o nolock 10.1.81.87:/mnt/koji /mnt/koji

这是表明挂载服务器A的/mnt/koji到编译机B上的/mnt/koji

对服务器A配置

对文件/etc/httpd/conf/httpd.conf增加如下内容。


Alias /kojirepo "/mnt/koji"

<Directory "/mnt/koji">
        Options all
</Directory>



重启服务使其生生效


service httpd restart

koji 的用户管理

添加编译用户

创建用户认证文件


cd /etc/pki/koji/
caname=koji
for user in koji.panhaitao; do
openssl genrsa -out certs/${user}.key 2048
openssl req -config ssl.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key
openssl ca -config ssl.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt -out certs/${user}.crt -outdir certs -infiles certs/${user}.csr
cat certs/${user}.crt certs/${user}.key > ${user}.pem
done

创建 web 认证 (PKCS12 user certificate)


user="koji.panhaitao"
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt -out certs/${user}_browser_cert.p12


为编译用户创建对应的系统用户


useradd koji.panhaitao

为用户导入证书


#su - koji.panhaitao
mkdir ~/.koji
cp -pv /etc/pki/koji/koji.panhaitao.pem ~/.koji/client.crt
cp -pv /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt
cp -pv /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt


使用管理账户添加用户权限


# su - kojiadmin
koji add-user koji.panhaitao
koji grant-permission build koji.panhaitao
koji grant-permission admin koji.panhaitao

koji 的编译管理

koji 软件包管理

导入SRPM和RPM


koji import [--link] <SRPM1> <SRPM2> ...
koji import [--link] <RPM1> <RPM2> ...

  • 导入SRPM应遵循先导入SRPM,然后再导入对应的RPM包的原则;
  • 如果需要导入一个没有SRPM可对应的的RPM包,如果需要直接导入RPM请使用命令;

koji import --create-build <RPM1> <RPM2>

  • 如果要导入的packages和/mnt/koji目录树在同一个分区,那么建议使--link选项,它以创建硬连接的方式导入,可大大提高速度

创建tag和build tag

  • tag      是用来管理导入的PACKAGES的标签,标签可以继承
  • buildtag 是用来标志编译软件是需要的标签,buildtag一般继承于tag

koji add-tag nk6.0-mips64el
koji add-tag --parent nk6.0-mips64el --arches=mips64el nk6.0-mips64el-build

移除不用的 tag


koji remove-tag nk6.0-mips64el

为导入的软件包打上标签


koji list-pkgs --quiet | xargs koji add-pkg --owner kojiadmin nk6.0-mips64el
koji list-untagged | xargs -n 1 koji call tagBuildBypass nk6.0-mips64el

添加一个编译target


koji add-target nk6.0-mips64el nk6.0-mips64el-build

该选项的完成格式如下:


koji add-target target-name from-build-tag to-dist-tag

target-name      target的名称
from-build-tag   使用源自build-tag的软件仓库集合
to-dist-tag      编译完成的build归档至目标tag的软件仓库集合

若 to-dist-tag 与 target-name 同名时 to-dist-tag 可省略

添加一个编译组


koji add-group  nk6.0-mips64el-build build
koji add-group  nk6.0-mips64el-build srpm-build

修改编译组的属性


koji add-group-pkg nk6.0-mips64el-build build bash bzip2 coreutils cpio diffutils regulus-release findutils gawk gcc gcc-c++ grep gzip info make patch \
regulus-rpm-config rpm-build sed shadow-utils tar unzip util-linux-ng which

koji add-group-pkg nk6.0-mips64el-build srpm-build bash curl git gnupg make rpm-build shadow-utils regulus-rpm-config regulus-release

手动创建仓库


koji regen-repo nk6.0-mips64el-build

创建一个编译任务


koji build nk6.0-mips64el zlib-1.2.3-25.RG6.0.01.src.rpm

使用koji编译一个不属于任何标签的软件包


koji build --scratch nk6.0-mips64el zlib-1.2.3-25.RG6.0.01.src.rpm

--scratch  该选项会让该build不汇入数据库,仅仅是一个build,RPMS会放置在 <topdir>/scratch


批量建立任务


ls *.src.rpm | xargs -n 1 koji build --scratch nk6.0-mips64el

koji 版本管理

开始编译一个新的版本,可能需要如下步骤:


koji add-tag nk6.3-mips64el
koji add-tag --parent nk6.3-mips64el --arches=mips64el nk6.3-mips64el-build
koji add-target nk6.3-mips64el nk6.3-mips64el-build 
koji add-group  nk6.3-mips64el-build build
koji add-group  nk6.3-mips64el-build srpm-build
koji add-group-pkg nk6.3-mips64el-build build bash bzip2 coreutils cpio diffutils regulus-release findutils gawk gcc gcc-c++ grep gzip info make patch regulus-rpm-config rpm-build sed shadow-utils tar unzip util-linux-ng which
koji add-group-pkg nk6.3-mips64el-build srpm-build bash curl git gnupg make rpm-build shadow-utils regulus-rpm-config regulus-release

koji list-untagged | xargs -n 1 koji call tagBuildBypass nk6-mips64el

其中koji build 需要的最小环境的包需要自己现编译出来,以RHEL6.3为例,koji build 需要的最小编译环境包含在如下源码包中:


bash-4.1.2-9.el6_2.src.rpm      
gawk-3.1.7-9.el6.src.rpm     
rpm-4.8.0-27.el6.src.rpm
bzip2-1.0.5-7.el6_0.src.rpm     
gcc-4.4.6-4.el6.src.rpm      
sed-4.2.1-10.el6.src.rpm
coreutils-8.4-19.el6.src.rpm    
git-1.7.1-2.el6_0.1.src.rpm  
regulus-release-6Server-RG6.0.15.Adv.src.rpm                 
tar-1.23-7.el6.src.rpm
cpio-2.10-10.el6.src.rpm        
gnupg2-2.0.14-4.el6.src.rpm  
texinfo-4.13a-8.el6.src.rpm
curl-7.19.7-26.el6_2.4.src.rpm  
grep-2.6.3-3.el6.src.rpm     
unzip-6.0-1.el6.src.rpm
diffutils-2.8.1-28.el6.src.rpm  
gzip-1.3.12-18.el6.src.rpm   
regulus-rpm-config-9.0.3-25.RG6.02.src.rpm                   
util-linux-ng-2.17.2-12.7.el6.src.rpm
findutils-4.4.2-6.el6.src.rpm   
make-3.81-20.el6.src.rpm     
patch-2.6-6.el6.src.rpm 
which-2.19-6.el6.src.rpm


koji 故障处理

koji数据库重建

删除数据库并重新配置

注意:确保postgresql,httpd,kojid,kojira正在运行

删除数据库

dropdb -U koji koji 

如果报错“正在被使用”,先停掉apache,重启postgresql后再试

重建数据库

su
su - postgres
createdb -O koji koji
exit postgres
exit root

psql koji koji < /usr/share/doc/koji-1.6.0/docs/schema.sql	

注意版本号,例如:
koji-1.3.2 /usr/share/doc/koji-1.3.2/docs/schema.sql   
koji-2.6.0 /usr/share/doc/koji-1.6.0/docs/schema.sql

添加必要数据

登录数据库


psql -U koji koji
insert into users (name, password, status, usertype) values ('kojiadmin', 'qwe123', 0, 1);
select * from users;	
insert into user_perms (user_id, perm_id) values (1,1);	
exit koji

user_id等于上面看到的id


如果出现 
koji=> insert into user_perms (user_id, perm_id) values (1, 1);
ERROR:  null value in column "creator_id" violates not-null constraint
insert into user_perms (user_id, perm_id,creator_id) values (1, 1,1);

可以尝试



其它设置

cd /mnt/koji
rm -rf {packages,repos,work,scratch}/*
rm -rf /var/lib/mock/*
service httpd restart

登录kojiadmin 用户


su - kojiadmin

koji add-user kojira
koji grant-permission repo kojira

koji add-host kojibuilder1 mips64el
koji add-host-to-channel kojibuilder1 createrepo

capacity 

psql -U koji koji
select (id, name, capacity) from host;
update host set capacity = 16 where id = 1;
select (id, name, capacity) from host;		// 检查是否被修改
exit koji


服务重启


服务端
service postgresql restart
service nfs restart 
service httpd restart

builder端
service kojid restart 
service kojira restart
mount -t nfs -o nolock 10.1.81.87:/mnt/koji /mnt/koji

实例


dropdb -U koji koji 

su - postgres
createdb -O koji koji
exit postgres

psql koji koji < /usr/share/doc/koji-1.6.0/docs/schema.sql

psql -U koji koji

insert into users (name, password, status, usertype) values ('kojiadmin', 'qwe123', 0, 1);
insert into user_perms (user_id, perm_id,creator_id) values (1,1,1);

exit koji


su - kojiadmin

koji add-user kojira
koji grant-permission repo kojira

koji add-host kojibuilder1 mips64el
koji add-host-to-channel kojibuilder1 createrepo

koji add-host kojibuilder2 mips64el
koji add-host-to-channel kojibuilder2 createrepo

koji add-host kojibuilder3 mips64el
koji add-host-to-channel kojibuilder3 createrepo

koji add-host kojibuilder4 mips64el
koji add-host-to-channel kojibuilder4 createrepo

koji add-host kojibuilder5 mips64el
koji add-host-to-channel kojibuilder5 createrepo

koji add-host kojibuilder6 mips64el
koji add-host-to-channel kojibuilder6 createrepo

koji add-host kojibuilder7 mips64el
koji add-host-to-channel kojibuilder7 createrepo

koji add-host kojibuilder8 mips64el
koji add-host-to-channel kojibuilder8 createrepo

koji add-host kojibuilder9 mips64el
koji add-host-to-channel kojibuilder9 createrepo

koji add-host kojibuilder10 mips64el
koji add-host-to-channel kojibuilder10 createrepo


koji add-user koji.1
koji add-user koji.2
koji add-user koji.3
koji grant-permission admin koji.1
koji grant-permission admin koji.2
koji grant-permission admin koji.3



koji add-tag nk6.0-mips64el
koji add-tag --parent nk6.0-mips64el --arches=mips64el nk6.0-mips64el-build
koji add-target nk6.0-mips64el nk6.0-mips64el-build
koji add-group  nk6.0-mips64el-build build
koji add-group  nk6.0-mips64el-build srpm-build

koji add-group-pkg nk6.0-mips64el-build build bash bzip2 coreutils cpio diffutils regulus-release findutils gawk gcc gcc-c++ grep gzip info make patch regulus-rpm-config rpm-build sed shadow-utils tar unzip util-linux-ng which
koji add-group-pkg nk6.0-mips64el-build srpm-build bash curl git gnupg make rpm-build shadow-utils regulus-rpm-config regulus-release


koji list-pkgs --quiet | xargs koji add-pkg --owner kojiadmin nk6.0-mips64el
koji list-untagged | xargs -n 1 koji call tagBuildBypass nk6.0-mips64el

koji regen-repo nk6.0-mips64el-build



koji list-pkgs --quiet | xargs koji add-pkg --owner kojiadmin nk6.0
koji list-untagged | xargs -n 1 koji call tagBuildBypass nk6.0
koji regen-repo nk6.0-build





koji add-tag RG6.0
koji add-tag --parent RG6.0 --arches=mips64el RG6.0-build
koji add-group  RG6.0-build build
koji add-group  RG6.0-build srpm-build

koji add-target RG6.0 RG6.0-build


koji add-group-pkg nk6.0-build build bash bzip2 coreutils cpio diffutils regulus-release findutils gawk gcc gcc-c++ grep gzip info make patch regulus-rpm-config rpm-build sed shadow-utils tar unzip util-linux-ng which
koji add-group-pkg nk6.0-build srpm-build bash curl git gnupg make rpm-build shadow-utils regulus-rpm-config regulus-release




koji add-tag RG6.3
koji add-tag RG6.3-build --parent RG6.3 --arches=mips64el
koji add-tag-inheritance --priority 1 RG6.3-build RG6.0-build
koji add-target RG6.3 RG6.3-build










参考资源

http://fedoraproject.org/wiki/Zh/%E6%9E%84%E5%BB%BAKoji%E7%BC%96%E8%AF%91%E6%9C%8D%E5%8A%A1%E5%99%A8#koji_.E7.AE.80.E4.BB.8B

http://jianlee.ylinux.org/Computer/Server/koji.html

http://fedoraproject.org/wiki/Zh/%E4%BD%BF%E7%94%A8Koji%E7%BC%96%E8%AF%91%E6%89%93%E5%8C%85%E7%B3%BB%E7%BB%9F

参考文档

  • http://skoji.cern.ch/koji/
  • http://koji.fedoraproject.org/koji
  • http://fedoraproject.org/wiki/Koji
  • http://fedoraproject.org/wiki/Koji/ServerHowTo
  • http://fedoraproject.org/wiki/Projects/Mock
  • http://people.redhat.com/notting/mash/

基于deb包管理体系的自动化编译工具

pbuilder

reprepro

debian repo manager

 

你可能感兴趣的:(koji的部署与配置)