Linux軟件管理(rpm,yum)

Linux的應用程序安裝提供了兩中格式的軟件包:一種是軟件開發者直接提供的源碼包;另一種是發行版廠商提供事先編譯好打包的軟件包;用戶需要根據需要來選擇何種方式安裝軟件,作為系統管理運維人員,要想合理應用,必須熟悉這兩者之間的內在聯系以及各自的特性和差異;

*軟件包管理工具)

  — RPM軟件包管理工具

 — YUM軟件包前端管理工具

軟件包管理工具:

早先用戶安裝軟件是非常痛苦的,只能編譯安裝,尤其對于一個不是軟件開發人員,不熟悉編譯過程的人,要想編譯安裝軟件幾乎沒有辦法做到,不過后來有大量的發行版廠商,根據他們自己對用戶需求的理解,事先通過軟件包管理器在一個通用平臺上(比較老的硬件平臺架構,因為軟件向下兼容)添加一些特性進行編譯,然后打包成自己特定的軟件包格式,要想靈活應用,必須使用與之對應的軟件包管理工具,每個發行版的廠商都有自己對軟件組織打包的理解方式,雖然廠商之間的管理工具不同,但是要實現的目的和功能基本上都是一致的,這包含他們必須能夠實現軟件包的安裝、升級、卸載、查詢、校驗等功能;目前主流的Linux發行版redhat系使用的是自己rpm工具,debian系使用的是dpt工具,雖然都是軟件包管理工具,但是理解層次深度還是有所差別的,經過多年相互借鑒學習,為了適應管理更加合理,redhat做出了更多調整進去,事實現在的rpm更是Linux系統中軟件包管理模式的一種規范;下面也主要介紹它.


軟件包獲取途徑:

    首先要知道軟件包獲取的途徑,跟對一般信息的獲取不同,首先要找信任的官方機構或網站;確保程序包是安全可信任的,沒有內置其他不正當的后門或惡意程序,作為系統運維人員,系統安全必須考慮到位;下面介紹一下比較值得信任的獲取途徑:

   (1)系統發行版安裝光盤;

 

   (2)官方鏡像站點;

      http://mirrors.aliyum.com

      http://mirrors.sohu.com

      http://mirrors.163.com

   (3)項目官方站點:

      apache

   (4)第三方組織:

      EPEL

   (5)搜索站點:

      http://rpm.pbone.net

      http://pkgs.org

      http://rpmfind.net

RPM工具功能詳解:

    rpm 工作原理:

    rpm工具使用rpm命令對軟件包進行管理,同時在內部維護一個叫PMS(Package Management Systme)軟件包管理系統;rpm工具借助數據庫,對rpm軟件進行管理;主要記錄信息如下:

    a:Linux系統安裝了什么軟件包;

    b:每個軟件包安裝后生產了什么文件在系統中;

    c:每個安裝后的軟件包版本

    b:包之間的依賴關系

  

   rpm軟件包格式:

      一般rpm分為主包和輔助包;帶devel字符串的開發包、帶utils字符串的工具包等輔助包,通常實現功能較多軟件程序包會有較多的輔助包;

     一般程序包名稱格式如下:

     軟件名詞-軟件版本發行號-軟件打包發行號-支持的平臺架構-以“.”rpm結尾

     這里主要介紹一下架構:

       一般分為運行在32位CPU系統上的x86系列,和運行在64位CPU系統上的x64位系列,同時64位的平臺兼容x86,程序有向下兼容的特性,      需要注意:程序中的高級特性依賴較新的硬件,如果運行在較老的硬件平臺架構上,高級功能特性有可能無法實現;noarch字符串表示跟平臺無關,不依賴;

    

     rpm包內文件類型:

     rpm的元數據,如名稱,版本,依賴,描述等

     rpm程序文件

     rpm腳本:一般有如下腳本:

     1.preinstall:安裝之前;

     2.postinstall:安裝之后;

     3.preuinstall:卸載之前;

     4.postuninstall:卸載之后

     

 

   (1)安裝:

      語法格式:

          rpm -i[option] PACKAGE_FILE

      常用選項:

        -i:表示install安裝

        -v -vv:表示顯示安裝過程,后者顯示更加詳細;

        -h:以#號顯示進度條格式;

        –nodeps:忽略依賴關系

        –force:強制動作,注意安裝成功后可能不能運行;

        –test:測試安裝,作為測試檢查

        –nosignature:不檢查簽名就是來源合法性;

        –nodigest:不檢查包完整性;MD5頭;

     注意:根據Linux的哲學之一,每個程序只做好一件事,單一小程序組成完成復雜任務;這樣結果就導致每個程序的要想運行,有較強的依賴性,有時A程序依賴B,B又依賴C,這樣要想安裝A必須先安裝最底層依賴的C,如果強制或忽略依賴關系,將會導致程序無法運行,安裝也沒有意義;

   

    (2)升級:

       語法格式:

          rpm -U|F[optIon] PACAGE_FILE

       常用選項:

         -U:表示不管軟件事先是否存在都要升級,存在就升級,不存在就安裝;

         -F:表示軟件軟件存在就升級,如何不存在,就放棄升級;

         –oldpackage:降級,如果升級之后發現有Bug或者兼容性問題,可以使用此選項回滾到升級前的版本;

         –force:強制動作,注意安裝成功后可能不能運行;

         –replacepkgs:注意不能替換配置文件;

       注意

         (1)不要對kernel做升級操作;支持多kernel并存;可以直接安裝;

         (2)修改過的配置升級不會覆蓋,升級同新文件,會重命名為file.rpmnew

        

     (3)卸載:

        語法格式:

           rpm -e[option] PACKAGE-NAME

        常用選項:

           -vh:顯示過程

           –nodeps:忽略依賴

           –noscripts:忽略腳本

           –allmatches:卸載所有匹配指定名稱的程序包,也就是說卸載軟件名稱中包含此名稱的所有包;

           –test:測試檢查卸載,不是真卸載

        注意:

          卸載會檢查依賴關系,如果卸載的軟件被其他程序依賴,請謹慎卸載,否則導致其依賴程序無法運行;

        

          

     (4)查詢:

        語法格式:

           rpm -q[option] [PACKAGE-NAME|PACKAGE_FILE]

        常用選項:

           -qa:查詢系統所有已安裝的程序包;

           -qf /path/to/file:查詢文件是由那個程序包生成;

           -ql:查詢程序生成的文件:

           -qi:查詢程序屬性信息;

           -qc:查詢程序配置文件;

           -qd:查詢程序提供的文檔

           -q –whatprovides CAPABILITY(功能):查詢這種CAPABILITY由那個程序提供;

           -q –whatrequires CAPABILITY:查詢這種CAPABILITY被哪些程序包依賴;

           -q –scripts:查詢程序包生成的腳本;

           -q –changelog:查詢軟件歷史

        查詢未安裝的軟件包信息,需要加-p選項跟上面的選項結合使用,后面的參數必須是PACKAGE_FILE;

           列如:

           -qpi:查詢指定PACKAGE_FILE的程序屬性信息;

           …

      (5)校驗:

        工作原理:校驗檢查的是軟件包來源的合法性和完整性,要想對它們校驗檢查,必須要有校驗機制,這種機制是根據簽名和加密實現的,通常發行版的光盤中會有一個包含所有軟件特征碼的文件,特征碼是根據軟件包特征提取的,通過單項加密實現的用來校驗軟件包的完整性,如果軟件包在獲取途中被修改,在系統中再次提取軟件包特征碼,跟系統已有的特征碼文件比對,不同則判斷被攥該,修改過的軟件包,根據相同的加密算法提取的特征肯定不同;來源合法性是根據簽名實現的;特征碼文件被稱為公鑰;校驗是由校驗程序完成的,默認rpm命令安裝時會調用;

      a.公鑰獲?。?/span>

        官方網站

        系統光盤

       系統配置文件中,這是系統在安裝時從安裝光盤復制進去的

       系統公鑰位置:/etc/pik/rpm-gpg/RPM-GPG-KEY-CentOS-7

      b.導入公鑰:

       rpm –import /path/to/pub.key

       

     校驗軟件:

      rpm -V PACKAGE-NAME:校驗安裝文件自安裝后是否被修改過,根據PMS記錄信息判斷;

      rpm -K PACKAGE_FILE:對指定未安裝的軟件包進行手工校驗;

    (6)RPM數據庫維護:

       默認數據庫目錄位置:/var/lib/rpm

       語法格式:

       rpm –initdb :初始化數據庫

       rpm –rebuilddb :重新構建

       –dbpath=/path/ :指定數據庫創建位置;

2.yum軟件包管理:

   前面的rpm安裝和卸載都需要檢查依賴關系,尤其是對依賴關系較多較復雜的軟件進行管理,是很難快速部署管理的;有沒有一種軟件管理工具能自自行解決依賴關系呢?yum就可以自動解決依賴關系,實現快速部署;

   Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包;

   yum工作原理:yum工作原理遵循C/S架構(客戶端/服務器);在客戶端僅需安裝yum客戶端軟件,并且配置yum配置文件指向的yum服務器端地址,為了故障冗余,可以指向多個yum源;在yum服務器端需要創建yum倉庫,作為放置所有rpm軟件的倉庫,同時創建一個名為repodata數據庫目錄文件,用不同的文件分門別類記錄倉庫內所有軟件包信息,通過網絡服務把資源地址發布出去;當客戶端yum請求軟件包時,同時會先把yum服務器端數據庫記錄文件請求下載到本地,經過校驗信息比對在判斷操作是否可行;yum源數據庫保存在yum客戶端的/var/cache/yum中,每次yum啟動都會通過校驗碼與yum服務器同步更新列表信息。

   (1)yum客戶端服務配置:

      a.首先檢查yum程序包是否安裝,安裝好yum工具才能使用yum工具;

      b.確保rpm程序和rpm的數據庫記錄是完整正常的;yum軟件管理依賴rpm管理工具;

      c.yum服務主配置文件配置選項說明:

      d.yum服務的主配置文件在系統/etc/yum.conf

      

[root@xia7 ~]# vim /etc/yum.conf

[main]                             ###倉庫ID,在系統中必須全局唯一

cachedir=/var/cache/yum/$basearch/$releasever  ###(yum緩存目錄,用來緩存請求的yum服務端數據,包括rpm軟件和yum源數據庫文件)

keepcache=0                          ###安裝完成后是否清空yum緩存,0表示不保留,1表示清空

debuglevel=2                         ###Debug 信息輸出等級,范圍為0-10,缺省為2

logfile=/var/log/yum.log                 ###yum日志文件位置,根據日志查詢過去的操作

exactarch=1             ### 是否安裝跟根系統架構平臺匹配的軟件,1表示只安裝匹配的,0表示兩者不檢查;                   

obsoletes=1             ### 是否允許更新老的RPM包,1表示允許,0表示進制更新老的軟件包

gpgcheck=1              ###安裝時驗檢查包的合法性和完整性,1表示開啟,0表示不檢查

plugins=1               ###是否如允許使用插件,1表示允許使用,0表示禁用插件

installonly_limit=5        ###允許保留多少個內核包

bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_repor

t_page.php?category=yum

distroverpkg=centos-release

       

補充選項:

exclude=PACKAGE_NAME   ####屏蔽不想更新的軟件包,可以使用通配符,多個軟件包之間用空格分割

enabled=1          ###是否啟用當前的倉庫配置指向;1表示開啟,0表示禁用;

gpgkey=/file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 ###如果啟用了gpg校驗機制,需要指定校驗的文件位置;

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/###yum倉庫的位置可以指定多個,當無法訪問時才選擇下一個;

cost=         ###開銷,默認是1000,開銷越大,優先使用級越低。

補充說明:baseurl=  有三種提供倉庫資源獲取方式:

       a:http://    #htt服務

       b:ftp://     #ftp服務

       c:file:///   本地yum源倉庫,或者是安裝光盤,注意事先需要掛載光盤;

  

       yum配置文件中的路徑變量意義:

  

       $releasever:當前系統的發行版本的主版本號;

       $arch:平臺

       $basearch:基礎平臺;

       YUM-$YUM9

       d.自定義配置yum配置文件:在/etc/yum.repos.d/YUM-NAMA.repo 注意必須是以“.repo”結尾的文件;

       

[root@xia7 ~]# vim /etc/yum.repos.d/local.repo 

[base]

name=centos 7

baseurl=http://10.1.0.1/cobbler/ks_mirror/7/  ###配置http服務提供的yum源倉庫

gpgcheck=1

enabled=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[local]

name=local centos 7

baseurl=file:///media/cdrom   ####配置本地光盤作為yum源倉庫

enabled=1

gpgcheck=0

  (2)yum服務端倉庫創建:

    a:首先檢查createrepo創建yum倉庫程序是否安裝;

    b:創建倉庫目錄,并且放置rpm軟件包在此目錄下;

    c:使用createrepo命令在倉庫目錄中創建倉庫生成yum數據庫目錄repodb

  

  (3)yum命令工具使用:

     語法格式:

       yum [option] [PACKAGE-NAME]…

     常用選項:

        查詢倉庫列表:

            repolist [all|deabled|disable]

        顯示軟件包:

            list [all|glob_expl]

            list [available |installed|updates]

        安裝程序包

            install package1 package2…

        升級程序包

            update package1 package2…

        檢查升級包:

            check-update

        卸載程序包:

            remove package1 package2…

        查詢程序包information

            info […]

        查看指定的某文件是由那個程序所提供;

            provides|whatprovides feature1

        清理本地緩存

            clean package |metadate |all

        構建緩存:

            makecache

        搜索關鍵字名軟件包

            search string1 string2…

        重新安裝程序包

            reinstall package1…

        降級程序包:

            downgrade package

        查看指定包所依賴的capability

            deplist package

        查詢安裝程序事物歷史;

             history info|list |stats 

        撤銷安裝

             history undo

        包組管理:

            grouplist :查詢包組

            groupinstall :安裝包組

            groupupdate  :升級包組

            groupinfo :查詢包組詳細信息

            groupremove :刪除包組

         

        其他選項

            –nogpgcheck :安裝不檢查包的來源性合法性和完整性;

            -y :自動回答交互信息為yes

            -q :靜默模式,不輸出打印信息

            –disablerepo=repoid :禁用指定的倉庫

            –enablerepo=repoid :啟用指定的倉庫

            –noplugins:禁用插件;

特別注意提醒:

    (1)很多對yum工具理解不是很深的初學者認為,有了yum工具,不必再使用學習RPM工具,這里需要特別注意的,首先yum只是RPM的前端管理工具,底層完全依賴RPM的數據庫,不是很清楚,可以多看幾     遍yum工作原理;

    (2)yum軟件管理操作機制對于突發故障解決不是很好,比如說安裝過程中系統宕機,這時根本沒辦法分析破損的依賴關系和從新部署;目前已經有解決工具DNF;在測試系統上使用,成熟后終將替代YUM;

   不過企業版目前還是yum工具;

原創文章,作者:xiashixiang,如若轉載,請注明出處:http://www.www58058.com/40840

(0)
xiashixiangxiashixiang
上一篇 2016-08-29 08:45
下一篇 2016-08-29 08:49

相關推薦

  • nginx配置(一)

    Nginx:http協議:web服務器(類似于httpd)、http reverse proxy(類似于httpd)、imap/pop3 reverse proxy NGINX is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/…

    Linux干貨 2017-05-05
  • 第十一周作業

    1、詳細描述一次加密通訊的過程,結合圖示最佳。   發送者:     1)使用單向加密算法提取要發送文件的特征碼;     2)使用自己的私鑰加密特征碼并附加在數據后面;     3)生成用于對稱加密的臨時密碼;     4)用此臨時密鑰加密數據和已經使用私鑰加密后的特…

    2017-05-08
  • 0805作業

    課堂練習 1.找出ifconfig 命令結果中本機的所有IPv4 地址   ifconfig|tr -cs '[0-9].' '\n'|sort -ut '.' -k3 2.查出分區空間使用率的最大百分比值   df|tr -s ' '|cut -d&quot…

    Linux干貨 2016-08-07
  • ansible-playbook組件解析及操作全解

    一、ansible-playbook介紹: ?playbook是由一個或多個”play”組成的列表。play的主要功能在于將事先歸為一組的主機裝扮成事先通過ansible中的task定義好的角色。從根本上來將,所謂的task無法是調用ansible的一個module。將多個paly組織在一個playbook中,即可以讓他們聯通起來按事…

    2015-08-24
  • 文件尋蹤和文件壓縮

    文件查找工具: 文件:根據文件的種屬性去找到相應文件 文件查找工具:locate, find locate: 根據此前updatedb命令生成的數據庫來完成文件查找查找速度很快非實時查找,結果不精確;模糊查找; 必要時,可手動執行updatedb命令; find命令:   通過遍歷指定的目標目錄,實時查找符合指定屬性的文件; 精確匹配;速度略慢; …

    Linux干貨 2016-08-19
  • 計算機的組成和其功能

    圖:計算機組成架構 計算機由硬件和軟件組成 硬件部分: CPU:又稱中央處理器,整個系統最高執行單元,執行各種運算,控制電腦自動協調地完成各種操作。 主板:它把計算機的各個部件緊密的連接在一起,各個部件通過主板進行數據傳輸,計算機重要的“交通樞紐”都在主板上,他的工作穩定性影響整機的工作穩定性。因同CPU的插腳和性能不同,所以針對不同的CPU也有不同的主板?!?/p>

    Linux干貨 2016-08-08

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-29 09:42

    文章對yum工具的使用進行了詳細的介紹,通讀整篇文章后能學到很多東西,但文章在邏輯表達的組織上顯得略微混亂,如果能再優化下邏輯規劃會更讓人印象深刻

欧美性久久久久