的依賴軟件集合為{a,c},鏡像14中的依賴軟件集合為{b,e,f},則因?yàn)榧蟵a,b,c}包含集合{b,c}以及集合{a,c},而集合{b,e,f}不行,則可將鏡像I1、I2、I3歸為一類,而鏡像14為另一類。又由于{a,b,c}為最大依賴軟件集合,則鏡像Il為該類中的最大鏡像而14為另一類中的最大鏡像。
[0070]如圖1所示,本發(fā)明通過控制臺連接用戶與后臺系統(tǒng),用戶通過控制臺可以提交更新需求,后臺系統(tǒng)完成對用戶需求的分析并完成用戶虛擬機(jī)鏡像的更新任務(wù),最終通過控制臺返回更新結(jié)果,用戶進(jìn)而得到更新反饋信息。后臺系統(tǒng)主要完成這樣幾項(xiàng)任務(wù):首先分析用戶更新需求,準(zhǔn)備鏡像更新必要的環(huán)境;然后通過軟件信息采集模塊獲取待更新鏡像的軟件信息并保存到數(shù)據(jù)庫中,在與最新軟件信息數(shù)據(jù)庫進(jìn)行比對分析后,查找出需要更新的軟件并生成更新任務(wù);接下來更新任務(wù)執(zhí)行模塊完成對鏡像內(nèi)軟件的更新并保存更新結(jié)果信息到特定的數(shù)據(jù)庫中;緊接著更新可靠性驗(yàn)證模塊完成對鏡像的更新可靠性驗(yàn)證任務(wù),確定鏡像更新是否正常;最后清理模塊完成一些清理工作并將結(jié)果信息返回給控制臺,在用戶得到反饋信息后,鏡像更新整個(gè)過程完成。
[0071]如圖2所示,本發(fā)明云環(huán)境中虛擬機(jī)鏡像的更新方法包括以下步驟:
[0072](I)從用戶接收虛擬機(jī)鏡像更新請求,根據(jù)該請求查找該用戶相關(guān)的虛擬機(jī)鏡像并獲取該鏡像的類型信息,并根據(jù)該鏡像的類型搭建鏡像更新環(huán)境;具體而言,鏡像更新環(huán)境包括宿主物理服務(wù)器一臺,用于掛載虛擬機(jī)鏡像并執(zhí)行更新任務(wù),以及最新軟件信息數(shù)據(jù)庫,用于檢測用戶鏡像是否存在待更新軟件。
[0073](2)在步驟(I)搭建的鏡像更新環(huán)境下獲取該虛擬機(jī)鏡像的軟件信息,并與已有的最新軟件信息數(shù)據(jù)庫進(jìn)行比較分析,以找出該虛擬機(jī)鏡像的待更新軟件并生成更新任務(wù);具體而言,根據(jù)鏡像類型的不同,獲取軟件信息的方法會(huì)不同,但基本原理都一致,都是通過分析軟件包管理工具維護(hù)的數(shù)據(jù)庫文件,解析文件獲取所有已安裝的軟件版本信息。系統(tǒng)根據(jù)鏡像的類型動(dòng)態(tài)調(diào)用相應(yīng)的信息采集過程完成該項(xiàng)任務(wù)。
[0074](3)判斷步驟(2)中生成的更新任務(wù)是否支持rpm以及dpkg軟件包管理工具的更新,若支持,進(jìn)入步驟(4),否則直接轉(zhuǎn)入步驟(5),進(jìn)行清理工作;
[0075](4)分析更新任務(wù)并執(zhí)行,以完成用戶虛擬機(jī)鏡像中軟件的更新;具體而言,首先獲取rpm以及dpkg軟件包的更新腳本,分析腳本中每一條命令的安全性,利用已有的命令分類知識庫進(jìn)行分類,然后將無法在離線狀態(tài)下進(jìn)行更新執(zhí)行的命令替換或者是刪除,重構(gòu)更新腳本,完成對更新腳本的初步處理;然后,重新分析腳本,統(tǒng)計(jì)腳本命令并分析,判斷是否需要進(jìn)行腳本分離操作,若需要,則進(jìn)行腳本語句依賴性分析并分離出所有不安全的語句并重新整理更新腳本,并執(zhí)行離線部分腳本完成更新,處理在線部分腳本使其在鏡像啟動(dòng)后自動(dòng)執(zhí)行,否則將整個(gè)腳本作為離線腳本完成更新,最后,保存鏡像更新結(jié)果到數(shù)據(jù)庫中。
[0076](5)對步驟(4)中已經(jīng)實(shí)施更新的虛擬機(jī)鏡像進(jìn)行更新可靠性驗(yàn)證操作,以驗(yàn)證更新結(jié)果的正確性;具體而言,為了高效的完成所有已更新鏡像的可靠性驗(yàn)證任務(wù),首先利用分類思想將待驗(yàn)證的所有已更新的虛擬機(jī)鏡像進(jìn)行分類,然后確定每一類虛擬機(jī)鏡像集合中的“最大鏡像”,最后利用執(zhí)行對“最大鏡像”的實(shí)際驗(yàn)證任務(wù),去分析并得出同一類中其他鏡像的更新驗(yàn)證結(jié)果,從而大大節(jié)約所有鏡像的驗(yàn)證操作消耗時(shí)間。
[0077](6)在完成鏡像的更新操作后實(shí)施清理工作;具體而言,包括停止一些處理程序,清理一些臨時(shí)腳本文件,使鏡像回歸正常離線狀態(tài),收集所有相關(guān)結(jié)果并反饋。
[0078]如圖3所示,本發(fā)明步驟⑷包括以下子步驟:
[0079](4-1)從獲取的更新任務(wù)中,得到相關(guān)更新軟件包,提取軟件包中的相關(guān)更新腳本,利用已有的命令分類知識庫對腳本中所有命令進(jìn)行分類統(tǒng)計(jì);具體而言,命令分類知識庫的建立是事先通過人工分析大量更新腳本的命令得到命令的安全型信息。根據(jù)鏡像在離線狀態(tài)下的更新需要將常見的Linux腳本命令分為三類:安全型命令(在離線環(huán)境下可以正常執(zhí)行的命令);非安全型命令(在離線環(huán)境下無法正常執(zhí)行的命令);無關(guān)緊要型命令(在離線環(huán)境下沒有必要執(zhí)行的命令)。利用建立好的命令分類知識庫,分析更新腳本中的所有命令的安全性并記錄。
[0080](4-2)利用步驟(4-1)得到的更新腳本命令的安全性結(jié)果,定位所有非安全型命令以及無關(guān)緊要型命令,并采用腳本重寫技術(shù)完成對更新腳本的更改;具體而言,主要包括:無關(guān)緊要型命令刪除,非安全型命令替換,無效控制結(jié)構(gòu)刪除。
[0081](4-3)對步驟(4-2)中得到重寫后的腳本進(jìn)行分析腳本安全性再分析操作得到腳本重寫后的最終安全性結(jié)果;具體而言,腳本重寫不一定能夠完成對所有非安全型命令的替換,因?yàn)橛幸恍┟畋旧頍o法在鏡像處理離線狀態(tài)下進(jìn)行執(zhí)行,同時(shí)無法找到合適的替換命令進(jìn)行替換。對重寫后的腳本進(jìn)行安全性分析就是要確認(rèn)重寫后腳本的安全性,并記錄結(jié)果。
[0082](4-4)對步驟(4-3)生成的最終安全性結(jié)果進(jìn)行判斷操作,確定是否需要進(jìn)行腳本分離;若結(jié)果中顯示存在非安全型命令,則需要進(jìn)行分離轉(zhuǎn)入步驟(4-5),否則轉(zhuǎn)入步驟(4-8)ο
[0083](4-5)對更新腳本中語句進(jìn)行依賴性分析以查找受非安全型命令影響的所有語句;具體而言,首先定位所有非安全型命令所在位置,并提取相關(guān)腳本語句,找到所有受該語句影響的其他語句,比如同一控制結(jié)構(gòu)中的其他語句,或者影響某個(gè)變量值而該變量又影響其他語句的執(zhí)行,這樣一些語句屬于依賴性腳本語句。實(shí)際上,由于軟件更新腳本的核心內(nèi)容是完成文件的替換,因此語句間依賴性一般都不是非常復(fù)雜,可以很快速地找到所有依賴性語句。最終,得到所有包含非安全型命令語句的依賴性語句,并記錄結(jié)果。
[0084](4-6)利用步驟(4-5)生成的依賴性分析結(jié)果,對鏡像實(shí)施腳本分離操作;具體而言,首先定位所有非安全型命令語句以及它們的依賴性語句,然后提取這些語句并寫入新的腳本文件中,該腳本文件稱為在線腳本,接著刪掉原有腳本中的這些語句形成離線腳本。
[0085](4-7)對步驟(4-6)中生成的在線腳本進(jìn)行適當(dāng)處理,以使其能夠正常完成對軟件的更新;具體而言,利用在線腳本重新打包原更新軟件包,然后將其放置到合適位置并設(shè)置好鏡像啟動(dòng)后自動(dòng)執(zhí)行更新包安裝操作。
[0086](4-8)處理完在線腳本后,再對步驟(4-6)中生成的離線腳本進(jìn)行處理,以完成離線狀態(tài)下部分更新;具體而言,利用離線部分腳本重新打包原更新包,并對鏡像實(shí)施離線狀態(tài)下的更新包安裝操作,利用已搭建好的更新環(huán)境掛載用戶虛擬機(jī)鏡像,利用ChlOOt命令切換根目錄到鏡像掛載點(diǎn),對重新打包后的更新包執(zhí)行更新操作,完成離線狀態(tài)下的更新。
[0087]如圖4所示,本發(fā)明步驟(5)包括以下子步驟:
[0088](5-1)對所有鏡像進(jìn)行已更新軟件的依賴性分析;具體而言,利用軟件包管理工具維護(hù)的數(shù)據(jù)庫,找出所有依賴于已更新軟件的上層軟件,,軟件集合中軟件以軟件名加版本號的形式來表示,最終將這些軟件信息組成依賴軟件集并記錄結(jié)果。
[0089](5-2)利用步驟(5-1)中得到的依賴軟件集結(jié)果,將所有待驗(yàn)證鏡像進(jìn)行分類;具體而言,分析每一鏡像對應(yīng)的依賴軟件集,將具有包含關(guān)系的集合進(jìn)行歸類,最終使得同一類鏡像集合中的某個(gè)鏡像的依賴軟件集合包含其他鏡像的依賴軟件集。
[0090](5-3)根據(jù)(5-2)中的分類結(jié)果,對各類鏡像集合執(zhí)行“最大鏡像”獲取操作;具體而言,一個(gè)鏡像集合中的“最大鏡像”滿足該鏡像的依賴軟件集合能夠包含其他鏡像的依賴軟件集。
[0091](5-4)對步驟(5-3)得到的“最大鏡像”進(jìn)行更新可靠性驗(yàn)證測試,以獲取“最大鏡像”的軟件運(yùn)行異常結(jié)果信息;具體而言,首先需要根據(jù)依賴軟件集合生成所有軟件更新驗(yàn)證腳本,這里的軟件驗(yàn)證操作主要采取的是啟動(dòng)軟件