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 12:57
下一篇 2016-11-22 13:01

相關推薦

  • Shell編程if語句

    Shell編程if語句 條件選擇if語句(#if輸入keywork) 選擇執行: 注意:if語句可嵌套 單分支 if 判斷條件(#如果為真執行下一條);then 條件為真的分支代碼 fi(結尾) 雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi if 語句 多分支 if 判斷條件1; then 條件為真的分支代碼 e…

    2018-01-01
  • 馬哥教育網絡班第25期-第1周作業

    一、計算機的組成及其功能 計算機由硬件與軟件組成 硬件     1、運算器                           &…

    Linux干貨 2016-12-05
  • 系統自動化安裝

    本章內容 系統安裝過程配置anaconda自動化安裝系統 安裝程序 CentOS系統安裝 系統啟動流程: bootloader–>kernel(initramfs)–>rootfs–>/sbin/init anaconda: 系統安裝程序 tui: 基于圖形庫curses的文本窗口 gui:圖形窗口 安裝程序啟動過程 MBR…

    Linux干貨 2016-09-19
  • bash腳本與程序包管理

    概述:本章主要介紹bash編程中的函數和數組以及字符串處理和程序包管理工具等,來幫助小伙伴們更進一步的了解bash編程的內容和軟件的安裝、更新、卸載、查詢等操作。 一、函數介紹 函數function是由若干條shell命令組成的語句塊,實現代碼重用和模塊化編程。 它與shell程序形式上是相似的,不同的是它不是一個單獨的進程,不能獨立運行,而是shell程序…

    Linux干貨 2016-08-24
  • python第二周

    #python數據結構(list) ## 分類 數值型:int、float、complex、bool 序列對象:字符串 str ? 列表 ?list ? 元組 ?tuple 鍵值對: 集合 set ? 字典 dict   ## 數字的處理函數 math.e ?math.pi: 自如常數和π round(): ?四舍六入五去偶 floor(): ?取…

    Linux干貨 2017-09-23
  • bash特性之命令行展開功能應用示例

                       bash特性之命令行展開功能應用示例 1.創建/tmp的目錄下:a_c,a_d,b_c,b_d 創建命令:mkdir -pv /tmp/{a,…

    Linux干貨 2017-07-09

評論列表(1條)

  • luoweiro
    luoweiro 2016-12-01 00:01

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

欧美性久久久久