Linux程序包管理之RPM

Linux程序包管理之RPM

RPM概念

rpm是什么

RPM 是Ret Hat Package Manager(RPM軟件包管理器)的縮寫,遵循GPL協議,可以運行在各種Linux上,公認的行業標準。

rpm干什么

對于終端用戶來說

簡化了Linux系統的安裝、卸裝、更新和升級的過程,用命令完成

對于開發者來說

RPM允許把軟件編碼包裝成源代碼和程序包提供給用戶,過程簡單,減輕了發行軟件新版本所帶來的負擔。

管理用途

可以安裝、刪除、升級、刷新和管理RPM軟件包

通過RPM軟件管理包能知道軟件包包含哪些文件,以及系統中的某個文件屬于哪個包

可以查詢系統中的RPM軟件包是否安裝并查詢其安裝的版本

開發者可以把自己的程序打包為RPM包并發布

軟件包簽名GPG和MD5的導入、驗證和簽名發布

依賴性的檢查,查看是否有RPM軟件包由于不兼容而擾亂系統

rpm包命名格式

Linux程序包管理之RPM

程序包的構建過程

源代碼–>目標二進制格式–>把(二進制程序,庫文件,配置文件,幫助文件)組織成為一個或幾個包文件

程序包管理類型

deblan: dpt(命令dpkg) 程序包以“.deb”為后綴

redhat: redhat package manager:rpm(命令rpm) 程序包以“.rpm””為后綴

Su.S.E: rpm包,(命令rpm) 與redhat的rpm包的路徑格式不兼容

Gentoo:ports

ArchLinux: 輕量級Linux

程序包依賴關系

包之間:可能存在依賴關系,甚至循環依賴

     x,y,z

      x–>y,z

         y–>a,b,c

           c–>D    

 安裝某個主包,必須安裝主包依賴的副包

 解決依賴關系,使用rpm前端工具

程序包前段工具

yum:rhel系列上 rpm包管理器的前端工具

agt-get(apt-cache):deb包管理器的前端工具

zypper:suse的rpm管理器前段工具

dnf: Fedora 22+系統上rpm包管理器的前端工具

獲取程序包途徑

(1)系統發行版的光盤或官方的文件服務器(或鏡像站點)

         http://mirrors.aliyun.com/

         http://mirrors.sohu.com

         http://mirrors.163.com

 (2)項目的官方站點

       http://www.zabbix.com

 (3)第三方組織 社區組織維護

      Fedora-EPEL:

      Rpmforge:RHEL推薦,包很全

 (4)搜索引擎:不安全

       http://pkgs.org

       http://rpmfind.net/

       http://rpm.pbone.net/

       http://sourceforge.net/

 (5)自已動手,豐衣足食  

  建議:對網上下載的程序包進行md5校驗,檢查其完整性,合法性

  來源合法性:

  程序包的完整性;

rpm管理

rpm命令

rpm [OPTIONS] [PACKAGE_FILE]

安裝:-i,–install

升級:-U,–update,–freshen

卸載:-e,–erase

查詢:-q

校驗:-V

數據庫維護:–builddb,–initdb

安裝:

rpm {-i|–install} [install-options] PACKAGE_FILE…

rpm -ivh PACKAGE_FILE..


  GENERAL OPTIONS:

      -v:詳細信息

      -VV:更詳細的輸出

  [install-options]:

      -h:hash marks 輸出進度條;每個#表示2%的進度

      –test:測試安裝,檢查并報告依賴關系及沖突消息,并不真正安裝程序

      –nodeps:忽略依賴關系,強制安裝 ,但程序不一定能使用 不建議

      –replacepkgs重新安裝

      —replacefiles  重新安裝,忽略重復文件

      –nosignature:不檢查報名簽名信息,不檢查來源合法性

      –nodigest:不檢查包的完整性信息 (校驗 MD5) 

      –justdb:更新數據庫,但不重新安裝

      –noscripts 不執行全部程序包腳本

         注意:rpm可以自帶腳本

      腳本分四類:(特定的腳本的參數,可以單獨選擇)

      preinstall:安裝過程開始之前運行的腳本,%pre –nopre

      postinstall:安裝過程完成之后運行的腳本 $post –nopost

      preuninstall:卸載過程真正開始前運行的腳本 $preun –nopreun

      postuninstall:卸載過程中運行的腳本 $postun –nopreun

升級:

rpm {-U|–upgrade} [install-options] PACKAGE_FILE..

rpm {-F|-freshen} [install-options] PACKAGE_FILE..


   [PTIONS]

    -U:有舊版本升級或原程序不存在執行安裝

    -F:只執行升級

     rpm -Uvh PACKAGE_FILE..

     rpm -Fvh PACKAGE_FILE.

 [install-options]:

    –oldpackage:降級安裝舊版本 

    –force:強制;新版本的程序包不滿足老版本的依賴關系 ,強制安裝或強制升級,忽略依賴關系,也可配合rpm -ivh選項

 注意:

  (1)不要對內核kernel做升級操作 linux支持多內核并存,因此,直接安裝新版本內核即可

  (2)如果某原程序包的配置文件安裝后曾被修改過,升級時,新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重名命為(FILEname.rpmnew)后提供

卸載:

rpm {-e|–erase} [–allmatches] [–nodeps] [–noscripts][–notriggers] [–test] PACKAGE_NAME …


    –allmatches:卸載所有匹配指定名稱的程序包的各版本

    –nodeps:強制忽略依賴關系

    –test:測試卸載:dry run模式

查詢

rpm {-q|–query} [select-options] [query-options] PACKAGE_NAME …

select-options:

    PACKAGE_NAME :查詢指定程序包是否安裝及安裝信息

     -a:所有已安裝的程序包列表

    -f:查詢指定的文件由那個程序包安裝

    -g:查詢指定包組中包含哪些包

    -p:對未安裝的程序包執行查詢操作;

    –whatprovides CAPABILITY:查詢指定的CAPABILITY由那個程序包提供;

    –whatrequires CAPABILITY:查詢指定的CAPABILITY被那個程序包所依賴;

 query-options:

      –changelog:查詢rpm包的changlog

      -l:rpm包生成的所有文件列表

      -i:查詢程序包相關的信息,版本號,大小,所屬包組等等

      -c:查詢指定的程序包提供的配置文件

      -d:查詢指定的程序包提供的幫助文檔

      –provides:列出指定的程序包提供的所有的CAPABILITY. 在確定–whatprovides CAPABILITY 

      -R:查詢指定程序包的依賴關系

      –scripts:查詢指定程序包自帶的腳本片段

哪個包所依賴
      rpm2cpio 包文件|cpio –itv 預覽包內文件
      rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件

用法:

    -ql ,-qd,-qc,-qi,-qa PACKAGE_NAME

    -qp{i,c,d,f} PACKAGE_FILE :未安裝程序的詳細信息

校驗

rpm {-V|–verify} [select-options] [verify-options]  程序名

只要改變服務下的任意文件,使用-V校驗,都可看到修改信息

例:修改httpd的配置文件,校驗httpd服務 Linux程序包管理之RPM

將httpd中的某個文件改動一點點就會查詢到。

顯示信息的含義:
     S file Size differs     文件大小
     M Mode differs (includes permissions and file type) 權限    
     5 digest (formerly MD5 sum) differs    MD5
     D Device major/minor number mismatc  主次設備號不配備
     L readLink(2) path mismatch     路徑不匹配
     U User ownership differs    屬主匹配
     G Group ownership differs        屬組比匹配
     T mTime differs     時間戳改變
     P caPabilities differ

數據庫重建

rpm管理器數據庫路徑:/var/lib/rpm/  該目錄嚴重保護,全額備份

查詢操作:通過此處的數據庫進行;


NAME

  rpmdb – RPM Database Tool

SYNOPSIS

  rpm {–initdb|–rebuilddb} [-v] [–dbpath DIRECTORY] [–root DIRECTORY]

    –initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的,當前有時,不執行任何操作

    –rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建(不管如何,直接重建)

例如: Linux程序包管理之RPM

程序包來源合法性和完整性驗證:

來源合法性驗證:RSA

完整性驗證:SHA256

公鑰加密:
    對稱加密:加密、解密使用同一密鑰;
    非對稱加密:密鑰是成對兒的
    public key: 公鑰,公開所有人
    secret key: 私鑰, 不能公開


獲取并導入信任的包制作者的公鑰:

    rpm -K|checksig rpmfile 檢查包的完整性和簽名
    rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
    CentOS 7發行版光盤提供: RPM-GPG-KEY-CentOS-7
    rpm -qa gpg-pubkey

  對于Centos發行版來說:rpm-import /etc/pki/rpm-gpg/RPM-GPG-KEY-centos-7

驗正:

 (1)安裝此組織簽名的程序時,會自動執行驗證

 (2)手動驗證:rpm- k PACEAGE-FILE

實例演示:

查看當前安裝軟件包的RPM數據庫

Linux程序包管理之RPM

查詢單個軟件包

Linux程序包管理之RPM

查詢所有軟件包

Linux程序包管理之RPM

利用本地centos iso光盤裝rpm軟件包

思路:
確定需要什么包-->掛載centos.iso鏡像光盤-->進入到光盤內-->查找某包-->安裝某包-->卸載某包

這里以安裝tree為例

1.只讀掛載:mount -r /dev/cdrom /media 2.進入光盤內部:cd /media/ 3.查看要掛載包的版本:ls |grep tree Linux程序包管理之RPM

4.安裝:rpm -ivh 版本 Linux程序包管理之RPM

包來源合法性及完整性驗證

1.導入檢查公鑰:rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 2.驗證:

安裝此包會自動驗證

手動驗證:rpm -K 

Linux程序包管理之RPM

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

(0)
N24_yeziN24_yezi
上一篇 2016-11-22
下一篇 2016-11-22

相關推薦

  • CentOS程序包管理

    對于Linux系統而言,其能執行的程序為二進制格式,而對于程序開發者而言,直接利用二進制開發程序是不太現實的,所以一般都是利用高級語言來進行軟件開發,其程序也即稱為源代碼;那么我們在對一個程序進行安裝、升級、卸載、 查詢、校驗等操作時,需要對每個源代碼進行編譯成為二進制程序,那么顯然是不太現實的。所以在各Linux發行版中一般都帶有程序包管理器。 所謂程序包…

    Linux干貨 2016-08-25
  • PHP運行模式

    PHP運行模式有4鐘: 1)cgi 通用網關接口(Common Gateway Interface))2) fast-cgi 常駐 (long-live) 型的 CGI3) cli  命令行運行   (Command Line Interface)4)web模塊模式 (apache等web服務器運行的模塊模式) 1.  CGI(…

    Linux干貨 2015-04-10
  • Linux文件類型及顏色標識

    文件類型(共7種): – :普通文件 d:目錄文件 (directory) c:字符設備文件 (char) b:塊設備文件 (block) s:本地域套接口 (socket) p:有名管道 (pipeline) l:符號連接 (link) 關于硬鏈接、軟連接、復制之間的區別說明: 上圖中,我為photo.png這個圖片文件建立了一個拷貝(phot…

    Linux干貨 2016-10-16
  • 魔術方法 反射

    魔術方法 反射 反射(reflection):指的是運行時獲取類型定義信息。一個對象能夠在運行時像照鏡子一樣反射出其類型信息;也就是說能夠通過一個對象,找到自己的type、class、attribute、或method的能力,稱為反射或者自省。 具有反射能力的函數:type、isinstance、callable、dir、getattr。 運行時和編譯時不同…

    Linux干貨 2017-11-30
  • Linux find命令使用詳則

    find命令 find命令用來在指定目錄下查找文件。任何位于參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄欲文件。并且將查找到的子目錄和文件全部進行顯示。 語法 find(選項)(參數) 選項 -amin<分鐘>:查找在指定時間曾被存取過的文件或者目錄,單位以分鐘計算; -ane…

    2017-08-03
  • ACL權限管理練習

    ACL簡介;
    權限管理練習

    2017-09-11

評論列表(1條)

  • luoweiro
    luoweiro 2016-12-01 00:01

    知識整理的非常贊,而且符合闡述知識點,并對知識點進行驗證的方式來總結,值得大家學習。

欧美性久久久久