fedpkg工具简介

来源:互联网 发布:淘宝商品侵权如何处理 编辑:程序博客网 时间:2024/05/20 13:36

fedpkg是Fedora社区的代码管理工具,它是 基于一系列现有工具(git/curl/diff等)的基础上,封装了这一系列命令,满足其代码管控的需求。

1. 什么是Fedpkg?

fedpkg是Fedora使用python封装的一个前端应用程序,可以使用同一个前端让开发者方便的获取源码、修改、提交、编译这一系列的过程。
要理解这个工具,我们首先需要了解Fedora的源码管理组织结构和编译相关的基础设施。

2. Fedora的源码管控结构

Fedora的源码采用tarball和patch分离的管理方式,较好的分隔了来自开源社区的源码和发行版自己的源码。开源社区的源码一般采用tarball的形式管控,而Fedora自己的源码则一般通过patches的形式添加。Fedora分两个地方来管理源码

2.1 Tarball

tarball存放在一个独立的空间,采用md5认证的方式。以包名作为区分。一个包中可以包含多个版本的tarball。


<span style="font-family:SimSun;">http://pkgs.fedoraproject.org/repo/pkgs/ --+                                                                          +-- 包名 --+                                                                                            +-- tarballname/ --+                                                                                                                             +-- md5sum --+                                                                                                                                                      +-- tarball</span>

2.2 GIT仓库

GIT仓库位于http://pkgs.fedoraproject.org/cgit/ ,每一个仓库中包含了这个包相关的patches,spec文件和一个source文件,source文件中指示了其关联的tarball的的名字和md5值。

3. fedpkg的配置

fedpkg的配置文件默认安装在系统的/etc/rpkg/fedpkg.conf

<span style="font-family:SimSun;">[fedpkg]lookaside = http://pkgs.fedoraproject.org/repo/pkgslookasidehash = md5lookaside_cgi = https://pkgs.fedoraproject.org/repo/pkgs/upload.cgigitbaseurl = ssh://%(user)s@pkgs.fedoraproject.org/%(module)sanongiturl = git://pkgs.fedoraproject.org/%(module)stracebaseurl = https://%(user)s@pkgs.fedoraproject.org/%(module)sbranchre = f\d$|f\d$|el\d$|olpc\d$|master$kojiconfig = /etc/koji.confbuild_client = koji</span>

4. fedpkg应用


fedpkg封装了git、mock、rpmbuild和mock前端,并提供了一些独有的命令来实现tarball和git仓库的关联。
下面从一些应用命令的介绍来了解fedpkg的用法

4.1 获取源码

4.1.1 从服务器checkout

<span style="font-family:SimSun;">$ fedpkg co <MODULE></span>

module是模块的名字,一般情况下也就是包的名字。
这一步实际上是封装了git clone <URL/module>, 其中URL来自上面的配置文件中gitbaseurl的定义,注意默认情况下,如果不加任何参数,fedpkg会以本地的git配置或者本地登录用户名来作为user参数传入,这需要这个user具有开发者权限。如果没有有权限的user,可以添加–anonymous 参数,fedpkg就会以anongiturl定义的URL来clone。
checkout下来的内容是几个patch,一个spec文件和一个名叫source的文件。之后所有的操作都是要进入模块内,在模块的顶层目录下操作。
conf文件中对应的配置:
<span style="font-family:SimSun;">gitbaseurl = ssh://%(user)s@pkgs.fedoraproject.org/%(module)sanongiturl = git://pkgs.fedoraproject.org/%(module)stracebaseurl = https://%(user)s@pkgs.fedoraproject.org/%(module)s</span>

4.1.2 获取真正的source tarball

上一步从git上clone下来的source不包含真正的source tarball, 这一步就是下载真正的source tarball。

$ fedpkg sources

这一步是封装了curl命令实现的。
下面conf项定义了tarball的位置和校验方式。

lookaside = http://pkgs.fedoraproject.org/repo/pkgslookasidehash = md5lookaside_cgi = https://pkgs.fedoraproject.org/repo/pkgs/upload.cgi

4.1.3 解包

$ fedpkg prep

这一步完成的是rpmbuild的%prep阶段。即解压source并依照spec打上patches。至此,source的准备工作就算完成了。

4.2 修改

4.2.1 作出自己的修改

进入已经解压和patch好的source,首先将要修改的文件备份(添加后缀),然后修改。

4.2.2 将自己的修改生成为patch

这一步封装了gendiff命令。

$ fedpkg patch <suffix

4.3 编译

4.3.1 本地编译

<span style="font-family:SimSun;">$ fedpkg local</span>

4.3.2 产生一个srpm包

<span style="font-family:SimSun;">$ fedpkg srpm</span>

4.3.3 调用mock编译

<span style="font-family:SimSun;">$ fedpkg mockbuild</span>

4.4 利用定义的客户端编译

$ fedpkg build

一般指通过koji客户端推入编译。对应的配置:

kojiconfig = /etc/koji.confbuild_client = koji

4.5 提交

4.5.1 抽取spec的changelog

$ fedpkg clog

可以将spec文件中的changelog内容抽取到一个clog文件,用于后续git commit时的log。

4.5.2 添加到git版本库

$ git add <files>$ fedpkg commit -F clog$ fedpkg push

fedpkg没有封装git add命令,需要手动调用该命令。

4.5.3 更新source

<span style="font-family:SimSun;">$ fedpkg new-sources$ fedpkg upload</span>

4.6 分支切换

在conf文件中按照发行版定义的了分支。例如f21, rh6, master等。

$ fedpkg switch-branch f16

这里要明确的是,fedpkg操作的目录实际上就是一个git仓库,因此在这个目录可以使用git的所有命令。当使用git来new一个自己本地的开发分支时,这个分支可以使用任何命名,但是如果使用fedpkg,就一定要遵照fedpkg.conf中规定的命名

branchre = f\d$|f\d$|el\d$|olpc\d$|master$




0 0