一种软件包自动化编译方法与流程

文档序号:23761207发布日期:2021-01-29 18:53阅读:181来源:国知局
一种软件包自动化编译方法与流程

[0001]
本发明涉及软件包编译方法,尤其涉及一种软件包自动化编译方法。


背景技术:

[0002]
在实际使用中,对于srpm软件包的代码存储以及编译会涉及到多个不同的组件,如代码存储涉及到git、distgit,软件包编译涉及到koji,进行编译行为涉及到用户client等,而使用git进行代码存储又涉及到对git的各种操作,使用koji编译又涉及到编译的顺序问题,等等。
[0003]
在传统场景下,当进行大批量的srpm软件包编译时是无法确定srpm软件包的编译依赖顺序的,这一点就使得编译的成功率很低,会花销一部分的时间用于试错;另外的,将srpm软件包的代码提交到git、distgit进行存储也是一个繁重的工作。
[0004]
如图1所示,用户client编译一个srpm软件包需要将srpm软件包存储到git、distgit中(步骤1和2),然后提交koji编译(步骤4)。这是编译一个srpm软件包需要进行的步骤,同时用户client也不清楚正确的编译顺序。


技术实现要素:

[0005]
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种软件包自动化编译方法,能够实现编译srpm软件包前知道每一轮的编译顺序,以及srpm存储git、distgit、提交koji编译的过程实现自动化以减轻人力。
[0006]
为解决上述技术问题,本发明提出的技术方案为:
[0007]
一种软件包自动化编译方法,包括以下步骤:
[0008]
1)获取clinet提供的待编译srpm软件包以及用于计算的yum源地址段;
[0009]
2)通过编译依赖计算程序处理待编译srpm软件包以及yum源地址段得到每一轮的待编译srpm软件包列表;
[0010]
3)选取当前轮次待编译srpm软件包列表,依次将srpm软件包存储到git、distgit中;
[0011]
4)遍历当前轮次待编译srpm软件包列表,依次将srpm软件包提交到koji编译;
[0012]
5)监测koji编译的编译结果直到当前轮次待编译srpm软件包列表中的srpm软件包全部编译完成;
[0013]
6)返回步骤3)直到所有待编译srpm软件包编译完成。
[0014]
进一步的,所述编译依赖计算程序包括以下步骤:
[0015]
2.1)读取yum源地址段的每一个地址中的rpm软件包信息,将rpm软件包信息记录在provides表中,所述rpm软件包信息包括rpm包或者srpm编译出的rpm能够提供的文件、软件包的信息;
[0016]
2.2)解析每一个待编译srpm软件包,得到对应的spec文件,并将所有的spec文件写入第一列表中;
[0017]
2.3)通过多线程的方式,从所述列表中取出spec文件进行检查,判断编译对应的srpm软件包需要的编译依赖,在provides表中能否找到匹配结果,如果存在匹配结果,则将该srpm软件包编译后能够提供的文件信息以及生成的二进制包信息记录在provides表中,并将对应的srpm软件包加入当前待编译srpm软件包列表,如果不存在匹配结果,将对应的srpm软件包的编译依赖信息写入第二列表,直到第一列表为空;
[0018]
2.4)将当前待编译srpm软件包列表加入已编译包列表,从待编译srpm软件包中移除当前待编译srpm软件包列表中的srpm软件包;
[0019]
2.5)返回步骤2.2)创建下一待编译srpm软件包列表,直到待检查列表为空。
[0020]
进一步的,步骤2.3)中判断编译对应的srpm软件包需要的编译依赖,在provides表中能否找到匹配结果具体包括:解析对应的srpm软件包得到buildrequires表,所述buildrequires表包括在spec文件中定义的编译依赖信息,若provides表中包含对应的srpm软件包的buildrequires表,则存在匹配结果,否则不存在匹配结果。
[0021]
进一步的,步骤2.3)还包括特殊情况的处理步骤,具体包括:如果不存在匹配结果且对应的srpm软件包作为待编译srpm软件包经历两次循环,则从记录srpm软件包的编译依赖信息的第二列表中获取被需要做多的srpm,将所述srpm软件包从待编译srpm软件包中移除,记录对应的编译依赖信息,并加入当前待编译srpm软件包列表。
[0022]
进一步的,步骤4)具体步骤包括:koji平台将当前待编译srpm软件包列表中的srpm软件包依次进行编译,编译完成后对二进制包进行解析,将得到的文件信息以及二进制包信息记录到koji上的源信息中,当前待编译srpm软件包列表对应的文件信息以及二进制包信息作为下一待编译srpm软件包列表中srpm软件包的编译依赖。
[0023]
与现有技术相比,本发明的优点在于:
[0024]
1、本发明的方法能够得到有序的编译顺序轮次,保证成功率;
[0025]
2、本发明的方法实现了自动化进行代码存储和koji编译,释放人力。
附图说明
[0026]
图1为传统场景下用户client编译一个srpm软件包的示意图。
[0027]
图2为本发明实施例的方法的编译依赖计算程序的流程示意图。
具体实施方式
[0028]
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
[0029]
本发明提出一种软件包自动化编译方法,用于针对大批量的srpm软件包得到编译顺序并自动化进行代码存储和编译,包括以下步骤:
[0030]
1)获取clinet提供的待编译srpm软件包以及用于计算的yum源地址段;
[0031]
2)通过编译依赖计算程序处理待编译srpm软件包以及yum源地址段得到每一轮的待编译srpm软件包列表;
[0032]
3)选取当前轮次待编译srpm软件包列表,依次将srpm软件包存储到git、distgit中;
[0033]
4)遍历当前轮次待编译srpm软件包列表,依次将srpm软件包提交到koji编译;
[0034]
5)监测koji编译的编译结果直到当前轮次待编译srpm软件包列表中的srpm软件包全部编译完成;
[0035]
6)返回步骤3)直到所有待编译srpm软件包编译完成。
[0036]
通过上述步骤,本发明实现了自动化进行代码存储和koji编译,释放人力。
[0037]
如图2所示,本发明依靠编译顺序计算程序对大批量的srpm软件包进行处理,得到每一轮次应该编译的srpm软件包,所述编译依赖计算程序包括以下步骤:
[0038]
2.1)读取yum源地址段的每一个地址中预先配置的rpm软件包信息,将rpm软件包信息记录在provides表中,所述rpm软件包信息包括rpm包或者srpm编译出的rpm能够提供的文件、软件包的信息;
[0039]
2.2)解析每一个待编译srpm软件包,得到对应的spec文件,并将所有的spec文件写入第一列表中;
[0040]
2.3)通过多线程的方式,从所述列表中取出spec文件进行检查,判断编译对应的srpm软件包需要的编译依赖,在provides表中能否找到匹配结果,如果存在匹配结果,则将该srpm软件包编译后能够提供的文件信息以及生成的二进制包信息记录在provides表中,可通过rpmspec-q
--
provides*.spec获取,并将对应的srpm软件包加入当前待编译srpm软件包列表,如果不存在匹配结果,将对应的srpm软件包的编译依赖信息写入第二列表,直到第一列表为空;
[0041]
2.4)将当前待编译srpm软件包列表加入已编译包列表,从待编译srpm软件包中移除当前待编译srpm软件包列表中的srpm软件包;
[0042]
2.5)返回步骤2.2)创建下一待编译srpm软件包列表,直到待检查列表为空。
[0043]
通过上述步骤,编译顺序计算程序可以将大批量无法确定编译顺序的srpm软件包整理为每一轮次应该编译的srpm软件包的列表,同时每一轮次编译完成的srpm软件包作为下一轮次srpm软件包的编译依赖,这样就能够保证,下一个轮次srpm软件包编译时不会因为缺少依赖问题而导致编译失败。
[0044]
本实施例中,步骤2.3)中判断编译对应的srpm软件包需要的编译依赖,在provides表中能否找到匹配结果具体包括:解析对应的srpm软件包得到buildrequires表,所述buildrequires表包括在spec文件中定义的编译依赖信息,可通过rpmspec-q
--
buildrequires*.spec获取,若provides表中包含对应的srpm软件包的buildrequires表,则存在匹配结果,否则不存在匹配结果。
[0045]
针对某一待编译的srpm软件包较为特殊,无法从每一轮的待编译srpm软件包列表得到编译依赖信息的情况,本实施例的步骤2.3)还包括特殊情况的处理步骤,具体包括:如果不存在匹配结果且对应的srpm软件包作为待编译srpm软件包经历两次循环,则从记录srpm软件包的编译依赖信息的第二列表中获取被需要做多的srpm,将所述srpm软件包从待编译srpm软件包中移除,记录对应的编译依赖信息,并加入当前待编译srpm软件包列表。
[0046]
本实施例的步骤4)具体步骤包括:koji平台将当前待编译srpm软件包列表中的srpm软件包依次进行编译,编译完成后对二进制包进行解析,将得到的文件信息以及二进制包信息记录到koji上的源信息中,当前待编译srpm软件包列表对应的文件信息以及二进制包信息作为下一待编译srpm软件包列表中srpm软件包的编译依赖。当前轮次的所有srpm软件包编译完成,koji源中也就记录了此轮次能够提供的所有文件信息和所有二进制包信
息了。下一轮次srpm软件包编译时,就基于上一轮次srpm软件包编译完得到的信息的基础上进行编译,因此根据步骤2)的编译顺序计算程序得到每一轮次待编译srpm软件包列表的顺序之后,koji平台按照该顺序进行编辑可以显著提高成功率。
[0047]
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1