CN106325965A - 操作系统的编译方法和装置 - Google Patents
操作系统的编译方法和装置 Download PDFInfo
- Publication number
- CN106325965A CN106325965A CN201510355082.6A CN201510355082A CN106325965A CN 106325965 A CN106325965 A CN 106325965A CN 201510355082 A CN201510355082 A CN 201510355082A CN 106325965 A CN106325965 A CN 106325965A
- Authority
- CN
- China
- Prior art keywords
- compiling
- source code
- packet
- translation
- code packet
- 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.)
- Granted
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种操作系统的编译方法和装置,该方法包括:在当前平台获取最小编译数据包,根据最小编译数据包生成第一编译环境,根据第一编译环境在多个非基础的源码数据包中确定第一源码数据包,该第一编译环境满足编译第一源码数据包所需的依赖条件;根据第一编译环境对第一源码数据包进行编译操作,得到第一编译数据包;基于第一编译环境安装第一编译数据包,建立第二编译环境;将第二编译环境作为新的第一编译环境,执行根据第一编译环境在多个非基础的源码数据包中确定第一源码数据包,直至多个非基础的源码数据包均被编译;本发明提供的操作系统的编译方法和装置,实现在不可知源码数据包之间依赖关系的平台上编译操作系统。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种操作系统的编译方法和装置。
背景技术
由于需要解决的问题越来越多,各种操作系统应用而生,但根据问题所在的环境不同,操作系统的跨平台应用越来越广泛,但一些操作系统不是支持所有的平台,从而给操作系统的跨平台应用带来一些不便。
举例来说,Fedora(由全球社区爱好者构建的面向日常应用的快速、稳定、强大的操作系统)社区提供的Fedora操作系统不支持MIPS(Microprocessor without interlocked piped stages,精简指令集)架构,若需要在MIPS架构上安装Fedora操作系统,需要下载用于建立Fedora操作系统的源码数据包,源码数据包可以为红帽源码包管理(Source RedHat Package Manager,简称SPRM)包,并对源码数据包进行编译得到编译数据包,编译数据包可以为红帽包管理数据包(RedHatPackage Manager,简称RPM)包;但在对各个源码数据包进行编译时,由于MIPS架构的平台不清楚各个源码数据包之间存在单向依赖关系,不能直接对各个源码数据包进行编译;例如源码数据包2依赖于源码数据包1,则对源码数据包2进行编译时,需要以对源码数据包1进行编译得到编译数据包1,基于安装编译数据包1得到的编译环境,才可对源码数据包2进行编译,如果先对源码数据包2进行编译,则会编译不成功;因此技术人员需要按照各个源码数据包之间存在的单向依赖关系,对各个源码数据包进行手动编译。
但由于建立Fedora操作系统的源码数据包的个数通常在百位数以上,因此上述单向依赖关系的信息量繁杂庞大,通过技术人员的手动编译百位数以上的源码数据包,基本是不现实的;即使通过技术人员的手动编译,所耗费的人力物力较大,不利于操作系统的跨平台应用。
发明内容
本发明提供一种操作系统的编译方法和装置,以实现在不可知源码数据包之间存在的全部依赖关系的平台上编译操作系统的发行版,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了操作系统的通用性。
第一方面,本发明提供一种操作系统的编译方法,包括:
步骤一、获取最小编译数据包,所述最小编译数据包用于提供所述操作系统编译时所需的最小编译环境;
步骤二、在当前平台上,根据所述最小编译数据包生成第一编译环境;
步骤三、根据所述第一编译环境在多个非基础的源码数据包中确定第一源码数据包,所述第一编译环境满足编译所述第一源码数据包所需的依赖条件;
步骤四、根据所述第一编译环境对所述第一源码数据包进行编译操作,得到第一编译数据包;
步骤五、基于所述第一编译环境安装所述第一编译数据包,建立第二编译环境;
步骤六、将所述第二编译环境作为新的第一编译环境,执行步骤三,直至所述多个非基础的源码数据包均已被编译;
其中,所述操作系统的发行版所需的源码集合由所述多个基础的源码数据包和所述多个非基础的源码数据包构成,所述最小编译数据包根据多个基础的源码数据包编译得到。
在第一方面的第一种可能的实现方式中,所述根据第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,包括:
在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包;
根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果;
判断是否根据当前的所述第一编译环境对所述多个非基础的源码数据包中所有未编译的源码数据包进行过解析判断操作,若否,则选择任意一个未进行过解析判断操作的源码数据包作为新的当前源码数据包,返回执行所述解析判断操作;
将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
根据第一方面的第一种可能的实现方式中,在第二种可能的实现方式,所述根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,包括:
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件,所述依赖条件为编译所述当前源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
根据第一方面的第二种可能的实现方式中,在第三种可能的实现方式,所述基于所述第一编译环境安装所述第一编译数据包,建立第二编译环境之后,所述编译方法还包括:
将所述第一编译数据包的包名添加至所述第二编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
根据第一方面的第三种可能的实现方式中,在第四种可能的实现方式,在所述获取最小编译数据包之前,所述编译方法还包括:
下载所述操作系统的发行版所需的源码集合和预设的最小依赖规则,所述预设的最小依赖规则为能够提供所述操作系统的最小编译环境的多个基础的源码数据包的包名和所述多个基础的源码数据包的编译顺序;
从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包;
所述获取用于提供所述操作系统编译时所需的最小编译环境的最小编译数据包,包括:
按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个所述基础的源码数据包对应的最小编译数据包;
所述根据所述最小编译数据包生成第一编译环境,包括:
安装所述多个基础的源码数据包对应的最小编译数据包,生成所述第一编译环境,并生成所述第一编译环境对应的仓库索引。
第二方面,本发明提供一种操作系统的编译装置,包括:
获取模块,用于获取最小编译数据包,所述最小编译数据包用于提供所述操作系统的最小编译环境,所述最小编译数据包根据多个基础的源码数据包编译得到;
建立模块,用于在当前平台上,根据所述最小编译数据包生成第一编译环境;
确定模块,用于在当前平台上,根据所述第一编译环境在多个非基础的源码数据包中确定第一源码数据包,所述第一编译环境满足编译所述第一源码数据包所需的依赖条件;
编译模块,用于根据所述建立模块生成的所述第一编译环境对所述确定模块确定的所述第一源码数据包进行编译操作,得到第一编译数据包;
所述建立模块,还用于基于所述第一编译环境安装所述编译模块得到的第一编译数据包,建立第二编译环境;
所述建立模块,还用于将所述第二编译环境作为新的第一编译环境,控制所述确定模块执行所述根据所述第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,直至所述多个非基础的源码数据包均已被编译;
其中,所述操作系统的发行版所需的源码集合由所述多个基础的源码数据包和所述多个非基础的源码数据包构成,所述最小编译数据包根据多个基础的源码数据包编译得到。
在第二方面的第一种可能的实现方式中,所述确定模块具体包括:
在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包;
根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果;
若所述当前源码数据包对应的判断结果为所述第一编译环境不符合编译所述当前源码数据包所需的依赖条件,则在所述多个非基础的源码数据包中,选择除该当前源码数据包以外的任意一个源码数据包作为新的当前源码数据包,返回执行所述解析判断操作;
将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
根据第二方面的第一种可能的实现方式中,在第二种可能的实现方式,所述确定模块具体用于
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件,所述依赖条件为编译所述当前源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名;
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
根据第二方面的第二种可能的实现方式中,在第三种可能的实现方式,所述建立模块还用于:
在基于所述第一编译环境安装所述编译模块得到的第一编译数据包,建立第二编译环境之后,将所述第一编译数据包的包名添加至所述第二编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
根据第二方面的第三种可能的实现方式中,在第四种可能的实现方式,
所述获取模块,还用于:
下载所述操作系统的发行版所需的源码集合和预设的最小依赖规则,所述预设的最小依赖规则为能够提供所述操作系统的最小编译环境的多个基础的源码数据包的包名和所述多个基础的源码数据包的编译顺序;
从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包;
所述获取模块,具体用于:
按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个所述基础的源码数据包对应的最小编译数据包;
所述编译模块,还用于:
安装所述多个基础的源码数据包对应的最小编译数据包,生成第一编译环境,并生成所述第一编译环境对应的仓库索引。
本发明提供的操作系统的编译方法和装置,通过利用各个源码数据包对编译环境的依赖条件,可基于第一编译环境确定当前可进行编译和安装的源码数据包,随后建立新的第一编译环境,继续确定基于新的第一编译环境可进行编译和安装的源码数据包,以此类推自动地对各个源码数据包进行编译和安装,直至多个非基础的源码数据包均被编译,以完成操作系统的发行版所需的全部源码数据包的编译,从而实现了在不可知源码数据包之间存在的全部依赖关系的平台上编译操作系统的发行版,由于在当前平台上编译得到的操作系统能够在该当前平台上安装运行,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了该操作系统的通用性。
附图说明
图1为本发明操作系统的编译方法实施例一的流程图;
图2为本发明操作系统的编译方法实施例二的流程图;
图3为本发明操作系统的编译装置实施例一的结构图。
具体实施方式
图1为本发明操作系统的编译方法实施例一的流程图。如图1所示,本实施例的执行主体为操作系统的编译装置,该编译装置可采用软件和/或硬件的方式实现,优选的,该编译装置可以集成在需要安装操作系统的当前平台上,该当前平台可以是对编译操作系统所需的多个源码数据包之间存在的全部单向依赖关系不可知的,具体的,本实施例包括:
S101、获取最小编译数据包,所述最小编译数据包用于提供所述操作系统编译时所需的最小编译环境。
S102、在当前平台上,根据所述最小编译数据包生成第一编译环境。
S103、在当前平台上,根据第一编译环境在多个非基础的源码数据包中确定第一源码数据包。
在实际应用中,本实施例的当前平台可以采用MIPS架构的平台,即需要在该MIPS架构的平台上编译Fedora操作系统的发行版的全部源码数据包,以生成可以在当前平台上安装的Fedora操作系统的发行版的可执行的安装文件,由于MIPS架构不是Fedora开发社区官方支持的架构,因此,基于MIPS架构的当前平台不可知编译Fedora操作系统的发行版所需的各个源码数据包之间全部的单向依赖关系,不能直接对各个源码数据包进行编译;例如源码数据包2依赖于源码数据包1,则对源码数据包2进行编译时,需要以对源码数据包1进行编译得到编译数据包1为编译环境,基于安装了编译数据包1的编译环境,才可对源码数据包2进行编译,如果先对源码数据包2进行编译,则会编译不成功。
在本发明实施例中,通过S101获取用于提供编译所述操作系统的最小编译环境的最小编译数据包,并通过S102在当前平台上,安装所述最小编译数据包生成第一编译环境,得到所述操作系统的初始编译环境。然后,通过S103根据所述第一编译环境确定当前可进行编译的非基础的源码数据包为第一源码数据包,该第一编译环境满足编译该第一源码数据包所需的依赖条件;其中,S103获取到的第一源码数据包为根据第一编译环境筛选出来的,S103所获取的第一源码数据包,均为其所需的编译环境已被当前的第一编译环境满足的源码数据包。也就是说,此时获取到的第一源码数据包必然能够基于当前的第一编译环境进行编译。即S103选中的源码数据包都能够被成功编译。
需要说明的是,编译Fedora操作系统的发行版所需的多个源码数据包分为多个基础的源码数据包和多个非基础的源码数据包,即多个基础的源码数据包和多个非基础的源码数据包构成了操作系统编译时所需的源码集合。S101中的最小编译数据包可以根据所述多个基础的源码数据包编译得到。可选的,所述多个基础的源码数据包的包名可以由Federa开发社区提供,根据所述多个基础的源码数据包编译得到的编译数据包,能够提供编译系统需要的最小编译环境。
还需要说明的是,本发明实施例的方法也可以应用于其他非Federa开发社区官方支持的平台。
S104、根据所述第一编译环境对所述第一源码数据包进行编译操作,得到第一编译数据包。
上述第一源码数据包为当前待操作的源码数据包,当对该待操作的源码数据包进行编译操作后,得到的编译数据包即为第一编译数据包。
S105、基于所述第一编译环境安装所述第一编译数据包,建立第二编译环境。
其中,所述第二编译环境包括所述第一编译环境和安装所述第一编译数据包生成的编译环境,例如,可以设置安装第一编译数据包输出的编译环境的目录指向第一编译环境的存储目录。
S106、判断所述多个非基础的源码数据包是否全部被编译,若否,执行S107,若是,S108。
S107、将第二编译环境作为新的第一编译环境,返回执行S103。
S108、结束编译。
举例来说,在T1时刻,S101中的第一编译环境是通过安装RPM1~RPM80建立的,当通过S102~S103安装了RPM81,建立的了第二编译环境,即该第二编译环境是通过安装RPM1~RPM81得到的,此时源码集合中还剩余SRPM82~SRPM300,而建立Fedora操作系统需要将全部的源码数据包进行编译、安装,因此在T2时刻,将第二编译环境作为新的第一编译环境,返回执行前述“根据所述第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包”,直至所述多个非基础的源码数据包均已被编译时,就完成了所述操作系统的发行版的编译。
其中第一源码数据包的“第一”为相对概念,即在每一次执行S103时,根据当前的第一编译环境确定的源码数据包,即为第一源码数据包,例如在T1时刻,根据第一编译环境确定的第一源码数据包为SRPM81,随后通过S104得到RPM81,再安装RPM81,建立了第二编译环境;随后在T2时刻以第二编译环境为第一编译环境返回执行S103时,此时的第一编译环境满足编译SRPM100和SRPM110所需的依赖条件,则此时的第一源码数据包可以为SRPM100和SRPM110。
通过每一次S103~S106的循环,利用各个源码数据包对编译环境的依赖条件,自动地筛选并依次对各个源码数据包进行编译和安装,即在当前平台不可知源码集合中多个源码数据包之间存在的全部单向依赖关系的情况下,仍然可完成操作系统的发行版的编译。
本实施例中,通过利用各个源码数据包对编译环境的依赖条件,可基于第一编译环境确定当前可进行编译和安装的源码数据包,随后建立新的第一编译环境,继续确定基于新的第一编译环境可进行编译和安装的源码数据包,以此类推自动地对各个源码数据包进行编译和安装,直至多个非基础的源码数据包均被编译,以完成操作系统的发行版所需的全部源码数据包的编译,从而实现了在不可知源码数据包之间存在的全部依赖关系的平台上编译操作系统的发行版,由于在当前平台上编译得到的操作系统能够在该当前平台上安装运行,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了该操作系统的通用性。
图2为本发明操作系统的编译方法实施例二的流程图。如图2所示,本实施例是在图1所示的实施例的基础上,做出进一步的描述,本实施例可以包括:
图1所示的实施例中的S101可以具体采用S203,在S203之前,所述编译方法还可以包括S201和S202:
S201、下载建立操作系统所需的源码集合和预设的最小依赖规则。
以Fedora操作系统为例,Fedora开发社区可以提供用于建立Fedora操作系统的全部源码数据包,则建立操作系统的处理装置可以访问Fedora开发社区,以下载源码集合至当前平台上,且对源码数据包进行编译时需要一个初始的编译环境,该初始的编译环境是通过对源码集合中的基础的源码数据包(通常为80个源码数据包)进行编译和安装而建立的,而上述预设的最小依赖规则即用于Fedora开发社区向操作系统的编译装置指示建立用于提供编译所述操作系统的最小的编译环境所需的多个基础的源码数据包和所述多个基础的源码数据包的编译顺序。
S202、从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包。
S203、按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个基础的源码数据包对应的最小编译数据包。
在实际应用中,还需要在当前平台上搭建编译Fedora操作系统的发行版所需的编译系统,例如,可采用科吉koji系统,该koji系统用于编译Fedora操作系统的发行版所需的各个源码数据包;在koji系统中按照预设的最小依赖规则,对每一个基础的源码数据包进行编译,得到多个基础的源码数据包对应的多个最小编译数据包,并将多个基础的源码数据包导入至koji系统中,该最小编译数据包可用于在当前平台安装后得到编译所述fedora操作系统的发行版所需的最小编译环境。
相应的,图1所示的实施例中的S102可以具体采用S204,S103可以具体采用S205-S208,在S105之后可以还包括S210:
S204、安装所述多个基础的源码数据包对应的最小编译数据包,生成所述第一编译环境,并生成所述第一编译环境对应的仓库索引。
当该第一编译环境建立之后,便可自动地按照S205、S206、S207、S208、S209、S104、S105、S210、S106循环,将每一个源码数据包编译并安装。
具体的,在每一次S205~S106的循环中,每一个第一编译环境都与仓库索引相关联,所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名。
在S204中建立的第一编译环境是初始的编译环境,则此时的仓库索引中存储的编译数据包的标识,即为上述通过编译了基础的源码数据包得到的各个编译数据包的包名。
例如初始的第一编译环境是通过安装RPM1~RPM80建立的,则建立的初始的第一编译环境对应的仓库索引中存储了RPM1~RPM80各个编译数据包的包名;
在实际应用中,可将上述多个编译数据包安装在当前平台的“/fakeroot”目录下,并将此目录中的源指向koji系统自动生成的仓库索引的地址。
S205、在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包。
S206、根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果。
S207、判断是否根据当前的所述第一编译环境对所述多个非基础的源码数据包中所有未编译的源码数据包进行过解析判断操作,若否,执行S208,若是,执行S209。
S208、选择任意一个未进行过解析判断操作的源码数据包作为新的当前源码数据包,返回执行S206。
S209、将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
需要说明的是,在第一次执行S206时,上述第一编译环境即为S204中建立的第一编译环境;随着不断循环执行S205~S208,则在每一次循环中,S206中的第一编译环境则为当前时刻之前执行下述S209得到的第一编译环境。
具体的,所述根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,可以包括:
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件;所述依赖条件为编译所述当前源源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名;
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
在实际应用中,所述操作系统的发行版所需的多个非基础的源码数据包有对应的SPRM列表,该SRPM列表内存储了各个非基础的源码数据包的包名,在SPRM列表上选择任意一个非基础的源码数据包的包名,获取该非基础的源码数据包的包名对应的非基础的源码数据包作为当前源码数据包,导入到当前平台,随后在koji系统下使用“rpmbuild-nobuild”分析当前源码数据包缺失的依赖条件,其中“rpmbuild”为命令,“nobuild”为参数;举例来说,对于当前源码数据包来说,需要一些依赖条件才可进行编译操作,即可以对当前源码数据包通过“rpmbuild-nobuild”分析获知该当前源码数据包所缺失的依赖条件,随后使用yum命令的resolvedep在上述yum源指向的仓库索引中进行查找,判断当前的仓库索引中是否有上述依赖条件的信息,若没有则在所述多个非基础的SRPM包中,选择除该当前SRPM包以外的任意一个SRPM包作为新的当前SRPM包,返回执行S206。
可选的,在实际应用中,当选择除该当前源码数据包以外的任意一个非基础的源码数据包作为新的当前源码数据包时,可以将在S206中导入的当前源码数据包删除;举例来说,T3时刻,S203中导入了当前源码数据包SRPM 90,通过S207判断后需执行S206时,可以选择将SRPM 90从当前平台上删除,则当T5时刻再次将SRPM 90作为当前源码数据包时,则在执行S206时,再次导入SRPM 90。
还需要说明的是,在实际应用中,在第一源码数据包的标识还需将S208中确定的第一源码数据包对应的非基础的源码数据包的包名在SRPM列表中标记为已编译。
S210、将第一编译数据包的包名添加至所述第一编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
本实施例通过S205~S210的循环,将每一个非基础的源码数据包编译安装,直至所述多个非基础的源码数据包均被编译,以完成操作系统的的发行版的编译。
本发明实施例的其他技术方案细节与图1所示技术方案相同。
本实施例中,通过利用各个源码数据包对编译环境的依赖关系,可基于第一编译环境确定当前可进行编译和安装的源码数据包,随后建立新的第一编译环境,继续确定基于新的第一编译环境可进行编译和安装的源码数据包,以此类推自动地对各个源码数据包进行编译和安装,直至多个非基础的源码数据包均被编译,以完成操作系统的发行版所需的全部源码数据包的编译,从而实现了在不可知源码数据包之间存在的全部依赖关系的平台上编译操作系统的发行版,由于在当前平台上编译得到的操作系统能够在该当前平台上安装运行,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了该操作系统的通用性。
图3为本发明操作系统的编译装置实施例一的结构图。如图3所示,包括:
获取模块31,用于获取最小编译数据包,所述最小编译数据包用于提供所述操作系统的最小编译环境,所述最小编译数据包根据多个基础的源码数据包编译得到;
建立模块32,用于在当前平台上,根据所述最小编译数据包生成第一编译环境;
确定模块33,用于在当前平台上,根据所述第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,所述第一编译环境满足编译所述第一源码数据包所需的依赖条件;
编译模块34,用于根据所述建立模块32生成的所述第一编译环境对所述确定模块33确定的所述第一源码数据包进行编译操作,得到第一编译数据包;
所述建立模块32,还用于基于所述第一编译环境安装所述编译模块34得到的第一编译数据包,建立第二编译环境;
所述建立模块32,还用于将所述第二编译环境作为新的第一编译环境,控制所述确定模块33执行所述根据第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,直至所述多个非基础的源码数据包中无源码数据包,以完成操作系统的建立;
其中,所述操作系统的发行版所需的源码集合由所述多个基础的源码数据包和所述多个非基础的源码数据包构成,所述最小编译数据包根据多个基础的源码数据包编译得到。
本实施例中,通过利用各个源码数据包对编译环境的依赖关条件,可基于第一编译环境确定当前可进行编译和安装的源码数据包,随后建立新的第一编译环境,继续确定基于新的第一编译环境可进行编译和安装的源码数据包,以此类推自动地对各个源码数据包进行编译和安装,直至多个非基础的源码数据包均被编译,以完成操作系统的发行版所需的全部源码数据包的编译,从而实现了在不可知源码数据包之间存在的全部依赖关系的平台上编译该操作系统的发行版,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了该操作系统的通用性。
可选的,在图3所示的操作系统的编译装置的基础上,本发明实施例还提供一种操作系统的编译装置的实施方式。
在本实施例中,确定模块33可以具体用于:
在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包;
根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果;
若所述当前源码数据包对应的判断结果为所述第一编译环境不符合编译所述当前源码数据包所需的依赖条件,则在所述多个非基础的源码数据包中,选择除该当前源码数据包以外的任意一个源码数据包作为新的当前源码数据包,返回执行所述解析判断操作;
将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
进一步的,确定模块33可以具体用于:
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件,所述依赖条件为编译所述当前源源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的标识;
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
进一步的,建立模块32还可以用于:
在基于所述第一编译环境安装所述编译模块得到的第一编译数据包,建立第二编译环境之后,将所述第一编译数据包的包名添加至所述第二编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
进一步的,获取模块31,还可以用于:
下载所述操作系统的发行版所需的源码集合和预设的最小依赖规则,所述预设的最小依赖规则为能够提供所述操作系统的最小编译环境的多个基础的源码数据包的包名和所述多个基础的源码数据包的编译顺序;
从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包;
获取模块31,可以具体用于:
按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个所述基础的源码数据包对应的最小编译数据包;
建立模块33,还可以用于:
安装所述多个基础的源码数据包对应的最小编译数据包,生成第一编译环境,并生成所述第一编译环境对应的仓库索引。
本实施例中,通过利用各个源码数据包对编译环境的依赖关系,可基于第一编译环境确定当前可进行编译和安装的源码数据包,随后建立新的第一编译环境,继续确定基于新的第一编译环境可进行编译和安装的源码数据包,以此类推自动地对各个源码数据包进行编译和安装,直至多个非基础的源码数据包均被编译,以完成操作系统的发行版所需的全部源码数据包的编译,从而实现了在在不可知源码数据包之间存在的全部依赖关系的平台上编译操作系统的发行版,由于在当前平台上编译得到的操作系统能够在该当前平台上安装运行,使得采用本发明提供的编译方法编译得到的操作系统的发行版可以在非Fedora开发社区官方支持的平台上运行,扩展了该操作系统的通用性。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (10)
1.一种操作系统的编译方法,其特征在于,包括:
步骤一、获取最小编译数据包,所述最小编译数据包用于提供所述操作系统编译时所需的最小编译环境;
步骤二、在当前平台上,根据所述最小编译数据包生成第一编译环境;
步骤三、根据所述第一编译环境在多个非基础的源码数据包中确定第一源码数据包,所述第一编译环境满足编译所述第一源码数据包所需的依赖条件;
步骤四、根据所述第一编译环境对所述第一源码数据包进行编译操作,得到第一编译数据包;
步骤五、基于所述第一编译环境安装所述第一编译数据包,建立第二编译环境;
步骤六、将所述第二编译环境作为新的第一编译环境,执行步骤三,直至所述多个非基础的源码数据包均已被编译;
其中,所述操作系统的发行版所需的源码集合由所述多个基础的源码数据包和所述多个非基础的源码数据包构成,所述最小编译数据包根据多个基础的源码数据包编译得到。
2.根据权利要求1所述的编译方法,其特征在于,所述根据第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,包括:
在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包;
根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果;
判断是否根据当前的所述第一编译环境对所述多个非基础的源码数据包中所有未编译的源码数据包进行过解析判断操作,若否,则选择任意一个未进行过解析判断操作的源码数据包作为新的当前源码数据包,返回执行所述解析判断操作;
将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
3.根据权利要求2所述的编译方法,其特征在于,所述根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,包括:
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件,所述依赖条件为编译所述当前源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名;
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
4.根据权利要求3所述的编译方法,其特征在于,所述基于所述第一编译环境安装所述第一编译数据包,建立第二编译环境之后,所述编译方法还包括:
将所述第一编译数据包的包名添加至所述第二编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
5.根据权利要求4所述的编译方法,其特征在于,在所述获取最小编译数据包之前,所述编译方法还包括:
下载所述操作系统的发行版所需的源码集合和预设的最小依赖规则,所述预设的最小依赖规则为能够提供所述操作系统的最小编译环境的多个基础的源码数据包的包名和所述多个基础的源码数据包的编译顺序;
从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包;
所述获取用于提供所述操作系统编译时所需的最小编译环境的最小编译数据包,包括:
按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个所述基础的源码数据包对应的最小编译数据包;
所述根据所述最小编译数据包生成第一编译环境,包括:
安装所述多个基础的源码数据包对应的最小编译数据包,生成所述第一编译环境,并生成所述第一编译环境对应的仓库索引。
6.一种操作系统的编译装置,其特征在于,包括:
获取模块,用于获取最小编译数据包,所述最小编译数据包用于提供所述操作系统的最小编译环境,所述最小编译数据包根据多个基础的源码数据包编译得到;
建立模块,用于在当前平台上,根据所述最小编译数据包生成第一编译环境;
确定模块,用于在当前平台上,根据所述第一编译环境在多个非基础的源码数据包中确定第一源码数据包,所述第一编译环境满足编译所述第一源码数据包所需的依赖条件;
编译模块,用于根据所述建立模块生成的所述第一编译环境对所述确定模块确定的所述第一源码数据包进行编译操作,得到第一编译数据包;
所述建立模块,还用于基于所述第一编译环境安装所述编译模块得到的第一编译数据包,建立第二编译环境;
所述建立模块,还用于将所述第二编译环境作为新的第一编译环境,控制所述确定模块执行所述根据所述第一编译环境在所述多个非基础的源码数据包中确定第一源码数据包,直至所述多个非基础的源码数据包均已被编译;
其中,所述操作系统的发行版所需的源码集合由所述多个基础的源码数据包和所述多个非基础的源码数据包构成,所述最小编译数据包根据多个基础的源码数据包编译得到。
7.根据权利要求6所述的编译装置,其特征在于,所述确定模块具体包括:
在所述多个非基础的源码数据包中选取任意一个未编译的源码数据包;
根据所述第一编译环境,对在所述多个非基础的源码数据包中选取的当前源码数据包进行解析判断操作,得到判断结果;
若所述当前源码数据包对应的判断结果为所述第一编译环境不符合编译所述当前源码数据包所需的依赖条件,则在所述多个非基础的源码数据包中,选择除该当前源码数据包以外的任意一个源码数据包作为新的当前源码数据包,返回执行所述解析判断操作;
将所述判断结果为所述第一编译环境符合编译所述待编译数据包所需的依赖条件的源码数据包确定为所述第一源码数据包。
8.根据权利要求7所述的编译装置,其特征在于,所述确定模块具体用于:
对所述当前源码数据包进行解析,获得编译所述当前源码数据包所需要的依赖条件,所述依赖条件为编译所述当前源码数据包前需要预先安装的编译数据包的包名;
从所述第一编译环境对应的仓库索引中获取所述第一编译环境已经安装的编译数据包的信息;所述仓库索引中存储了用于建立所述第一编译环境的各个编译数据包的包名;
判断所述第一编译环境已经安装的编译数据包的信息是否包含编译所述当前源码数据包前需要预先安装的全部编译数据包的包名。
9.根据权利要求8所述的编译装置,其特征在于,所述建立模块还用于:
在基于所述第一编译环境安装所述编译模块得到的第一编译数据包,建立第二编译环境之后,将所述第一编译数据包的包名添加至所述第二编译环境对应的仓库索引中,得到所述第二编译环境对应的仓库索引。
10.根据权利要求9所述的编译装置,其特征在于,
所述获取模块,还用于:
下载所述操作系统的发行版所需的源码集合和预设的最小依赖规则,所述预设的最小依赖规则为能够提供所述操作系统的最小编译环境的多个基础的源码数据包的包名和所述多个基础的源码数据包的编译顺序;
从所述操作系统的发行版所需的源码集合中获取所述多个基础的源码数据包的包名对应的源码数据包;
所述获取模块,具体用于:
按照所述预设的最小依赖规则,对所述多个基础的源码数据包中的每一个源码数据包依次进行编译,得到多个所述基础的源码数据包对应的最小编译数据包;
所述建立模块,还用于:
安装所述多个基础的源码数据包对应的最小编译数据包,生成第一编译环境,并生成所述第一编译环境对应的仓库索引。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510355082.6A CN106325965B (zh) | 2015-06-24 | 2015-06-24 | 操作系统的编译方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510355082.6A CN106325965B (zh) | 2015-06-24 | 2015-06-24 | 操作系统的编译方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106325965A true CN106325965A (zh) | 2017-01-11 |
CN106325965B CN106325965B (zh) | 2019-09-10 |
Family
ID=57729246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510355082.6A Active CN106325965B (zh) | 2015-06-24 | 2015-06-24 | 操作系统的编译方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106325965B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111191216A (zh) * | 2019-12-26 | 2020-05-22 | 航天信息股份有限公司 | 具有java接口的ofd签章客户端及其用于签章验章的方法和系统 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN112181422A (zh) * | 2020-09-02 | 2021-01-05 | 苏州浪潮智能科技有限公司 | 一种Hadoop编译方法、装置及计算机可读存储介质 |
CN112214221A (zh) * | 2020-10-10 | 2021-01-12 | 上海上讯信息技术股份有限公司 | 一种用于Linux系统构建的方法与设备 |
CN112286534A (zh) * | 2020-11-25 | 2021-01-29 | 湖南麒麟信安科技股份有限公司 | 一种软件包自动化编译方法 |
CN112882719A (zh) * | 2021-03-01 | 2021-06-01 | 山东浪潮通软信息科技有限公司 | 一种编译方法、装置、设备及存储介质 |
CN113721916A (zh) * | 2021-07-29 | 2021-11-30 | 苏州浪潮智能科技有限公司 | 一种操作系统的编译方法、装置、设备及可读存储介质 |
CN113835711A (zh) * | 2021-09-18 | 2021-12-24 | 苏州浪潮智能科技有限公司 | 操作系统源码包的编译控制方法、装置、存储介质及设备 |
CN115629772A (zh) * | 2022-09-05 | 2023-01-20 | 摩尔线程智能科技(北京)有限责任公司 | Kubernetes软件安装方法及装置、电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101097525A (zh) * | 2006-06-28 | 2008-01-02 | 上海宝信软件股份有限公司 | 三层架构下的集成编译环境的实现方法 |
CN101937389A (zh) * | 2009-12-17 | 2011-01-05 | 北京测腾信息技术有限公司 | 一种让代码分析工具获取被检测软件包编译过程的方法 |
US20110283268A1 (en) * | 2010-05-17 | 2011-11-17 | Salter Mark O | Mechanism for Cross-Building Support Using Dependency Information |
CN103309706A (zh) * | 2013-05-24 | 2013-09-18 | 中标软件有限公司 | 基于Linux操作系统的内存文件系统制备方法及单元 |
CN103530148A (zh) * | 2013-09-18 | 2014-01-22 | 国云科技股份有限公司 | 一种大型Linux软件包的发布方法 |
CN104391733A (zh) * | 2014-12-10 | 2015-03-04 | 华中科技大学 | 一种依据依赖关系动态编译软件包的方法 |
-
2015
- 2015-06-24 CN CN201510355082.6A patent/CN106325965B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101097525A (zh) * | 2006-06-28 | 2008-01-02 | 上海宝信软件股份有限公司 | 三层架构下的集成编译环境的实现方法 |
CN101937389A (zh) * | 2009-12-17 | 2011-01-05 | 北京测腾信息技术有限公司 | 一种让代码分析工具获取被检测软件包编译过程的方法 |
US20110283268A1 (en) * | 2010-05-17 | 2011-11-17 | Salter Mark O | Mechanism for Cross-Building Support Using Dependency Information |
CN103309706A (zh) * | 2013-05-24 | 2013-09-18 | 中标软件有限公司 | 基于Linux操作系统的内存文件系统制备方法及单元 |
CN103530148A (zh) * | 2013-09-18 | 2014-01-22 | 国云科技股份有限公司 | 一种大型Linux软件包的发布方法 |
CN104391733A (zh) * | 2014-12-10 | 2015-03-04 | 华中科技大学 | 一种依据依赖关系动态编译软件包的方法 |
Non-Patent Citations (1)
Title |
---|
顾昊: "开源平台下软件管理技术的研究", 《计算机应用研究》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111191216A (zh) * | 2019-12-26 | 2020-05-22 | 航天信息股份有限公司 | 具有java接口的ofd签章客户端及其用于签章验章的方法和系统 |
CN111191216B (zh) * | 2019-12-26 | 2024-02-06 | 航天信息股份有限公司 | 具有java接口的ofd签章客户端及其用于签章验章的方法和系统 |
CN111857730B (zh) * | 2020-07-24 | 2023-01-06 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN111857730A (zh) * | 2020-07-24 | 2020-10-30 | 苏州浪潮智能科技有限公司 | 一种操作系统编译的方法和设备 |
CN112181422A (zh) * | 2020-09-02 | 2021-01-05 | 苏州浪潮智能科技有限公司 | 一种Hadoop编译方法、装置及计算机可读存储介质 |
CN112214221A (zh) * | 2020-10-10 | 2021-01-12 | 上海上讯信息技术股份有限公司 | 一种用于Linux系统构建的方法与设备 |
CN112214221B (zh) * | 2020-10-10 | 2023-04-28 | 上海上讯信息技术股份有限公司 | 一种用于Linux系统构建的方法与设备 |
CN112286534A (zh) * | 2020-11-25 | 2021-01-29 | 湖南麒麟信安科技股份有限公司 | 一种软件包自动化编译方法 |
CN112882719A (zh) * | 2021-03-01 | 2021-06-01 | 山东浪潮通软信息科技有限公司 | 一种编译方法、装置、设备及存储介质 |
CN112882719B (zh) * | 2021-03-01 | 2024-03-22 | 浪潮通用软件有限公司 | 一种编译方法、装置、设备及存储介质 |
CN113721916A (zh) * | 2021-07-29 | 2021-11-30 | 苏州浪潮智能科技有限公司 | 一种操作系统的编译方法、装置、设备及可读存储介质 |
CN113721916B (zh) * | 2021-07-29 | 2023-07-14 | 苏州浪潮智能科技有限公司 | 一种操作系统的编译方法、装置、设备及可读存储介质 |
CN113835711A (zh) * | 2021-09-18 | 2021-12-24 | 苏州浪潮智能科技有限公司 | 操作系统源码包的编译控制方法、装置、存储介质及设备 |
CN113835711B (zh) * | 2021-09-18 | 2023-08-15 | 苏州浪潮智能科技有限公司 | 操作系统源码包的编译控制方法、装置、存储介质及设备 |
CN115629772A (zh) * | 2022-09-05 | 2023-01-20 | 摩尔线程智能科技(北京)有限责任公司 | Kubernetes软件安装方法及装置、电子设备 |
CN115629772B (zh) * | 2022-09-05 | 2023-09-19 | 摩尔线程智能科技(北京)有限责任公司 | Kubernetes软件安装方法及装置、电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN106325965B (zh) | 2019-09-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106325965A (zh) | 操作系统的编译方法和装置 | |
CN1160626C (zh) | 基于标记的链接 | |
CN108614701B (zh) | 一种Linux操作系统定制方法及装置 | |
CN102541521B (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
KR101314949B1 (ko) | 통합 환경 생성기 | |
CN102289378B (zh) | 自动生成应用程序的方法 | |
US9086899B2 (en) | Loading and debugging method and debugging system thereof | |
CN104598274B (zh) | 一种自动插桩编译安装方法及系统 | |
CN109324799A (zh) | 一种代码编译方法、计算机装置及计算机可读存储介质 | |
CN109871213A (zh) | 基于国产平台的OpenStack容器化系统及方法 | |
CN108536451B (zh) | 应用程序的埋点注入方法和装置 | |
CN104978258A (zh) | 软件自动化测试方法及系统 | |
CN102375778A (zh) | 实现数字信号处理器自动测试的方法及系统 | |
CN105574000A (zh) | 扩展apk文件应用的方法及装置 | |
CN111068328A (zh) | 游戏广告配置表格的生成方法、终端设备及介质 | |
CN112000320A (zh) | 自动化代码生成方法、装置、设备及存储介质 | |
CN103942140A (zh) | 一种测试程序自动转换方法 | |
CN110109684B (zh) | 区块链节点管理代理服务安装方法、电子装置及存储介质 | |
CN105117329A (zh) | 一种应用程序自动上线方法及系统 | |
CN109726104B (zh) | 移动终端的测试包生成方法、测试终端及存储介质 | |
CN108694049A (zh) | 一种更新软件的方法和设备 | |
CN106250160A (zh) | 一种快速移植编译开源程序的方法 | |
CN103186388B (zh) | 软件安装方法及装置 | |
CN112527306B (zh) | 项目开发中模块的独立化实现方法、装置、设备及介质 | |
CN106033338A (zh) | 基于fog数据的源代码导入及解析的方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder |
Address after: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee after: Loongson Zhongke Technology Co.,Ltd. Address before: 100095 Building 2, Longxin Industrial Park, Zhongguancun environmental protection technology demonstration park, Haidian District, Beijing Patentee before: LOONGSON TECHNOLOGY Corp.,Ltd. |
|
CP01 | Change in the name or title of a patent holder |