技术领域
本发明涉及软件包编译方法,尤其涉及一种软件包自动化编译方法。
背景技术
在实际使用中,对于SRPM软件包的代码存储以及编译会涉及到多个不同的组件,如代码存储涉及到GIT、DISTGIT,软件包编译涉及到KOJI,进行编译行为涉及到用户CLIENT等,而使用GIT进行代码存储又涉及到对GIT的各种操作,使用KOJI编译又涉及到编译的顺序问题,等等。
在传统场景下,当进行大批量的SRPM软件包编译时是无法确定SRPM软件包的编译依赖顺序的,这一点就使得编译的成功率很低,会花销一部分的时间用于试错;另外的,将SRPM软件包的代码提交到GIT、DISTGIT进行存储也是一个繁重的工作。
如图1所示,用户CLIENT编译一个SRPM软件包需要将SRPM软件包存储到GIT、DISTGIT中(步骤1和2),然后提交KOJI编译(步骤4)。这是编译一个SRPM软件包需要进行的步骤,同时用户CLIENT也不清楚正确的编译顺序。
发明内容
本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种软件包自动化编译方法,能够实现编译SRPM软件包前知道每一轮的编译顺序,以及SRPM存储GIT、DISTGIT、提交KOJI编译的过程实现自动化以减轻人力。
为解决上述技术问题,本发明提出的技术方案为:
一种软件包自动化编译方法,包括以下步骤:
1)获取CLINET提供的待编译SRPM软件包以及用于计算的YUM源地址段;
2)通过编译依赖计算程序处理待编译SRPM软件包以及YUM源地址段得到每一轮的待编译SRPM软件包列表;
3)选取当前轮次待编译SRPM软件包列表,依次将SRPM软件包存储到GIT、DISTGIT中;
4)遍历当前轮次待编译SRPM软件包列表,依次将SRPM软件包提交到KOJI编译;
5)监测KOJI编译的编译结果直到当前轮次待编译SRPM软件包列表中的SRPM软件包全部编译完成;
6)返回步骤3)直到所有待编译SRPM软件包编译完成。
进一步的,所述编译依赖计算程序包括以下步骤:
2.1)读取YUM源地址段的每一个地址中的RPM软件包信息,将RPM软件包信息记录在Provides表中,所述RPM软件包信息包括RPM包或者SRPM编译出的RPM能够提供的文件、软件包的信息;
2.2)解析每一个待编译SRPM软件包,得到对应的spec文件,并将所有的spec文件写入第一列表中;
2.3)通过多线程的方式,从所述列表中取出spec文件进行检查,判断编译对应的SRPM软件包需要的编译依赖,在Provides表中能否找到匹配结果,如果存在匹配结果,则将该SRPM软件包编译后能够提供的文件信息以及生成的二进制包信息记录在Provides表中,并将对应的SRPM软件包加入当前待编译SRPM软件包列表,如果不存在匹配结果,将对应的SRPM软件包的编译依赖信息写入第二列表,直到第一列表为空;
2.4)将当前待编译SRPM软件包列表加入已编译包列表,从待编译SRPM软件包中移除当前待编译SRPM软件包列表中的SRPM软件包;
2.5)返回步骤2.2)创建下一待编译SRPM软件包列表,直到待检查列表为空。
进一步的,步骤2.3)中判断编译对应的SRPM软件包需要的编译依赖,在Provides表中能否找到匹配结果具体包括:解析对应的SRPM软件包得到Buildrequires表,所述Buildrequires表包括在SPEC文件中定义的编译依赖信息,若Provides表中包含对应的SRPM软件包的Buildrequires表,则存在匹配结果,否则不存在匹配结果。
进一步的,步骤2.3)还包括特殊情况的处理步骤,具体包括:如果不存在匹配结果且对应的SRPM软件包作为待编译SRPM软件包经历两次循环,则从记录SRPM软件包的编译依赖信息的第二列表中获取被需要做多的SRPM,将所述SRPM软件包从待编译SRPM软件包中移除,记录对应的编译依赖信息,并加入当前待编译SRPM软件包列表。
进一步的,步骤4)具体步骤包括:KOJI平台将当前待编译SRPM软件包列表中的SRPM软件包依次进行编译,编译完成后对二进制包进行解析,将得到的文件信息以及二进制包信息记录到KOJI上的源信息中,当前待编译SRPM软件包列表对应的文件信息以及二进制包信息作为下一待编译SRPM软件包列表中SRPM软件包的编译依赖。
与现有技术相比,本发明的优点在于:
1、本发明的方法能够得到有序的编译顺序轮次,保证成功率;
2、本发明的方法实现了自动化进行代码存储和KOJI编译,释放人力。
附图说明
图1为传统场景下用户CLIENT编译一个SRPM软件包的示意图。
图2为本发明实施例的方法的编译依赖计算程序的流程示意图。
具体实施方式
以下结合说明书附图和具体优选的实施例对本发明作进一步描述,但并不因此而限制本发明的保护范围。
本发明提出一种软件包自动化编译方法,用于针对大批量的SRPM软件包得到编译顺序并自动化进行代码存储和编译,包括以下步骤:
1)获取CLINET提供的待编译SRPM软件包以及用于计算的YUM源地址段;
2)通过编译依赖计算程序处理待编译SRPM软件包以及YUM源地址段得到每一轮的待编译SRPM软件包列表;
3)选取当前轮次待编译SRPM软件包列表,依次将SRPM软件包存储到GIT、DISTGIT中;
4)遍历当前轮次待编译SRPM软件包列表,依次将SRPM软件包提交到KOJI编译;
5)监测KOJI编译的编译结果直到当前轮次待编译SRPM软件包列表中的SRPM软件包全部编译完成;
6)返回步骤3)直到所有待编译SRPM软件包编译完成。
通过上述步骤,本发明实现了自动化进行代码存储和KOJI编译,释放人力。
如图2所示,本发明依靠编译顺序计算程序对大批量的SRPM软件包进行处理,得到每一轮次应该编译的SRPM软件包,所述编译依赖计算程序包括以下步骤:
2.1)读取YUM源地址段的每一个地址中预先配置的RPM软件包信息,将RPM软件包信息记录在Provides表中,所述RPM软件包信息包括RPM包或者SRPM编译出的RPM能够提供的文件、软件包的信息;
2.2)解析每一个待编译SRPM软件包,得到对应的spec文件,并将所有的spec文件写入第一列表中;
2.3)通过多线程的方式,从所述列表中取出spec文件进行检查,判断编译对应的SRPM软件包需要的编译依赖,在Provides表中能否找到匹配结果,如果存在匹配结果,则将该SRPM软件包编译后能够提供的文件信息以及生成的二进制包信息记录在Provides表中,可通过rpmspec-q--provides*.spec获取,并将对应的SRPM软件包加入当前待编译SRPM软件包列表,如果不存在匹配结果,将对应的SRPM软件包的编译依赖信息写入第二列表,直到第一列表为空;
2.4)将当前待编译SRPM软件包列表加入已编译包列表,从待编译SRPM软件包中移除当前待编译SRPM软件包列表中的SRPM软件包;
2.5)返回步骤2.2)创建下一待编译SRPM软件包列表,直到待检查列表为空。
通过上述步骤,编译顺序计算程序可以将大批量无法确定编译顺序的SRPM软件包整理为每一轮次应该编译的SRPM软件包的列表,同时每一轮次编译完成的SRPM软件包作为下一轮次SRPM软件包的编译依赖,这样就能够保证,下一个轮次SRPM软件包编译时不会因为缺少依赖问题而导致编译失败。
本实施例中,步骤2.3)中判断编译对应的SRPM软件包需要的编译依赖,在Provides表中能否找到匹配结果具体包括:解析对应的SRPM软件包得到Buildrequires表,所述Buildrequires表包括在SPEC文件中定义的编译依赖信息,可通过rpmspec-q--buildrequires*.spec获取,若Provides表中包含对应的SRPM软件包的Buildrequires表,则存在匹配结果,否则不存在匹配结果。
针对某一待编译的SRPM软件包较为特殊,无法从每一轮的待编译SRPM软件包列表得到编译依赖信息的情况,本实施例的步骤2.3)还包括特殊情况的处理步骤,具体包括:如果不存在匹配结果且对应的SRPM软件包作为待编译SRPM软件包经历两次循环,则从记录SRPM软件包的编译依赖信息的第二列表中获取被需要做多的SRPM,将所述SRPM软件包从待编译SRPM软件包中移除,记录对应的编译依赖信息,并加入当前待编译SRPM软件包列表。
本实施例的步骤4)具体步骤包括:KOJI平台将当前待编译SRPM软件包列表中的SRPM软件包依次进行编译,编译完成后对二进制包进行解析,将得到的文件信息以及二进制包信息记录到KOJI上的源信息中,当前待编译SRPM软件包列表对应的文件信息以及二进制包信息作为下一待编译SRPM软件包列表中SRPM软件包的编译依赖。当前轮次的所有SRPM软件包编译完成,KOJI源中也就记录了此轮次能够提供的所有文件信息和所有二进制包信息了。下一轮次SRPM软件包编译时,就基于上一轮次SRPM软件包编译完得到的信息的基础上进行编译,因此根据步骤2)的编译顺序计算程序得到每一轮次待编译SRPM软件包列表的顺序之后,KOJI平台按照该顺序进行编辑可以显著提高成功率。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
机译: 一种家庭自动化网络中的通信方法,该方法使角色之间的通信能够通过帧与与建筑物中的设备项相关联的命令发送器和/或命令接收器组成;用于对家庭自动化安装进行编程的翻译设备,一种类型的家庭自动化设备是命令发送器和/或命令接收器和/或家庭自动化安装编程工具;和家庭自动化安装
机译: 在嵌入式微控制器中实现多种格式寻址的方法,一种用于实现该方法的编译器以及一种用于使用该方法和编译器的微控制器
机译: 软件包文件分发系统,用于同一软件包的软件包文件分发方法,软件包文件分发服务器设备和程序,软件包文件复制终端设备和程序以及文件软件包终端设备