版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章Linux的包管理隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,操作系統(tǒng)的內(nèi)核在不斷地升級(jí);各種各樣的應(yīng)用軟件也在不斷地推出;對(duì)于Linux操作系統(tǒng)而言,這些軟件許多是以RPM軟件包的形式存在并可以通過(guò)網(wǎng)絡(luò)下載的。要在系統(tǒng)中查詢、驗(yàn)證、安裝、升級(jí)或刪除這些軟件包就需要有專門的包管理器。包管理器(RPM)是Linux系統(tǒng)的一個(gè)重要部分,它為L(zhǎng)inux操作系統(tǒng)的升級(jí)與維護(hù)以及用戶應(yīng)用程序的安裝帶來(lái)了極大的便利。6.1包管理概述RPM是RedHatPackageManager的縮寫,它原來(lái)是RedHatLinux發(fā)行版專門用來(lái)管理Linux各項(xiàng)軟件包的程序,由于它遵循GPL(GNU通用公共許可證)協(xié)議且功能強(qiáng)大、使用方便,因而受到許多用戶的青睞并逐漸被其他Linux發(fā)行版本所采用。
RPM是一個(gè)開放的軟件包管理器,它工作于許多種類型的Linux和UNIX操作系統(tǒng)。只要遵循GPL協(xié)議,RPM軟件對(duì)所有的用戶都是開放的,用戶甚至可以將它用到自己的程序中。由于安裝、刪除、或升級(jí)某個(gè)RPM軟件包時(shí),包管理器要對(duì)用戶的系統(tǒng)做適當(dāng)?shù)呐渲?,所以RPM軟件包的安裝、刪除或更新只有root權(quán)限的用戶才能使用;對(duì)于查詢功能任何用戶都可以操作;如果普通用戶擁有建立目錄的權(quán)限,也可以進(jìn)行安裝。對(duì)于終端用戶來(lái)說(shuō),包管理器大大簡(jiǎn)化了系統(tǒng)升級(jí)、維護(hù)以及應(yīng)用程序的安裝。當(dāng)要安裝、刪除或升級(jí)RPM軟件包時(shí),只要使用簡(jiǎn)短的命令就可以完成。包管理器維護(hù)一個(gè)所有已安裝的RPM軟件包和文件的數(shù)據(jù)庫(kù),因此,用戶可以在系統(tǒng)上進(jìn)行RPM軟件包的查詢和校驗(yàn)工作。在RPM軟件包的升級(jí)中,包管理器處理配置文件時(shí)非常謹(jǐn)慎,因此用戶決不會(huì)丟失所定制的配置—這是用普通壓縮包,如.tar.gz文件所無(wú)法達(dá)到的。對(duì)于程序開發(fā)者來(lái)說(shuō),包管理器允許這類用戶把軟件源代碼和編譯、連接生成的二進(jìn)制程序打包,然后提供給終端用戶使用。這個(gè)過(guò)程非常簡(jiǎn)單,它由一個(gè)主文件和可選的補(bǔ)丁程序組成。這種源代碼、補(bǔ)丁程序和軟件生成指令的清晰描述簡(jiǎn)化了發(fā)行軟件新版本所帶來(lái)的維護(hù)負(fù)擔(dān)。在終端字符界面下,Linux的包管理器以rpm命令加上參數(shù)和選項(xiàng)的形式使用;在圖形界面下,CentOS7在“應(yīng)用程序”菜單欄的“系統(tǒng)工具”菜單的子菜單里所提供的“軟件”管理工具可以通過(guò)互聯(lián)網(wǎng)查找、添加、更新、刪除、定位軟件包,還可以模塊檢查依賴關(guān)系等;可以通過(guò)按鈕和鼠標(biāo)的配合操作完成軟件包管理的一些常用功能。6.2包管理的特色有關(guān)RPM的信息在網(wǎng)頁(yè)/中有許多介紹。在學(xué)習(xí)如何使用包管理器之前,讓我們先簡(jiǎn)要了解Linux包管理的特色:易用性(Easeofuse)面向軟件包(Package-orientedfocus)包的升級(jí)性(Upgradabilityofpackages)探測(cè)包的依賴性(Trackingofpackageinterdependencies)強(qiáng)大的查詢能力(Querycapabilities)軟件包校驗(yàn)(Verification)支持多種結(jié)構(gòu)(Supportformultiplearchitectures)保持軟件包原始特征(Useofpristinesources)6.2.1易用性或許RPM設(shè)計(jì)的主要目的之一就是要容易使用。為了讓更多的用戶使用這種新軟件,RPM與其他早期的Linux包管理工具軟件相比必須要有重大的改變。基于這一點(diǎn),大多數(shù)可以用RPM處理的任務(wù)被設(shè)計(jì)成通過(guò)執(zhí)行單條命令來(lái)完成。例如,使用RPM來(lái)升級(jí)軟件要求執(zhí)行單條命令(rpm-Usoftware_package),而使用早期的方法至少需要六條命令才能完成同樣的工作:tarzxfsoftware_packagecdsoftware_package./configuremakesumakeinstall與此類似,當(dāng)使用RPM刪除一個(gè)已安裝的應(yīng)用程序軟件包時(shí),也同樣要求執(zhí)行單條命令(rpm-esoftware_package);而早期的方法需要手動(dòng)刪除每個(gè)與應(yīng)用程序相關(guān)聯(lián)的文件。6.2.2面向軟件包 RPM是用來(lái)在軟件包層次上操作的。RPM提供可以管理成百上千個(gè)包的軟件,勝于在單個(gè)文件或整個(gè)系統(tǒng)基礎(chǔ)上的操作。
每個(gè)包由分立的關(guān)聯(lián)文件集、相關(guān)的文檔和配置信息組成;典型情況下,每個(gè)包是一個(gè)單獨(dú)的應(yīng)用程序。RPM作為包的管理單元,使得軟件包安裝與刪除的應(yīng)用變的極為簡(jiǎn)單。6.2.3包的升級(jí)性
除了面向軟件包的特色外,RPM還支持軟件包升級(jí)。對(duì)于從RPM包中安裝的應(yīng)用程序,只要有新的版本發(fā)行都可以使用RPM升級(jí),而不需要重新安裝。在升級(jí)應(yīng)用程序時(shí),RPM會(huì)刪除那些舊的文件并用新文件替換它們。另外,RPM允許智能地、全自動(dòng)地升級(jí)用戶軟件,軟件包中原來(lái)所做的配置在升級(jí)過(guò)程中會(huì)安全的保留下來(lái),因此用戶不會(huì)丟失配置信息。例如,ApacheWeb服務(wù)器一般安裝在需要Web網(wǎng)頁(yè)服務(wù)的Linux計(jì)算機(jī)上;Apache服務(wù)器的配置信息以文本文件的形式存儲(chǔ)在/etc/http/conf/httpd.conf文件中。假設(shè)用戶已經(jīng)用RPM安裝了Apache并且配置過(guò)httpd.conf文件;當(dāng)用戶再用RPM升級(jí)Apache時(shí),RPM將會(huì)小心地保護(hù)用戶所做過(guò)的配置。相反,手動(dòng)升級(jí)應(yīng)用程序時(shí)常常覆蓋已存在的配置文件,丟失系統(tǒng)管理員所做的配置。6.2.4探測(cè)包的依賴性
軟件包之間存在依賴關(guān)系,即某個(gè)軟件包中的程序需要使用其他已經(jīng)安裝的軟件包中的程序。例如,Postfix和Sendmail郵件傳輸代理(MTA)程序一般安裝在提供e-mail服務(wù)的Linux計(jì)算機(jī)上,在它們可以提供e-mail服務(wù)前都會(huì)被配置,以便成功地對(duì)用戶身份進(jìn)行驗(yàn)證(通過(guò)輸入用戶名和密碼)。這常常用于防止未經(jīng)授權(quán)的用戶訪問e-mail服務(wù)器,阻止不道德的廣告商利用郵件服務(wù)器為工具發(fā)送垃圾郵件。然而,要使Postfix和Sendmail程序正常工作,CyrusSASL程序必須安裝。CyrusSASL(SimpleAuthenticationandSecurityLayer)程序?yàn)镻ostfix和Sendmail程序提供用戶名和密碼的檢查。換句話說(shuō),Postfix和Sendmail程序依賴于CyrusSASL。
對(duì)于系統(tǒng)級(jí)的軟件管理程序,在系統(tǒng)組件之間的邏輯依賴關(guān)系容易探測(cè)。所有需要的組件作為系統(tǒng)的部分包括在系統(tǒng)中,升級(jí)系統(tǒng)時(shí)就升級(jí)了所有的組件。在MicrosoftWindows2000操作系統(tǒng)中,IIS需要其他的程序,如EventLog(Windows用來(lái)記錄系統(tǒng)事件,很類似于Linux系統(tǒng)的syslogd和klogd程序)必須存在。由于Windows是在系統(tǒng)層次上的管理,而不是包的管理,所以這種依賴得到滿意的保證。然而,在Linux操作系統(tǒng)中使用RPM情況就不同了,RPM提供了靈活性以安裝某個(gè)應(yīng)用程序,但是以后不安裝或刪除其他應(yīng)用程序。例如Postfix程序需要syslogd程序記錄系統(tǒng)事件,當(dāng)用戶安裝Postfix程序時(shí)不能保證已經(jīng)安裝了syslogd程序。如果syslogd沒有安裝,則Postfix程序?qū)o(wú)法正確地工作。為了避免這樣的問題RedHat開發(fā)者認(rèn)識(shí)到RPM還必須探測(cè)依賴信息,以便RPM安裝或刪除應(yīng)用程序時(shí)使用這種依賴信息。使用RPM在沒有安裝syslogd程序的系統(tǒng)上安裝Postfix時(shí)會(huì)產(chǎn)生一個(gè)警告信息,以提示syslogd必須先安裝。于此類似,在一個(gè)已經(jīng)安裝了Postfix的系統(tǒng)上卸載syslogd時(shí)也會(huì)產(chǎn)生一個(gè)警告信息。如果需要,這些警告信息可以被忽略,但是缺省情況下RPM強(qiáng)制檢查這些依賴關(guān)系。6.2.5強(qiáng)大的查詢能力
作為RPM實(shí)現(xiàn)的一部分,它維護(hù)一個(gè)所有已安裝的RPM軟件包和文件的數(shù)據(jù)庫(kù)。RPM設(shè)計(jì)為很容易查詢,用戶可以搜索數(shù)據(jù)庫(kù)以證實(shí)系統(tǒng)中哪些軟件包已經(jīng)安裝和軟件包中有哪些文件以及該軟件包的制作者。這個(gè)特色使得基于RPM的系統(tǒng)特別容易使用,因?yàn)閱螚l的RPM命令就可以查看系統(tǒng)中所有已經(jīng)安裝的軟件包。6.2.6軟件包校驗(yàn) RPM還維護(hù)著系統(tǒng)數(shù)據(jù)庫(kù)中每個(gè)已安裝文件的大量信息,例如每個(gè)文件應(yīng)該有什么權(quán)限、每個(gè)文件的大小等。一段時(shí)間后,如果安裝的程序不能正常工作,原因可能是系統(tǒng)管理員設(shè)置了不正確的文件權(quán)限或者由于外部的原因影響了計(jì)算機(jī)的內(nèi)存,破壞了存儲(chǔ)位而引起的錯(cuò)誤。雖然RPM不能阻止引起已安裝軟件失效的所有錯(cuò)誤,但是它能排除通常的錯(cuò)誤。當(dāng)一個(gè)應(yīng)用程序失效時(shí),用戶可以使用RPM數(shù)據(jù)庫(kù)確定所有與該應(yīng)用程序相關(guān)聯(lián)的文件是否仍然有正確的Unix文件權(quán)限以及與該應(yīng)用程序無(wú)關(guān)的文件是否被改變或被破壞。6.2.7支持多種結(jié)構(gòu)
早期Linux包管理程序的限制之一是它們只能使軟件包安裝在一種類型的計(jì)算機(jī)上,例如用于32位或64位Intel兼容的CPU。這對(duì)于發(fā)行版的開發(fā)者例如RedHat和Debian以及為了在Linux上使用而打包軟件的應(yīng)用程序賣主造成一個(gè)問題,因?yàn)榭捎玫拇虬椒ú荒墚a(chǎn)生支持多種結(jié)構(gòu)的包。而且軟件打包者無(wú)法指出目標(biāo)軟件包適用的體系結(jié)構(gòu),這使得軟件的最終用戶難以知道那種計(jì)算機(jī)可以安裝這些軟件包。 RedHat通過(guò)把各種體系結(jié)構(gòu)的支持合并進(jìn)RPM解決了這個(gè)限制,這種特色通過(guò)一個(gè)基本的安裝軟件包產(chǎn)生一個(gè)可以運(yùn)行在各種CPU上的包,這大大方便了最終用戶。6.2.8保持軟件包原始特征
保持軟件包原始特征是BOGUS發(fā)行項(xiàng)目管理系統(tǒng)人員提出的概念,它是RPM的一個(gè)設(shè)計(jì)目標(biāo)。對(duì)于RPM產(chǎn)生兩種類型的包:二進(jìn)制包和源代碼包。二進(jìn)制包用于壓縮要安裝和使用的程序;源代碼包包含程序的源代碼以及如何把源代碼編譯成二進(jìn)制包的文檔。這個(gè)特色或許是在現(xiàn)代Linux打包軟件(如RPM)與用于其他系統(tǒng)(如商業(yè)Unix系統(tǒng)使用的pkg格式)的打包軟件之間的最大的區(qū)別。源代碼打包使得軟件打包者更容易工作,因?yàn)榇虬咴跍?zhǔn)備這些包的新版本時(shí)可以使用舊版本的源代碼包作為參考。源代碼打包還方便了最終用戶,因?yàn)槿菀淄ㄟ^(guò)改變軟件編譯選項(xiàng)產(chǎn)生一個(gè)新的、支持用戶需要特征的二進(jìn)制包。
6.3命令行下的包管理
在命令行下使用rpm命令進(jìn)行包管理。RPM提供以下五種基本操作以實(shí)現(xiàn)用戶對(duì)軟件包的管理:
安裝----解開被壓縮的軟件包,并安裝軟件到計(jì)算機(jī)磁盤上。
查詢----通過(guò)RPM數(shù)據(jù)庫(kù)查詢軟件包的相關(guān)信息。
校驗(yàn)----校驗(yàn)軟件包中程序的正確性。
升級(jí)----用新版本程序替換軟件包中的舊版本程序。
刪除----清除通過(guò)RPM安裝的軟件,即卸載軟件包。
一般RPM不提供建立軟件包的功能,軟件開發(fā)者或其他用戶如果需要?jiǎng)?chuàng)建軟件包可以通過(guò)rpmbuild命令來(lái)實(shí)現(xiàn)。 rpm命令的用法是: rpm[OPTION...]其中,OPTION...為命令選項(xiàng)。由于rpm命令功能強(qiáng)大,所以它的命令選項(xiàng)很多;主要有查詢、校驗(yàn)、簽名、數(shù)據(jù)庫(kù)、安裝、升級(jí)、刪除和公共選項(xiàng)等。這里先介紹公共選項(xiàng),其他選項(xiàng)在每個(gè)基本操作中介紹;公共選項(xiàng)是在所有操作中都可以使用的選項(xiàng)。公共選項(xiàng)說(shuō)明公共選項(xiàng)選項(xiàng)說(shuō)明-D或--define='MACROEXPR'用表達(dá)式EXPR的值定義宏-E或--eval='EXPR'輸出EXPR宏表達(dá)式--macros=<FILE:...>從指定的列表文件<FILE:...>中讀,以代替默認(rèn)的文件。--nodigest不校驗(yàn)軟件包的摘要信息。--nosignature不校驗(yàn)軟件包的簽名。--rcfile=<FILE:...>用指定的配置文件列表<FILE:...>代替默認(rèn)的文件。-r或--root=ROOT用ROOT作為頂級(jí)目錄(缺省為“/”)。--querytags顯示已知的查詢標(biāo)志。--showrc顯示最后的rpmrc和宏配置文件。--quiet輸出指令執(zhí)行的簡(jiǎn)要信息。-v或--verbose輸出指令執(zhí)行的詳細(xì)信息。--version顯示版本信息。-?或--help顯示幫助信息。--usage簡(jiǎn)要顯示命令用法信息。表6-1rpm命令的公共選項(xiàng)及說(shuō)明6.3.1安裝軟件包
從網(wǎng)絡(luò)上可以搜索到大量應(yīng)用程序的RPM軟件包,大多數(shù)RPM軟件包的命名有一定的規(guī)律,一般有類似如system-config-printer-1.4.1-21.el7.x86_64.rpm的文件名;這些RPM軟件包的文件名一般包括以下幾個(gè)部分:
軟件包的名稱,如system-config-printer。
軟件包的版本號(hào),如1.4.1-21。
發(fā)行號(hào),如el7。
硬件平臺(tái),如x86_64等。
擴(kuò)展名,一般就是rpm。
此外,網(wǎng)絡(luò)上還有一種源代碼軟件包,即SRPM軟件包,其軟件包名中帶有src字樣。這種軟件包是不帶編譯后的可執(zhí)行文件,需要用戶自己編譯。以下分別介紹這兩種軟件包的安裝方法。6.3.1.1RPM軟件包的安裝
通常安裝一個(gè)RPM軟件包的命令格式是: rpm{-i|--install}[install-options]PACKAGE_FILE...
其中,-i或—install是必需的命令選項(xiàng)、install-options是可選的命令選項(xiàng),參數(shù)PACKAGE_FILE...是要安裝的軟件包文件名列表。
安裝、升級(jí)與刪除選項(xiàng)(install/upgrade/eraseoption)說(shuō)明選項(xiàng)說(shuō)明--aid當(dāng)需要時(shí),添加建議的軟件包以便處理。--allfiles安裝或升級(jí)軟件包中所有的文件,不管文件是否存在。--allmatches刪除所有指定的軟件包。--badreloc發(fā)生錯(cuò)誤時(shí),重新配置文件。--excludepathOLDPATH忽略在指定目錄OLDPATH里的所有文件。--excludedocs安裝軟件包時(shí)不安裝任何文檔(包括man手冊(cè)頁(yè)和文本信息文檔)。--force強(qiáng)制更換軟件包或文件。與使用命令選項(xiàng)—replacepkgs、--replacefiles和—oldpackage一樣。-h或--hash軟件包安裝或升級(jí)時(shí)輸出“#”顯示進(jìn)度;經(jīng)常與-v選項(xiàng)一起使用。--ignoresize安裝前不檢查磁盤空間是否足夠。--ignorearch即使二進(jìn)制包適用的結(jié)構(gòu)格式與主機(jī)不匹配,仍然允許安裝和升級(jí)軟件包。表6-2rpm命令的安裝、升級(jí)與刪除選項(xiàng)及說(shuō)明--ignoreos即使二進(jìn)制包適用的操作系統(tǒng)與主機(jī)不匹配,仍然允許安裝和升級(jí)軟件包。--includedocs安裝軟件包時(shí),安裝所有的文檔。這是默認(rèn)設(shè)置。--justdb只是更新數(shù)據(jù)庫(kù),不改變?nèi)魏挝募?-nodigest當(dāng)讀取包時(shí)不校驗(yàn)包或標(biāo)題摘要。--nosignature當(dāng)讀取包時(shí)不校驗(yàn)包或標(biāo)題簽名。--nodeps當(dāng)安裝/升級(jí)/刪除軟件包時(shí)不做依賴性檢查。--nosuggest不提示丟失包的依賴關(guān)系。--noorder不重新編排軟件包的安裝順序,以便滿足它們彼此間的依賴關(guān)系。--nopostun不執(zhí)行任何安裝腳本(script)文件。該選項(xiàng)與—noscripts、--nopre、--nopost、--nopreun選項(xiàng)等價(jià)。--notriggerpostun不執(zhí)行軟件包內(nèi)的任何腳本(script)文件。該選項(xiàng)與—notriggerin、--notriggerun、–notriggers選項(xiàng)等價(jià)。--oldpackage允許升級(jí)中用舊包替換新包。--percent安裝或升級(jí)時(shí)顯示完成進(jìn)度的百分比。--prefixNEWPATH如果重新配置文件,就把文件放在指定的目錄NEWPATH之下。--relocateOLDPATH=NEWPATH將原來(lái)放在舊目錄OLDPATH下的文件改放到新目錄NEWPATH下。--repackage在軟件包刪除前重新打包文件。--replacefiles強(qiáng)行替換軟件包中的文件。--replacepkgs強(qiáng)行替換軟件包。--test僅僅是測(cè)試,并不真的安裝/升級(jí)/刪除軟件包。軟件包常用的安裝方法示例:[root@localhostPackages]#rpm-ivhqt-settings-19.23.8.el7.centos.noarch.rpm準(zhǔn)備中...###########################################[100%]正在升級(jí)/安裝...1:qt-settings-19.23.8.el7.centos#################################[100%][root@localhostPackages]#
在命令中使用-v選項(xiàng)輸出安裝詳細(xì)信息,用-h選項(xiàng)以輸出“#”符號(hào)顯示安裝進(jìn)度。由于該軟件包有簽名,所以安裝中不會(huì)出現(xiàn)警告信息;否則有警告信息,如果要消除顯示警告信息可以通過(guò)增加—nosignature選項(xiàng)。命令執(zhí)行中輸出的顯示信息“準(zhǔn)備中...”表示正在對(duì)軟件包進(jìn)行預(yù)處理,主要是對(duì)軟件包的依賴性進(jìn)行檢查。雖然rpm命令的安裝選項(xiàng)很多,但是常用的主要就是v和h選項(xiàng)。由于用戶事先可能并不知道系統(tǒng)中哪些包已經(jīng)安裝、哪些包沒有安裝,所以軟件包在實(shí)際安裝過(guò)程中會(huì)出現(xiàn)一些常見的錯(cuò)誤:1.軟件包已經(jīng)安裝
如果用戶安裝的軟件包已經(jīng)被安裝過(guò),則會(huì)出現(xiàn)以下信息:[root@localhostPackages]#rpm-ivhqt-settings-19.23.8.el7.centos.noarch.rpm準(zhǔn)備中...###########################################[100%]軟件包 qt-settings-19.23.8.el7.centos.noarch 已經(jīng)安裝[root@localhostPackages]#
從輸出的信息可以看到,經(jīng)過(guò)預(yù)處理后rpm判斷出該軟件包已經(jīng)安裝過(guò)。如果用戶要堅(jiān)持重新安裝,則可以使用—force或—replacepkgs選項(xiàng),強(qiáng)制進(jìn)行重新安裝,例如:[root@localhostPackages]#rpm-ivh–force—nosignatureqt-settings-19.23.8.el7.centos.noarch.rpm準(zhǔn)備中...###########################################[100%]1:qt-settings-19.23.8.el7.centos#################################[100%][root@localhostPackages]#
采用—nosignature選項(xiàng)后不再進(jìn)行包的簽名檢查,不顯示警告信息;采用–force選項(xiàng)后將忽略該軟件包已經(jīng)安裝的信息,強(qiáng)制進(jìn)行安裝。2.文件太舊
如果用戶要安裝的軟件包已經(jīng)安裝過(guò)新版本時(shí)再安裝舊版本,就會(huì)出現(xiàn)文件太舊的信息,這時(shí)安裝失敗。例如:[root@localhostPackages]#rpm-ivhlibstdc++-4.4.7-23.el6.x86_64.rpm警告:libstdc++-4.4.7-23.el6.x86_64.rpm:頭V3RSA/SHA1Signature,密鑰IDc105b9de:NOKEY準(zhǔn)備中...###########################################[100%]
軟件包libstdc++-4.8.5-36.el7_6.2.x86_64(比libstdc++-4.4.7-23.el6.x86_64還要新)已經(jīng)安裝 file/usr/lib64/libstdc++.so.6frominstalloflibstdc++-4.4.7-23.el6.x86_64conflictswithfilefrompackagelibstdc++-4.8.5-36.el7_6.2.x86_64[root@localhostPackages]#
這表示要安裝的軟件包libstdc++-4.4.7-23.el6.x86_64.rpm與系統(tǒng)已經(jīng)安裝的軟件包libstdc++-4.8.5-36.el7_6.2.x86_64相比文件太舊,則軟件包不能安裝。如果用戶希望忽略這個(gè)錯(cuò)誤信息并繼續(xù)安裝時(shí),可以采用強(qiáng)制替換軟件包中文件的—replacefiles或--force選項(xiàng)。由于該軟件包沒有簽名,所以安裝中會(huì)出現(xiàn)警告信息。3.依賴關(guān)系檢查失敗
在執(zhí)行rpm命令安裝軟件包時(shí),默認(rèn)會(huì)自動(dòng)檢查軟件包的依賴關(guān)系;即要安裝的軟件包如果依賴其他軟件包,而其他軟件包還沒有安裝時(shí),會(huì)出現(xiàn)依賴關(guān)系檢查失敗的信息,當(dāng)然安裝也會(huì)終止。例如:[root@localhostPackages]#rpm-ivhqt-4.8.7-2.el7.x86_64.rpm錯(cuò)誤:依賴檢測(cè)失敗:qt-settings被qt-1:4.8.7-2.el7.x86_64需要[root@localhostPackages]#
這表示要安裝的軟件包qt-4.8.7-2.el7.x86_64.rpm依賴qt-settings-19.23.8.el7.centos.noarch.rpm軟件包,因此解決依賴關(guān)系檢查失敗引起的問題需要先安裝qt-settings-19.23.8.el7.centos.noarch.rpm軟件包。
安裝選項(xiàng)—nodeps可以要求rpm命令不做依賴性檢查,因此用戶可以使用該選項(xiàng)進(jìn)行強(qiáng)制安裝,但是最好不要這樣做,因?yàn)楹雎粤艘蕾囮P(guān)系檢查后即使軟件包安裝了也不一定能正常運(yùn)行。6.3.1.2安裝源代碼軟件包前面所介紹的RPM軟件包是指包內(nèi)已經(jīng)帶有可執(zhí)行程序的軟件包,安裝后即可運(yùn)行。現(xiàn)在許多網(wǎng)站除了提供這種軟件包外也提供源代碼軟件包,即SRPM軟件包,其軟件包名中帶有src字樣。用戶可以根據(jù)自己的需要從相關(guān)的網(wǎng)站下載RPM或SRPM軟件包。與RPM軟件包安裝方式相比,使用源代碼軟件包(SRPM軟件包)進(jìn)行安裝相對(duì)會(huì)比較復(fù)雜,因?yàn)樾枰捎脩糇约壕幾g源代碼生成可執(zhí)行文件。在Linux系統(tǒng)中,有些軟件只能以SRPM軟件包的形式提供,如Linux系統(tǒng)內(nèi)核和某些應(yīng)用程序源代碼。使用源代碼軟件包安裝軟件是Linux系統(tǒng)下進(jìn)行軟件安裝的重要手段,也是使用Linux系統(tǒng)的最主要的優(yōu)勢(shì)之一。對(duì)于專業(yè)用戶而言使用源代碼軟件包安裝軟件,不僅能按照用戶的需要選擇安裝方式進(jìn)行安裝,而且能夠深入了解源代碼學(xué)習(xí)到更多的知識(shí)。下面簡(jiǎn)要介紹SRPM軟件包的安裝方法:第一,將SRPM軟件包導(dǎo)入系統(tǒng)。下載后,以超級(jí)用戶身份執(zhí)行“rpm–ivhPACKAGE_FILE”命令,將源代碼軟件包導(dǎo)入系統(tǒng)。如果是RPM包,則該命令執(zhí)行后會(huì)將包內(nèi)的可執(zhí)行程序安裝到Linux系統(tǒng)的某個(gè)bin或sbin目錄下;而如果是SRPM包,則在/root/rpmbuild/SOURCES目錄下導(dǎo)入一個(gè)包含軟件包名稱的壓縮文件,形如package_name.tar.gz等。第二,將壓縮文件解壓縮。源代碼軟件包導(dǎo)入后的壓縮文件通常以.tar.gz做為擴(kuò)展名,也有以tar.Z、tar.bz2或.tgz做為擴(kuò)展名的。不同的擴(kuò)展名表示壓縮時(shí)所用的命令不同,當(dāng)然解壓縮的命令也不相同,用戶既可以在命令行下解壓縮也可以在圖形方式下解壓縮,有關(guān)如何解壓縮的內(nèi)容請(qǐng)參閱第四章的相關(guān)章節(jié)。第三,編譯源代碼當(dāng)解壓縮成功后,會(huì)建立一個(gè)目錄,目錄名一般就是軟件包名。用cd命令進(jìn)入到對(duì)應(yīng)的目錄中。在編譯之前最好閱讀Readme文件和Install文件。盡管許多源代碼軟件包都使用基本相同的命令,但是有時(shí)在閱讀這些文件時(shí)能發(fā)現(xiàn)一些重要的信息。例如,安裝該軟件包是否需要其他軟件或程序庫(kù)的支持;軟件包中是否含有可以自動(dòng)安裝的腳本程序(.sh)等。在安裝前閱讀這些說(shuō)明文件,有助于安裝成功和節(jié)約時(shí)間。如果目錄中已經(jīng)有Makefile文件,則用戶只要執(zhí)行make命令就可以完成安裝;如果目錄中沒有Makefile文件,則一般有一個(gè)可執(zhí)行的configure腳本文件,執(zhí)行它會(huì)自動(dòng)檢查編譯器及編譯該軟件的條件是否滿足,如果檢查通過(guò),則生成Makefile文件。再執(zhí)行make和makeinstall命令即可完成源代碼軟件包的安裝。否則,輸出錯(cuò)誤信息且運(yùn)行終止。在執(zhí)行configure腳本文件時(shí)常見的錯(cuò)誤、判斷方法和解決措施是:1.沒有安裝C或C++編譯器判斷方法:執(zhí)行命令gcc(C++則為g++),看是否提示找不到該命令。解決措施:將CentOS7鏡像光盤(即下載的iso文件)裝入光驅(qū),然后進(jìn)入/run/media/root/CentOS7x86_64/Packages目錄,執(zhí)行命令:#rpm-ivhgcc*
注意:A、目錄名包含空格要用轉(zhuǎn)義符或用tab鍵;B、如果有提示缺乏依賴文件則先安裝它。2.沒有安裝make工具判斷方法:執(zhí)行命令make,看是否提示找不到該命令。解決措施:進(jìn)入同上的Packages目錄,然后執(zhí)行命令:#rpm-ivhmake*3.沒有安裝autoconf工具判斷方法:執(zhí)行命令autoconf,看是否提示找不到該命令。解決措施:進(jìn)入同上的Packages目錄,然后執(zhí)行命令:#rpm-ivhautoconf*4.缺少某些鏈接庫(kù)判斷方法:在make時(shí),提示缺少某些鏈接庫(kù)文件。解決措施:從網(wǎng)絡(luò)上下載并安裝包含這些鏈接庫(kù)文件的包。
這些錯(cuò)誤是在安裝Linux系統(tǒng)時(shí)沒有全部安裝或沒有選中軟件開發(fā)包造成的。除了采用命令方式解決這些問題外,如果用戶已經(jīng)安裝了圖形方式下的軟件包管理工具,則也可以在圖形方式下添加這些軟件包。
參考示例:安裝ImageMagick--15.el7_2.src.rpm源代碼軟件包。ImageMagick(TM)是一個(gè)免費(fèi)的創(chuàng)建、編輯、合成圖片的軟件。它可以讀取、轉(zhuǎn)換、寫入多種格式的圖片;具體用法在安裝后用man–aImageMagick查看。安裝具體方法如下: [root@localhostroot]#rpm–ivhImageMagick--15.el7_2.src.rpm*導(dǎo)入源代碼包,未指定目標(biāo)目錄時(shí),則默認(rèn)在/root/rpmbuild目錄* [root@localhostroot]#cd/root/rpmbuild/SOURCES [root@localhostSOURCES]#tar–xvfImageMagick-6.7.8-9.tar.xz *從tar包解壓縮還原文件* [root@localhostSOURCES]#cdImageMagick-6.7.8-9
[root@localhostImageMagick-6.7.8-9]#./configure *執(zhí)行configure文件,產(chǎn)生Makefile文件*[root@localhostImageMagick-6.7.8-9]#make *執(zhí)行make命令,編譯源代碼*[root@localhostImageMagick-6.7.8-9]#makeinstall *安裝編譯生成的可執(zhí)行文件*[root@localhostImageMagick-6.7.8-9]#makeclean *刪除安裝時(shí)產(chǎn)生的臨時(shí)文件*以上的解壓縮和從tar包中還原文件操作,在圖形界面下用軟件打包器也可以一步完成并且更方便、速度更快。如果是*.tar.gz壓縮包,則使用tar–zxvf*.tar.gz解壓縮,當(dāng)然同樣可以在圖形界面下用軟件打包器解壓縮。有些源代碼軟件包在編譯安裝后可以用makeuninstall命令卸載。如果不提供此功能,則該軟件的卸載必須手動(dòng)刪除。6.3.2軟件包查詢
軟件包查詢實(shí)際上就是查詢RPM所維護(hù)的數(shù)據(jù)庫(kù),通常查詢一個(gè)RPM軟件包的命令格式是: rpm{-q|--query}[query-options][PACKAGE_NAME...]
其中,-q或—query是必需的命令選項(xiàng)、query-options是可選的命令選項(xiàng),參數(shù)PACKAGE_NAME...是軟件包名列表,該參數(shù)是可選的;用戶查詢指定軟件包的信息時(shí)只要輸入軟件包名不要帶版本號(hào)和發(fā)行號(hào),另外軟件包名不支持通配符。查詢選項(xiàng)(queryoptions)說(shuō)明查詢選項(xiàng)選項(xiàng)說(shuō)明-c或--configfilespackage_name列出指定軟件包的所有配置文件。-d或--docfilespackage_name列出指定軟件包的所有文檔文件。--dumppackage_name列出指定軟件包中每個(gè)文件的校驗(yàn)信息。-l或--listpackage_name列出指定軟件包中所有的文件安裝的位置。--queryformat=QUERYFORMATPackage_name按指定的格式查詢。格式QUERYFORMAT有“name”、“version”和“description”三種。該選項(xiàng)要與-i選項(xiàng)一起使用。-s或--statepackage_name顯示指定軟件包中每個(gè)文件的狀態(tài)。-a或--all查詢系統(tǒng)中所有的軟件包。-f或--filefile_name查詢擁有指定文件的軟件包。文件名必須帶完整的路徑。-g或--groupgroup_name查詢位于指定組群的軟件包。-p或--packagepackagefile_name查詢指定軟件包文件的包名稱、版本號(hào)和發(fā)行號(hào)。--specfilepackagefile_name查詢指定的軟件包文件。--whatrequirespackage_name查詢指定軟件包所需要的依賴關(guān)系。--whatprovidespackage_name查詢指定軟件包所提供的依賴關(guān)系。表6-3rpm命令的查詢選項(xiàng)及說(shuō)明軟件包常用的查詢方法參考示例1:查詢軟件包名為libstdc++的包名稱、版本號(hào)和發(fā)行號(hào)。 [root@localhostPackages]#rpm-qlibstdc++ libstdc++-4.8.5-36.el7_6.2.x86_64 [root@localhostroot]類似的命令是: [root@localhostPackages]#rpm-qplibstdc++-4.4.7-23.el6.x86_64.rpm
選項(xiàng)-p雖然也是顯示軟件包的基本信息,但是它會(huì)進(jìn)行軟件包的簽名等項(xiàng)檢查。注意:選項(xiàng)-qp一起用必須用包的全名!參考示例2:查詢軟件包system-config和acl所需要的依賴關(guān)系。[root@localhostPackages]#rpm-q--whatrequiressystem-config-usersaclsystem-config-users-docs-1.0.9-6.el7.noarchsane-backends-1.0.24-12.el7.x86_64cups-1.6.3-35.el7.x86_64[root@localhostPackages]#從顯示的結(jié)果可以看到,軟件包system-config-users需要依賴system-config-users-docs-1.0.9-6.el7.noarch包;軟件包acl需要依賴其他兩個(gè)sane-backends-1.0.24-12.el7.x86_64和cups-1.6.3-35.el7.x86_64軟件包。注意:這種查詢只需要輸入包名,不能用全名!參考示例3:查詢系統(tǒng)中所有軟件包的基本信息。 [root@localhostmnt]#rpm-qa
執(zhí)行該命令后將顯示系統(tǒng)中所有已經(jīng)安裝的軟件包名稱、版本號(hào)和發(fā)行號(hào)信息。參考示例4:查詢軟件包acl中的所有文件安裝位置。 [root@localhostPackages]#rpm-qlacl/usr/bin/chacl/usr/bin/getfacl/usr/bin/setfacl/usr/share/doc/acl-2.2.51/usr/share/doc/acl-2.2.51/CHANGES.gz/usr/share/doc/acl-2.2.51/COPYING/usr/share/doc/acl-2.2.51/COPYING.LGPL/usr/share/doc/acl-2.2.51/PORTING/usr/share/doc/acl-2.2.51/README/usr/share/locale/de/LC_MESSAGES/acl.mo/usr/share/locale/es/LC_MESSAGES/acl.mo/usr/share/locale/fr/LC_MESSAGES/acl.mo/usr/share/locale/gl/LC_MESSAGES/acl.mo/usr/share/locale/pl/LC_MESSAGES/acl.mo/usr/share/locale/sv/LC_MESSAGES/acl.mo/usr/share/man/man1/chacl.1.gz/usr/share/man/man1/getfacl.1.gz/usr/share/man/man1/setfacl.1.gz/usr/share/man/man5/acl.5.gz[root@localhostPackages]#
該軟件包查詢時(shí)只要使用軟件包名稱即可。6.3.3軟件包校驗(yàn)
軟件包校驗(yàn)是檢查軟件包中的所有文件是否與系統(tǒng)中所安裝的一致。軟件包校驗(yàn)就是根據(jù)RPM所維護(hù)的數(shù)據(jù)庫(kù)對(duì)文件大小、存取權(quán)限和屬主屬性等進(jìn)行校驗(yàn)。當(dāng)用戶安裝了新程序后,如果懷疑某些文件被破壞時(shí),可以使用軟件包校驗(yàn)操作。通常校驗(yàn)一個(gè)RPM軟件包的命令格式是: rpm{-V|--verify}[verify-options][PACKAGE_NAME...]
其中,-V或—verify是必需的命令選項(xiàng)、verify-options是可選的命令選項(xiàng),參數(shù)PACKAGE_NAME...是軟件包名列表,該參數(shù)是可選的;軟件包名的使用規(guī)則與軟件包查詢操作是相同的。校驗(yàn)選項(xiàng)(verifyoptions)說(shuō)明校驗(yàn)選項(xiàng)選項(xiàng)說(shuō)明--nomd5package_name對(duì)指定的軟件包不使用MD5編碼校驗(yàn)文件的大小與正確性。--nofilespackage_name對(duì)指定的軟件包不校驗(yàn)軟件包中文件的屬性。--nodepspackage_name對(duì)指定的軟件包不校驗(yàn)軟件包的依賴關(guān)系。--noscriptpackage_name對(duì)指定的軟件包不執(zhí)行校驗(yàn)Scripts文件。-a或--all校驗(yàn)系統(tǒng)中所有的軟件包。-f或--filefile_name校驗(yàn)擁有指定文件的軟件包。文件名必須帶完整的路徑。-g或--groupgroup_name校驗(yàn)位于指定組群的軟件包。-p或--packagepackagefile_name校驗(yàn)指定軟件包文件大小、屬性等。--specfilepackagefile_name校驗(yàn)指定的軟件包文件。--whatrequirespackage_name校驗(yàn)指定軟件包所需要的依賴關(guān)系。--whatprovidespackage_name校驗(yàn)指定軟件包所提供的依賴關(guān)系。表6-4rpm命令的校驗(yàn)選項(xiàng)及說(shuō)明軟件包常用的校驗(yàn)方法參考示例1:校驗(yàn)指定的/run/media/root/CentOS7x86_64/Packages/acl軟件包。 [root@localhostroot]#rpm-Vacl [root@localhostroot]參考示例2:校驗(yàn)當(dāng)前目錄下system-config-users-docs-1.0.9-6.el7.noarch.rpm軟件包。[root@localhostPackages]#rpm–Vpsystem-config-users-docs-1.0.9-6.el7.noarch.rpm[root@localhostPackages]#注意:要用包全名。這個(gè)校驗(yàn)在自己下載軟件包安裝前做個(gè)校驗(yàn)是非常必要的。參考示例3:校驗(yàn)指定軟件包文件大小、屬性等。 [root@localhostDownloads]#rpm-Vplibstdc++-4.4.7-23.el6.x86_64.rpm警告:libstdc++-4.4.7-23.el6.x86_64.rpm:頭V3RSA/SHA1Signature,密鑰IDc105b9de:NOKEY....L..../usr/lib64/libstdc++.so.6遺漏/usr/lib64/libstdc++.so.6.0.13[root@localhostDownloads]#
從上面的參考示例可見,如果校驗(yàn)正常則沒有任何信息輸出,如參考示例1和2;如果校驗(yàn)中有發(fā)現(xiàn)問題則rpm命令就會(huì)顯示錯(cuò)誤信息,如參考示例3。錯(cuò)誤信息的格式先是8位長(zhǎng)度的字符串,如果被校驗(yàn)的文件是配置文件則緊跟一個(gè)標(biāo)志“c”,接著是文件名。8位字符的每一個(gè)用來(lái)表示被校驗(yàn)文件與RPM數(shù)據(jù)庫(kù)中一種屬性的比較結(jié)果。錯(cuò)誤信息中輸出的每個(gè)字符含義見表5-5。表6-5rpm命令校驗(yàn)錯(cuò)誤信息及含義輸出字符表示含義.表示該屬性測(cè)試通過(guò)。5表示MD5校驗(yàn)碼測(cè)試失敗。S表示文件大小測(cè)試失敗。L表示符號(hào)鏈接測(cè)試失敗。T表示文件修改日期測(cè)試失敗。D表示設(shè)備測(cè)試失敗。U表示用戶測(cè)試失敗。G表示用戶組群測(cè)試失敗。M模式e(包括文件權(quán)限和文件類型)測(cè)試失敗。6.3.4軟件包升級(jí)
軟件包的升級(jí)操作與軟件包的安裝操作非常類似。通常升級(jí)一個(gè)RPM軟件包的命令格式是:rpm{-U|--upgrade}[install-options]PACKAGE_FILE... 或rpm{-F|--freshen}[install-options]PACKAGE_FILE...
其中,-U或—upgrade和-F或--freshen是必需的命令選項(xiàng)、install-options是可選的命令選項(xiàng),與安裝操作時(shí)的命令選項(xiàng)是一樣的(見表5-2)。參數(shù)PACKAGE_FILE...是要升級(jí)的軟件包文件名列表。
這兩種命令用法之間的區(qū)別只是,-U
選項(xiàng)將升級(jí)當(dāng)前指定的軟件包,如果這個(gè)包還沒有安裝,就安裝它;如果已經(jīng)安裝,則對(duì)它升級(jí)。-F
選項(xiàng)只是對(duì)已經(jīng)安裝的軟件包進(jìn)行升級(jí)(即刷新)。在具體應(yīng)用中,-U
選項(xiàng)比較常用,尤其是在命令行中包含一系列RPM軟件包的時(shí)候。這樣自動(dòng)地使未安裝的包被安裝,而已安裝的包被升級(jí)。
在升級(jí)軟件包時(shí),rpm命令將自動(dòng)刪除舊版本的軟件包。如果用戶對(duì)舊版本的軟件包做過(guò)配置,則rpm命令能自動(dòng)處理配置文件,即將原有的配置文件更名保存;用戶在升級(jí)完成后可以查看新、舊配置文件,比對(duì)它們之間的不同并進(jìn)行修改,以保證升級(jí)后的軟件能正常地運(yùn)行。
如果用戶下載的軟件包版本比已經(jīng)安裝的軟件包版本還舊,則在非特別指定的情況下rpm命令不會(huì)執(zhí)行“升級(jí)”操作;除非用戶在升級(jí)命令中采用—oldpackage選項(xiàng),則rpm命令將用舊版本的軟件包替換新版本的軟件包。軟件包常用的升級(jí)方法參考示例1:升級(jí)指定的system-config-users軟件包。[root@localhostPackages]# rpm-Uvhsystem-config-users-docs-1.0.9-6.el7.noarch.rpm準(zhǔn)備中...#################################[100%]
軟件包system-config-users-docs-1.0.9-6.el7.noarch已經(jīng)安裝[root@localhostPackages]#參考示例2:僅僅測(cè)試ImageMagick軟件包并不真正升級(jí)。[root@localhostDownloads]#rpm-Uvh--testImageMagick--15.el7_2.src.rpm[root@localhostDownloads]#
增加—test選項(xiàng)后,rpm命令并不安裝或升級(jí)軟件包,只是進(jìn)行測(cè)試操作。這個(gè)測(cè)試輸出信息表示該軟件包安裝沒有問題;如果測(cè)試結(jié)果存在文件沖突或依賴關(guān)系檢查失敗則會(huì)輸出相應(yīng)的信息。6.3.5軟件包刪除(卸載)
當(dāng)所安裝的軟件包不再使用時(shí),為了節(jié)省磁盤空間可以將已安裝的軟件包刪除(卸載)。刪除RPM軟件包的格式是:rpm{-e|--erase}[--allmatches][--nodeps][--noscripts][--notriggers][--repackage][--test]PACKAGE_NAME...
其中,參數(shù)PACKAGE_NAME...是軟件包名列表,不是軟件包文件名列表,-e或--erase是必需的命令選項(xiàng),其他的為可選的命令選項(xiàng),含義參見表5-2。參考示例1:刪除linuxconf-gui-1.34r3-1.i386.rpm軟件包。 [root@localhostroot]#rpm-eImageMagick [root@localhostroot]#
注意:這里使用的是軟件包名,而不是軟件包文件名。
有時(shí)在刪除軟件包時(shí),會(huì)有錯(cuò)誤提示信息,這一般是系統(tǒng)中還有其他的軟件包要依賴當(dāng)前正要?jiǎng)h除的軟件包。參考示例2:測(cè)試刪除acl軟件包。[root@localhostDownloads]#rpm-e--testacl錯(cuò)誤:依賴檢測(cè)失?。?acl被(已安裝)sane-backends-1.0.24-12.el7.x86_64需要 acl被(已安裝)cups-1:1.6.3-35.el7.x86_64需要[root@localhostDownloads]#
在這種情況下,雖然用戶可以使用—nodeps選項(xiàng),忽略依賴關(guān)系繼續(xù)刪除,但是最好不要這樣做,否則該軟件包刪除后其他的軟件包也不能運(yùn)行。
一般在刪除一個(gè)軟件包前,可以在命令中先使用—test選項(xiàng)以檢查該軟件包與其他軟件包之間的依賴關(guān)系,在沒有錯(cuò)誤信息輸出時(shí)再實(shí)際進(jìn)行刪除操作。6.3.6數(shù)據(jù)庫(kù)維護(hù)
在Linux系統(tǒng)中之所以可以完成對(duì)RPM軟件包的一系列管理,是因?yàn)橄到y(tǒng)中維護(hù)著一個(gè)RPM軟件包的數(shù)據(jù)庫(kù)。有時(shí)執(zhí)行rpm命令不能實(shí)現(xiàn)軟件包的安裝、升級(jí)、查詢、驗(yàn)證和刪除就是由于該數(shù)據(jù)庫(kù)存在問題而引起的。維護(hù)RPM數(shù)據(jù)庫(kù)的命令格式是: rpm{--initdb|--rebuilddb}[-v][--dbpathDIRECTORY][--rootDIRECTORY]
其中,--initdb或—rebuilddb為必需的命令選項(xiàng),其他為可選的命令選項(xiàng)。當(dāng)使用—initdb選項(xiàng)時(shí),在系統(tǒng)中建立一個(gè)新的RPM數(shù)據(jù)庫(kù);使用—rebuilddb選項(xiàng)時(shí),重建包括所有已經(jīng)安裝軟件包的數(shù)據(jù)庫(kù)??蛇x命令選項(xiàng)的說(shuō)明可選選項(xiàng)選項(xiàng)說(shuō)明-v顯示命令執(zhí)行的詳細(xì)信息。--dbpathDIRECTORY指定要存放RPM數(shù)據(jù)庫(kù)的路徑目錄名。--rootDIRECTORY指定要作為根目錄的目錄。表6-6rpm命令數(shù)據(jù)庫(kù)維護(hù)選項(xiàng)參考示例1:在/root/rpmdb目錄下建立一個(gè)新的RPM數(shù)據(jù)庫(kù)。[root@localhostroot]#rpm--initdb-v--dbpath/root/rpmdb進(jìn)入rpmdb目錄檢查RPM數(shù)據(jù)庫(kù)建立情況:[root@localhostroot]#cdrpmdb[root@localhostrpmdb]#lsBasenames__db.002GroupObsoletenameRequirenameTriggernameConflictname__db.003InstalltidPackagesSha1header __db.001DirnamesNameProvidenameSigmd5[root@localhostrpmdb]#從檢查結(jié)果可以看到,新數(shù)據(jù)庫(kù)已經(jīng)建立。注意:選項(xiàng)—dbpath所帶的目錄名參數(shù)必須是絕對(duì)路徑名,否則不會(huì)在指定的目錄中建立RPM數(shù)據(jù)庫(kù)。
參考示例2:重建所有已經(jīng)安裝軟件包的數(shù)據(jù)庫(kù)。 [root@localhostroot]#rpm–rebuilddb
這個(gè)命令執(zhí)行時(shí)要檢查系統(tǒng)中所有已經(jīng)安裝的軟件包,所以花費(fèi)的時(shí)間是比較長(zhǎng)的。另外,在執(zhí)行rpm命令時(shí),不要再執(zhí)行重建數(shù)據(jù)庫(kù)命令,否則系統(tǒng)會(huì)顯示“設(shè)備或資源忙”錯(cuò)誤信息。
6.4圖形方式下的RPM包管理
在CentOS7的發(fā)行版本中圖形化的軟件包管理工具只有“軟件”和“軟件更新”,它是“應(yīng)用程序”、“系統(tǒng)工具”菜單下的兩個(gè)菜單項(xiàng);“軟件”的界面如圖6-1所示,其主要功能是添加或刪除軟件包,可以訪問選定軟件包的主頁(yè),也可以查看軟件包里的文件,還可以查詢軟件包的依賴或被依賴的關(guān)系,在這個(gè)界面上還可以輸入軟件包名或包名的部分字符在在系統(tǒng)指定的范圍里進(jìn)行查找?!败浖隆逼渲饕δ苁歉萝浖?。圖6-1軟件界面6.4.1添加/刪除應(yīng)用程序
從圖6-1可以看到,窗體左側(cè)是軟件包集,其中“SoftwareRepositoreies”是CentOS7的軟件資料庫(kù),當(dāng)用戶使用yum命令安裝軟件包時(shí)系統(tǒng)會(huì)先在本機(jī)查找,如果沒有且系統(tǒng)若聯(lián)網(wǎng)則就在資料庫(kù)(CentOS站點(diǎn)、社區(qū)站點(diǎn)、指定的第三方站點(diǎn))里找,當(dāng)用戶選擇某個(gè)軟件包集時(shí),右上邊的窗口中出現(xiàn)該包集中的軟件包,如圖6-2所示,其中已經(jīng)安裝的軟件包的盒子圖標(biāo)呈現(xiàn)打開狀態(tài)且復(fù)選鈕被選中(打鉤),如果要安裝某個(gè)軟件包,則用鼠標(biāo)左鍵選擇或用上下鍵移動(dòng)藍(lán)色亮帶到合適的位置,再用鼠標(biāo)左鍵雙點(diǎn)擊它或點(diǎn)擊“安裝”按鈕,最后點(diǎn)擊窗體標(biāo)題欄上的“應(yīng)用更改”按鈕,選中某個(gè)軟件包時(shí)中間下面的小窗體會(huì)顯示該軟件包的描述信息如,圖6-3所示。所列出的軟件包安裝時(shí),系統(tǒng)一般會(huì)自動(dòng)檢查其依賴關(guān)系并安裝相關(guān)的包。
當(dāng)藍(lán)色亮帶移到已安裝的軟件包上時(shí),窗體中“安裝”按鈕變?yōu)椤耙瞥卑粹o,再點(diǎn)擊“應(yīng)用更改”按鈕即可刪除該軟件包,同樣這里列出的軟件包在刪除時(shí),系統(tǒng)會(huì)自動(dòng)檢查其依賴關(guān)系。
顯然,用圖形方式畢命令行方式簡(jiǎn)單、直觀和方便,但功能沒有命令行強(qiáng)大,使用也沒有那么靈活。圖6-2已安裝和未安裝的包圖6-3安裝軟件包6.4.2添加CentOS7資料庫(kù)源
當(dāng)用戶在這個(gè)“軟件”的軟件包集中都找不到需要的軟件包時(shí),可以對(duì)軟件資料庫(kù)進(jìn)行新站點(diǎn)加源,所謂的加源就是把新站點(diǎn)的網(wǎng)址鏡像添加到CentOS7的軟件資料庫(kù)中,但是,在加源的站點(diǎn)上要下載軟件包時(shí)會(huì)要求用戶加以信任確認(rèn);軟件資料庫(kù)的加源可以用wget命令方法。 GNUwget是一個(gè)免費(fèi)的實(shí)用程序,用于從Web上非交互式下載文件。它支持HTTP,HTTPS和FTP協(xié)議,以及通過(guò)HTTP代理進(jìn)行檢索。wget是非交互式的,這意味著它可以在后臺(tái)工作,而用戶沒有登錄。即允許用戶開始檢索并斷開與系統(tǒng)的連接,讓wget完成工作。相比之下,大多數(shù)Web瀏覽器都需要用戶的持續(xù)存在,這在傳輸大量數(shù)據(jù)時(shí)可能是一個(gè)很大的障礙。 wget可以跟蹤HTML,XHTML和CSS頁(yè)面中的鏈接,以創(chuàng)建遠(yuǎn)程網(wǎng)站的本地版本,完全重新創(chuàng)建原始站點(diǎn)的目錄結(jié)構(gòu);這有時(shí)被稱為“遞歸下載”。可以要求wget將下載文件中的鏈接轉(zhuǎn)換為指向本地文件,以供脫機(jī)查看。如果由于網(wǎng)絡(luò)問題導(dǎo)致下載失敗,當(dāng)網(wǎng)絡(luò)恢復(fù)時(shí)它將斷點(diǎn)續(xù)傳直到整個(gè)文件。限于篇幅,這里不介紹命令的具體用法,使用時(shí)請(qǐng)參見命令手冊(cè)。用wget命令進(jìn)行加源,#wget-O/etc/yum.repos.d/epel.repo/repo/epel-7.repo其中,-O是命令選項(xiàng)、/etc/yum.repos.d/epel.repo為選項(xiàng)參數(shù),用于存放輸出數(shù)據(jù)的文件。命令執(zhí)行過(guò)程如下:#wget-O/etc/yum.repos.d/epel.repo/repo/epel-7.repo--2019-09-0303:58:49--/repo/epel-7.repo正在解析主機(jī)()...44,92,89,...正在連接()|44|:80...已連接。已發(fā)出HTTP請(qǐng)求,正在等待回應(yīng)...200OK長(zhǎng)度:664[application/octet-stream]正在保存至:“/etc/yum.repos.d/epel.repo”100%[=============================================>]664--.-K/s用時(shí)0s2019-09-0303:58:49(98.5MB/s)-已保存“/etc/yum.repos.d/epel.repo”[664/664])
最后加源的結(jié)果如圖4-13紅線框所示。6.4.3軟件包依賴關(guān)系檢查
當(dāng)要檢查某個(gè)軟件包依賴哪些其它軟件包時(shí),選中該軟件包后點(diǎn)擊“Required”按鈕即可查看到它依賴誰(shuí),如圖6-4所示;當(dāng)要檢查某個(gè)軟件包被誰(shuí)依賴時(shí),選中該軟件包后點(diǎn)擊“Dependent”按鈕即可查看到它被誰(shuí)依賴誰(shuí),如圖6-5所示。圖6-4包依賴的軟件包圖6-5軟件包被依賴6.4.4查看的軟件包文件
圖形方式下查看軟件包里有哪些文件非常簡(jiǎn)單,選中某個(gè)軟件包后點(diǎn)擊“文件”按鈕即可看到軟件包里的文件、安裝后存放的路徑、文件數(shù)等信息,如圖6-6所示。圖6-6查看軟件包文件6.4.4查找軟件包
圖形方式下查找軟件包只要在搜索輸入框內(nèi)輸入軟件包名后回車即可,如圖6-7所示。6.4.5軟件更新
圖形方式下更新軟件包時(shí),運(yùn)行菜單欄“應(yīng)用程序”下的“系統(tǒng)工具”菜單下的“軟件更新”菜單項(xiàng),系統(tǒng)會(huì)自動(dòng)檢查是否有需要更新的軟件,如果有則啟動(dòng)更新,否則顯示信息相關(guān)退出,如圖6-8所示。
圖6-7軟件更新6.5包管理器yumyum是一個(gè)基于rpm的交互式包管理器,以命令的方式存在。它可以自動(dòng)執(zhí)行系統(tǒng)更新,包括依賴性分析和基于“存儲(chǔ)庫(kù)”元數(shù)據(jù)的更新處理。它還可以執(zhí)行新程序包的安裝,刪除舊程序包以及對(duì)許多其他命令或服務(wù)的已安裝和/或可用程序包執(zhí)行查詢。yum類似于apt-get和smart等其他高級(jí)包管理器。yumex是yum命令的圖形用戶界面,但它不在CentOS7的資源庫(kù)中,需要通過(guò)加源其它站點(diǎn)來(lái)安裝。6.5.1命令形式y(tǒng)um命令功能強(qiáng)大、使用靈活,但用法較為復(fù)雜。做為開發(fā)者或者系統(tǒng)管理者掌握它可以方便地進(jìn)行軟件包的處理以大大提高系統(tǒng)開發(fā)和管理效率。命令用法: yum[options][command][package...]其中,command是下列形式之一:*installpackage1[package2][...]*update[package1][package2][...]*update-to[package1][package2][...]*update-minimal[package1][package2][...]*check-update*upgrade[package1][package2][...]*upgrade-to[package1][package2][...]*distribution-synchronization[package1][package2][...]*remove|erasepackage1[package2][...]*autoremove[package1][...]*list[...]*info[...]*provides|whatprovidesfeature1[feature2][...]*clean[packages|metadata|expire-cache|rpmdb|plugins|all]*makecache[fast]*groups[...]*searchstring1[string2][...]*shell[filename]*reinstallpackage1[package2][...]*downgradepackage1[package2][...]*deplistpackage1[package2][...]*repolist[all|enabled|disabled]*repoinfo[all|enabled|disabled]*repository-packages<enabled-repoid> <install|remove|remove-or-rein‐stall|remove-or-distribution-synchronization>[package2][...]*version[all|installed|available|group-*|nogroups*|grouplist|groupinfo]*history[info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]*load-transaction[txfile]*updateinfo[summary|list|info|remove-pkgs-ts|exclude-updates|exclude-all|check-running-kernel]*fssnapshot[summary|list|have-space|create|delete]*fs[filters|refilter|refilter-cleanup|du]*check*help[command]除非給出--help或-h選項(xiàng),否則必須存在上述命令之一。6.5.2command說(shuō)明:
在yum命令中通過(guò)command告訴系統(tǒng)要對(duì)包做何操作,因此必須了解他們的功能和需要注意的問題,如表6-1所示,更為具體的描述參見yum手冊(cè)。command功能及說(shuō)明表功能說(shuō)明installpackage1…向系統(tǒng)中安裝一個(gè)或多個(gè)軟件包update更新系統(tǒng)中的一個(gè)或多個(gè)軟件包update-to此命令的作用類似于“upgrade”,但必須指定要更新到的程序包的版本。update-minimal此命令工作方式類似于“upgrade”,但轉(zhuǎn)到“最新”包匹配,該匹配修復(fù)影響系統(tǒng)的問題。check-update檢查是否有可用的軟件包更新。upgrade更新軟件包的同時(shí)考慮軟件包取代關(guān)系。upgrade-to此命令的工作方式與“upgrade”類似,但必須指定要更新到的包版本。distribution-synchronization同步軟件包到最新可用的版本。remove或erase從系統(tǒng)中移除一個(gè)或多個(gè)軟件包。autoremove此命令的工作方式類似于在使用clean_requirements_on_remove參數(shù)的情況下運(yùn)行“remove”命令。還可以不指定任何參數(shù),在這一點(diǎn)上,它會(huì)嘗試刪除任何不是由用戶顯式安裝的、任何軟件都不依賴的包(所謂的葉包)。list列出一個(gè)或一組軟件包。若不指定軟件包名,則列出所有的軟件包。info用于列出有關(guān)可用包的描述和摘要信息。provides或whatprovidesfeature1…用于確定哪個(gè)包提供某些功能或文件。clean刪除rpm緩存數(shù)據(jù)。makecache創(chuàng)建元數(shù)據(jù)緩存。groups在內(nèi)核版本3.4.2中新增的一種命令,它收集所有作用于組的子命令。searchstring1…在軟件包詳細(xì)信息中搜索指定字符串。shell運(yùn)行交互式的yumshell文件。當(dāng)指定文件名時(shí),該文件的內(nèi)容將在yumshell模式下執(zhí)行,否則交互式運(yùn)行。reinstallpackage1…覆蓋安裝軟件包。downgradepackage1…降級(jí)軟件包。deplistpackage1…列出軟件包的依賴關(guān)系。repolist顯示已配置資源庫(kù)中的源。repoinfo這個(gè)命令的工作方式與repolist-v完全相同。repository-packages作為包的集合(如“yumgroups”),允許用戶以單個(gè)實(shí)體的形式安裝或刪除它們。version顯示機(jī)器可用的源版本。history允許用戶查看在過(guò)去事務(wù)處理中用yum發(fā)生的事情。load-transaction此命令將重新加載保存的yum事務(wù)文件,這允許您在一臺(tái)計(jì)算機(jī)上運(yùn)行事務(wù),然后在另一臺(tái)計(jì)算機(jī)上使用它。updateinfo這個(gè)命令有很多子命令來(lái)處理資料庫(kù)中的updateinfo。fssnapshot創(chuàng)建文件系統(tǒng)快照,或列出/刪除當(dāng)前快照。fs此命令有幾個(gè)子命令可用于處理主機(jī)的文件系統(tǒng)數(shù)據(jù),主要用于刪除語(yǔ)言/文檔以進(jìn)行最少的安裝。check檢查RPM數(shù)據(jù)庫(kù)問題。此命令執(zhí)行時(shí)間花費(fèi)較長(zhǎng)。help顯示yum用法提示并退出。表6-1command功能及說(shuō)明6.5.3options說(shuō)明
命令yum的選項(xiàng)很多,大多數(shù)命令行選項(xiàng)也可以使用配置文件說(shuō)明要設(shè)置的必要配置選項(xiàng)。選項(xiàng)及含義如表6-2所示。選項(xiàng)及含義:選項(xiàng)含義-h,--help顯示此幫助消息并退出-t,--tolerant忽略錯(cuò)誤-C,--cacheonly完全從系統(tǒng)緩存運(yùn)行,不升級(jí)緩存-c[configfile],--config=[configfile]配置文件路徑-R[minutes],--randomwait=[minutes]命令最長(zhǎng)等待時(shí)間-d[debuglevel],--debuglevel=[debuglevel]調(diào)試輸出級(jí)別--showduplicates在list/search命令下,顯示資料庫(kù)源里重復(fù)的條目-e[errorlevel],--errorlevel=[errorlevel]錯(cuò)誤輸出級(jí)別--rpmverbosity=[debuglevelname]RPM調(diào)試輸出級(jí)別-q,--quiet靜默執(zhí)行(不顯示執(zhí)行詳細(xì)信息)-v,--verbose顯示詳盡的執(zhí)行過(guò)程-y,--assumeyes回答全部問題為是--assumeno回答全部問題為否--version顯示Yum版本然后退出--installroot=[path]設(shè)置安裝根目錄--enablerepo=[repo]啟用一個(gè)或多個(gè)軟件源(支持通配符)--disablerepo=[repo]禁用一個(gè)或多個(gè)軟件源(支持通配符)-x[package],--exclude=[package]采用全名或通配符排除軟件包--disableexcludes=[repo]禁止從主配置,從源或者從任何位置排除--disableincludes=[repo]禁用配置文件中定義的包含項(xiàng)。--obsoletes更新時(shí)處理軟件包取代關(guān)系--noplugins禁用Yum插件--nogpgcheck禁用GP
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2025學(xué)年新教材高中物理第3章機(jī)械波第3節(jié)波的干涉和衍射第4節(jié)多普勒效應(yīng)及其應(yīng)用學(xué)案魯科版選擇性必修第一冊(cè)
- 2024-2025學(xué)年高中政治第四單元發(fā)展中國(guó)特色社會(huì)主義文化第十課第二框加強(qiáng)思想道德建設(shè)訓(xùn)練含解析新人教版必修3
- 2025監(jiān)理工程師《合同管理》考試預(yù)測(cè)題
- 2025年拉薩貨運(yùn)從業(yè)資格證考試模擬題庫(kù)及答案
- 2025年德陽(yáng)道路運(yùn)輸從業(yè)資格證模擬考試年新版
- 2025的建設(shè)工程設(shè)計(jì)合同范本
- 中國(guó)櫥具項(xiàng)目投資可行性研究報(bào)告
- 社區(qū)評(píng)估報(bào)告范文醫(yī)療
- 上海商學(xué)院《中小學(xué)心理健康教育課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 上海商學(xué)院《圖形圖像處理技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- DL∕T 523-2017 化學(xué)清洗緩蝕劑應(yīng)用性能評(píng)價(jià)指標(biāo)及試驗(yàn)方法
- 服飾品牌解析智慧樹知到期末考試答案章節(jié)答案2024年上海工程技術(shù)大學(xué)
- 廣安市岳池縣2022-2023學(xué)年七年級(jí)上學(xué)期期末道德與法治試題【帶答案】
- 經(jīng)營(yíng)異常授權(quán)委托書范本
- 2022-2023學(xué)年廣東省廣州市天河區(qū)教科版(廣州)六年級(jí)上冊(cè)期末測(cè)試英語(yǔ)試卷(含聽力音頻) 【帶答案】
- 國(guó)家開放大學(xué)-工程力學(xué)(本)(閉卷)
- 江西旅游經(jīng)濟(jì)發(fā)展調(diào)查分析報(bào)告
- 中醫(yī)培訓(xùn)課件:《中藥熱奄包技術(shù)》
- 尋方問藥縱橫談智慧樹知到期末考試答案2024年
- 景觀設(shè)計(jì)初學(xué)者實(shí)戰(zhàn)寶典-園林規(guī)劃設(shè)計(jì)智慧樹知到期末考試答案2024年
- (2024年)周黑鴨營(yíng)銷策劃課件
評(píng)論
0/150
提交評(píng)論