一种rpm包分布式编译方法及装置制造方法及图纸

技术编号:23851282 阅读:46 留言:0更新日期:2020-04-18 08:46
本发明专利技术涉及一种rpm包分布式编译方法及装置。该方法包括步骤:接收用户输入的编译指令;根据所述编译指令获取的每个需要编译的rpm包类型的相关rpm包;收集所述相关rpm包的依赖包信息,根据所述依赖包信息将所述相关rpm包分发到容器中;在所述容器中编译所述相关rpm包。本发明专利技术可以显著缩短编译时长,大大提升编译效率。

A distributed compiling method and device of RPM package

【技术实现步骤摘要】
一种rpm包分布式编译方法及装置
本专利技术涉及云计算领域,尤其涉及一种rpm包分布式编译方法及装置。
技术介绍
云平台中有大量rpm包需要编译,包括操作系统公共的包以及业务组件特有的软件包。现有编译方法中,采用单个rpm包依次编译的方式,每每个rpm包的编译过程都会有大量相关依赖包的同步编译,当需要编译多个存在相同依赖包的rpm时,这些不同包的依赖包会被重复检查甚至编译。这样就会产生以下几个问题:不同的rpm的相关依赖包会存在同样的包,编译的中间产物会重复创建和删除,包也会重复删除与建立。并且,中间产物的重复创建和删除会延长整个编译过程的时间,效率低下。
技术实现思路
针对现有技术的以上缺陷或改进需求,本专利技术提出了一种rpm包分布式编译方法及装置,能够解决编译时间长、效率低下的问题。根据本专利技术的一个方面,本专利技术提供了一种rpm包分布式编译方法,包括步骤:接收用户输入的编译指令;根据所述编译指令获取的每个需要编译的rpm包类型的相关rpm包;收集所述相关rpm包的依赖包信息,根据所述依赖包信息将所述相关rpm包分发到容器中;在所述容器中编译所述相关rpm包。根据本专利技术的另一个方面,本专利技术提供了一种rpm包编译装置,包括:调度器、具有编译环境的编译容器和rpm包存储单元;所述调度器,用来接收用户输入的编译指令,根据所述编译指令获取的每个需要编译的rpm包类型的相关rpm包,收集所述相关rpm包的依赖包信息,根据所述依赖包信息将所述相关rpm包分发到容器中;编译容器,用来在所述容器中编译所述相关rpm包;rpm包存储单元,用来存储相关rpm包。总体而言,通过本专利技术所构思的以上技术方案与现有技术相比,能够充分利用机器性能,分发到编译机集群,完成整个编译过程,相比传统编译方式能够显著缩短编译时长,大大提升编译效率。附图说明图1是传统的rpm包编译的流程图;图2是本专利技术实施例提供的一种rpm包编译装置的架构示意图;图3是本专利技术实施例提供的一种rpm包编译方法的流程图。具体实施方式为了使本专利技术的目的、技术方案及优点更加清楚明白,以下结合附图及实例,对本专利技术进行进一步详细说明。应当理解,此处所描述的具体实例仅仅用以解释本专利技术,并不用于限定本专利技术。此外,下面所描述的本专利技术各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。图1是传统的rpm包编译的流程图,每个rpm包的编译过程都会有大量相关依赖包的同步编译,当需要编译多个目标rpm包时,这些不同包的依赖包会被重复检查甚至编译。本专利技术提出了一种新的编译方法,该方法根据共同依赖包将rpm包划分为几类,将完全共用依赖包的rpm包划分为一组,共用一个mock,实现不同业务包独立编译,再通过本专利中的分布式编译平台调度容器自动实现按需编译。本专利技术的一种rpm包分布式编译装置如图2所示,包括调度器、多个具有编译环境的编译容器和rpm包存储单元。rpm包存储单元上存储有编译所有rpm包类型的相关rpm包。调度器接收用户输入的编译指令,根据编译指令中的rpm包类型从rpm包存储单元中获取编译指令中rpm包类型的相关rpm包,根据相关rpm包的依赖包信息将相关rpm包分包给编译容器。编译容器可以对rpm包并行编译,将编译后的rpm包会发给调度器进行集成汇总。该编译装置可以是由多个物理节点组成的编译集群,其中一个物理节点为主节点,每个节点上可以有多个容器。装置还可以包括集成模块,用来将所述容器中编译完成的rpm进行集成汇总。下面是本专利技术实施例的rpm包分布式编译方法,包括步骤:S11,调度器接收用户输入的编译指令。当编译指令不包含rpm包类型时,即表示编译环境中所有类型的rpm包,当编译指令包含rpm包类型时,即表示编译指定类型的rpm包。根据一次当前编译模式编译完毕后的rpm库,编译环境中项目编译结果的std/rpmbuild/RPMS等文件夹中,按类型整理出相关包。S12,根据编译指令获取的每个需要编译的rpm包类型的相关rpm包。所有编译过程中可能需要的相关rpm包被预先存储在编译集群的共享存储单元中,获取当前需要编译的rpm包类型需要的rpm包,用来进行rpm包编译。S13,收集rpm包的依赖包信息,根据所述依赖包信息将上述所有rpm包分发到不同的容器中。独立编译各类包,如分别独立编译systemd和dhcp,编译结束后在编译日志里对比各自编译过程中实际参与编译的包类型,提取公共部分作为共同依赖包。将完全共用依赖包的rpm包放进一个容器,不完全共用依赖包的rpm包放进一个容器内,无依赖包的的rpm包放进一个容器内,例如,ruby包和wget包无依赖包,可以放进一个容器内。S14,对各容器的rpm包进行编译。启用分布式编译平台调度容器对各容器内的rpm包进行编译,在编译过程中,将rpm包的编译产物提供给与该rpm包共用依赖包的后一rpm包进行编译,具有共用依赖包的rpm包共用一个mock。在完全共用依赖包的容器里,将该容器里前一个rpm包编译完后的产物提供给该容器内后一个rpm包进行编译。对于完全共用依赖包,那么在该容器内,rpm包可以没有编译顺序。在不完全共用依赖包的rpm包中,对于共用依赖包,也是将前一个rpm包编译完后的产物提供给该容器内后一个rpm包进行编译,对于非共用依赖包,将rpm包编译完后,存储在rmp包存储单元,等待被传输到主节点。对于无依赖包的rpm包,在容器内对个rpm包独立编译。以编译dhcp包类型、systemd包类型为例来说明本专利技术的rpm包分布式编译方法,包括步骤:S21,接收到编译指令,指示需要编译dhcp包类型、systemd包类型。S22,从rpm包存储单元获取编译这两个包类型的rpm包。编译systemd包类型需要systemd包、systemd-libs包、systemd-sysv包,sm-common包等。编译dhcp包类型需要dhcp包、dhcp-common包、dhcp-libs包,sm-common包等。S23,收集上述rpm包的依赖包信息,根据所述依赖包信息将上述所有rpm包分发到不同的容器中。systemd-libs包与systemd-sysv包完全共用systemd等包,dhcp-common包、dhcp-libs包完全共用dhcp等包;systemd和dhcp共用sm-common包。将systemd-libs和systemd-sysv分发到容器1,将systemd和dhcp分发到容器2。Sm-common这种通用包在每个容器里都有,无需分发至各容器。S24,对各容器的rpm包进行编译。在容器1中,先编译systemd-libs包,dhcp-common包,将systemd-libs包编译后的产物提供给systemd-sysv包,(反本文档来自技高网...

【技术保护点】
1.一种rpm包分布式编译方法,其特征在于,包括步骤:/n接收用户输入的编译指令;/n根据所述编译指令获取的每个需要编译的rpm包类型的相关rpm包;/n收集所述相关rpm包的依赖包信息,根据所述依赖包信息将所述相关rpm包分发到容器中;/n在所述容器中编译所述相关rpm包。/n

【技术特征摘要】
1.一种rpm包分布式编译方法,其特征在于,包括步骤:
接收用户输入的编译指令;
根据所述编译指令获取的每个需要编译的rpm包类型的相关rpm包;
收集所述相关rpm包的依赖包信息,根据所述依赖包信息将所述相关rpm包分发到容器中;
在所述容器中编译所述相关rpm包。


2.如权利要求1所述的一种rpm包分布式编译方法,其特征在于,所述分发具体是:
将完全共用依赖包的所述相关rpm包分发至第一容器中,不完全共用依赖包的所述相关rpm包分发至第二容器,无依赖包的所述相关rpm包分发至第三容器。


3.如权利要求1或2所述的一种rpm包分布式编译方法,其特征在于,在所述编译过程中,将rpm包的编译产物提供给与该rpm包具有共用依赖包的后一rpm包进行编译。


4.如权利要求1或2所述的一种rpm包分布式编译方法,其特征在于,在所述编译后,还包括步骤:
将所述容器中编译完成的rpm进行集成汇总。


5.一种rpm包分布式编译装置,其特征...

【专利技术属性】
技术研发人员:王博文梁华
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1