首页> 中国专利> 基于容器和堆叠文件系统的Linux通用软件适配方法及系统

基于容器和堆叠文件系统的Linux通用软件适配方法及系统

摘要

本发明公开了一种基于容器和堆叠文件系统的Linux通用软件适配方法及系统,本发明包括下述加载软件的步骤:基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置。本发明既可将各个Linux发行版上的应用软件迁移到其它的Linux发行版上运行,也可将各个Linux发行版上的应用软件以统一的方式打包,复用应用软件,节省开发维护成本。

著录项

  • 公开/公告号CN112486512A

    专利类型发明专利

  • 公开/公告日2021-03-12

    原文格式PDF

  • 申请/专利权人 湖南麒麟信安科技股份有限公司;

    申请/专利号CN202011343227.8

  • 申请日2020-11-25

  • 分类号G06F8/61(20180101);G06F8/76(20180101);G06F21/53(20130101);

  • 代理机构43008 湖南兆弘专利事务所(普通合伙);

  • 代理人谭武艺

  • 地址 410000 湖南省长沙市高新区麒云路20号麒麟科技园4楼

  • 入库时间 2023-06-19 10:11:51

说明书

技术领域

本发明涉及Linux应用软件适配技术,具体涉及一种基于容器和堆叠文件系统的Linux通用软件适配方法及系统,用于在不同的Linux发行版之间移植、适配应用软件,可用于各种类型Linux发行版,包括嵌入式Linux系统、桌面Linux系统、工控Linux系统等。

背景技术

在现有的Linux软件包管理技术下,一个软件经常会依赖到特定的其它软件和库,在各个Linux发行版之间,以及同一个发行版的不同版本之间,经常会出现因为依赖到的软件和库的版本过高或者过低而导致软件无法运行的情况,有时也会因为系统基础库的升级而导致现有已经安装的软件无法运行的情况。软件开发、测试人员需要进行额外的工作来进行不同系统平台的适配,增加了开发、测试和维护的成本。针对这种现状,开源社区有一些解决方案,比如flatpak和snap等。但是这类方案都是侧重于针对新开发的软件打包,自身有诸多的限制条件,对于已经存在的软件包,可能仍然需要做一些代码级别的修改才能使用这些开源方案来处理软件移植和适配的需求。

Linux容器技术(Linux containers,简称LXC)是一种基于容器的操作系统层级的虚拟化技术。LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和swap空间),提供device访问控制,提供独立的命名空间(namespace,包括网络、pid、ipc、mnt、uts)。LXC提供了一些用户空间的工具集,用来使用和管理LXC容器。LXC真正的实现则是靠Linux内核的相关特性。基于容器的虚拟化技术起源于所谓的资源容器和安全容器。LXC在资源管理方面依赖与Linux内核的cgroups子系统,cgroups子系统是Linux内核提供的一个基于进程组的资源管理的框架,可以为特定的进程组限定可以使用的资源。LXC在隔离控制方面依赖于Linux内核的namespace特性,具体而言就是在克隆时加入相应的标识(NEWNS NEWPID等等)。LXC是所谓的操作系统层次的虚拟化技术,与传统的HAL(硬件抽象层)层次的虚拟化技术相比有一些优势,它有更小的虚拟化开销(LXC的诸多特性基本由内核特供,而内核实现这些特性只有极少的花费),它能够快速部署。利用LXC来隔离特定应用,只需要安装LXC,即可使用LXC相关命令来创建并启动容器来为应用提供虚拟执行环境。传统的虚拟化技术则需要先创建虚拟机,然后安装系统,再部署应用。LXC跟其他操作系统层次的虚拟化技术相比,最大的优势在于LXC被整合进内核,不用单独为内核打补丁。

堆叠文件系统,依赖并建立在其它的文件系统之上,例如ext4fs和xfs等,并不直接参与磁盘空间结构的划分,仅仅将原来底层文件系统中不同的目录进行“合并”,然后向用户呈现。因此对于用户来说,它所见到的堆叠文件系统根目录下的内容就来自挂载时所指定的不同目录的“合集”。堆叠文件系统包含两个层面,上层是一个upper文件系统(上层文件系统),底层是一个lower文件系统(下层文件系统),堆叠文件系统把两个文件系统“merge”(合并)成一个文件系统供应用使用。通常下层文件系统只读,上层文件系统可写,改动都保存在上层文件系统。但是,如何用低成本、高可靠的方式实现掉电保护的功能,仍然是现有技术中有待解决的关键性技术问题。

利用Linux LXC和堆叠文件系统的现有特性,可以将应用及其依赖的库组织在一个隔离的环境里运行,但是如何兼容现有的应用软件,便于应用软件的打包、发布、部署安装仍然是现有技术中有待解决的关键性技术问题。

发明内容

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于容器和堆叠文件系统的Linux通用软件适配方法及系统,本发明可打包现有的和开发中的各类Linux应用软件,且基于Linux的容器和堆叠文件系统技术将打包的软件运行在其它的Linux发行版上,既可以将各个Linux发行版上的应用软件迁移到其它的Linux发行版上运行,也可以将各个Linux发行版上的应用软件以统一的方式打包,复用应用软件,节省开发维护成本。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于容器和堆叠文件系统的Linux通用软件适配方法,包括下述加载软件的步骤:基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置。

可选地,所述加载软件的步骤之前还包括将目标软件打包得到基础包Basepkg、应用包Apppkg的步骤。

可选地,所述将目标软件打包得到基础包Basepkg、应用包Apppkg的步骤包括:将目标软件本体及其配置打包为应用包Apppkg;通过文件系统制作工具获取包含系统基础库的基础包Basepkg0,将基础包Basepkg0、目标软件的应用包Apppkg部署在一起,并采用依赖分析工具分析得到目标软件需要特定的程序库Basepkg1;将包含系统基础库的基础包Basepkg0、目标软件需要特定的程序库Basepkg1合并打包在一起得到最终的基础包Basepkg。

可选地,所述文件系统制作工具为busybox或buildstream。

此外,本发明还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括软件加载程序单元,用于基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置。

可选地,还包括用于将目标软件打包得到基础包Basepkg、应用包Apppkg的程序单元。

此外,本发明还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述基于容器和堆叠文件系统的Linux通用软件适配方法的步骤。

此外,本发明还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括相互连接的微处理器和存储器,所述存储器中存储有被编程或配置以执行所述基于容器和堆叠文件系统的Linux通用软件适配方法的计算机程序。

此外,本发明还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行所述基于容器和堆叠文件系统的Linux通用软件适配方法的计算机程序。

和现有技术相比,本发明基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置,具有下述优点:1、使用本发明能够将现有的Linux应用软件低成本的移植到其它的Linux发行版,降低开发成本。2、使用本发明可以对新开发的Linux应用软件打包,发布到各个发行版上运行。3、使用本发明将应用和依赖库打包,可以脱离对系统库的依赖,方便测试和维护,提高效率。

附图说明

图1为本发明实施例方法的基本流程示意图。

图2为本发明实施例系统的应用运行过程示意图。

图3为本发明实施例中沙箱内文件系统结构示意图。

具体实施方式

如图1和图2所示,本实施例基于容器和堆叠文件系统的Linux通用软件适配方法包括下述加载软件的步骤:基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置。本实施例方法将应用软件和其依赖的库单独打包成独立的软件包,应用和应用的配置打包成应用包Apppkg,依赖到的库和程序打包成基础包Basepkg。通过这两个包就可以使应用脱离了具体的运行系统的版本,基础包Basepkg还可以给多个应用复用。在任意的Linux发行版系统上,都可以根据基础包Basepkg和应用包Apppkg,重新运行起来,运行效果和在初始的系统上的运行效果一致,应用软件不需要做特定的适配和修改。采用了Linux的LXC技术,将基础包Basepkg和应用包Apppkg部署在一个隔离的沙箱环境内,而且该沙箱环境权限可配置,该环境拥有独立的命名空间、独立的主机名称、独立的进程空间,应用程序运行中使用自己的根文件系统和程序库,沙箱环境与外部环境以及其他沙箱环境都出于隔离的状态,保证了应用运行的安全性。应用运行时候的沙盒隔离环境里的独立根文件系统采用了堆叠文件系统,堆叠文件系统的最下层是基础包Basepkg,上一层是应用包Apppkg、最上层是可写目录,这这样的文件系统布局下,应用可以使用到基础包Basepkg和应用包Apppkg里的程序库和数据,运行过程中产生的数据和改动也可以写到可写目录保存下来。

参见图2,本实施例中加载软件的步骤之前还包括将目标软件打包得到基础包Basepkg、应用包Apppkg的步骤。

作为一种可选的实施方式,本实施例中将目标软件打包得到基础包Basepkg、应用包Apppkg的步骤包括:将目标软件本体及其配置打包为应用包Apppkg;通过文件系统制作工具获取包含系统基础库的基础包Basepkg0,将基础包Basepkg0、目标软件的应用包Apppkg部署在一起,并采用依赖分析工具分析得到目标软件需要特定的程序库Basepkg1;将包含系统基础库的基础包Basepkg0、目标软件需要特定的程序库Basepkg1合并打包在一起得到最终的基础包Basepkg。对于基础包Basepkg,除了要包含最常用的系统库,保证一般的应用软件能够运行起来,也要能包含需要移植适配的特定应用软件需要到的依赖库,通过依赖分析工具,自动分析出应用软件依赖到的库,将其打到基础包Baseapp里。作为一种可选的实施方式,本实施例中的应用包Apppkg采用专有的打包方式和文件格式,本实施例中包含一个包转换工具,可以将现有的Linux的rpm格式包和deb格式包以及其它类型的压缩包转化为Apppkg,做到和现有的应用软件完全兼容。对于需要打包成应用包Apppkg的软件和数据,可以是现有的主流的各种形式的软件包,包括rpm包、deb包等,将目标软件打包得到基础包Basepkg时,转换工具能够自动识别软件格式并且转换为Apppkg包的格式。

作为一种可选的实施方式,本实施例中的文件系统制作工具为busybox,此外也可以根据需要采用buildstream或其他文件系统制作工具。

作为一种可选的实施方式,本实施例中还进一步提供一种应用软件调试工具,调试工具会生成应用软件临时运行的调试环境,该环境和应用软件真正运行时的环境一致,并且额外包含若干用于调试的工具,在移植和适配的过程中,对应用打包之前,要保证应用软件要能够在调试环境里正常运行。作为一种可选的实施方式,本实施例中还进一步提供应用软件运行工具,在应用软件运行的时候,通过基于容器技术构建一个拥有独立的命名空间的沙箱环境,该环境拥有独立的根文件系统、独立主机名、独立进程空间,将应用包Apppkg和基础包Basepkg部署在这个独立的根文件系统里。配置进程拥有的权限等。

本实施例中,在对应用包Apppkg打包的步骤中,还支持配置应用的权限,比如是否有网络访问权限,是否有图形系统访问权限,是否有主机文件系统的访问权限等。通过权限控制的机制,可以使应用运行的更灵活,兼顾安全和功能。

如图2所示,应用在运行的时候,由运行工具来加载和运行应用包,运行工具首先使用Linux的容器机制来创建一个隔离的沙箱进程,然后加载基础包Basepkg和应用包Apppkg,然后将该隔离的沙箱环境的根文件系统加载为一个堆叠文件系统,该堆叠文件系统的最下层是基础包中的内容,然后上一层是应用包中的内容,最上层是一个可写的磁盘分区,用来保存应用运行过程中的改动,在这样的运行环境下,应用完全使用自己的应用库,不受外部主机的干扰,并且处在隔离的环境里,拥有足够的安全性。

如图3所示,是应用在运行过程中的文件系统结构图,该图具体描述了应用内文件系统的组成方式,数据保存方式,该堆叠文件系统的最下层(LOWER1)是基础包Basepkg、上一层(LOWER2)是应用包Apppkg、最上层(UPPER)是可写目录。使用堆叠文件系统的方式,应用既可以对整个文件系统拥有完全的读写权限,又可以做到不破坏底层的基础包Basepkg和应用包Apppkg。通过以上的相关技术,可以基本保证,应用在沙盒里的运行环境里和在常规的Linux系统运行环境相比,具有相同的系统权限,相同的系统资源,相同的运行流程,从而达到了跨发行版之间应用适配和移植的目的。

综上所述,本实施例基于容器和堆叠文件系统的Linux通用软件适配方法将应用软件和应用软件依赖到的库分别打包成应用包和基础包,在应用软件运行的时候,通过LXC技术将基础包和应用包部署在独立的命名空间里运行,应用软件的进程运行在一个沙盒环境,拥有独立的根文件系统、独立的主机名、独立的进程空间,其中根文件系统为一个堆叠文件系统。由于应用包含了所有的依赖,因而可以直接在各个Linux发行版上运行。应用在运行的时候位于自己独立的根文件系统和命名空间,各个应用在运行过程中可以做到互不影响,相互隔离。使用本发明能够在将现有的Linux应用软件通过一次打包,直接运行在不同的发行版系统上,方便应用软件的移植和适配,复用软件,节省开发成本,提高软件运行安全性。

此外,本实施例还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括软件加载程序单元,用于基于容器技术将目标软件的基础包Basepkg、应用包Apppkg部署在一个隔离的沙箱环境内,且所述沙箱环境内的独立根文件系统采用堆叠文件系统,该堆叠文件系统的最下层是基础包Basepkg、上一层是应用包Apppkg、最上层是可写目录,其中基础包Basepkg包含目标软件依赖到的库和程序,应用包Apppkg包含目标软件本体及其配置。

可选地,还包括用于将目标软件打包得到基础包Basepkg、应用包Apppkg的程序单元。

此外,本实施例还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行前述基于容器和堆叠文件系统的Linux通用软件适配方法的步骤。

此外,本实施例还提供一种基于容器和堆叠文件系统的Linux通用软件适配系统,包括相互连接的微处理器和存储器,所述存储器中存储有被编程或配置以执行前述基于容器和堆叠文件系统的Linux通用软件适配方法的计算机程序。

此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有被编程或配置以执行前述基于容器和堆叠文件系统的Linux通用软件适配方法的计算机程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号