CN104820610B - 一种云环境中虚拟机镜像的更新方法及系统 - Google Patents
一种云环境中虚拟机镜像的更新方法及系统 Download PDFInfo
- Publication number
- CN104820610B CN104820610B CN201510247449.2A CN201510247449A CN104820610B CN 104820610 B CN104820610 B CN 104820610B CN 201510247449 A CN201510247449 A CN 201510247449A CN 104820610 B CN104820610 B CN 104820610B
- Authority
- CN
- China
- Prior art keywords
- script
- mirror image
- software
- renewal
- image
- 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.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种虚拟机镜像的高效更新以及验证机制。与现有的虚拟机镜像离线更新机制不同,本技术方案通过对重写后的无法实施离线更新脚本进行分割,得到离线更新脚本以及在线更新脚本,分阶段执行不同的脚本使得更新的执行粒度更加细化,可以更加高效的完成之前技术方案中无法实施离线更新的状况。除此之外,提出一种基于镜像划分进行更新可靠性验证机制,通过将已更新的镜像通过分类聚合,验证更新后的镜像可靠性,以最高效的方式完成更新的验证操作,保证了镜像更新全过程的完整性。
Description
技术领域
本发明属于计算机软件类云计算领域,更具体地,涉及一种云环境中虚拟机镜像的更新方法及系统。
背景技术
在云环境中软件的漏洞或者是错误(Bug)会比普通物理环境中造成的影响更大更深远,因为云平台中各个不同的组成部分之间往往联系紧密,一个部件出问题可能会造成其他部件出现问题,从而引发连锁反应,最终造成整个云平台的不稳定、不安全甚至瘫痪。应对软件漏洞或者Bug的终极方法就是软件更新,及时有效的软件更新对于整个云平台的稳定性、可靠性以及安全性都显得非常重要。
传统的软件更新方法需要启动整个系统,然后在系统正常运行的状态下进行软件的更新操作,例如执行更新脚本等等。然而,随着云计算的发展,各个大型的数据中心中常常会出现大量的处于休眠状态的虚拟机,也即,虚拟机并没有启动,只是一个镜像文件,对于镜像文件内部的软件更新可以采用传统的方法,即先通过虚拟机镜像启动虚拟机,然后执行软件的更新操作,更新操作完成之后再将虚拟机关闭,重新回到原来的休眠状态。然而这种方法会面临很多挑战,比如说效率问题,一个大型的数据中心可能会有成千上万的处于休眠状体的虚拟机镜像,这样会浪费大量的时间在镜像的启动以及关机上,效率低下。
虚拟机镜像的离线更新机制可以高效的完成虚拟机镜像内部软件的更新升级,它不需要启动虚拟机镜像,减少了虚拟机启动以及关闭等大量耗时操作,仅仅需要重写更新脚本,然后在宿主机上执行更新脚本完成对镜像内部文件系统数据的更改,从而达到软件更新的目的。
然而,现有的基于脚本重写技术的镜像离线更新机制存在以下两个问题:
1、现有的脚本重写技术不能保证对任意更新脚本的重写都能成功完成,由于部分更新脚本中的命令严重依赖镜像运行时内存信息,使得脚本的重写操作无法正确完成,从而造成离线更新失败,不得不放弃离线更新转而采用在线更新;
2、现有的离线更新方法缺乏更新后的可靠性验证机制,导致更新的流程并不完整,一方面软件离线更新完成后可能会存在更新错误,导致该软件无法正常使用,还会导致系统中所有依赖于该软件的其他的上层软件将无法正常使用,另一方面即使该软件更新没有出现错误,但是该软件跟其他上层软件之间的依赖关系可能会由于版本变化造成无法相互兼容。上述情况会造成对原有软件的破坏甚至是对整个虚拟机镜像的破坏,如果镜像无法恢复到更新前的状态那么将造成非常严重的后果。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种云环境中虚拟机镜像的更新方法及系统,其目的在于,解决现有镜像离线更新机制中存在的更新脚本中的部分命令严重依赖镜像运行时内存信息从而使得脚本的重写操作无法正确完成、以及缺乏更新后的可靠性验证机制从而导致软件无法正常使用、所有依赖于该软件的其他的上层软件也无法正常使用、以及该软件跟其他上层软件之间由于版本变化造成无法相互兼容的技术问题。
为实现上述目的,按照本发明的一个方面,提供了一种云环境中虚拟机镜像的更新方法,包括以下步骤:
(1)从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;
(2)在步骤(1)搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;
(3)判断步骤(2)中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入步骤(4),否则直接转入步骤(5);
(4)分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;
(5)对步骤(4)中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;
(6)在完成镜像的更新操作后实施清理工作。
优选地,镜像更新环境包括宿主物理服务器,用于挂载虚拟机镜像并执行更新任务,以及最新软件信息数据库,用于检测用户镜像是否存在待更新软件。
优选地,步骤(4)具体为,首先获取rpm以及dpkg软件包的更新脚本,分析脚本中每一条命令的安全性,利用已有的命令分类知识库进行分类,然后将无法在离线状态下进行更新执行的命令替换或者是删除,重构更新脚本,完成对更新脚本的初步处理;然后,重新分析脚本,统计脚本命令并分析,判断是否需要进行脚本分离操作,若需要,则进行脚本语句依赖性分析并分离出所有不安全的语句并重新整理更新脚本,并执行离线部分脚本完成更新,处理在线部分脚本使其在镜像启动后自动执行,否则将整个脚本作为离线脚本完成更新,最后,保存镜像更新结果到数据库中。
优选地,步骤(4)包括以下子步骤:
(4-1)从获取的更新任务中,得到相关更新软件包,提取软件包中的相关更新脚本,利用已有的命令分类知识库对脚本中所有命令进行分类统计;
(4-2)利用步骤(4-1)得到的更新脚本命令的安全性结果,定位所有非安全型命令以及无关紧要型命令,并采用脚本重写技术完成对更新脚本的更改;
(4-3)对步骤(4-2)中得到重写后的脚本进行分析脚本安全性再分析操作得到脚本重写后的最终安全性结果;
(4-4)对步骤(4-3)生成的最终安全性结果进行判断操作,确定是否需要进行脚本分离;若需要则需要进行分离转入步骤(4-5),否则转入步骤(4-8);
(4-5)对更新脚本中语句进行依赖性分析以查找受非安全型命令影响的所有语句;
(4-6)利用步骤(4-5)生成的依赖性分析结果,对镜像实施脚本分离操作;
(4-7)对步骤(4-6)中生成的在线脚本进行适当处理,以使其能够正常完成对软件的更新;
(4-8)处理完在线脚本后,再对步骤(4-6)中生成的离线脚本进行处理,以完成离线状态下部分更新。
优选地,对更新脚本的更改包括无关紧要型命令删除、非安全型命令替换、以及无效控制结构删除。
优选地,步骤(4-6)具体为,首先定位所有非安全型命令语句以及它们的依赖性语句,然后提取这些语句并写入新的脚本文件中,接着删掉原有脚本中的这些语句形成离线脚本。
优选地,步骤(5)包括以下子步骤:
(5-1)对所有镜像进行已更新软件的依赖性分析;
(5-2)利用步骤(5-1)中得到的依赖软件集结果,将所有待验证镜像进行分类;
(5-3)根据(5-2)中的分类结果,对各类镜像集合执行“最大镜像”获取操作;
(5-4)对步骤(5-3)得到的“最大镜像”进行更新可靠性验证测试,以获取“最大镜像”的软件运行异常结果信息;
(5-5)根据步骤(5-4)中的软件运行异常信息判断是否有异常存在,若存在,则转入步骤(5-6),否则,转入步骤(5-7)。
(5-6)找出相关异常软件,并进行同类中其他镜像的更新可靠性分析操作,以得到该类中所有镜像的更新可靠性结果;
(5-7)利用步骤(5-4)以及步骤(5-6)中得到的镜像的异常软件信息,生成所有镜像最终的更新验证结果。
按照本发明的另一方面,提供了一种云环境中虚拟机镜像的更新系统,包括:
第一模块,用于从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;
第二模块,用于在第一模块搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;
第三模块,用于判断第一模块中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入第四模块,否则直接转入第五模块;
第四模块,用于分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;
第五模块,用于对第四模块中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;
第六模块,用于在完成镜像的更新操作后实施清理工作。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,能够取得下列有益效果:
(1)能够解决现有镜像离线更新机制中存在的更新脚本中的部分命令严重依赖镜像运行时内存信息从而使得脚本的重写操作无法正确完成的技术问题:由于在本发明的基于部分脚本分离的分阶段高效更新机制实现中采用了步骤(3)以及(4),将有关命令语句单独分离出来并重新打包,并使镜像启动后自动执行更新,因此,能够正常完成所有软件包更新脚本的重写任务。
(2)能够解决现有镜像离线更新机制由于缺乏更新后的可靠性验证机制从而导致镜像更新后软件可能无法正常使用、所有依赖于该软件的其他的上层软件也可能无法正常使用的问题:由于在本发明的基于镜像分类的更新可靠性验证机制实现中采用了步骤(1)、(2)以及(3),对更新后的虚拟机镜像进行有效的更新验证,确认更新后软件是否能够正常运行,同时验证所有依赖于已更新软件的上层其他软件,保证这些软件在镜像更新后都能够正常运行,因此,能够保证镜像更新的可靠性。
(3)本发明基于部分脚本分离的分阶段高效更新机制优化部分软件无法实现离线更新的问题,将离线更新的粒度细化,将原本不能离线执行更新的状况进行优化,最大程度保证离线更新部分的执行,降低在线执行更新的负担,从而提高更新的效率;
(4)本发明基于镜像分类的更新可靠性验证机制保证了更新的可靠性,使得整个更新流程更加完整,并且通过离线状态下巧妙获取依赖软件集合,将已更新的镜像进行分类,基于分类镜像中最大镜像的验证,最大化减少可靠性验证操作所需的时间,一方面保证了更新的可靠性,另一方面提高更新全部流程的效率。
附图说明
图1是本发明云环境中虚拟机镜像的更新方法的系统架构图。
图2是本发明云环境中虚拟机镜像的更新方法的流程图。
图3是本发明方法中步骤(2)的细化流程图。
图4是本发明方法中步骤(3)的细化流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
针对现有的虚拟机镜像离线更新机制存在的一些问题,本发明提出了基于部分脚本分离的分阶段高效镜像更新机制以及基于镜像分类的更新可靠性验证机制。
基于部分脚本分离的分阶段高效更新机制主要思路为:将原来无法使用基于脚本重写技术进行离线更新的脚本重新分割,将脚本中可以离线更新的部分以及不能离线更新的部分划分开来,离线部分脚本可以直接实施离线更新,而在线部分再等到镜像启动后执行,这种机制细粒度分解更新脚本,能够最大化实现更新脚本的离线执行,进一步降低更新消耗总时间,提高更新效率;
基于镜像分类的更新可靠性验证机制主要思路为:如果通过启动每一个更新完成后的镜像去验证离线更新的可靠性,这样效率将会非常低下,我们通过有效的分类组织,将同类的镜像分为一组,归为同一类中的虚拟机镜像我们只需验证组内的“最大镜像”,通过仔细验证该镜像中已更新的程序以及所有依赖于该程序的其他的程序是否能够正常运行。
本发明的实现步骤如下:
一、基于部分脚本分离的分阶段高效更新机制实现
(1)采用脚本重写技术完成离线更新脚本的更改。主要包括:更新脚本规范化,无效结构删除,无效命令删除,非安全型命令替换,无效控制结构删除;
(2)分析重写后的脚本。主要分析基于脚本重写技术更改后的脚本,若符合离线执行要求,则实施离线更新并结束整个离线更新过程,若仍存在无法离线执行的命令则继续;
(3)统计分析无法离线执行的脚本语句。找到每一处无法离线执行的语句,找到所有与它相关的语句,主要是指那些受该语句执行影响的其他语句;
(4)基于上述相关语句实施脚本分离。将所有无法离线执行的语句以及与之有依赖关系的语句提取合并形成在线脚本,剩余脚本形成离线脚本;
(5)执行离线更新脚本,完成离线更新部分,处理在线执行脚本,将其放置到合适位置并设置好系统启动后调用执行。
上述步骤(1)中的实现主要参考现有的基于脚本重写技术离线更新方法,其中会要用到提前建立好的非安全型命令知识库,在进行脚本分析的时候我们需要通过比对知识库发现所有相关非安全型命令的语句,之后进行一些处理步骤,主要有无效语句(块)的删除以及非安全型命令的替换,这里的替换只保证所有可以替换的命令都被替换。步骤(3)中相关语句的查找主要依据脚本自身的控制结构,包括直接控制以及间接控制:直接控制主要指无法离线执行的条件判断语句直接影响内部代码块的其他语句,条件判断语句的是否执行直接影响内部其他语句的执行;间接控制主要指无法离线执行的语句通过影响某个中间变量而间接影响其他受该变量制约的语句,一旦该中间变量的值发生修改,后续受制约的其他语句的执行将会受影响。
二、基于镜像分类的更新可靠性验证机制实现
(1)将已实施更新的镜像进行分类。若有多个镜像均更新某个软件,基于该软件分析每个镜像中依赖于该软件的其他软件,得到每个镜像中的依赖软件集合,分析所有集合,将有包含关系的集合进行归类,得到多个镜像集合,从而达到分类的目的;
(2)获取分类后镜像集合中的最大镜像。一个镜像集合中的最大镜像指该镜像的依赖软件集合能够包含所有其他的集合的一个集合,该集合的特点是所有其他集合的依赖软件都能在该集合中找到。
(3)基于镜像集合中最大镜像进行可靠性验证。由于最大镜像中的依赖软件包含所有其他的镜像的依赖软件,所以启动该镜像虚拟机后,在线验证所有依赖的软件的正常运行与否并统计,根据统计结果,若存在不能正常运行的软件,可以说明该镜像集合中所有其他任何镜像的依赖软件集合中若存在该软件,则该镜像更新失败,因为依赖该软件的其他软件不能正常工作。这样只需启动一个最大镜像即可完成整个镜像集合中所有镜像的可靠性验证,不需要启动每一个虚拟机镜像去单独验证,提高了验证可靠性操作的效率。
上述步骤(1)中在离线状态下获取镜像中某个软件的依赖软件是一个问题,这里以Centos/Fedora操作系统为例,通常rpm是该系列系统的软件包管理工具,可以通过查询rpm数据库获取软件间的依赖关系,这里巧妙利用命令参数可以查询数据库获取依赖软件,rpm-e--test PackageName,利用-e删除命令的test模式获取删除一个软件时由于依赖关系需要先删除的其他软件,这样便在离线状态下获取到了所有依赖于某个软件的其他软件。另外举例说明镜像的分类以及最大镜像的获取。假设现在对四个镜像I1、I2、I3、I4中某软件S进行离线更新,更新完成后进行可靠性验证。镜像I1中的依赖软件集合为{a,b,c},镜像I2中的依赖软件集合为{b,c},镜像I3中的依赖软件集合为{a,c},镜像I4中的依赖软件集合为{b,e,f},则因为集合{a,b,c}包含集合{b,c}以及集合{a,c},而集合{b,e,f}不行,则可将镜像I1、I2、I3归为一类,而镜像I4为另一类。又由于{a,b,c}为最大依赖软件集合,则镜像I1为该类中的最大镜像而I4为另一类中的最大镜像。
如图1所示,本发明通过控制台连接用户与后台系统,用户通过控制台可以提交更新需求,后台系统完成对用户需求的分析并完成用户虚拟机镜像的更新任务,最终通过控制台返回更新结果,用户进而得到更新反馈信息。后台系统主要完成这样几项任务:首先分析用户更新需求,准备镜像更新必要的环境;然后通过软件信息采集模块获取待更新镜像的软件信息并保存到数据库中,在与最新软件信息数据库进行比对分析后,查找出需要更新的软件并生成更新任务;接下来更新任务执行模块完成对镜像内软件的更新并保存更新结果信息到特定的数据库中;紧接着更新可靠性验证模块完成对镜像的更新可靠性验证任务,确定镜像更新是否正常;最后清理模块完成一些清理工作并将结果信息返回给控制台,在用户得到反馈信息后,镜像更新整个过程完成。
如图2所示,本发明云环境中虚拟机镜像的更新方法包括以下步骤:
(1)从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;具体而言,镜像更新环境包括宿主物理服务器一台,用于挂载虚拟机镜像并执行更新任务,以及最新软件信息数据库,用于检测用户镜像是否存在待更新软件。
(2)在步骤(1)搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;具体而言,根据镜像类型的不同,获取软件信息的方法会不同,但基本原理都一致,都是通过分析软件包管理工具维护的数据库文件,解析文件获取所有已安装的软件版本信息。系统根据镜像的类型动态调用相应的信息采集过程完成该项任务。
(3)判断步骤(2)中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入步骤(4),否则直接转入步骤(5),进行清理工作;
(4)分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;具体而言,首先获取rpm以及dpkg软件包的更新脚本,分析脚本中每一条命令的安全性,利用已有的命令分类知识库进行分类,然后将无法在离线状态下进行更新执行的命令替换或者是删除,重构更新脚本,完成对更新脚本的初步处理;然后,重新分析脚本,统计脚本命令并分析,判断是否需要进行脚本分离操作,若需要,则进行脚本语句依赖性分析并分离出所有不安全的语句并重新整理更新脚本,并执行离线部分脚本完成更新,处理在线部分脚本使其在镜像启动后自动执行,否则将整个脚本作为离线脚本完成更新,最后,保存镜像更新结果到数据库中。
(5)对步骤(4)中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;具体而言,为了高效的完成所有已更新镜像的可靠性验证任务,首先利用分类思想将待验证的所有已更新的虚拟机镜像进行分类,然后确定每一类虚拟机镜像集合中的“最大镜像”,最后利用执行对“最大镜像”的实际验证任务,去分析并得出同一类中其他镜像的更新验证结果,从而大大节约所有镜像的验证操作消耗时间。
(6)在完成镜像的更新操作后实施清理工作;具体而言,包括停止一些处理程序,清理一些临时脚本文件,使镜像回归正常离线状态,收集所有相关结果并反馈。
如图3所示,本发明步骤(4)包括以下子步骤:
(4-1)从获取的更新任务中,得到相关更新软件包,提取软件包中的相关更新脚本,利用已有的命令分类知识库对脚本中所有命令进行分类统计;具体而言,命令分类知识库的建立是事先通过人工分析大量更新脚本的命令得到命令的安全型信息。根据镜像在离线状态下的更新需要将常见的Linux脚本命令分为三类:安全型命令(在离线环境下可以正常执行的命令);非安全型命令(在离线环境下无法正常执行的命令);无关紧要型命令(在离线环境下没有必要执行的命令)。利用建立好的命令分类知识库,分析更新脚本中的所有命令的安全性并记录。
(4-2)利用步骤(4-1)得到的更新脚本命令的安全性结果,定位所有非安全型命令以及无关紧要型命令,并采用脚本重写技术完成对更新脚本的更改;具体而言,主要包括:无关紧要型命令删除,非安全型命令替换,无效控制结构删除。
(4-3)对步骤(4-2)中得到重写后的脚本进行分析脚本安全性再分析操作得到脚本重写后的最终安全性结果;具体而言,脚本重写不一定能够完成对所有非安全型命令的替换,因为有一些命令本身无法在镜像处理离线状态下进行执行,同时无法找到合适的替换命令进行替换。对重写后的脚本进行安全性分析就是要确认重写后脚本的安全性,并记录结果。
(4-4)对步骤(4-3)生成的最终安全性结果进行判断操作,确定是否需要进行脚本分离;若结果中显示存在非安全型命令,则需要进行分离转入步骤(4-5),否则转入步骤(4-8)。
(4-5)对更新脚本中语句进行依赖性分析以查找受非安全型命令影响的所有语句;具体而言,首先定位所有非安全型命令所在位置,并提取相关脚本语句,找到所有受该语句影响的其他语句,比如同一控制结构中的其他语句,或者影响某个变量值而该变量又影响其他语句的执行,这样一些语句属于依赖性脚本语句。实际上,由于软件更新脚本的核心内容是完成文件的替换,因此语句间依赖性一般都不是非常复杂,可以很快速地找到所有依赖性语句。最终,得到所有包含非安全型命令语句的依赖性语句,并记录结果。
(4-6)利用步骤(4-5)生成的依赖性分析结果,对镜像实施脚本分离操作;具体而言,首先定位所有非安全型命令语句以及它们的依赖性语句,然后提取这些语句并写入新的脚本文件中,该脚本文件称为在线脚本,接着删掉原有脚本中的这些语句形成离线脚本。
(4-7)对步骤(4-6)中生成的在线脚本进行适当处理,以使其能够正常完成对软件的更新;具体而言,利用在线脚本重新打包原更新软件包,然后将其放置到合适位置并设置好镜像启动后自动执行更新包安装操作。
(4-8)处理完在线脚本后,再对步骤(4-6)中生成的离线脚本进行处理,以完成离线状态下部分更新;具体而言,利用离线部分脚本重新打包原更新包,并对镜像实施离线状态下的更新包安装操作,利用已搭建好的更新环境挂载用户虚拟机镜像,利用chroot命令切换根目录到镜像挂载点,对重新打包后的更新包执行更新操作,完成离线状态下的更新。
如图4所示,本发明步骤(5)包括以下子步骤:
(5-1)对所有镜像进行已更新软件的依赖性分析;具体而言,利用软件包管理工具维护的数据库,找出所有依赖于已更新软件的上层软件,,软件集合中软件以软件名加版本号的形式来表示,最终将这些软件信息组成依赖软件集并记录结果。
(5-2)利用步骤(5-1)中得到的依赖软件集结果,将所有待验证镜像进行分类;具体而言,分析每一镜像对应的依赖软件集,将具有包含关系的集合进行归类,最终使得同一类镜像集合中的某个镜像的依赖软件集合包含其他镜像的依赖软件集。
(5-3)根据(5-2)中的分类结果,对各类镜像集合执行“最大镜像”获取操作;具体而言,一个镜像集合中的“最大镜像”满足该镜像的依赖软件集合能够包含其他镜像的依赖软件集。
(5-4)对步骤(5-3)得到的“最大镜像”进行更新可靠性验证测试,以获取“最大镜像”的软件运行异常结果信息;具体而言,首先需要根据依赖软件集合生成所有软件更新验证脚本,这里的软件验证操作主要采取的是启动软件查看启动后的状态信息。然后,执行更新验证脚本,查看所有相关软件运行的异常信息并记录下结果。
(5-5)根据步骤(5-4)中的软件运行异常信息判断是否有异常存在,若存在,则转入步骤(5-6),否则,转入步骤(5-7)。
(5-6)找出相关异常软件,并进行同类中其他镜像的更新可靠性分析操作,以得到该类中所有镜像的更新可靠性结果;具体而言,在确定了异常运行软件后,根据每个镜像的依赖软件集,在同类中所用镜像中搜索异常运行软件,统计异常软件信息并与镜像对应起来。
(5-7)利用步骤(5-4)以及步骤(5-6)中得到的镜像的异常软件信息,生成所有镜像最终的更新验证结果;具体而言,对于每一个镜像,在其依赖软件集中只要存在至少一个异常运行的软件,那么对于该镜像的更新存在问题,判定此次更新失败,如果该镜像中依赖软件集中所有软件都能正常运行,则更新成功,记录更新结果信息。
本发明在解决问题的同时,与现有的离线更新方法相比,更新的效率进一步得到提高同时更新的可靠性被首次提出并实现:首先通过将原本不能进行离线更新的状况优化,利用脚本分离技术实现脚本的部分离线执行,少许部分留待在线执行,融合离线与在线更新执行过程,提高了更新效率;提出并实现的更新可靠性验证使得离线更新整个流程更加完整科学,镜像分类可靠性验证机制不仅能够更加高效地完成所有相关镜像的内部更新软件的可靠性验证,而且能够验证镜像中所有依赖于更新软件的其他所有软件的正常与否,进一步保证了镜像更新后整个镜像的可靠性。简单高效的可靠性验证机制适合各种常见软件的更新,有利于镜像更新的部署实施。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种云环境中虚拟机镜像的更新方法,其特征在于,包括以下步骤:
(1)从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;
(2)在步骤(1)搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;
(3)判断步骤(2)中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入步骤(4),否则直接转入步骤(6);
(4)分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;
(5)对步骤(4)中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;
(6)在完成镜像的更新操作后实施清理工作;
其中,步骤(5)包括以下子步骤:
(5-1)对所有镜像进行已更新软件的依赖性分析;
(5-2)利用步骤(5-1)中得到的依赖软件集结果,将所有待验证镜像进行分类;
(5-3)根据(5-2)中的分类结果,对各类镜像集合执行最大镜像获取操作,其中,一个镜像集合中的最大镜像指该镜像的依赖软件集合能够包含所有其他的集合的一个集合,该集合的特点是所有其他集合的依赖软件都能在该集合中找到;
(5-4)对步骤(5-3)得到的最大镜像进行更新可靠性验证测试,以获取最大镜像的软件运行异常结果信息;
(5-5)根据步骤(5-4)中的软件运行异常信息判断是否有异常存在,若存在,则转入步骤(5-6),否则,转入步骤(5-7);
(5-6)找出相关异常软件,并进行同类中其他镜像的更新可靠性分析操作,以得到该类中所有镜像的更新可靠性结果;
(5-7)利用步骤(5-4)以及步骤(5-6)中得到的镜像的异常软件信息,生成所有镜像最终的更新验证结果。
2.根据权利要求1所述的更新方法,其特征在于,镜像更新环境包括宿主物理服务器,用于挂载虚拟机镜像并执行更新任务,以及最新软件信息数据库,用于检测用户镜像是否存在待更新软件。
3.根据权利要求1所述的更新方法,其特征在于,步骤(4)具体为,首先获取rpm以及dpkg软件包的更新脚本,分析脚本中每一条命令的安全性,利用已有的命令分类知识库进行分类,然后将无法在离线状态下进行更新执行的命令替换或者是删除,重构更新脚本,完成对更新脚本的初步处理;然后,重新分析脚本,统计脚本命令并分析,判断是否需要进行脚本分离操作,若需要,则进行脚本语句依赖性分析并分离出所有不安全的语句并重新整理更新脚本,并执行离线部分脚本完成更新,处理在线部分脚本使其在镜像启动后自动执行,否则将整个脚本作为离线脚本完成更新,最后,保存镜像更新结果到数据库中。
4.根据权利要求1所述的更新方法,其特征在于,步骤(4)包括以下子步骤:
(4-1)从获取的更新任务中,得到相关更新软件包,提取软件包中的相关更新脚本,利用已有的命令分类知识库对脚本中所有命令进行分类统计;
(4-2)利用步骤(4-1)得到的更新脚本命令的安全性结果,定位所有非安全型命令以及无关紧要型命令,并采用脚本重写技术完成对更新脚本的更改;
(4-3)对步骤(4-2)中得到重写后的脚本进行分析脚本安全性再分析操作得到脚本重写后的最终安全性结果;
(4-4)对步骤(4-3)生成的最终安全性结果进行判断操作,确定是否需要进行脚本分离;若需要则需要进行分离转入步骤(4-5),否则转入步骤(4-8);
(4-5)对更新脚本中语句进行依赖性分析以查找受非安全型命令影响的所有语句;
(4-6)利用步骤(4-5)生成的依赖性分析结果,对镜像实施脚本分离操作;
(4-7)对步骤(4-6)中生成的在线脚本进行适当处理,以使其能够正常完成对软件的更新;
(4-8)处理完在线脚本后,再对步骤(4-6)中生成的离线脚本进行处理,以完成离线状态下部分更新。
5.根据权利要求4所述的更新方法,其特征在于,对更新脚本的更改包括无关紧要型命令删除、非安全型命令替换、以及无效控制结构删除。
6.根据权利要求4所述的更新方法,其特征在于,步骤(4-6)具体为,首先定位所有非安全型命令语句以及它们的依赖性语句,然后提取这些语句并写入新的脚本文件中,接着删掉原有脚本中的这些语句形成离线脚本。
7.一种云环境中虚拟机镜像的更新系统,其特征在于,包括:
第一模块,用于从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;
第二模块,用于在第一模块搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;
第三模块,用于判断第一模块中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入第四模块,否则直接转入第五模块;
第四模块,用于分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;
第五模块,用于对第四模块中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;
其中,所述第五模块具体用于执行以下操作:
(5-1)对所有镜像进行已更新软件的依赖性分析;
(5-2)利用(5-1)中得到的依赖软件集结果,将所有待验证镜像进行分类;
(5-3)根据(5-2)中的分类结果,对各类镜像集合执行最大镜像获取操作,其中,一个镜像集合中的最大镜像指该镜像的依赖软件集合能够包含所有其他的集合的一个集合,该集合的特点是所有其他集合的依赖软件都能在该集合中找到;
(5-4)对(5-3)得到的最大镜像进行更新可靠性验证测试,以获取最大镜像的软件运行异常结果信息;
(5-5)根据(5-4)中的软件运行异常信息判断是否有异常存在,若存在,则转入(5-6),否则,转入(5-7);
(5-6)找出相关异常软件,并进行同类中其他镜像的更新可靠性分析操作,以得到该类中所有镜像的更新可靠性结果;
(5-7)利用(5-4)以及(5-6)中得到的镜像的异常软件信息,生成所有镜像最终的更新验证结果;
第六模块,用于在完成镜像的更新操作后实施清理工作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510247449.2A CN104820610B (zh) | 2015-05-14 | 2015-05-14 | 一种云环境中虚拟机镜像的更新方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510247449.2A CN104820610B (zh) | 2015-05-14 | 2015-05-14 | 一种云环境中虚拟机镜像的更新方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104820610A CN104820610A (zh) | 2015-08-05 |
CN104820610B true CN104820610B (zh) | 2017-12-22 |
Family
ID=53730912
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510247449.2A Active CN104820610B (zh) | 2015-05-14 | 2015-05-14 | 一种云环境中虚拟机镜像的更新方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104820610B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106598687B (zh) * | 2015-10-19 | 2020-01-21 | 阿里巴巴集团控股有限公司 | 一种脚本预热方法和装置 |
CN105610630A (zh) * | 2016-01-29 | 2016-05-25 | 博雅网信(北京)科技有限公司 | 一种云计算环境下的补丁安装系统及方法 |
CN105677368B (zh) * | 2016-03-01 | 2018-11-30 | 烽火通信科技股份有限公司 | 一种提升运营网络通信设备全网升级效率的方法 |
CN111240794B (zh) * | 2018-11-28 | 2023-06-13 | 阿里巴巴集团控股有限公司 | 容器镜像提取方法、装置以及容器镜像测试方法、装置 |
CN111240882B (zh) * | 2020-01-16 | 2020-11-20 | 深圳开源互联网安全技术有限公司 | 检测异常状态的方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033755A (zh) * | 2009-09-30 | 2011-04-27 | 国际商业机器公司 | 用于运行虚拟机镜像的方法和系统 |
CN102999369A (zh) * | 2012-12-25 | 2013-03-27 | 杭州华三通信技术有限公司 | 虚拟机升级的方法及装置 |
CN103218248A (zh) * | 2013-03-25 | 2013-07-24 | 华为技术有限公司 | 一种虚拟机镜像的更新方法、服务器和桌面云系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20120063933A (ko) * | 2010-12-08 | 2012-06-18 | 한국전자통신연구원 | 가상 머신 처리 시스템 및 그 방법 |
-
2015
- 2015-05-14 CN CN201510247449.2A patent/CN104820610B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102033755A (zh) * | 2009-09-30 | 2011-04-27 | 国际商业机器公司 | 用于运行虚拟机镜像的方法和系统 |
CN102999369A (zh) * | 2012-12-25 | 2013-03-27 | 杭州华三通信技术有限公司 | 虚拟机升级的方法及装置 |
CN103218248A (zh) * | 2013-03-25 | 2013-07-24 | 华为技术有限公司 | 一种虚拟机镜像的更新方法、服务器和桌面云系统 |
Non-Patent Citations (1)
Title |
---|
虚拟环境镜像安全管理问题的研究;毛得辉;《中国优秀硕士学位论文全文数据库信息科技辑》;20150315(第03期);摘要,第1-56页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104820610A (zh) | 2015-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104820610B (zh) | 一种云环境中虚拟机镜像的更新方法及系统 | |
US10949225B2 (en) | Automatic detection of user interface elements | |
US11762717B2 (en) | Automatically generating testing code for a software application | |
US10430319B1 (en) | Systems and methods for automatic software testing | |
EP3816806A1 (en) | Utilizing neural network and artificial intelligence models to select and execute test cases in a software development platform | |
GB2508643A (en) | Method for Performing a Regression Test after Modifying Source Code File | |
US8898522B2 (en) | Automated operating system test framework | |
US9256827B2 (en) | Portable data management using rule definitions | |
CN112148269A (zh) | 研发持续集成方法、装置、计算机设备及存储介质 | |
CN108647147B (zh) | 一种利用图谱分析执行自动化测试机器人及其使用方法 | |
Kaur et al. | A review on software maintenance issues and how to reduce maintenance efforts | |
EP4246332A1 (en) | System and method for serverless application testing | |
Garcia et al. | Hindsight logging for model training | |
EP4296861A1 (en) | System and method for cloud infrastructure test automation | |
US10768901B2 (en) | Converting code of a first code type on a mainframe device in phases to code of a second code type | |
CN116737232A (zh) | 一种基于国产软硬件环境的软件自动迁移和优化方法 | |
US20230297496A1 (en) | System and method for serverless application testing | |
CN107480050A (zh) | 一种自动测试更新包的测试方法 | |
CN114218666A (zh) | 一种仿真的前处理方法和装置 | |
Flores-Ruiz et al. | Mainframe migration based on screen scraping | |
Tadano et al. | Automatic synthesis of SRN models from system operation templates for availability analysis | |
Bicevskis et al. | A Practitioners Approach to Achieve Autonomic Computing Goals | |
WO2008014387A2 (en) | Custom database system and method of building and operating the same | |
Bicevska et al. | Smart technologies for improved software maintenance | |
Rodríguez-Echeverría et al. | IFML-based Model-Driven Front-End Modernization |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |