CN112286534A - 一种软件包自动化编译方法 - Google Patents
一种软件包自动化编译方法 Download PDFInfo
- Publication number
- CN112286534A CN112286534A CN202011343305.4A CN202011343305A CN112286534A CN 112286534 A CN112286534 A CN 112286534A CN 202011343305 A CN202011343305 A CN 202011343305A CN 112286534 A CN112286534 A CN 112286534A
- Authority
- CN
- China
- Prior art keywords
- srpm
- software package
- compiled
- compiling
- list
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 19
- 238000004364 calculation method Methods 0.000 claims abstract description 4
- 238000012544 monitoring process Methods 0.000 claims abstract description 4
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims 1
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种软件包自动化编译方法,包括以下步骤:获取CLINET提供的待编译SRPM软件包以及用于计算的YUM源地址段;通过编译依赖计算程序处理待编译SRPM软件包以及YUM源地址段得到每一轮的待编译SRPM软件包列表;选取当前轮次待编译SRPM软件包列表,依次将SRPM软件包存储到GIT、DISTGIT中;遍历当前轮次待编译SRPM软件包列表,依次将SRPM软件包提交到KOJI编译;监测KOJI编译的编译结果直到当前轮次待编译SRPM软件包列表中的SRPM软件包全部编译完成;重复上述步骤直到所有待编译SRPM软件包编译完成。本发明能够实现调整SRPM软件包编译顺序,以及SRPM存储GIT、DISTGIT、提交KOJI编译的过程实现自动化以减轻人力。
Description
技术领域
本发明涉及软件包编译方法,尤其涉及一种软件包自动化编译方法。
背景技术
在实际使用中,对于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平台按照该顺序进行编辑可以显著提高成功率。
上述只是本发明的较佳实施例,并非对本发明作任何形式上的限制。虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明。因此,凡是未脱离本发明技术方案的内容,依据本发明技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均应落在本发明技术方案保护的范围内。
Claims (5)
1.一种软件包自动化编译方法,其特征在于,包括以下步骤:
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所述的软件包自动化编译方法,其特征在于,所述编译依赖计算程序包括以下步骤:
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软件包列表,直到待检查列表为空。
3.根据权利要求2所述的软件包自动化编译方法,其特征在于,步骤2.3)中判断编译对应的SRPM软件包需要的编译依赖,在Provides表中能否找到匹配结果具体包括:解析对应的SRPM软件包得到Buildrequires表,所述Buildrequires表包括在SPEC文件中定义的编译依赖信息,若Provides表中包含对应的SRPM软件包的Buildrequires表,则存在匹配结果,否则不存在匹配结果。
4.根据权利要求2所述的软件包自动化编译方法,其特征在于,步骤2.3)还包括特殊情况的处理步骤,具体包括:如果不存在匹配结果且对应的SRPM软件包作为待编译SRPM软件包经历两次循环,则从记录SRPM软件包的编译依赖信息的第二列表中获取被需要做多的SRPM,将所述SRPM软件包从待编译SRPM软件包中移除,记录对应的编译依赖信息,并加入当前待编译SRPM软件包列表。
5.根据权利要求1所述的软件包自动化编译方法,其特征在于,步骤4)具体步骤包括:KOJI平台将当前待编译SRPM软件包列表中的SRPM软件包依次进行编译,编译完成后对二进制包进行解析,将得到的文件信息以及二进制包信息记录到KOJI上的源信息中,当前待编译SRPM软件包列表对应的文件信息以及二进制包信息作为下一待编译SRPM软件包列表中SRPM软件包的编译依赖。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011343305.4A CN112286534A (zh) | 2020-11-25 | 2020-11-25 | 一种软件包自动化编译方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011343305.4A CN112286534A (zh) | 2020-11-25 | 2020-11-25 | 一种软件包自动化编译方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112286534A true CN112286534A (zh) | 2021-01-29 |
Family
ID=74426708
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011343305.4A Pending CN112286534A (zh) | 2020-11-25 | 2020-11-25 | 一种软件包自动化编译方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286534A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113204347A (zh) * | 2021-04-02 | 2021-08-03 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
CN113721918A (zh) * | 2021-08-06 | 2021-11-30 | 苏州浪潮智能科技有限公司 | 一种基于koji进行编译和软件源制作的方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080022268A1 (en) * | 2006-05-24 | 2008-01-24 | Bea Systems, Inc. | Dependency Checking and Management of Source Code, Generated Source Code Files, and Library Files |
WO2015183241A1 (en) * | 2014-05-27 | 2015-12-03 | Hewlett-Packard Development Company, L.P. | Distributed compilation of statically typed languages |
CN106325965A (zh) * | 2015-06-24 | 2017-01-11 | 龙芯中科技术有限公司 | 操作系统的编译方法和装置 |
CN110377290A (zh) * | 2019-07-22 | 2019-10-25 | 阿里巴巴集团控股有限公司 | 一种目标工程编译的方法、装置及设备 |
CN110990020A (zh) * | 2019-11-24 | 2020-04-10 | 苏州浪潮智能科技有限公司 | 一种软件编译方法、装置及电子设备和存储介质 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
-
2020
- 2020-11-25 CN CN202011343305.4A patent/CN112286534A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080022268A1 (en) * | 2006-05-24 | 2008-01-24 | Bea Systems, Inc. | Dependency Checking and Management of Source Code, Generated Source Code Files, and Library Files |
WO2015183241A1 (en) * | 2014-05-27 | 2015-12-03 | Hewlett-Packard Development Company, L.P. | Distributed compilation of statically typed languages |
CN106325965A (zh) * | 2015-06-24 | 2017-01-11 | 龙芯中科技术有限公司 | 操作系统的编译方法和装置 |
CN110377290A (zh) * | 2019-07-22 | 2019-10-25 | 阿里巴巴集团控股有限公司 | 一种目标工程编译的方法、装置及设备 |
CN110990020A (zh) * | 2019-11-24 | 2020-04-10 | 苏州浪潮智能科技有限公司 | 一种软件编译方法、装置及电子设备和存储介质 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
Non-Patent Citations (2)
Title |
---|
南方以北: "【拓扑排序】:如何确定代码源文件的编译依赖关系?", pages 1 - 7, Retrieved from the Internet <URL:https://blog.csdn.net/qq_25800311/article/details/90690745> * |
魏新宇等: "《云原生应用构建》", 30 June 2020, 北京:机械工业出版社, pages: 15 - 16 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113204347A (zh) * | 2021-04-02 | 2021-08-03 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
CN113204347B (zh) * | 2021-04-02 | 2022-03-22 | 北京易捷思达科技发展有限公司 | 适用于软件包的处理方法、装置及电子设备 |
CN113721918A (zh) * | 2021-08-06 | 2021-11-30 | 苏州浪潮智能科技有限公司 | 一种基于koji进行编译和软件源制作的方法和装置 |
CN113721918B (zh) * | 2021-08-06 | 2023-08-04 | 苏州浪潮智能科技有限公司 | 一种基于koji进行编译和软件源制作的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102768639B (zh) | 操作系统内核级错误定位方法及装置 | |
CN112286534A (zh) | 一种软件包自动化编译方法 | |
CN112306855B (zh) | 接口自动化测试方法、装置、终端和存储介质 | |
CN110442371B (zh) | 一种发布代码的方法、装置、介质及计算机设备 | |
CN113434328A (zh) | 一种分散控制系统逻辑组态编译纠错方法和系统 | |
CN108121774B (zh) | 一种数据表备份方法及终端设备 | |
CN111984666B (zh) | 数据库访问方法、装置、计算机可读存储介质和计算机设备 | |
CN112783749A (zh) | 一种静态代码扫描优化方法、装置、电子设备和存储介质 | |
US6269367B1 (en) | System and method for automated identification, remediation, and verification of computer program code fragments with variable confidence factors | |
EP3818437B1 (en) | Binary software composition analysis | |
CN112559356A (zh) | 一种软件自动测试方法及其系统 | |
CN112506897A (zh) | 一种分析、定位数据质量问题的方法及系统 | |
CN111949467A (zh) | 服务器硬件的校验方法和系统 | |
CN114676126B (zh) | 基于数据库的数据校验方法、装置、设备及存储介质 | |
CN110674038A (zh) | 一种对软件测试中错误信息的分类方法及装置 | |
CN115562672A (zh) | 源代码自动编译方法、编译系统、电子设备及存储介质 | |
CN112784290B (zh) | 数据导出工具安全性分析方法及系统及数据导出方法 | |
CN112181951B (zh) | 一种异构数据库数据迁移方法、装置及设备 | |
CN113037521B (zh) | 识别通讯设备状态的方法、通讯系统及存储介质 | |
CN111930387B (zh) | 一种集成包的集成方法及装置、电子设备和存储介质 | |
CN111143229A (zh) | 软件测试方法及装置、计算机设备及计算机可读存储介质 | |
CN110764784B (zh) | 一种识别三方so文件的方法、智能终端及存储介质 | |
CN111670091B (zh) | 机器人程序指令编译方法、机器人控制系统及存储装置 | |
WO2023155863A1 (en) | Methods and devices for compiler function fusion | |
CN112035161B (zh) | 一种小程序发布校验的方法及并行发布的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |