一种云环境中虚拟机镜像的更新方法_3

文档序号:8498621阅读:来源:国知局
的依赖软件集合为{a,c},镜像14中的依赖软件集合为{b,e,f},则因为集合{a,b,c}包含集合{b,c}以及集合{a,c},而集合{b,e,f}不行,则可将镜像I1、I2、I3归为一类,而镜像14为另一类。又由于{a,b,c}为最大依赖软件集合,则镜像Il为该类中的最大镜像而14为另一类中的最大镜像。
[0070]如图1所示,本发明通过控制台连接用户与后台系统,用户通过控制台可以提交更新需求,后台系统完成对用户需求的分析并完成用户虚拟机镜像的更新任务,最终通过控制台返回更新结果,用户进而得到更新反馈信息。后台系统主要完成这样几项任务:首先分析用户更新需求,准备镜像更新必要的环境;然后通过软件信息采集模块获取待更新镜像的软件信息并保存到数据库中,在与最新软件信息数据库进行比对分析后,查找出需要更新的软件并生成更新任务;接下来更新任务执行模块完成对镜像内软件的更新并保存更新结果信息到特定的数据库中;紧接着更新可靠性验证模块完成对镜像的更新可靠性验证任务,确定镜像更新是否正常;最后清理模块完成一些清理工作并将结果信息返回给控制台,在用户得到反馈信息后,镜像更新整个过程完成。
[0071]如图2所示,本发明云环境中虚拟机镜像的更新方法包括以下步骤:
[0072](I)从用户接收虚拟机镜像更新请求,根据该请求查找该用户相关的虚拟机镜像并获取该镜像的类型信息,并根据该镜像的类型搭建镜像更新环境;具体而言,镜像更新环境包括宿主物理服务器一台,用于挂载虚拟机镜像并执行更新任务,以及最新软件信息数据库,用于检测用户镜像是否存在待更新软件。
[0073](2)在步骤(I)搭建的镜像更新环境下获取该虚拟机镜像的软件信息,并与已有的最新软件信息数据库进行比较分析,以找出该虚拟机镜像的待更新软件并生成更新任务;具体而言,根据镜像类型的不同,获取软件信息的方法会不同,但基本原理都一致,都是通过分析软件包管理工具维护的数据库文件,解析文件获取所有已安装的软件版本信息。系统根据镜像的类型动态调用相应的信息采集过程完成该项任务。
[0074](3)判断步骤(2)中生成的更新任务是否支持rpm以及dpkg软件包管理工具的更新,若支持,进入步骤(4),否则直接转入步骤(5),进行清理工作;
[0075](4)分析更新任务并执行,以完成用户虚拟机镜像中软件的更新;具体而言,首先获取rpm以及dpkg软件包的更新脚本,分析脚本中每一条命令的安全性,利用已有的命令分类知识库进行分类,然后将无法在离线状态下进行更新执行的命令替换或者是删除,重构更新脚本,完成对更新脚本的初步处理;然后,重新分析脚本,统计脚本命令并分析,判断是否需要进行脚本分离操作,若需要,则进行脚本语句依赖性分析并分离出所有不安全的语句并重新整理更新脚本,并执行离线部分脚本完成更新,处理在线部分脚本使其在镜像启动后自动执行,否则将整个脚本作为离线脚本完成更新,最后,保存镜像更新结果到数据库中。
[0076](5)对步骤(4)中已经实施更新的虚拟机镜像进行更新可靠性验证操作,以验证更新结果的正确性;具体而言,为了高效的完成所有已更新镜像的可靠性验证任务,首先利用分类思想将待验证的所有已更新的虚拟机镜像进行分类,然后确定每一类虚拟机镜像集合中的“最大镜像”,最后利用执行对“最大镜像”的实际验证任务,去分析并得出同一类中其他镜像的更新验证结果,从而大大节约所有镜像的验证操作消耗时间。
[0077](6)在完成镜像的更新操作后实施清理工作;具体而言,包括停止一些处理程序,清理一些临时脚本文件,使镜像回归正常离线状态,收集所有相关结果并反馈。
[0078]如图3所示,本发明步骤⑷包括以下子步骤:
[0079](4-1)从获取的更新任务中,得到相关更新软件包,提取软件包中的相关更新脚本,利用已有的命令分类知识库对脚本中所有命令进行分类统计;具体而言,命令分类知识库的建立是事先通过人工分析大量更新脚本的命令得到命令的安全型信息。根据镜像在离线状态下的更新需要将常见的Linux脚本命令分为三类:安全型命令(在离线环境下可以正常执行的命令);非安全型命令(在离线环境下无法正常执行的命令);无关紧要型命令(在离线环境下没有必要执行的命令)。利用建立好的命令分类知识库,分析更新脚本中的所有命令的安全性并记录。
[0080](4-2)利用步骤(4-1)得到的更新脚本命令的安全性结果,定位所有非安全型命令以及无关紧要型命令,并采用脚本重写技术完成对更新脚本的更改;具体而言,主要包括:无关紧要型命令删除,非安全型命令替换,无效控制结构删除。
[0081](4-3)对步骤(4-2)中得到重写后的脚本进行分析脚本安全性再分析操作得到脚本重写后的最终安全性结果;具体而言,脚本重写不一定能够完成对所有非安全型命令的替换,因为有一些命令本身无法在镜像处理离线状态下进行执行,同时无法找到合适的替换命令进行替换。对重写后的脚本进行安全性分析就是要确认重写后脚本的安全性,并记录结果。
[0082](4-4)对步骤(4-3)生成的最终安全性结果进行判断操作,确定是否需要进行脚本分离;若结果中显示存在非安全型命令,则需要进行分离转入步骤(4-5),否则转入步骤(4-8)ο
[0083](4-5)对更新脚本中语句进行依赖性分析以查找受非安全型命令影响的所有语句;具体而言,首先定位所有非安全型命令所在位置,并提取相关脚本语句,找到所有受该语句影响的其他语句,比如同一控制结构中的其他语句,或者影响某个变量值而该变量又影响其他语句的执行,这样一些语句属于依赖性脚本语句。实际上,由于软件更新脚本的核心内容是完成文件的替换,因此语句间依赖性一般都不是非常复杂,可以很快速地找到所有依赖性语句。最终,得到所有包含非安全型命令语句的依赖性语句,并记录结果。
[0084](4-6)利用步骤(4-5)生成的依赖性分析结果,对镜像实施脚本分离操作;具体而言,首先定位所有非安全型命令语句以及它们的依赖性语句,然后提取这些语句并写入新的脚本文件中,该脚本文件称为在线脚本,接着删掉原有脚本中的这些语句形成离线脚本。
[0085](4-7)对步骤(4-6)中生成的在线脚本进行适当处理,以使其能够正常完成对软件的更新;具体而言,利用在线脚本重新打包原更新软件包,然后将其放置到合适位置并设置好镜像启动后自动执行更新包安装操作。
[0086](4-8)处理完在线脚本后,再对步骤(4-6)中生成的离线脚本进行处理,以完成离线状态下部分更新;具体而言,利用离线部分脚本重新打包原更新包,并对镜像实施离线状态下的更新包安装操作,利用已搭建好的更新环境挂载用户虚拟机镜像,利用ChlOOt命令切换根目录到镜像挂载点,对重新打包后的更新包执行更新操作,完成离线状态下的更新。
[0087]如图4所示,本发明步骤(5)包括以下子步骤:
[0088](5-1)对所有镜像进行已更新软件的依赖性分析;具体而言,利用软件包管理工具维护的数据库,找出所有依赖于已更新软件的上层软件,,软件集合中软件以软件名加版本号的形式来表示,最终将这些软件信息组成依赖软件集并记录结果。
[0089](5-2)利用步骤(5-1)中得到的依赖软件集结果,将所有待验证镜像进行分类;具体而言,分析每一镜像对应的依赖软件集,将具有包含关系的集合进行归类,最终使得同一类镜像集合中的某个镜像的依赖软件集合包含其他镜像的依赖软件集。
[0090](5-3)根据(5-2)中的分类结果,对各类镜像集合执行“最大镜像”获取操作;具体而言,一个镜像集合中的“最大镜像”满足该镜像的依赖软件集合能够包含其他镜像的依赖软件集。
[0091](5-4)对步骤(5-3)得到的“最大镜像”进行更新可靠性验证测试,以获取“最大镜像”的软件运行异常结果信息;具体而言,首先需要根据依赖软件集合生成所有软件更新验证脚本,这里的软件验证操作主要采取的是启动软件
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1