?? 08.rpm升級篇.htm
字號:
<!--本網頁文件由電子書制作工具“電子文檔處理器”未注冊版本的Txt2Html功能自動生成 -->
<!-- Made by an Unregistered version of eTextWizard V 1.98-->
<!--“電子文檔處理器”軟件作者: 馮國華 -->
<!--“電子文檔處理器”下載地址: http://www.etextwizard.com/download/ew/etextwizard.exe -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>08.RPM升級篇</title>
<META NAME="keywords" CONTENT="電子文檔處理器,etextwizard,ebook maker">
<META NAME="description" CONTENT="電子文檔處理器是一款文檔格式轉換、文檔處理軟件集,批量電子書制作工具,幫助文件及技術資料的快速制作工具。網址:http://www.eTextWizard.com">
<meta name="GENERATOR" content="電子文檔處理器,etextwizard">
<style>
<!--
body { line-height: 20px}
td { line-height: 20px}
.Paragraph{ font-size: 9pt }
.9{ font-size: 9pt }
A:link {text-decoration: none; color:#0033CC}
A:visited {text-decoration: none; color: #0033CC}
A:active {text-decoration: none; color: #0000ff }
A:hover {text-decoration: underline; color: #FF0000 }
-->
</style>
</head>
<body bgcolor="#FFFFFF">
<div align="center"><center>
<table border="0" cellpadding="0" cellspacing="0" width="80%">
<tr>
<td width="80%" bgcolor="#000000">
<table border="0" cellspacing="1" width="100%" cellpadding="6" height="98">
<tr>
<td width="100%" bgcolor="#FFFFFD" height="20">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="49%"><p class="9"></td>
<td width="51%"><p align="right" class="9"><a href="07.RPM命令手冊.htm">上一頁</a> <a href="index.html">首頁</a> <a href="09.RPM之安裝篇.htm">下一頁</a></td>
</tr>
</table>
</td>
</tr>
<tr bgcolor="#DFE0D1">
<td width="100%" height="21">
<p align="center"><strong>08.RPM升級篇</strong>
</td>
</tr>
<tr bgcolor="#F5F7EE">
<td width="100%" height="51" align=center>
<table><tr><td>
<p class="Paragraph">
我們一起在風雨中前行<br>
<br>
升級做什么<br>
RPM的升級功能是它受到用戶好評的原因之一。因為用戶自己將一個軟件包從舊版本升級到新版本,特別是大型軟件,需要有經驗的支持和技術的積累,比較復雜,而用RPM升級軟件,只需一個rpm<br>
-U命令就可以了,極大方便了用戶。<br>
軟件升級基本做兩項工作,一是安裝新版本,二是卸載舊版本。RPM還有一項重要的工作要做,這就是妥善處理配置文件(CONFIG FILE)。若直接采用安裝方式,則用戶已配置好的配置文件就會被覆蓋,不符合用戶要求。<br>
配置文件處理<br>
RPM對某個配置文件,通過比較三種不同的MD5檢查和(checksum)來決定如何處理它。這三種不同的MD5檢查和是:<br>
1. 原檢查和。它是舊版本軟件包安裝時配置文件的MD5檢查和。<br>
2. 當前檢查和。它是升級時舊版本配置文件的MD5檢查和。<br>
3. 新檢查和。它是新版本軟件包中配置文件的MD5檢查和。<br>
RPM針對以下幾種情況分別處理:<br>
1. 當原檢查和=X,當前檢查和=X,新檢查和=X時:<br>
這表明配置文件未曾修改過。此時,RPM會將新的配置文件覆蓋掉原文件,而不是對原文件不作處理,原因在于: 雖然文件名和文件內容都沒有變化,但文件別的方面的屬性(如文件的屬主,屬組,權限等)卻可能改變,所以有必要覆蓋一下。<br>
<br>
2. 當原檢查和=X,當前檢查和=X,新檢查和=Y時:<br>
這表明原配置文件沒有改動過,但是它與新軟件包中的配置文件卻有所不同。這種情況下,RPM將用新文件覆蓋掉舊文件,并且舊文件不作保存(因為它不曾改動過,沒有必要保存)。<br>
<br>
3. 當原檢查和=X,當前檢查和=Y,新檢查和=X時:<br>
這表明新文件與舊文件內容相同,但當前文件已經作過修改,這些修改對于新版本來說應該是合法的,可以使用的。因此,RPM對當前文件予以保留。<br>
4. 當原檢查和=X,當前檢查和=Y,新檢查和=Y時:<br>
這表明原文件經過修改,現在已與新文件相同,這或許是用戶用來修補安全上的漏洞,新版本也作了同樣的修改。這種情況下,RPM將新文件覆蓋當前文件,避免文件屬性方面的不同。<br>
<br>
5. 當原檢查和=X,當前檢查和=Y,新檢查和=Z時:<br>
這表明用戶已修改了原文件,并且當前內容與新文件內容不同。這種情況下,RPM無法保證新版本軟件能正常使用當前的配置文件,所以采用了一個比較明智的辦法,既能保護用戶的配置數據,又能保證新版本軟件正常。這種作法就是將當前文件換名保存(給原文件名加個.rpmsave的后綴,如原文件名為ABC,則換名后為ABC.rpmsave),同時安裝新文件,并給出警告信息,如:<br>
<br>
warning: /etc/.funkey saved as /etc/.funkey.rpmsave<br>
6. 當沒有原檢查和時:<br>
此種情況下,當前檢查和與新檢查和已無關緊要,這表明沒有安裝過此配置文件。因為沒有安裝過此配置文件,所以RPM無法判斷當前文件是否被用戶修改過。這種情況下,RPM會將當前文件換名保存(原文件名后綴不是加個.rpmsave,而是.rpmorig),同時安裝新文件,并給出警告信息,如:<br>
<br>
warning: /etc/.inputdef saved as /etc/.inputdef.rpmsave<br>
升級命令格式<br>
升級RPM包時,請用以下命令格式:<br>
rpm -U [升級選項1 升級選項2...] [軟件包標識1 軟件包標識2...]<br>
其中: 也可使用--upgrade代替-U,效果相同。<br>
軟件包標識<br>
有關軟件包標識的定義,請參見<<精通RPM之三--卸載篇>>。<br>
選項列表<br>
選項說明<br>
因為升級也是一種安裝,所以升級的選項列表與安裝選項列表基本相同,只是升級的選項列表增加了一項--oldpackage?,F著重說明一下這個選項,其它選項說明見<<精通RPM之二--安裝篇>>,在此恕不贅述。<br>
<br>
--oldpackage選項: 從名字上就可以看出來是老版本軟件包的意思。為什么要將軟件"升級"到老版本?(這里的升級其實是降級)這里面有個原因。用戶一直好好地用著老版本的軟件,當有一天發現有新版本發布時,馬上用rpm<br>
-U命令升級到系統中,但因為新版本有"臭蟲",所以這個軟件暫時不能正常工作。而這時,直接用rpm -U命令是升級不到老版本的,因為一般情況的升級是將老版本升級到新版本,RPM默認這一點。若想升級到老版本,則必須用這個特殊的選項。下面舉個例子:<br>
<br>
# rpm -U -v lze-6.0-1.i386.rpm<br>
package lze-7.0-1 (which is newer then lze-6.0-1) is already installed<br>
<br>
#<br>
<br>
注: 本例在升級過程中出現錯誤,RPM提示lze軟件包已安裝,并且現存版本號7.0,高于準備升級的版本號6.0,升級無法繼續。<br>
若在命令行使用--oldpackage,結果會怎么樣呢?<br>
# rpm -U -v --oldpackage lze-6.0-1.i386.rpm<br>
lze-6.0-1<br>
#<br>
注: 命令執行后輸出了軟件包標識lze-6.0-1,表明升級到老版本成功了。<br>
下面通過輸出調試信息來觀察一下升級軟件包時RPM做的主要工作:<br>
# rpm -U -vv --oldpackage foo-3.0-2.i386.rpm 2>&1 | nl<br>
1 D: counting packages to install<br>
2 D: found 1 packages<br>
3 D: looking for packages to download<br>
4 D: retrieved 0 packages<br>
5 D: New Header signature<br>
6 D: Signature size: 68<br>
7 D: Signature pad : 4<br>
8 D: sigsize : 72<br>
9 D: Header + Archive: 1577<br>
10 D: expected size : 1577<br>
11 D: opening database mode 0x42 in //var/lib/rpm/<br>
12 D: found 0 source and 1 binary packages<br>
13 D: requires: /bin/sh satisfied by db file lists.<br>
14 D: installing binary packages<br>
15 D: getting list of mounted filesystems<br>
16 D: New Header signature<br>
17 D: Signature size: 68<br>
18 D: Signature pad : 4<br>
19 D: sigsize : 72<br>
20 D: Header + Archive: 1577<br>
21 D: expected size : 1577<br>
22 D: package: foo-3.0-2 files test = 0<br>
23 D:file: /etc/foo.conf action: create<br>
24 D:file: /usr/bin/foo action: create<br>
25 D: running preinstall script (if any)<br>
26 + echo preinstall<br>
27 preinstall<br>
28 foo-3.0-2<br>
29 D: running postinstall scripts (if any)<br>
30 + echo postinstall<br>
31 postinstall<br>
32 + echo triggerinstall<br>
33 triggerinstall<br>
34 + echo triggeruninstall<br>
35 triggeruninstall<br>
36 + echo preuninstall<br>
37 preuninstall<br>
38 D: will remove files test = 0<br>
39 D:file: /usr/bin/foo action: skip<br>
40 D:file: /etc/foo.conf action: skip<br>
41 D: running postuninstall script (if any)<br>
42 + echo postuninstall<br>
43 postuninstall<br>
44 D: removing database entry<br>
45 D: removing name index<br>
46 D: removing group index<br>
47 D: removing requiredby index for /bin/sh<br>
48 D: removing trigger index for file<br>
49 D: removing trigger index for file<br>
50 D: removing trigger index for file<br>
51 D: removing file index for foo.conf<br>
52 D: removing file index for foo<br>
<br>
注: 第1-4行: 計算命令行上要升級的包數,并且下載那些需要下載的包裹文件;<br>
第5-10行: 根據包裹文件頭部信息,確定軟件占用空間;<br>
第11,12行: 打開RPM數據庫及包裹文件;<br>
第13行: 檢查依賴是否滿足,本例滿足;<br>
第14行: 安裝執行程序包;<br>
第15行: 取當前已安裝文件系統列表;<br>
第16-21行: 再度檢查包裹頭信息,確定占用系統空間;<br>
第22-24行: 確定包中各個文件的執行操作(action),均為建立(create);<br>
第25行: 執行安裝前腳本程序(如果有的話);<br>
第26-27行: 以+開頭的為腳本程序執行的命令,其后為其輸出結果;<br>
第28行: 安裝foo-3.0-2包;<br>
第29行: 執行安裝后腳本程序(如果有的話);<br>
第30-31行: 以+開頭的為腳本程序執行的命令,其它為執行結果;<br>
第32-33行: 執行安裝時觸發腳本程序;<br>
第34-35行: 執行卸載前觸發腳本程序,自此開始卸載原軟件包;<br>
第36-37行: 執行卸載前腳本程序;<br>
第38-40行: 確定原包中各文件的執行操作,本例均為跳過(skip),即不作處理;<br>
第41-43行: 執行卸載后腳本程序;<br>
第44-52行: 刪除原包在RPM數據庫中的所有信息(數據及索引)。<br>
<br>
<br>
<br>
<br>
</p></td></tr></table></td>
</tr>
<tr>
<td width="100%" bgcolor="#FFFFFD" height="20">
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="49%"><p class="9"></td>
<td width="51%"><p align="right" class="9"><a href="07.RPM命令手冊.htm">上一頁</a> <a href="index.html">首頁</a> <a href="09.RPM之安裝篇.htm">下一頁</a></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center></div>
</body>
</html>
<!-- Made by an Unregistered version of eTextWizard V 1.98-->
<!--本網頁文件由電子書制作工具“電子文檔處理器”未注冊版本的Txt2Html功能自動生成 -->
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -