亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種虛擬機軟件更新方法

文檔序號:6619789閱讀:327來源:國知局
一種虛擬機軟件更新方法
【專利摘要】本發(fā)明涉及軟件更新【技術(shù)領(lǐng)域】,尤其是一種虛擬機軟件更新方法。本發(fā)明包括步驟:1、在創(chuàng)建虛擬機時虛擬一個光驅(qū)和串口;2、獲取已安裝軟件的版本號;3、新版本后,將軟件和版本號放入ISO鏡像文件;4、將ISO鏡像文件拷貝到宿主機上,并將其掛載到虛擬機的光驅(qū)中;5、在宿主機上向虛擬機的串口發(fā)送命令,獲取軟件版本進行比較;6、如果ISO鏡像文件中的軟件版本較新,那么對ISO鏡像文件中的軟件安裝程序執(zhí)行靜默安裝;否則,不執(zhí)行任何安裝。本發(fā)明提供了一種替代手工進行虛擬機軟件更新的方法,可以用于虛擬機軟件更新中。
【專利說明】一種虛擬機軟件更新方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及軟件更新【技術(shù)領(lǐng)域】,尤其是一種虛擬機軟件更新方法。

【背景技術(shù)】
[0002] 在云平臺上的虛擬機運行以后,一般要對其上軟件的進行維護,尤其是有部分云 平臺上的虛擬機上需要安裝功能增強軟件的;比如Hyper-V的虛擬機上需要安裝Hyper-V Integration Services,還有虛擬機支持監(jiān)控需要安裝的一些軟件。需要更新時,一般都只 能通過人工一臺一臺進行安裝。步驟一般如下:
[0003] 1、維護人員通過網(wǎng)絡(luò)或掛載安裝光盤或ISO鏡像文件獲取軟件的安裝程序;
[0004] 2、維護人員通過軟件的版本信息對比,判斷軟件是否需要更新;
[0005] 3、如果需要更新,維護人員先卸載舊版本,然后運行新版本的安裝程序,一步一步 進行安裝。
[0006] 這種方法會有如下的問題:
[0007] 1、虛擬機上獲取軟件需要從其他地方下載,依賴于網(wǎng)絡(luò),在虛擬機網(wǎng)絡(luò)受限(沒 有配置IP地址或不能訪問軟件下載的地址)時,這種方法將無效;
[0008] 2、版本對比依賴于人工判斷,容易出錯;
[0009] 3、逐臺進行人工升級,效率低,體現(xiàn)在兩個方面:一、要登錄到每臺虛擬機,可能不 是一個人能掌握所有虛擬機的密碼,如果不能登錄,也將無法升級;二、依賴于人去逐個步 驟點擊安裝程序,需要的時間也比較多。


【發(fā)明內(nèi)容】

[0010] 本發(fā)明解決的技術(shù)問題在于提供一種虛擬機軟件更新方法,可以克服現(xiàn)有軟件更 新的缺陷。
[0011] 本發(fā)明解決上技術(shù)問題的技術(shù)方案是:
[0012] 包括如下步驟:
[0013] 步驟1 :在創(chuàng)建虛擬機時虛擬一個光驅(qū),并虛擬一個串口;
[0014] 步驟2 :軟件安裝以后,獲取已安裝軟件的版本號;
[0015] 步驟3 :新版本軟件發(fā)布以后,將軟件放入一個ISO鏡像文件中,并將版本號放入 ISO鏡像文件;
[0016] 步驟4 :將ISO鏡像文件拷貝到宿主機上,并將ISO鏡像文件掛載到虛擬機的光驅(qū) 中;
[0017] 步驟5 :在宿主機上向虛擬機的串口發(fā)送命令,獲取ISO鏡像文件中的版本和安裝 在虛擬機上的軟件版本,并進行比較;
[0018] 步驟6 :如果ISO鏡像文件中的軟件版本較新,那么對ISO鏡像文件中的軟件安裝 程序執(zhí)行靜默安裝;
[0019] 步驟7 :如果安裝在虛擬機上的軟件版本與ISO鏡像文件中的軟件版本相同,或安 裝在虛擬機上的軟件版本較新,那么不執(zhí)行任何安裝。
[0020] 所述的ISO鏡像文件是以IS0-9660格式保存的光盤鏡像文件,ISO鏡像形式上只 有一個文件,光盤上的所有文件壓縮到此文件中。
[0021] 所述將ISO鏡像文件掛載到虛擬機的光驅(qū)中是指在宿主機中將ISO鏡像文件掛載 成一個loop設(shè)備,然后把loop設(shè)備作為虛擬機光驅(qū)的源,使得通過訪問虛擬機的光驅(qū)能直 接訪問到IS0鏡像文件中的內(nèi)容。
[0022] 所述的向虛擬機的串口發(fā)送命令是指在虛擬機上的一個串口監(jiān)聽程序收到宿主 機向虛擬機串口發(fā)送的消息,解析消息然后執(zhí)行對應(yīng)的操作。
[0023] 所述的靜默安裝是調(diào)用安裝程序提供的靜默安裝方式執(zhí)行靜默安裝和強制覆蓋。
[0024] 所述的新舊軟件版本比較,包括如下步驟:
[0025] 步驟1 :新舊版本號都進行按級分割,獲取每一級的版本號;
[0026] 步驟2 :把每一級的版本號按從高到底排列,先將新舊版本號的第一級版本號進 行比較,如果新的版本號比舊版本號大,跳到步驟4;如果新的版本號比舊版本號小,跳到 步驟5 ;如果新的版本號跟舊版本號相同,那么執(zhí)行下一級版本號的比較;
[0027] 步驟3 :比較第二級的版本號,如此類推,直到最后一級的版本號都相同,那么新 舊版本號完全相同,不需要進行軟件更新;
[0028] 步驟4 :新版本比舊版本要高,需要進行軟件更新;
[0029] 步驟5 :新版本比舊版本還要舊,不需要進行軟件更新。
[0030] 本發(fā)明方案的有益效果如下:
[0031] 1、本發(fā)明的方法不依賴于人工判斷,版本信息完全在虛擬機操作系統(tǒng)或軟件安裝 介質(zhì)中取得,更新過程絕對準確;
[0032] 2、本發(fā)明的方法不依賴于虛擬機的網(wǎng)絡(luò),具有很廣的使用范圍;
[0033] 3、本發(fā)明的方法不需要人工干預(yù),適合批量虛擬機更新軟件,具有很高的效率。

【專利附圖】

【附圖說明】
[0034] 下面結(jié)合附圖對本發(fā)明進一步說明:
[0035] 附圖是本發(fā)明的流程圖。

【具體實施方式】
[0036] 如圖所示,創(chuàng)建虛擬機、在虛擬機上安裝舊版本軟件以及獲取ISO鏡像文件都是 常規(guī)操作,不贅述。本發(fā)明下面以python語言實現(xiàn)一個虛擬機串口監(jiān)聽程序,以批處理腳 本實現(xiàn)windows虛擬機下的版本比較和軟件靜默安裝為例,說明一種虛擬機軟件更新方法 的實現(xiàn)。
[0037] 首先checkout出新舊兩份源代碼。
[0038] 然后在虛擬機中實現(xiàn)一個串口監(jiān)聽程序,啟動以一個服務(wù)進程的方式運行于虛擬 機等待宿主機傳來的串口命令,代碼如下:
[0039] def listening(port): if len(port) == 0: serport = serial.Serial(O) serport.baudrate = 9600 else serport = serial.Serial(port, 9600) try: serport, close() serport.open() except: mils.record_log("can't open serail port") return 1 # before formal reading serial port, clean it's butfei #serport.flushOutput()
[0040] #serport.flushlnput〇 serport. timeout = 1 serport.readlines() # flushlnput() not work, thus I read everythings out serport.closeQ try: while 1: msg = recv_msg(poit) send」Tisg(port, process_msg(msg)) except Keyboardlnterrupt: print "caught terminate signal" return 0
[0041] 以上定義了一個listening函數(shù),利用"whilel"死循環(huán)調(diào)用recv_msg(port)監(jiān) 聽指定的port端口。
[0042] 串口命令解析和實現(xiàn)功能根據(jù)串口命令監(jiān)聽功能接收到的msg信息,調(diào)用 process_msg(msg)進行msg消息的解析,代碼如下:
[0043] def process_msg(msg): # the last params contain the \n code, cut it off first ret_msg = 0 cmd_param = msg.split(V) if cmd_param[0] in FUNCTION: ret_msg = FUNCTION[cmd_param[()]](cmd_param[l:]) mils.record_log("process command %s" %((lambda x: x==0 and
[0044] "success" or "fai1ed")(rel_msg))) else: rniis.record_log('receive unrecognized command (%s)' %(cmd_param [0])) ret_msg = 1 return str(ret_msg)
[0045] 代碼中的FUNCTION對應(yīng)的宏定義表示預(yù)定義的串口命令中相關(guān)格式,串口服務(wù) 中串口命令解析和實現(xiàn)功能解析成功以后,執(zhí)行系統(tǒng)的命令。
[0046] def exec_cmd(cmd): log("Command to exec:(%s)!, %cmd) jprint('Cominand to exec is [%s]! %cmd) return os.system(cmd) # do not ? 8, because windows not like linux
[0047] 代碼中的cmd就是要執(zhí)行的批處理腳本,如下:
[0048] @echo off :在安裝目錄中獲取己安裝軟件的版本號 :getoldversion IF NOT EXIST ,instal14j\i4jparams.conf ( ECHO .install4j'\i4jparams.conf文件小存在,'尤法獲取3前版木號 set oidversion=0.0.0 goto getCdrom ) FOR /F tokensA=4A delimsA=A" %%A in ('find "general
[0049] applicationName=,' .install4j\i4jparams.conf) do ( set oldversion=%%A ) echo 現(xiàn)有版本:%oldversion% :獲取Windows虛擬機中所有的光驅(qū)盤符 :如果光驅(qū)盤符中有updates.xml文件(保存有新軟件的版本號),則在此文件中 獲取新版本號 :getCdrom wmic logicaldisk Where DriveType=5 Get Deviceld > disk.txt FOR /F tokensA=lA delimsA=A: %%A in ('find disk.txt') do ( IF EXIST %%A:\updates.xi-nl ( ECHO %%A:\updates.xml 文件存在 set diskName=%%A goto gctncwvcrsion ) ) echo請插入升級光盤,然后冉試 goto end :讀取updates.xml文件中的新軟件的版本號 :getnewversion
[0050] FOR /F tokensA=8A delimsA=A" %%A in ('find "entry targetMediaFileId=" %diskName%:\updates.xmr) do ( set newversion=%%A ) echo 可升級版本:%newversion% :比較新舊版本號 :compare version for/f"tokens= 1,2,3 delims=." %%a in ("%oldversion%") do ( set o 1 =%%a set o2=%%b set o3=%%c ) for /f"tokens= 1,2,3 delims=," %%a in ("%newversion%") do ( set n 1 =%%a set n2=%%b set n3=%%c ) if %〇!% lss %nl% (goto update) else (goto compare 1)
[0051] :compare 1 if %〇1% gtr %nl% (goto noupdate) else (goto compare2) :compare2 if %o2% lss %n2% (goto update) else (goto compare2_l) :cornpare2_l if %o2% gtr %n2% (goto noupdate) else (goto compare3) :compare3 if %o3% lss %n3% (goto update) else (goto compare3_l) :compare3_l if %o3% gtr %n3% (goto noupdate) else (goto sameversion) :執(zhí)行靜默安裝 :update echo正在升級 if/i "%PROCESSOR-IDENTIF正R:?0,3%" == "X86"(set arch=x86) else (set arch=x64) set fileNaine=VmAgent_%arch%_%n 1 %_%n2%_%n3%.exe IF NOT EXIST %diskName%:\%fileName% goto noupdatefile
[0052] echo正在安裝升級文件 %diskName%:\%fileName% -q -overwrite echo安裝升級完成 goto end :noupdate echo現(xiàn)有版本高于可升級版本,取消升級 goto end :sameversion echo現(xiàn)有版本與可升級版本相同,無需升級 goto end moupdatefile echo 升級義'件%diskName%:\%fileName%斗、存在 goto end :end〇
【權(quán)利要求】
1. 一種虛擬機軟件更新方法,其特征在于:包括如下步驟: 步驟1 :在創(chuàng)建虛擬機時虛擬一個光驅(qū),并虛擬一個串口; 步驟2 :軟件安裝以后,獲取已安裝軟件的版本號; 步驟3 :新版本軟件發(fā)布以后,將軟件放入一個ISO鏡像文件中,并將版本號放入ISO 鏡像文件; 步驟4 :將ISO鏡像文件拷貝到宿主機上,并將ISO鏡像文件掛載到虛擬機的光驅(qū)中; 步驟5 :在宿主機上向虛擬機的串口發(fā)送命令,獲取ISO鏡像文件中的版本和安裝在虛 擬機上的軟件版本,并進行比較; 步驟6 :如果ISO鏡像文件中的軟件版本較新,那么對ISO鏡像文件中的軟件安裝程序 執(zhí)行靜默安裝; 步驟7 :如果安裝在虛擬機上的軟件版本與ISO鏡像文件中的軟件版本相同,或安裝在 虛擬機上的軟件版本較新,那么不執(zhí)行任何安裝。
2. 根據(jù)權(quán)利要求1所述的虛擬機軟件更新方法,其特征在于:所述的ISO鏡像文件是 以IS0-9660格式保存的光盤鏡像文件,ISO鏡像形式上只有一個文件,光盤上的所有文件 壓縮到此文件中。
3. 根據(jù)權(quán)利要求1所述的虛擬機軟件更新方法,其特征在于:所述將ISO鏡像文件掛 載到虛擬機的光驅(qū)中是指在宿主機中將ISO鏡像文件掛載成一個loop設(shè)備,然后把loop 設(shè)備作為虛擬機光驅(qū)的源,使得通過訪問虛擬機的光驅(qū)能直接訪問到ISO鏡像文件中的內(nèi) 容。
4. 根據(jù)權(quán)利要求2所述的虛擬機軟件更新方法,其特征在于:所述將ISO鏡像文件掛 載到虛擬機的光驅(qū)中是指在宿主機中將ISO鏡像文件掛載成一個loop設(shè)備,然后把loop 設(shè)備作為虛擬機光驅(qū)的源,使得通過訪問虛擬機的光驅(qū)能直接訪問到ISO鏡像文件中的內(nèi) 容。
5. 根據(jù)權(quán)利要求1至4任一項所述的虛擬機軟件更新方法,其特征在于:所述的向虛 擬機的串口發(fā)送命令是指在虛擬機上的一個串口監(jiān)聽程序收到宿主機向虛擬機串口發(fā)送 的消息,解析消息然后執(zhí)行對應(yīng)的操作。
6. 根據(jù)權(quán)利要求1至4任一項所述的虛擬機軟件更新方法,其特征在于:所述的靜默 安裝是調(diào)用安裝程序提供的靜默安裝方式執(zhí)行靜默安裝和強制覆蓋。
7. 根據(jù)權(quán)利要5所述的虛擬機軟件更新方法,其特征在于:所述的靜默安裝是調(diào)用安 裝程序提供的靜默安裝方式執(zhí)行靜默安裝和強制覆蓋。
8. 根據(jù)權(quán)利要求1至4任一項所述的虛擬機軟件更新方法,其特征在于:所述的新舊 軟件版本比較,包括如下步驟: 步驟1 :新舊版本號都進行按級分割,獲取每一級的版本號; 步驟2:把每一級的版本號按從高到底排列,先將新舊版本號的第一級版本號進行比 較,如果新的版本號比舊版本號大,跳到步驟4;如果新的版本號比舊版本號小,跳到步驟 5 ;如果新的版本號跟舊版本號相同,那么執(zhí)行下一級版本號的比較; 步驟3 :比較第二級的版本號,如此類推,直到最后一級的版本號都相同,那么新舊版 本號完全相同,不需要進行軟件更新; 步驟4 :新版本比舊版本要高,需要進行軟件更新; 步驟5 :新版本比舊版本還要舊,不需要進行軟件更新。
9. 根據(jù)權(quán)利要求5所述的虛擬機軟件更新方法,其特征在于:所述的新舊軟件版本比 較,包括如下步驟: 步驟1 :新舊版本號都進行按級分割,獲取每一級的版本號; 步驟2:把每一級的版本號按從高到底排列,先將新舊版本號的第一級版本號進行比 較,如果新的版本號比舊版本號大,跳到步驟4;如果新的版本號比舊版本號小,跳到步驟 5 ;如果新的版本號跟舊版本號相同,那么執(zhí)行下一級版本號的比較; 步驟3:比較第二級的版本號,如此類推,直到最后一級的版本號都相同,那么新舊版 本號完全相同,不需要進行軟件更新; 步驟4 :新版本比舊版本要高,需要進行軟件更新; 步驟5 :新版本比舊版本還要舊,不需要進行軟件更新。
10. 根據(jù)權(quán)利要求6所述的虛擬機軟件更新方法,其特征在于:所述的新舊軟件版本比 較,包括如下步驟: 步驟1 :新舊版本號都進行按級分割,獲取每一級的版本號; 步驟2:把每一級的版本號按從高到底排列,先將新舊版本號的第一級版本號進行比 較,如果新的版本號比舊版本號大,跳到步驟4;如果新的版本號比舊版本號小,跳到步驟 5 ;如果新的版本號跟舊版本號相同,那么執(zhí)行下一級版本號的比較; 步驟3 :比較第二級的版本號,如此類推,直到最后一級的版本號都相同,那么新舊版 本號完全相同,不需要進行軟件更新; 步驟4 :新版本比舊版本要高,需要進行軟件更新; 步驟5 :新版本比舊版本還要舊,不需要進行軟件更新。
【文檔編號】G06F9/455GK104102527SQ201410328506
【公開日】2014年10月15日 申請日期:2014年7月10日 優(yōu)先權(quán)日:2014年7月10日
【發(fā)明者】莫展鵬, 楊松, 季統(tǒng)凱 申請人:國云科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1