1. 程式人生 > >簡單實戰RPM

簡單實戰RPM

  用RPM包方式來發布軟體變得越來越流行,主要的原因是這種軟體釋出方式很方便使用者安裝、升級和從系統中刪除。除此之外,RPM還可以讓你有更多的對系統安裝的軟體的管理性功能,例如可以查新系統有哪些已經安裝的軟體包,檢視這些軟體包分別安裝了什麼檔案,這些檔案又放在了什麼地方等等。
   這裡我給出一個簡單的入門手冊,供初學者檢視參考,快速使用RPM。這些RPM命令都是最最常用的,更復雜的功能大家可以暫時不用管,等確實需要的時候再去查man手冊。

  安裝一個RPM包的一般採用的命令格式如下:

  # rpm -ivh package.ix86.rpm

  在上面的命令中,package是個假定的名字,ix86是這個包為特定的CPU做了優化處理的意思。例如,package可能是ldconfig-1.9.5-14,而ix86是i386這樣的。

  “-i”引數指明是要安裝這個package,而“-v”這個引數則使輸出資訊增加,“-h”表示在安裝過程中顯示hashes作為在安裝過程的一個進度條。

  上面就是所有的關於安裝一個RPM包的內容,非常簡單而好用吧。當然如果你安裝過程中遇到了一些包依賴關係的問題那就稍微要麻煩一些了。包依賴關係問題就是說,你正在安裝的包需要其他的包的支援才能正常工作。通常還有可能遇到的問題是所安裝的包需要某個軟體或者函式庫的特定版本才能正常工作。這樣的情況下,你可以安裝或者升級依賴的軟體包,然後繼續安裝你自己需要安裝的軟體包。

如果你要看一個RPM包安裝以後到底安裝了那些檔案,你可以使用這個命令:

# rpm -ql packagename

   這個packagename就是你要查詢的軟體包的名字,例如ldconfig-1.9.5-14mdk;而“-p”引數表示查詢軟體包資料庫,看這個軟體包是否已經安裝;“-l”引數表示列出所查詢的包的所有安裝了的檔案的完整的路徑。
下面是一個例子:

[[email protected] wh]$ rpm -ql ldconfig-1.9.5-14mdk
/sbin/ldconfig
/usr/doc/ldconfig-1.9.5
/usr/doc/ldconfig-1.9.5/README

   刪除某個特定的RPM包軟體。採用的命令引數是“-e“,格式如下:

# rpm -e packagename

   “-e”就表示刪除(erase)的意思,就是把特定的軟體包(packagename)刪除掉。

  值得注意的是,rpm管理機制不允許你刪除某個軟體包,如果這個軟體包還被其他軟體包所依賴。因為一旦你刪除了這個軟體包,其他依賴他才能執行的軟體包也就不能正常使用了。

  升級一個已經存在的rpm包軟體。升級其實和安裝類似,可以參考下面的命令

# rpm -Uvh package.ix86.rpm

  “-U“引數表示是升級(upgrade),引數“v”和“h”意義和前面一樣的,這裡不再贅述。

  到此,我們已經學會了,如何安裝、刪除和升級一個使用rpm釋出的軟體了。:)

——————————————————————————————————————————————————————————


RPM 有五種基本的操作方式(不包括建立軟體包): 安裝, 解除安裝, 升級, 查詢,和驗證。 下面我們就來逐一的講解吧。
一、 安裝RPM包
RPM 軟體包通常具有類似foo-1.0-1.i386.rpm 的檔名。其中包括 軟體包的名稱(foo),版本號(1.0),發行號(1), 和 硬體平臺(i386)。安裝一個軟體包只需簡單的鍵入以下命令:
$ rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
RPM安裝完畢後會打印出軟體包的名字(並不一定與檔名相同), 而後列印一連串的#號以表示安裝進度。雖然軟體包的安裝被設計的儘量簡單易行, 但還是可能會發生如下的錯誤:
1、 軟體包已被安裝
如果您的軟體包已被安裝, 將會出現以下資訊:
$ rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果您仍舊要安裝該軟體包,可以在命令列上使用--replacepkgs 選項,RPM將忽略該錯誤資訊強行安裝。
2、檔案衝突
如果您要安裝的軟體包中有一個檔案已在安裝其它軟體包時安裝,會出現以下錯誤資訊:
# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
要想讓RPM 忽略該錯誤資訊, 請使用--replacefiles 命令列選項。
3、未解決依賴關係
RPM軟體包可能依賴於其它軟體包,也就是說要求在安裝了特定的軟體包之後才能安裝該軟體包。如果在您安裝某個軟體包時存在這種未解決的依賴關係。會產生以下資訊:
$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies: foo is needed by bar-1.0-1
您必須安裝完所依賴的軟體包,才能解決這個問題。如果您想強制安裝(這是個壞主意, 因為安裝後的軟體包未必能正常執行), 請使用--nodeps 命令列選項。

二、解除安裝RPM包
解除安裝軟體包就象安裝軟體包時一樣簡單:
$ rpm -e foo
注意這裡使用軟體包的名字name ``foo'', 而不是軟體包檔案的名字file ``foo-1.0-1.i386.rpm''。
如果其它軟體包依賴於您要解除安裝的軟體包,解除安裝時則會產生錯誤資訊。如:
$ rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
若讓RPM忽略這個錯誤繼續解除安裝(這可不是一個好主意,因為依賴於該軟體包的程式可能無法執行),請使用--nodeps 命令列選項。

三、升級RPM包
升級軟體包和安裝軟體包十分類似:.
$ rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
RPM將自動解除安裝已安裝的老闆本的foo 軟體包,您不會看到有關資訊。事實上您可能總是使用 -U 來安裝軟體包,因為即便以往未安裝過該軟體包,也能正常執行。因為RPM 執行智慧化的軟體包升級,自動處理配置檔案,您將會看到如下資訊:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
這表示您對配置檔案的修改不一定能向上相容。 因此,RPM 會先備份老檔案再安裝新檔案。您應當儘快解決這兩個配置檔案的不同之處,以使系統能持續正常執行。
因為升級實際包括軟體包的解除安裝與安裝兩個過程,所以您可能會碰到由這兩個操作引起的錯誤。另一個你可能碰到的問題是:當您使用舊版本的軟體包來升級新版本的軟體時,RPM會產生以下錯誤資訊:
$ rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果你確有需要將該軟體包”降級,加入 --oldpackage 命令選項就可以了。

四、 查詢已安裝的軟體包
使用命令rpm -q來查詢已安裝軟體包的資料庫。簡單的使用命令 rpm -q foo 會打印出foo軟體包 的包名 ,版本號,和發行號:
$ rpm -q foo
foo-2.0-1
除了指定軟體包名以外,您還可以使用以下選項來指明要查詢哪些軟體包的信 息。 這些選項被稱之為 “軟體包指定選項“。
· -a 查詢所有已安裝的軟體包
· -f 將查詢包含有檔案. 的軟體包
· -p 查詢軟體包檔名為的軟體包
還可以指定查詢軟體包時所顯示的資訊。它們被稱作資訊選擇選項:
· -i 顯示軟體包資訊,如描述, 發行號, 尺寸, 構建日期, 安裝日期, 平臺, 以及其它一些各類資訊。
· -l 顯示軟體包中的檔案列表。
· -s 顯示軟體包中所有檔案的狀態。
· -d 顯示被標註為文件的檔案列表(man 手冊, info 手冊, README's, etc)。
· -c 顯示被標註為配置檔案的檔案列表。這些是您要在安裝完畢以後加以定製的檔案(sendmail.cf, passwd, inittab, etc)。
對於那些要顯示檔案列表的檔案, 您可以增加-v 命令列選項以獲得如同 ls -l 格式的輸出。

五、 驗證軟體包
驗證軟體包是通過比較已安裝的檔案和軟體包中的原始檔案資訊來進行的。驗證主要是比較檔案的尺寸, MD5 校驗碼, 檔案許可權, 型別, 屬主和使用者組等。
rpm-V命令用來驗證一個軟體包。您可以使用任何包選擇選項來查詢您要驗證的軟體包。 命令rpm -V foo 將用來驗證foo軟體包。又如:
· 驗證包含特定檔案的軟體包:
rpm -Vf /bin/vi
· 驗證所有已安裝的軟體包:
rpm -Va
· 根據一個RPM包來驗證:
rpm -Vp foo-1.0-1.i386.rpm
如果您擔心你的RPM資料庫已被破壞,就可以使用這種方式。
如果一切均校驗正常將不會產生任何輸出。如果有不一致的地方,就會顯示出來。 輸出格式是8位長字串, ``c'' 用以指配置檔案, 接著是檔名. 8位字元的每一個 用以表示檔案與RPM資料庫中一種屬性的比較結果 。``.'' (點) 表示測試通過。.下面的字元表示對RPM軟體包進行的某種測試失敗:
顯示字元 錯誤源
5 MD5 校驗碼
S 檔案尺寸
L 符號連線
T 檔案修改日期
D 裝置
U 使用者
G 使用者組
M 模式e (包括許可權和檔案型別)
如果有錯誤資訊輸出, 您應當認真加以考慮,是通過刪除還是重新安裝來解決出現的問題。

六、教你一招
RPM不僅是安裝/解除安裝程式的工具,它還是系統維護和診斷的一把好手。看過下面幾個例子你就會領教它的厲害了。
· 如果您誤刪了一些檔案, 但您不能肯定到底都刪除了那些檔案,怎麼辦? 您可以鍵入:
rpm -Va
rpm會在螢幕上顯示出檔案刪除的情況。若你發現一些檔案丟失了或已被損壞, 您就可以重新安裝或先解除安裝再安裝該軟體包。
· 如果您碰到了一個自己不認識的檔案,要想查處它屬於哪個軟體包,您可以輸入以下命令
rpm -qf /usr/X11R6/bin/xjewel
輸出的結果會是:
xjewel-1.6-1
· 如果發生綜合以上兩個例子的情況,如檔案/usr/bin/paste出了問題。您想知道哪個軟體包中包含該檔案,您這時可以簡單的鍵入:
rpm -Vf /usr/bin/paste
· 如果您想了解正在使用的程式的詳細資訊, 您可以鍵入如下命令來獲得軟體包中關於該程式的文件資訊:
rpm -qdf /usr/bin/ispell
輸出結果為:
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/ispell.info.gz
/usr/doc/ispell-3.1.18-1/README
· 您發現了一個新的koules RPM,但您不知道它是做什麼的,您可以鍵入如下命令:
rpm -qip koules-1.2-2.i386.rpm
· 現在您想了解koules的 RPM包在系統裡安裝了哪些檔案, 您可以鍵入:
rpm -qlp koules-1.2-2.i386.rpm輸出結果為:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules
以上只是幾個常見例子。隨著您進一步的使用RPM,您會發現它的各種功能選項組合可以實現更為強大的RPM包管理功能。


——————————————————————————————————————————————————————————

相關推薦

簡單實戰RPM

  用RPM包方式來發布軟體變得越來越流行,主要的原因是這種軟體釋出方式很方便使用者安裝、升級和從系統中刪除。除此之外,RPM還可以讓你有更多的對系統安裝的軟體的管理性功能,例如可以查新系統有哪些已經安裝的軟體包,檢視這些軟體包分別安裝了什麼檔案,這些檔案又放在了什麼地方等等

移動端web開發初探之Vuejs的簡單實戰

參考 細節 重要 進行 標簽 樣式 mob 優化 view 這段時間在做的東西,是北郵人論壇APP的註冊頁。這個註冊頁是內嵌的網頁,因為打算安卓和IOS平臺同時使用。因此實際上就是在做移動端的web開發了。 在這過程中遇到了不少有意思的東西。 DEMO的github地址在這

Centos 7部署docker環境、基本命令使用及簡單實戰

方式 包括 socket stdin 兩種 輕松 本機 打開 root權限 Docker是一個開源的應用容器引擎,屬於Linux容器的一種封裝,是目前最流行的Linux容器解決方案。docker可以為任何應用創建一個輕量級、可移植的容器,然後容器可以運行在任何安裝有dock

Okhttp3網路請求框架+MVP設計模式簡單實戰

Okhttp 目前最新版本的是okhttp:3.4.1,也稱為Okhttp3。  OkHttp是一個精巧的網路請求庫,不僅在介面封裝做的簡單易用,在底層實現上也自成一派。比起原生的HttpURLConnection有過之而無不及,現在已經成為廣大開發者的首選網路通訊庫。 特性 支援ht

MongoDB教程之MongoDB和Robomongo的安裝配置及簡單實戰

一、MongoDB 1、下載地址 2、安裝 解壓安裝包,選擇自定義“Custom”修改安裝路徑為D:\Program Files\MongoDB,然後點選Next直到安裝結束。 3、配置 3-1、建立資料庫檔案存放位置 新建MongoDB的子資料

AMQ的一些簡單實戰

目錄 三、釋出 一、建立客戶端 public class Sender { public static void main(String[] args) throws Exception{ //第一步:建立connectionFac

FutureTask簡單實戰

FutureTask是什麼? 執行緒池的實現核心之一是FutureTask。在提交任務時,使用者實現的Callable例項task會被包裝為FutureTask例項ftask;提交後任務非同步執行,無需使用者關心;當用戶需要時,再呼叫FutureTask#get()獲取結果——或異常。 基本使用

Elasticserach簡單實戰--1

1、document資料格式 2、電商網站商品管理案例:背景介紹 3、簡單的叢集管理 4、商品的CRUD操作(document CRUD操作) 1、document資料格式 面向文件的搜尋分析引擎 (1)應用系統的資料結構都是面向物件的,複雜的 (2)物件資料

簡單rpm包生成步驟

1 : 建立rpmbuild目錄結構 mkdir -pv ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS} 2:配置 echo ~/rpmbuild > ~/.rpmmacros,該命令將"

Android Hook 機制之簡單實戰

簡介 什麼是 Hook Hook 又叫“鉤子”,它可以在事件傳送的過程中截獲並監控事件的傳輸,將自身的程式碼與系統方法進行融入。這樣當這些方法被呼叫時,也就可以執行我們自己的程式碼,這也是面向切面程式設計的思想(AOP)。 Hook 分類 1.根

Java8:Lambda簡單實戰

Lambda表示式可以理解為一種匿名函式:它沒有名稱,但是由引數列表,函式主體,返回型別,當然可能還有一個可以丟擲的異常的列表。 Lambda的基本語法是 (parameters) -> expression 或(請注意語句的花括號)

網站首頁布局實戰簡單

成了 meta screen head false active amp 關於 span 跟著教程完成了一個簡單的首頁制作,沒有用js,畢竟是第一個實戰,紀念一下 HTML: <!DOCTYPE html><html lang="en"><he

使用fpm簡單制作自定義rpm

使用fpm簡單制作自定義rpm包yum -y install ruby rubygems ruby-devel本文出自 “silence” 博客,請務必保留此出處http://silencezone.blog.51cto.com/3613477/1935110使用fpm簡單制作自定義rpm包

Python實戰之dict簡單練習

簡單 fault zhang zha contain default san rom mat [‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__delitem__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__

Python實戰之雙向隊列deque/queue學習筆記及簡單練習

ons rep [] __new__ xtend color int pen queue [‘__add__‘, ‘__bool__‘, ‘__class__‘, ‘__contains__‘, ‘__copy__‘, ‘__delattr__‘, ‘__delitem__

python實戰===石頭剪刀布,簡單模型

人才 choice 實戰 ~~ == spa break cnblogs code #石頭剪刀布 import random import time win_list = [("石頭","剪刀"),("布","石頭"),("剪刀","布")] kind_list=[‘石

LAMP的rpm包安裝與簡單測試

lampj簡單安裝 測試 CentOS6下LAMP的rpm安裝所需要的rpm包:httpdphpphp-mysqlmysql-server[root@localhost ~]# yum install httpd php php-mysql mysql-server -yCentOS7下LAMP的rp

實戰作業1--救援模式下安裝-rpm命令

centos 救援模式 rpm 軟件包安裝 更多內容請點擊: Linux學習從入門到打死也不放棄,完全筆記整理(持續更新,求收藏,求點贊~~~~) http://blog.51cto.com/13683480/2095439

RPM包定制-實戰

rpm包定制Rpm-red hat包管理器Rpm命令有五種基本功能;安裝、卸載、升級、查詢、驗證 實戰環境 [root@m01 ~]# cat /etc/redhat-release CentOS release 6.7 (Final) [root@m01 ~]# uname -r 2.6.32-573.e

1、django實戰---簡單的博客系統

() project 發布系統 har 運行 路徑 nag color 多用戶 ----多用戶內容發布系統 1.1安裝Django pip -V windowis下查看當前Python版本 pip install Django==1.10.1 (版本號可寫可不