Linux系統程序包管理—rpm

 概述:

     本章內容:軟件的運行環境,軟件包基礎,rpm包管理,yum管理,定制yum倉庫,編譯安裝

一、軟件運行環境

    1.□API:Application Programming Interface (應用程序開發接口)

            POSIX:Portable OS(國際標準)

       ?程序源代碼–> 預處理–> 編譯–> 匯編–> 鏈接

            靜態編譯:

            共享編譯:.so

       ?ABI:Application Binary Interface(應用二進制程序接口)

          Windows與Linux不兼容

               linux:文件格式:ELF(Executable and Linkable Format)

               win:文件格式:exe,msl PE(Portable Executable)

        □庫級別的虛擬化

              Linux: WINE(提供模擬windows的庫,運行win環境)

              Windows: Cywin(提供linux的運行環境)

     2.開發語言

        □系統級開發

            C/C++(依賴于c庫);

            httpd,nginx,vsftpd,go

        ?應用級開發

            java(依賴于jvm虛擬機)

            Python(openstack云站),php,perl(依賴于per解釋器),ruby

     3.程序格式:

       ?c/c++

          源代碼:文本格式的程序代碼;

          編譯開發環境:編譯器,頭文件,開發庫

          二進制格式:文本格式的程序代碼–>編譯器–>二進制格式(二進制程序、庫文件、配置文件、幫助文件)

      ?java/Python

           源代碼:編譯能夠在其虛擬機(jvm/pvm)運行的格式;

           開發環境:編譯器、開發庫

           二進制

      ?項目構建工具

             c/c++:make      jave:maven

二、包管理

     1.二進制應用程序的組成部分:

           二進制文件、庫文件、配置文件、幫助文件

   2.程序包管理:

      ?源代碼–>目標二進制格式(二進制程序、庫文件、配置文件、幫助文件)–>組織成為一個或有限幾個“包文件”(安裝,升級,卸載,查詢,校驗)

      ?程序包管理器:

            deblan: dpt,dpkg  以".deb"后綴

            redhat: rpm (redhat package manager) 以 ".rpm"后綴 

            S.u.S.E:rpm, ".rpm"命令

     3.包命令格式

        □源代碼

            name-VERSION.tar.gz|bz2|xz

                VERSION: major(主版本號).minor(次版本號).release(發行號)

        ?rpm包命名格式

             name-VERSION-release.arch.rpm

              VERSION: major.minor.release(rpm包發行號)

             changelog文檔(內容修復改進的相關文檔)

包.png

        例:bash-4.2.46-19.el7.x86_64.rpm

               release:release.OS

             常見的arch:

               x86: i386, i486, i586, i686

               x86_64: x64, x86_64, amd64powerpc: ppc

               跟平臺無關:noarch (適用于所有平臺)

     4.包:分類和拆包

             Application-VERSION-ARCH.rpm: 主包

             Application-devel-VERSION-ARCH.rpm  開發子包

             Application-utils-VERSION-ARHC.rpm  其它子包

             Application-libs-VERSION-ARHC.rpm   其它子包

主支包.png

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

      ?自動解決依賴包管理前端工具

            yum:rpm包管理器的前端工具

            apt-get:deb包管理器前端工具

            zypper: suse上的rpm前端管理工具

            dnf: Fedora 18+ rpm包管理器前端管理工具

    5.庫文件

      □查看二進制程序所依賴的庫文件:

            ldd /PATH/TO/BINARY_FILE

      ?管理及查看本機裝載的庫文件:

            ldconfig

            /sbin/ldconfig-p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系

            配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf

            緩存文件:/etc/ld.so.cache

     6.包管理器

      □程序包管理器

        功能將編譯好的應用程序的各組成文件打包一個或幾個程序包文件,從而方便快捷地實現程序包的安裝、卸載、查詢、升級和校驗等管理操作

      ?程序包的組成清單(每個程序包單獨實現)

             RPM包內的文件清單

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

             安裝或卸載時運行的腳本

      ?數據庫(公共)  路徑:/var/lib/rpm 

             程序包名稱及版本

             依賴關系

             功能說明

             包安裝后生成的各文件路徑及校驗碼信息

   7.程序包的來源

      □管理程序包的方式:

            使用包管理器:rpm

            使用前端工具:yum, dnf

      ?獲取程序包的途徑

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

                https://www.centos.org/download/

                http://mirrors.aliyun.com

                http://mirrors.sohu.com

                http://mirrors.163.com

          (2) 項目官方站點

          (3) 第三方組織:

                Fedora-EPEL

                     Extra Packages for Enterprise Linux

                Rpmforge:RHEL推薦,包很全

                搜索引擎:

                     http://pkgs.org

                     http://rpmfind.net

                     http://rpm.pbone.net

                     https://sourceforge.net/

            (4) 自己制作

                  注意:檢查其合法性:來源合法性,程序包的完整性


三、CentOS 系統上rpm命令管理程序包

  1.安裝、升級、卸載、查詢和校驗、數據庫維護  (都是通過rpm命令來實現的)

      rpm命令:rpm [OPTIONS] [PACKAGE_FILE]

            安裝:-i,–install

            升級:-U,–update,-F,–freshen

            卸載:-e,–erase

            查詢:-q,–query

            校驗:-V,–verify

            數據庫維護:–builddb,–initdb

     2.安裝

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

                   -v: verbose 顯示詳細信息

                   -vv: 更詳細的輸出

            rpm -ivh PACKAGE_FILE(真正安裝執行操作使用的命令)

安裝.png

         □[install-options]

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

                –test: 測試安裝,檢查并報告依賴關系及沖突關系,但不真正執行安裝;稱為dry run(干跑)模式

test.png

                –nodeps:忽略依賴關系,不建議;

                –replacepkgs:替代原來的包,重新安裝(先把由原來的包刪除再重裝)

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

                –nodigest:不檢查包完整性

                –noscipts:不執行程序包腳本片斷

                    注意:rpm自帶四類腳本

                          %pre:安裝前腳本;   –nopre

                          %post:安裝后腳本;  –nopost

                          %preun:卸載前腳本; –nopreun

                          %postun:卸載后腳本;–nopostun

    3.升級

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

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

              -U(upgrade):安裝有舊版程序包,則“升級”

                               如果不存在舊版程序包,則“安裝”

              -F(freshen):安裝有舊版程序包,則“升級”

                               如果不存在舊版程序包,則不執行升級操作

      □升級命令:

         rpm -Uvh PACKAGE_FILE …

         rpm -Fvh PACKAGE_FILE …

              –oldpackage:降級(回滾操作)

              –force: 強行升級

      注意:

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

        (2) 如果源程序包的配置文件安裝后曾被修改,升級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留。

   4.卸載

       移除已安裝的程序包

       rmp {-e|–erase}[–allmatches][–nodeps][–test] PACKAGE_NAME

      (注意:卸載和查詢是包的名,因為包已經存在了;而安裝和升級,包是不存在的,所以是包的文件路徑)

          簡單用法:rpm -e PACKAGE_NAME…

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

       –nodeps:忽略依賴關系

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

      5.查詢

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

        ?[select-options]

              -q PACKAGE_NAME :查詢某包或某些包是否安裝

              -qa: 查詢已安裝的所有包

-a.png

              -qf FILE: 查看指定的文件由哪個程序包安裝生成

-f.png

              -p PACKAGE_FILE:針對尚未安裝的程序包文件做查詢操作

              –whatprovides CAPABILITY(能力):查詢指定的CAPABILITY由哪個包所提供

              –whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴

          ?rpm2cpio 包文件|cpio–itv預覽包內文件

          ?rpm2cpio 包文件|cpio–id “*.conf”釋放包內文件

      □[query-options]查詢選項

              –changelog:查詢rpm包的changelog(變更記錄)

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

-qc.png

              -d: 查詢程序包安裝完成后所生成的幫助文檔

-qd.png

              -qi,-info: information  程序包相關的信息,版本號,大小,所屬的包組等

-qi.png

              -l,–list: 查看指定的程序包安裝后生成的所有文件列表;

              –scripts:查看程序包自帶的腳本片斷

              -R,–requires: 查詢指定的程序包所依賴的CAPABILITY;

              –provides: 列出指定程序包所提供的CAPABILITY

-pro.png

    □用法:

          -qi PACKAGE; -qf FILE; -qc PACJAGE; -ql PACKAGE; -qd PACKAGE

          -qpi PACKAGE_FILE; -qpl PACKAGE_FILE; -qpc PACKAGE_FILE,.. 

    6.校驗:     

      □rpm {-V|–verify} [select-options] [verify-options]

        常見用法:rpm -V PACHAGE_NAME

        當沒有輸出結果時表示軟件包完整ok,當有相應的結果輸出表明對應的內容有修改,及具體如下:

          S:file Size differs(文件的容量大小是否被改變)

          M:Mode differs (includes permissions and file type)文件的類型或屬性是否被改變;

          5:digest (formerly MD5 sum) differs  這是一種指紋內容已經不同;

          D:Device major/minor number mismatch 裝置的主/次代碼已經改變;

          L:readLink(2) path mismatch  路徑已被改變

          U: User ownership differs  文件的屬主已被改變

          G:Group ownership differs  文件的屬組已被改變

          T:mTimediffers 文件的創建時間已被改變

          P:capabilities differ 

    □包來源合法性驗正及完整性驗正

           完整性驗正:SHA256

           來源合法性驗正:RSA

         ?獲取并導入信任的包制作者的秘鑰

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

         ?驗證:

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

                (2)手動驗證:rpm -K PACKAGE_FILE

驗證.png

    ?公鑰加密:

           對稱加密:加密、解密使用同一密鑰;

           非對稱加密:密鑰是成對兒的

                public key: 公鑰,公開所有人

                secret key: 私鑰, 不能公開

     ?導入所需要公鑰:

           rpm -K |checksigrpmfile檢查包的完整性和簽名

           rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

           CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7

           rpm -qagpg-pubkey*

     7.數據庫重建

      rpm數據庫路經:/var/lib/rpm

            查詢操作:通過此處得到數據庫進行

     ?rpm {–initdb|–rebuilddb}

數據庫.png

            獲取幫助:CentOS6 man rpm

                         CentOS7 man rpmdb 

             –initdb: 初始化數據庫。當前無任何數據庫,則新建之;當前有時不執行任何操作。

             –rebuilddb:重新構建。無論當前存在與否,都會直接重新創建數據庫。

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

(0)
zhumengxiaotaozhumengxiaotao
上一篇 2016-09-01 08:50
下一篇 2016-09-01 08:50

相關推薦

  • 文件系統權限管理

    文件系統權限管理 文件及目錄權限 文件系統上的權限是針對訪問者的 訪問者:     owner:屬主,u     group:屬組,g     other:其他,o 針對每個訪問者有三種權限 r:readable w:writeable x…

    Linux干貨 2016-11-05
  • 第六周 N21 總有刁民想害朕

    請詳細總結vim編輯器的使用并完成以下練習題 1、復制/etc/rc.d/rc.sysinit文件至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加#;    %s/\(^[[:space:]]\)/#\1/ 2、復制/boot/grub/grub.conf至/tmp目錄中,刪除/tmp/grub.…

    Linux干貨 2016-08-08
  • N25-第三周博客作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@node1 ~]# who | cut -d" " -f1 | uniq (unknown) root 2、取出最后登錄到當前系統的用戶的相關信息…

    Linux干貨 2016-12-17
  • 正則表達式及grep使用

    正則表達式分為:“基本正則表達式 BRE”跟“擴展正則表達式 ERE” 基本正則表達式:     (1)字符匹配               "."任意單個字符 &nbs…

    Linux干貨 2016-07-10
  • 第一周的作業

    1、描述計算機的組成及其功能。 主要分為五個部分: 控制器:計算機的中樞神經,控制總線使用權限、尋址、管理各類資源的分配。 運算器:對數據進行各種算數運算和邏輯運算。 存儲器:通常指內存RAM,CPU需要運行的程序以及數據都存放在存儲器中供CPU調用處理。 (以上三者為計算機核心的三大部件,依靠這三大部件即可完成核心工作。) 輸入設備:比如鼠標、鍵盤,使用戶…

    Linux干貨 2016-11-02
  • Linux上文件管理命令、元素據及時間戳、bash的工作特性回顯和命令展開、定義別名,命令引用。

    文件管理命令: mkdir 創建空目錄 語法: mkdir [選項]…目錄… 選項: -P:逐層創建目錄。 -v:顯示過程。 -m:直接給定權限。 注意:路徑的基名為命令作用對象。基名路徑必須存在。 示例 創建/tmp/x1/a/a1和/tmp/x1/b rmdir 移除空目錄 語法 rmdir [選項]…目錄&#8230…

    Linux干貨 2017-12-10
欧美性久久久久