1. 序
本文和大家讨论下koji的搭建过程,顺便其中的一些概念我会做一些讲解,也是作为我koji环境搭建的一次记录。
2. 什么是koji
koji是一套构建rpm包的软件系统,自身也是基于mock来做rpm包的build操作。一条指令,koji也是可以在多台电脑上进行编译。同时koji也是能作为针对编译的包的一些管理,能够一目了然。话不多说,我们就开始搞起。
3. koji架构
3.1 koji组件结构
如上图,我大概画出来了相关的组件及相关的关系。
- koji-hub: 这个其实是整个koji架构的中心,负责着整个系统的维护和各个组件之间的数据交换。是一个xml-rpc的server,通过mod_wsgi模块挂载在apache上提供服务。接受client和web到来的请求,然后驱使其他组件完成构建工作,同时将数据存放到数据库中。
- kojid:部署在要完成构建工作的相应机器上,可以部署到多个机器。主要负责从Koji-hub请求到任务进行处理,一般来讲就是构建任务
- koji-web:主要提供给使用浏览器的一些接口,然后从上游(hub)获取数据传给浏览器
- koji(client):命令行的客户端,输入指令与hub交互
- kojira: 主要负责和仓库建立,仓库更新等相关事宜。这里仓库不是指数据库,是指rpm repo
- Postgresql DB: 数据库,只有hub和他建立连接,并存取一些关系的数据,比如说账号信息,构建信息,repo的信息等等。
3.2 专业术语
- Build: 对一个软件包的构建,指所有的不同体系架构(eg.x86)下的构建产物,比如: kernel-2.6.9-34.EL, glibc-2.3.4-2.19
- Package: 其实就是包,并不是指某一次的build,因为我们build的产物是n(name)v(version)r(release),比如说ssh-client-5.x86_64.rpm,那么在koji里边Package就是ssh-client.
- channel: 指builder获取构建人物的渠道
- Host : 指运行kojid的构建机器
- Tag和Target: tag是组织包的形式,每个tag拥有一系列可用的包,而且tag可以继承,target是在构建时使用,类似与mock里边指定的配置文件,target和tag的关系是,target关联一个build的tag和最终的tag,build的tag其实就是我们所说指定配置,而最终的tag是用来组织包(不同tag位于不同repo等)
4. 安装相关软件
- Server端依赖的软件
httpd
mod_ssl
postgresql-server
mod_wsgi
- build端依赖的软件
mock
rpm-build
createrepo
- koji的相关组件
koji
koji-hub
koji-web
koji-builder
koji-utils
安装过程中可能会有一些问题,我们需要使用epel,因为koji的相关组件是epel源提供的,我们使用下边指令,或者自己配置相关yum源,然后再使用yum安装以上软件
yum install -y epel-release
我们将builder和server放在同一台主机,使用yum进行安装,安装细节这里不讲
5. 环境搭建
5.1 鉴权方式
koji中主要支持Kerberos和SSL两种方式进行身份验证,我们这里例子使用SSL
5.1.1 建立几个ssl凭证
建立/etc/pki/koji目录,我们把相关的凭证放到这里。
创建ssl.cnf,这个文件用来使用openssl生成key时的配置,拷贝以下内容到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 = sha256
preserve = no
policy = policy_match
[policy_match]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[req]
default_bits = 2048
default_keyfile = privkey.pem
default_md = sha256
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extensions to add to the self signed cert
string_mask = MASK:0x2002
[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = AT
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Vienna
localityName = Loca

最低0.47元/天 解锁文章
3328





