在 Fedora 里使用 Koji
koji 编译系统是专为 Fedora 7 及其以后版本使用的编译打包系统。打包者使用 Koji 的客户端去请求软件包编译和从编译系统得到相关的信息。
安装 Koji
安装 Koji 的命令行模式
你可以用一条命令去安装你使用 Koji(当然你还要成为一名 Fedora 的贡献者。)
yum install fedora-packager
fedora-packager 提供了一系列脚本帮助你管理和安装你的koji环境。额外地,它也包括了 Koji CLI 的依赖,当你安装 fedora-packager 的时候就会被自动安装。该命令叫 koji,包括在 koji 的主包里。使用 Kerberos 作为默认的协议认证koji客户端和中心服务器。当然 SSL 协议和用户名/密码的办法是可行的。你需要有一个有效的认证去获得 Koji 众多特性。否则,在没有认证的情况下只有许多只读的命令工作。
初始化 Fedora Setup
为了使用 Koji 服务器,软件包维护者需要运行:
/usr/bin/fedora-packager-setup
如果系统里的用户需要使用 Koji 去构建 Fedora 的软件包,则必须需要运行一次该命令。每一个用户都必须拥有他们的证书用于认证他们的身份。
Fedora 证书
Koji 使用以下三份证书:
~/.fedora-upload-ca.cert
(此证书在验证的时候用于导入使用者的密钥。)- 你可以在 此处 下载或者利用
fedora-packager-setup
获取它。
~/.fedora-server-ca.cert
(此证书在验证时用于导入编译服务器的密钥。)- 你可以在 此处 下载或者利用
fedora-packager-setup
获取它。
配置 Koji
Koji 本地客户端的全局配置文件在 /etc/koji.conf
。你不需要为编译 Fedora 软件包去更改配置文件,只要你运行了 fedora-packager-setup
,它就会自动在 ~/koji/ 目录建立一个系列配置文件。这些配置文件允许你使用首要架构编译系统和次级架构编译系统。
Web 界面
用于浏览 koji 数据的首页是一个 web 应用程序。现已可以在 http://koji.fedoraproject.org/koji/ 上使用了。大多数界面都是只读的,但是如果你登入了koji的网页界面并且有足够的权限,你可以在网页里实现以下动作,例如:
- 取消一个编译任务
- 重新提交一个失败的编译任务
- 安装一个提示
拥有管理权限的用户将获得额外的动作,例如
- 新建/编辑/删除标记
- 新建/编辑/删除目标
- 启动/关闭编译主机
Web 界面使用了 SSL 验证,为了登录你讲需要一个真实的 SSL 证书和你的浏览器需要被配置成信任该SSL证书。当运行 fedora-packager-setup.sh 将会出现如何完成以上步骤的指令。
提示 =
你可以在 koji 安装一个提示请求,可以确保你不会错过你关注的一个软件包当它被编译的时候。登录入 koji 并移动到页面的按钮,你应该会在那里发现 “添加一个提示” 的连接和你已配置提示的列表。
指向一个目标编译软件包
对于简单的编译请求,在 Makefile.common 里有一个别名去请求 koji 编译。这仅仅需要 Fedora 的打包者进入适当的软件包的发行版分支(从 CVS 服务器提取出),然后运行:
make build
这将会为分支启动一个编译请求。十分容易!
记录下依赖于被标记的所有要完成的编译请求分支(首先运行 make tag
)
koji 也可以指向特定的标记,如下:
make build TARGET='<target>'
例如,如果想在 rawhide 上编译一个软件包,该软件包依赖于由 rel-eng 创建为更新 API 的一个特定标记的软件包,例如 dist-f11-python,你可以运行如下命令:
make build TARGET='dist-f11-python'
Scratch Builds
你可以使用以下命令进行 scratch build :
make scratch-build
如果你想为特定的架构进行 scratch build,你可以输入:
make scratch-build-<archs>
<arch>可以是用逗号分隔开的架构清单。
最后,可以把一个特定的 koji 标记加入到 scratch-build 命令里面。
make scratch-build TARGET='<target>'
Chained builds
有时你想在启动下一个任务之前取保前一个编译成功。例如,当你想重编译一个倚靠已编译好的依赖关系的软件包。那么你需要使用一次 chain build:
make chain-build CHAIN='libwidget libgizmo'
现有的软件包将会被加入到 CHAIN 清单的后面。“:”被应用于 CHAIN 的范围以定义软件包所属的组。在下一组编译开始前,软件包无论在任何一个组都会被并行编译,且所有软件包都必须编译成功和移送到软件包仓库。例如:
make chain-build CHAIN='libwidget libaselib : libgizmo :'
此举将会同时编译 libwidget 和 libaselib,随后是 libgizmo,然后到现有目录内的软件包。如果没有定义组,那么软件包将会按照顺序编译。如果其中一个编译失败,跟随的编译就会被取消但已经编译好的软件包将会被推送的软件仓库。