環(huán)境下獲取該虛擬機(jī)鏡像的軟件信息,并與已有的最新軟件信息數(shù)據(jù)庫(kù)進(jìn)行比較分析,以找出該虛擬機(jī)鏡像的待更新軟件并生成更新任務(wù);
[0040]第三模塊,用于判斷第一模塊中生成的更新任務(wù)是否支持rpm以及dpkg軟件包管理工具的更新,若支持,進(jìn)入第四模塊,否則直接轉(zhuǎn)入第五模塊;
[0041]第四模塊,用于分析更新任務(wù)并執(zhí)行,以完成用戶虛擬機(jī)鏡像中軟件的更新;
[0042]第五模塊,用于對(duì)第四模塊中已經(jīng)實(shí)施更新的虛擬機(jī)鏡像進(jìn)行更新可靠性驗(yàn)證操作,以驗(yàn)證更新結(jié)果的正確性;
[0043]第六模塊,用于在完成鏡像的更新操作后實(shí)施清理工作。
[0044]總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,能夠取得下列有益效果:
[0045](I)能夠解決現(xiàn)有鏡像離線更新機(jī)制中存在的更新腳本中的部分命令嚴(yán)重依賴鏡像運(yùn)行時(shí)內(nèi)存信息從而使得腳本的重寫操作無法正確完成的技術(shù)問題:由于在本發(fā)明的基于部分腳本分離的分階段高效更新機(jī)制實(shí)現(xiàn)中采用了步驟(3)以及(4),將有關(guān)命令語(yǔ)句單獨(dú)分離出來并重新打包,并使鏡像啟動(dòng)后自動(dòng)執(zhí)行更新,因此,能夠正常完成所有軟件包更新腳本的重寫任務(wù)。
[0046](2)能夠解決現(xiàn)有鏡像離線更新機(jī)制由于缺乏更新后的可靠性驗(yàn)證機(jī)制從而導(dǎo)致鏡像更新后軟件可能無法正常使用、所有依賴于該軟件的其他的上層軟件也可能無法正常使用的問題:由于在本發(fā)明的基于鏡像分類的更新可靠性驗(yàn)證機(jī)制實(shí)現(xiàn)中采用了步驟
(1)、(2)以及(3),對(duì)更新后的虛擬機(jī)鏡像進(jìn)行有效的更新驗(yàn)證,確認(rèn)更新后軟件是否能夠正常運(yùn)行,同時(shí)驗(yàn)證所有依賴于已更新軟件的上層其他軟件,保證這些軟件在鏡像更新后都能夠正常運(yùn)行,因此,能夠保證鏡像更新的可靠性。
[0047](3)本發(fā)明基于部分腳本分離的分階段高效更新機(jī)制優(yōu)化部分軟件無法實(shí)現(xiàn)離線更新的問題,將離線更新的粒度細(xì)化,將原本不能離線執(zhí)行更新的狀況進(jìn)行優(yōu)化,最大程度保證離線更新部分的執(zhí)行,降低在線執(zhí)行更新的負(fù)擔(dān),從而提高更新的效率;
[0048](4)本發(fā)明基于鏡像分類的更新可靠性驗(yàn)證機(jī)制保證了更新的可靠性,使得整個(gè)更新流程更加完整,并且通過離線狀態(tài)下巧妙獲取依賴軟件集合,將已更新的鏡像進(jìn)行分類,基于分類鏡像中最大鏡像的驗(yàn)證,最大化減少可靠性驗(yàn)證操作所需的時(shí)間,一方面保證了更新的可靠性,另一方面提高更新全部流程的效率。
【附圖說明】
[0049]圖1是本發(fā)明云環(huán)境中虛擬機(jī)鏡像的更新方法的系統(tǒng)架構(gòu)圖。
[0050]圖2是本發(fā)明云環(huán)境中虛擬機(jī)鏡像的更新方法的流程圖。
[0051]圖3是本發(fā)明方法中步驟(2)的細(xì)化流程圖。
[0052]圖4是本發(fā)明方法中步驟(3)的細(xì)化流程圖。
【具體實(shí)施方式】
[0053]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
[0054]針對(duì)現(xiàn)有的虛擬機(jī)鏡像離線更新機(jī)制存在的一些問題,本發(fā)明提出了基于部分腳本分離的分階段高效鏡像更新機(jī)制以及基于鏡像分類的更新可靠性驗(yàn)證機(jī)制。
[0055]基于部分腳本分離的分階段高效更新機(jī)制主要思路為:將原來無法使用基于腳本重寫技術(shù)進(jìn)行離線更新的腳本重新分割,將腳本中可以離線更新的部分以及不能離線更新的部分劃分開來,離線部分腳本可以直接實(shí)施離線更新,而在線部分再等到鏡像啟動(dòng)后執(zhí)行,這種機(jī)制細(xì)粒度分解更新腳本,能夠最大化實(shí)現(xiàn)更新腳本的離線執(zhí)行,進(jìn)一步降低更新消耗總時(shí)間,提高更新效率;
[0056]基于鏡像分類的更新可靠性驗(yàn)證機(jī)制主要思路為:如果通過啟動(dòng)每一個(gè)更新完成后的鏡像去驗(yàn)證離線更新的可靠性,這樣效率將會(huì)非常低下,我們通過有效的分類組織,將同類的鏡像分為一組,歸為同一類中的虛擬機(jī)鏡像我們只需驗(yàn)證組內(nèi)的“最大鏡像”,通過仔細(xì)驗(yàn)證該鏡像中已更新的程序以及所有依賴于該程序的其他的程序是否能夠正常運(yùn)行。
[0057]本發(fā)明的實(shí)現(xiàn)步驟如下:
[0058]一、基于部分腳本分離的分階段高效更新機(jī)制實(shí)現(xiàn)
[0059](I)采用腳本重寫技術(shù)完成離線更新腳本的更改。主要包括:更新腳本規(guī)范化,無效結(jié)構(gòu)刪除,無效命令刪除,非安全型命令替換,無效控制結(jié)構(gòu)刪除;
[0060](2)分析重寫后的腳本。主要分析基于腳本重寫技術(shù)更改后的腳本,若符合離線執(zhí)行要求,則實(shí)施離線更新并結(jié)束整個(gè)離線更新過程,若仍存在無法離線執(zhí)行的命令則繼續(xù);
[0061](3)統(tǒng)計(jì)分析無法離線執(zhí)行的腳本語(yǔ)句。找到每一處無法離線執(zhí)行的語(yǔ)句,找到所有與它相關(guān)的語(yǔ)句,主要是指那些受該語(yǔ)句執(zhí)行影響的其他語(yǔ)句;
[0062](4)基于上述相關(guān)語(yǔ)句實(shí)施腳本分離。將所有無法離線執(zhí)行的語(yǔ)句以及與之有依賴關(guān)系的語(yǔ)句提取合并形成在線腳本,剩余腳本形成離線腳本;
[0063](5)執(zhí)行離線更新腳本,完成離線更新部分,處理在線執(zhí)行腳本,將其放置到合適位置并設(shè)置好系統(tǒng)啟動(dòng)后調(diào)用執(zhí)行。
[0064]上述步驟(I)中的實(shí)現(xiàn)主要參考現(xiàn)有的基于腳本重寫技術(shù)離線更新方法,其中會(huì)要用到提前建立好的非安全型命令知識(shí)庫(kù),在進(jìn)行腳本分析的時(shí)候我們需要通過比對(duì)知識(shí)庫(kù)發(fā)現(xiàn)所有相關(guān)非安全型命令的語(yǔ)句,之后進(jìn)行一些處理步驟,主要有無效語(yǔ)句(塊)的刪除以及非安全型命令的替換,這里的替換只保證所有可以替換的命令都被替換。步驟(3)中相關(guān)語(yǔ)句的查找主要依據(jù)腳本自身的控制結(jié)構(gòu),包括直接控制以及間接控制:直接控制主要指無法離線執(zhí)行的條件判斷語(yǔ)句直接影響內(nèi)部代碼塊的其他語(yǔ)句,條件判斷語(yǔ)句的是否執(zhí)行直接影響內(nèi)部其他語(yǔ)句的執(zhí)行;間接控制主要指無法離線執(zhí)行的語(yǔ)句通過影響某個(gè)中間變量而間接影響其他受該變量制約的語(yǔ)句,一旦該中間變量的值發(fā)生修改,后續(xù)受制約的其他語(yǔ)句的執(zhí)行將會(huì)受影響。
[0065]二、基于鏡像分類的更新可靠性驗(yàn)證機(jī)制實(shí)現(xiàn)
[0066](I)將已實(shí)施更新的鏡像進(jìn)行分類。若有多個(gè)鏡像均更新某個(gè)軟件,基于該軟件分析每個(gè)鏡像中依賴于該軟件的其他軟件,得到每個(gè)鏡像中的依賴軟件集合,分析所有集合,將有包含關(guān)系的集合進(jìn)行歸類,得到多個(gè)鏡像集合,從而達(dá)到分類的目的;
[0067](2)獲取分類后鏡像集合中的最大鏡像。一個(gè)鏡像集合中的最大鏡像指該鏡像的依賴軟件集合能夠包含所有其他的集合的一個(gè)集合,該集合的特點(diǎn)是所有其他集合的依賴軟件都能在該集合中找到。
[0068](3)基于鏡像集合中最大鏡像進(jìn)行可靠性驗(yàn)證。由于最大鏡像中的依賴軟件包含所有其他的鏡像的依賴軟件,所以啟動(dòng)該鏡像虛擬機(jī)后,在線驗(yàn)證所有依賴的軟件的正常運(yùn)行與否并統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)結(jié)果,若存在不能正常運(yùn)行的軟件,可以說明該鏡像集合中所有其他任何鏡像的依賴軟件集合中若存在該軟件,則該鏡像更新失敗,因?yàn)橐蕾囋撥浖钠渌浖荒苷9ぷ?。這樣只需啟動(dòng)一個(gè)最大鏡像即可完成整個(gè)鏡像集合中所有鏡像的可靠性驗(yàn)證,不需要啟動(dòng)每一個(gè)虛擬機(jī)鏡像去單獨(dú)驗(yàn)證,提高了驗(yàn)證可靠性操作的效率。
[0069]上述步驟(I)中在離線狀態(tài)下獲取鏡像中某個(gè)軟件的依賴軟件是一個(gè)問題,這里以Centos/Fedora操作系統(tǒng)為例,通常rpm是該系列系統(tǒng)的軟件包管理工具,可以通過查詢r(jià)pm數(shù)據(jù)庫(kù)獲取軟件間的依賴關(guān)系,這里巧妙利用命令參數(shù)可以查詢數(shù)據(jù)庫(kù)獲取依賴軟件,rpm-e—test PackageName,利用_e刪除命令的test模式獲取刪除一個(gè)軟件時(shí)由于依賴關(guān)系需要先刪除的其他軟件,這樣便在離線狀態(tài)下獲取到了所有依賴于某個(gè)軟件的其他軟件。另外舉例說明鏡像的分類以及最大鏡像的獲取。假設(shè)現(xiàn)在對(duì)四個(gè)鏡像I1、12、13、14中某軟件S進(jìn)行離線更新,更新完成后進(jìn)行可靠性驗(yàn)證。鏡像Il中的依賴軟件集合為{a, b, c},鏡像12中的依賴軟件集合為{b,c},鏡像13中