2019独角兽企业重金招聘Python工程师标准>>>
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