本发明涉及一种容器化跨平台操作系统映像构建方法,属于国产处理器操作系统平台技术领域。
背景技术:
操作系统映像由操作系统运行所必须的引导文件、根文件系统等组成,可以是可引导操作系统的硬盘的副本文件,该副本文件可以直接在虚拟机中实现引导,也可以复制到物理磁盘,实现物理机的操作系统引导。
基础操作系统映像在功能上可增减,容量上可大可小。比如嵌入式操作系统中,操作系统为避免过多的占用用户急需的系统内存,操作系统映像总是尽可能的压缩空间,通常基于嵌入式系统中常用的busybox(将许多具有共性的小版本的unix工具结合到一个单一的可执行文件)进行构建。busybox继承了数十个常用linux命令,但相比常用linux服务器上的通用命令还十分简陋,有很多功能上的差距。
现有操作系统映像构建方法的主要缺点是无法实现跨平台生成。现有服务器操作系统构建方法,如开源主流linux发行版ubuntu、centos,或linux爱好者发起的从零构建linux发行版的示例项目lfs(linuxfromscratch,一种从网上直接下载源码,从头编译linux的安装方式)等,均无法实现所有软件包的跨平台生成。在操作系统映像生成时,均需要在与目标处理器体系结构兼容的处理器上进行编译、打包。在处理器研制阶段,目标处理器体系结构与现有处理器体系结构可能会有较大区别。
技术实现要素:
本发明的目的是提供一种容器化跨平台操作系统映像构建方法,解决利用跨平台交叉编译技术,将完整操作系统映像在非目标处理器的平台上完整的、自动的生成。
为达到上述目的,本发明采用的技术方案是:一种容器化跨平台操作系统映像构建方法,包括以下步骤,
s1、制作用于构建目标操作系统的容器,并利用chroot进入容器环境;容器环境可支持chroot切换至容器根目录;
s2、为目标操作系统所依赖的所有软件包准备构建指导描述文件;指导描述文件中包含软件包构建所需的如下一些指导描述:
s201、软件包获取方式描述,指示软件包的源代码从哪里获取;
s202、软件包依赖关系描述,指示软件包中源代码编译时所依赖的其他软件包及运行时依赖的其他软件包;
s203、软件包准备阶段描述,指示软件包中源代码解压缩方式,是否有源代码补丁及打补丁的方式;
s204、软件包配置阶段描述,指示软件包中源代码的配置命令,打开或关闭哪些功能使能;
s205、软件包编译阶段描述,指示软件包中源代码的编译方法;
s206、软件包安装阶段描述,指示软件包的安装方法;
s3、准备自动化构建工具,可解析s2中准备的软件包描述文件,并自动完成软件包获取、依赖解析、准备编译目录、配置源代码、编译源代码、安装源代码步骤;所述自动化构建工具根据软件包描述文件中的依赖关系描述信息,形成完整的目标软件依赖关系树,并将所有未安装的依赖软件预先自动编译安装,最后再编译安装目标软件;自动化构建工具支持将编译好的软件制作成压缩的二进制软件包,支持将已经安装的软件包卸载;
s4、准备针对目标处理器体系结构的交叉编译环境;利用s2中准备的编译器工具链相关软件包的构建指导描述文件,利用s3中准备的自动化构建工具,分步骤构建交叉编译环境,具体步骤如下:
s401、利用s3中的自动化构建工具编译安装链接器、汇编器等二进制编译器工具包;
s402、利用s3中的自动化构建工具编译安装用头文件软件包;
s403、利用s3中的自动化构建工具编译并安装只支持静态编译的编译器;
s404、利用s403的只支持静态编译的编译器工具包编译安装基础c语言库;
s405、利用s3中的自动化构建工具配置编译器软件包,编译器软件包采用支持动态链接的配置选项,并重新编译并安装支持动态编译链接的编译器;
s5、创建准备针对目标处理器软件编译的目标目录,各类软件包均安装至所述目标目录;
s6、准备交叉编译器壳程序;交叉编译器壳程序用于调用s4创建的目标处理器交叉编译环境中的gcc交叉编译器,自动增加针对gcc的sysroot选项;sysroot目录指向s5创建的目标目录;
s7、准备自动化构建工具壳程序,自动化构建工具壳程序用于调用自动化构建工具,自动化构建工具壳程序的配置文件和安装目录均以s5创建的目标目录作为根目录,且面向目标处理器的交叉编译器调用s6中的交叉编译器壳程序;
s8、将s4中编译好的基础c语言库安装至s5中创建的目标目录;
s9、利用s7中的自动化构建工具壳程序,根据操作系统映像所需的软件包描述文件,执行自动编译安装流程;s9完成后,s5创建的目标目录中会包含并包含操作系统映像构建所需的所有已压缩的二进制软件包;
s10、准备操作系统映像分区描述文件;操作系统映像分区描述文件中描述了操作系统映像总大小,操作系统映像分区的数量及具体分区大小,操作系统映像分区的文件系统格式,操作系统映像分区的挂载目录路径名信息;
s11、创建操作系统映像文件,并依赖s10准备的操作系统映像分区描述文件对操作系统映像分区并格式化;
s12、挂载操作系统映像根分区至容器中的临时目录;
s13、利用s7中的自动化构建工具壳程序,并利用s9中构建的操作系统映像构建所需的所有已压缩的二进制软件包,将二进制软件包安装至s12挂载的操作系统映像根分区临时目录;
s14、卸载s12中挂载的操作系统映像根分区目录;至此完成操作系统映像的构建。
上述技术方案中进一步改进的方案如下:
1.上述方案中,所述指示软件包的源代码可从远程服务器下载源码包,或者从软件包对应的版本库中克隆相应的版本。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
1)本发明容器化跨平台操作系统映像构建方法,利用容器化方式构建目标操作系统映像,避免破坏原有系统环境;利用交叉编译器壳程序和自动化构建工具壳程序实现跨平台的操作系统发行版全流程自动化构建;利用跨平台交叉编译技术,将完整操作系统映像在非目标处理器的平台上完整的、自动的生成。
2)本发明容器化跨平台操作系统映像构建方法,支持按需的操作系统映像快速定制,可直接用于虚拟机启动;通过修改操作系统映像软件包描述中的依赖软件列表,利用本发明即可快速定制不同配置的操作系统映像。
3)本发明容器化跨平台操作系统映像构建方法,支持操作系统快速迭代式整体重构,针对目标处理器平台,实现了数百个软件包的构建指导规范描述,描述了编译依赖、运行依赖、编译指示配置信息,据此可实现包括编译器工具链的数百个开源软件的自动编译、安装配置,可实现操作系统快速迭代式整体重构。
附图说明
附图1为本发明容器化跨平台操作系统映像构建方法流程示意图。
具体实施方式
在本专利的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制;术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性;此外,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本专利的具体含义。
实施例:如图1所示,一种容器化跨平台操作系统映像构建方法,包括以下步骤,
s1、制作用于构建目标操作系统的容器,并利用chroot进入容器环境;容器环境可支持chroot切换至容器根目录;
s2、为目标操作系统所依赖的所有软件包准备构建指导描述文件;指导描述文件中包含软件包构建所需的如下一些指导描述:
s201、软件包获取方式描述,指示软件包的源代码从哪里获取;
s202、软件包依赖关系描述,指示软件包中源代码编译时所依赖的其他软件包及运行时依赖的其他软件包;
s203、软件包准备阶段描述,指示软件包中源代码解压缩方式,是否有源代码补丁及打补丁的方式;
s204、软件包配置阶段描述,指示软件包中源代码的配置命令,打开或关闭哪些功能使能;
s205、软件包编译阶段描述,指示软件包中源代码的编译方法;
s206、软件包安装阶段描述,指示软件包的安装方法;
s3、准备自动化构建工具,可解析s2中准备的软件包描述文件,并自动完成软件包获取、依赖解析、准备编译目录、配置源代码、编译源代码、安装源代码步骤;所述自动化构建工具根据软件包描述文件中的依赖关系描述信息,形成完整的目标软件依赖关系树,并将所有未安装的依赖软件预先自动编译安装,最后再编译安装目标软件;自动化构建工具支持将编译好的软件制作成压缩的二进制软件包,支持将已经安装的软件包卸载;
s4、准备针对目标处理器体系结构的交叉编译环境;利用s2中准备的编译器工具链相关软件包的构建指导描述文件,利用s3中准备的自动化构建工具,分步骤构建交叉编译环境,具体步骤如下:
s401、利用s3中的自动化构建工具编译安装链接器、汇编器等二进制编译器工具包;
s402、利用s3中的自动化构建工具编译安装用头文件软件包;
s403、利用s3中的自动化构建工具编译并安装只支持静态编译的编译器;
s404、利用s403的只支持静态编译的编译器工具包编译安装基础c语言库;
s405、利用s3中的自动化构建工具配置编译器软件包,编译器软件包采用支持动态链接的配置选项,并重新编译并安装支持动态编译链接的编译器;
s5、创建准备针对目标处理器软件编译的目标目录,各类软件包均安装至所述目标目录;
s6、准备交叉编译器壳程序;交叉编译器壳程序用于调用s4创建的目标处理器交叉编译环境中的gcc交叉编译器,自动增加针对gcc的sysroot选项;sysroot目录指向s5创建的目标目录;
s7、准备自动化构建工具壳程序,自动化构建工具壳程序用于调用自动化构建工具,自动化构建工具壳程序的配置文件和安装目录均以s5创建的目标目录作为根目录,且面向目标处理器的交叉编译器调用s6中的交叉编译器壳程序;
s8、将s4中编译好的基础c语言库安装至s5中创建的目标目录;
s9、利用s7中的自动化构建工具壳程序,根据操作系统映像所需的软件包描述文件,执行自动编译安装流程;s9完成后,s5创建的目标目录中会包含并包含操作系统映像构建所需的所有已压缩的二进制软件包;
s10、准备操作系统映像分区描述文件;操作系统映像分区描述文件中描述了操作系统映像总大小,操作系统映像分区的数量及具体分区大小,操作系统映像分区的文件系统格式,操作系统映像分区的挂载目录路径名信息;
s11、创建操作系统映像文件,并依赖s10准备的操作系统映像分区描述文件对操作系统映像分区并格式化;
s12、挂载操作系统映像根分区至容器中的临时目录;
s13、利用s7中的自动化构建工具壳程序,并利用s9中构建的操作系统映像构建所需的所有已压缩的二进制软件包,将二进制软件包安装至s12挂载的操作系统映像根分区临时目录;
s14、卸载s12中挂载的操作系统映像根分区目录;至此完成操作系统映像的构建。
构建交叉编译工具链时,编译器软件包需要用不同的配置构建两次,必须分步实施。
实施例进一步解释如下:
制作用于构建目标操作系统的容器,并利用chroot进入容器环境。容器的组成主要由可运行于宿主机器处理器上的编译器工具链、各类用于软件编译的工具、脚本语言环境、常用命令工具集、版本管理工具等组成。容器环境可支持chroot切换至容器根目录。chroot即changerootdirectory,是更改root目录的含义,进入chroot隔离环境后,shell默认的根目录会被修改,可以建立一个与原系统隔离的系统目录结构,方便用户开发而不会破坏原系统目录结构。容器是用于制作目标操作系统的环境,运行于宿主机器处理器,比如x86服务器,目标操作系统是待制作的操作系统,可以面向非x86处理器,如arm处理器或国产处理器。采用容器化的构建环境,可避免破坏原有宿主机操作系统软件环境。
为目标操作系统所依赖的所有软件包准备构建指导描述文件。该文件中主要包含软件包构建所需的如下一些指导描述:软件包获取方式描述,指示软件包的源代码从哪里获取,可从远程服务器下载源码包,或者从软件包对应的版本库中克隆相应的版本。软件包依赖关系描述,指示软件包中源代码编译时所依赖的其他软件包及运行时依赖的其他软件包。软件包准备阶段描述,指示软件包中源代码解压缩方式,是否有源代码补丁及打补丁的方式。软件包配置阶段描述,指示软件包中源代码的配置命令,打开哪些功能使能,关闭哪些使能。软件包编译阶段描述,指示软件包中源代码的编译方法。软件包安装阶段描述,指示软件包的安装方法。其中,指导描述文件中的软件包获取方式描述、软件包依赖关系描述、软件包准备阶段描述、软件包配置阶段描述和软件包编译阶段描述这几个步骤中可以根据自动化构建工具需要调整上述描述,进而完成后续软件包安装。
准备自动化构建工具,可解析指导描述文件中准备的软件包描述文件,并自动完成软件包获取、依赖解析、准备编译目录、配置源代码、编译源代码、安装源代码等步骤。该工具可根据软件包描述文件中的依赖关系描述信息,形成完整的目标软件依赖关系树,并将所有未安装的依赖软件预先自动编译安装,最后再编译安装目标软件。另外,该工具还支持将编译好的软件制作成压缩的二进制软件包,支持将已经安装的软件包卸载。
准备针对目标处理器体系结构的交叉编译环境。目标处理器是运行目标操作系统的处理器,其体系结构称目标处理器体系结构,如假设intelcorei7是运行目标操作系统的处理器,则其体系结构简称x86_64。具体的,上步中准备了“目标操作系统所依赖的所有软件包的构建指导描述文件”,这些文件中包含“编译器工具链相关软件包的构建指导描述文件。利用指导描述文件阶段中,准备的编译器工具链相关软件包的构建指导描述文件,利用准备自动化构建工具中准备的自动化构建工具,分步骤构建交叉编译环境。分步骤是因为构建交叉编译工具链时,编译器软件包需要用不同的配置构建两次,必须分步实施,具体步骤如下:
a)利用“准备自动化构建工具”步骤中的自动化构建工具编译安装链接器、汇编器等二进制编译器工具包。
b)利用“准备自动化构建工具”步骤中的自动化构建工具安装编译用头文件软件包。
c)利用“准备自动化构建工具”步骤中的自动化构建工具编译并安装只支持静态编译的编译器。
d)利用步骤c中的只支持静态编译的编译器工具包编译安装基础c语言库。
e)利用“准备自动化构建工具”步骤中的自动化构建工具,采用支持动态链接的配置选项配置编译器软件包,并重新编译并安装支持动态编译链接的编译器。
其中,上述的a)、b)、c)、d)和e)这几个步骤中需要安装顺序依次进行。
创建准备针对目标处理器软件编译的目录,后续各类软件包均安装至该目录,称改目录为目标目录。
准备交叉编译器壳程序。该壳程序的目的是为调用创建的目标处理器交叉编译环境中的gcc交叉编译器时,自动增加针对gcc的sysroot选项。sysroot目录指向“目标处理器软件编译”的目标目录。
准备自动化构建工具壳程序,该壳程序的目的是在调用自动化构建工具时,相应的配置文件和安装目录均以创建的目标目录作为根目录,且面向目标处理器的交叉编译器调用交叉编译器壳程序。利用交叉编译器壳程序和自动化构建工具壳程序实现跨平台的操作系统发行版自动化构建。
将编译好的基础c语言库安装至目标处理器软件编译创建的目标目录中。
利用自动化构建工具壳程序,根据操作系统映像所需的软件包描述文件,执行自动编译安装流程。自动化构建工具壳程序完成后,目标处理器软件编译的目标目录中会包含并包含操作系统映像构建所需的所有已压缩的二进制软件包。
准备操作系统映像分区描述文件。该描述文件中描述了操作系统映像总大小,分区数量及具体分区大小,分区的文件系统格式,分区的挂载目录路径名信息。
创建操作系统映像文件,并依赖上一步骤准备的操作系统映像分区描述文件对操作系统映像分区并格式化。
挂载操作系统映像根分区至容器中的临时目录。
利用自动化构建工具壳程序,并利用构建的操作系统映像构建所需的所有已压缩的二进制软件包,将二进制软件包安装至挂载的操作系统映像根分区临时目录。
卸载挂载的操作系统映像根分区目录。至此完成操作系统映像的构建。
采用上述容器化跨平台操作系统映像构建方法时,其所构建的操作系统映像主要应用于国产处理器平台,构建时基于商用x86处理器平台,面向国产处理器架构的构建生成可以在国产处理器上运行的操作系统映像。重点解决跨平台构建操作系统映像时,自动构建交叉编译工具链,自动编译大量操作系统基础软件包,自动构建操作系统映像的技术问题。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:容器:容器是与系统其他部分隔离开的一系列进程,通常具有独立的根文件系统,进程命名空间等。跨平台:从某一处理器体系结构到与之无法兼容的另一处理器体系结构称为跨平台。操作系统映像:由操作系统运行所必须的引导文件、根文件系统等组成,可以是可引导操作系统的硬盘的副本。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
1.一种容器化跨平台操作系统映像构建方法,其特征在于:包括以下步骤,
s1、制作用于构建目标操作系统的容器,并利用chroot进入容器环境;容器环境可支持chroot切换至容器根目录;
s2、为目标操作系统所依赖的所有软件包准备构建指导描述文件;指导描述文件中包含软件包构建所需的如下一些指导描述:
s201、软件包获取方式描述,指示软件包的源代码从哪里获取;
s202、软件包依赖关系描述,指示软件包中源代码编译时所依赖的其他软件包及运行时依赖的其他软件包;
s203、软件包准备阶段描述,指示软件包中源代码解压缩方式,是否有源代码补丁及打补丁的方式;
s204、软件包配置阶段描述,指示软件包中源代码的配置命令,打开或关闭哪些功能使能;
s205、软件包编译阶段描述,指示软件包中源代码的编译方法;
s206、软件包安装阶段描述,指示软件包的安装方法;
s3、准备自动化构建工具,可解析s2中准备的软件包描述文件,并自动完成软件包获取、依赖解析、准备编译目录、配置源代码、编译源代码、安装源代码步骤;所述自动化构建工具根据软件包描述文件中的依赖关系描述信息,形成完整的目标软件依赖关系树,并将所有未安装的依赖软件预先自动编译安装,最后再编译安装目标软件;自动化构建工具支持将编译好的软件制作成压缩的二进制软件包,支持将已经安装的软件包卸载;
s4、准备针对目标处理器体系结构的交叉编译环境;利用s2中准备的编译器工具链相关软件包的构建指导描述文件,利用s3中准备的自动化构建工具,分步骤构建交叉编译环境,具体步骤如下:
s401、利用s3中的自动化构建工具编译安装链接器、汇编器等二进制编译器工具包;
s402、利用s3中的自动化构建工具编译安装用头文件软件包;
s403、利用s3中的自动化构建工具编译并安装只支持静态编译的编译器;
s404、利用s403的只支持静态编译的编译器工具包编译安装基础c语言库;
s405、利用s3中的自动化构建工具配置编译器软件包,编译器软件包采用支持动态链接的配置选项,并重新编译并安装支持动态编译链接的编译器;
s5、创建准备针对目标处理器软件编译的目标目录,各类软件包均安装至所述目标目录;
s6、准备交叉编译器壳程序;交叉编译器壳程序用于调用s4创建的目标处理器交叉编译环境中的gcc交叉编译器,自动增加针对gcc的sysroot选项;sysroot目录指向s5创建的目标目录;
s7、准备自动化构建工具壳程序,自动化构建工具壳程序用于调用自动化构建工具,自动化构建工具壳程序的配置文件和安装目录均以s5创建的目标目录作为根目录,且面向目标处理器的交叉编译器调用s6中的交叉编译器壳程序;
s8、将s4中编译好的基础c语言库安装至s5中创建的目标目录;
s9、利用s7中的自动化构建工具壳程序,根据操作系统映像所需的软件包描述文件,执行自动编译安装流程;s9完成后,s5创建的目标目录中会包含并包含操作系统映像构建所需的所有已压缩的二进制软件包;
s10、准备操作系统映像分区描述文件;操作系统映像分区描述文件中描述了操作系统映像总大小,操作系统映像分区的数量及具体分区大小,操作系统映像分区的文件系统格式,操作系统映像分区的挂载目录路径名信息;
s11、创建操作系统映像文件,并依赖s10准备的操作系统映像分区描述文件对操作系统映像分区并格式化;
s12、挂载操作系统映像根分区至容器中的临时目录;
s13、利用s7中的自动化构建工具壳程序,并利用s9中构建的操作系统映像构建所需的所有已压缩的二进制软件包,将二进制软件包安装至s12挂载的操作系统映像根分区临时目录;
s14、卸载s12中挂载的操作系统映像根分区目录;至此完成操作系统映像的构建。
2.根据权利要求1所述的容器化跨平台操作系统映像构建方法,其特征在于:所述指示软件包的源代码可从远程服务器下载源码包,或者从软件包对应的版本库中克隆相应的版本。
技术总结