文档章节

koji的部署与配置

行者深蓝
 行者深蓝
发布于 2013/01/10 21:53
字数 4998
阅读 2561
收藏 0
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            = koji@regulus-cn.org						# 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/emailAddress=jian.li@turbolinux.com.cn
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 <regulus@regulus-cn.org>
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 root@10.1.81.87:/etc/pki/koji/kojibuilder1.pem ~/.koji/client.crt
scp -pv root@10.1.81.87:/etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt
scp -pv root@10.1.81.87:/etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt

su - root
mkdir /etc/pki/koji/
scp -pv root@10.1.81.87:/etc/pki/koji/kojira.pem /etc/pki/koji/kojira.pem
scp -pv root@10.1.81.87:/etc/pki/koji/kojibuilder1.pem /etc/pki/koji/kojibuilder1.pem
scp -pv root@10.1.81.87:/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

参考文档

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

pbuilder

reprepro

debian repo manager

 

© 著作权归作者所有

行者深蓝
粉丝 33
博文 60
码字总数 44139
作品 0
朝阳
程序员
私信 提问
基于Jenkins和Koji的代码管理及构建系统

Summary Currently, we KVM team are maintaining the code repository of the virtualization software(such as QEMU, Libvirt, Kimchi, Linux, etc.) for PowerKVM development team and d......

宅蓝三木
2014/10/16
272
0
RPM 构建和跟踪系统--Koji

Koji 是个基于 RPM 的构建系统,主要任务是提供一个灵活,安全和可复用的方法来构建软件。它是个极简,便携的命令行客户端,用户可以创建本地 buildroots 等等。Koji 使用 Mock 来创建 chro...

叶秀兰
2014/03/23
476
0
Python web 常见问题的追溯手段

Koji平台是一个用于编译软件包的平台,它采用Python的MVC框架开发,最近在查看编译apache log时,发现有关于该平台的错误,错误如下: ==================================================...

大培哥
2017/03/13
60
0
如何构建 Fedora 容器镜像

随着容器和容器技术的兴起,现在所有主流的 Linux 发行版都提供了容器基础镜像。本文介绍了 Fedora 项目如何构建其基本镜像,同时还展示了如何使用它来创建分层图像。 基础和分层镜像 在看如...

作者: Clément Verna
09/10
0
0
Fedora 29 从默认 BuildRoot 中删除 GCC 引起激烈争论

Fedora 29 中实现了一项令人惊讶的有争议的变化 —— 从默认的 BuildRoot 中删除 GCC 和 GCC-C++,以便将 Fedora 包与 Koji 和 Mock 组合。 到目前为止,我们总是认为 GCC(包括 GCC C++ 编译...

局长
2018/07/15
2.4K
6

没有更多内容

加载失败,请刷新页面

加载更多

安装k8s集群(一):window10下安装三台centOS

第一步:开启window10的Hyper-V 1. Hyper-V简介 Hyper-V是window提供的虚拟化产品,是window版本的vmware,window 10操作系统(专业版和企业版)默认集成了hyper-V。 体积小、运行速度快、轻...

TopDuang
39分钟前
4
0
mac环境安装TunnelBrick失败

mac最新环境安装TunnelBrick失败。 os系统版本 10.15 解决办法: 参考链接 (1)安装tuntap brew cask install tuntap (2)执行以下命令 kextstat | grep tapsudo kextunload -b net.sf.tu...

wotrd
42分钟前
4
0
java线程池,Executor框架,Callable,Future

package com.yh.tools.thread;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Cal......

颖辉小居
43分钟前
4
0
Python3.8正式发布,这些特性令人眼前一亮

在2019年10月14号,python38第一版以正式发布。所以屏幕面前的各位2.7忠粉,你们到底还在等什么❓那么3.8版本能给大家带来怎样的全新体验,让我们一起看看吧。 > 🍺本篇文章大约需要2分钟来...

s045pd
49分钟前
4
0
Git Reset 三种模式hard,soft,mix

有时候,我们用Git的时候有可能commit提交代码后,发现这一次commit的内容是有错误的,那么有两种处理方法: 1、修改错误内容,再次commit一次 2、使用git reset 命令撤销这一次错误的commi...

筱飞
51分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部