RPM軟件包管理

             

                              RPM 軟件包管理

1、rpm軟件包管理:

       本章內容:

           軟件運行環境

           軟件包基礎

           rpm包管理

           yum管理

           定制yum倉庫

           編譯安裝

  Linux程序包管理:

       API:Application program interface (應用編程接口)

       ABI:Application binary interface  (應用二進制接口)

           API:Application program interface

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

             靜態編譯 和 共享編譯

              ABI:Application binary interface

                 windows 和 Linux 不兼容

                 Windows PE

                 Linux ELF

                 庫級別的虛擬化:

                 Linux:wine

                 Windows:cywin

      2、包管理器:

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

                  二進制文件;

                  庫文件;

                  配置文件;

                  幫助文件;

              程序包管理器:

                  debian:deb文件,dpkg包管理器

                  redhat:rpm文件,rpm包管理器

                  S.U.S.E:rpm文件,rpm包管理器

                  gentoo:ports文件

     3、包命名:

              使用rpm機制封裝的軟件包文件一般使用“軟件名-軟件版本-發布次數.硬件平臺類型.rpm”的文件名形式:

              例如:bash-4.2.46-12.el7.x86_64.rpm

                    basesystem-10.0-7.el7.centos.noarch.rpm

              其中硬件平臺通常為“i386 i586 i686 X86_64 或 noarch(不區分硬件平臺)”

       4、包命名和工具:

                主包:libasyncns-0.8-7.el7.x86_64.rpm

                支包:libasyncns-devel-0.8-7.el7.i686.rpm

                支包命名:function  devel  utils libs

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

                解決依賴包管理工具:

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

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

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

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

         5、庫文件:

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

               ldd  /PATH/TO/BINARY_FILE

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

               ldconfig

               /sbin/ldconfig -p 顯示本機已經緩存的所有可用庫文件;

           6、程序包管理器:

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

                 (1)程序包的組成清單(每個程序包都單獨實現);

                       文件清單

                       安裝或卸載時運行的腳本

                  (2)數據庫(公共)

                       程序包的名稱和版本

                       依賴關系

                       功能說明

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

                       /var/lib/rpm:rpm包的數據庫文件存放路徑;

                  示例:

                  rpm包的數據庫文件

                    [root@centos7 rpm]# ll

                    total 70248

                    -rw-r–r–. 1 root root  4120576 ago 19 05:55 Basenames

                    -rw-r–r–. 1 root root    16384 ago 19 05:43 Conflictname

                    -rw-r–r–. 1 root root   311296 ago 23 06:59 __db.001

                    -rw-r–r–. 1 root root    90112 ago 23 06:59 __db.002

                    -rw-r–r–. 1 root root  1318912 ago 23 06:59 __db.003

                    -rw-r–r–. 1 root root  1130496 ago 19 05:55 Dirnames

                    -rw-r–r–. 1 root root    32768 ago 19 05:55 Group

                    -rw-r–r–. 1 root root    24576 ago 19 05:55 Installtid

                    -rw-r–r–. 1 root root    81920 ago 19 05:55 Name

                    -rw-r–r–. 1 root root    40960 ago 19 05:55 Obsoletename

                    -rw-r–r–. 1 root root 61956096 ago 19 05:55 Packages

                    -rw-r–r–. 1 root root  2154496 ago 19 05:55 Providename

                    -rw-r–r–. 1 root root   536576 ago 19 05:55 Requirename

                    -rw-r–r–. 1 root root   135168 ago 19 05:55 Sha1header

                    -rw-r–r–. 1 root root    81920 ago 19 05:55 Sigmd5

                    -rw-r–r–. 1 root root     8192 ago 19 05:55 Triggername

                    [root@centos7 rpm

                  

            7、獲取rpm程序包的途徑:

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

                          http://mirrors.aliyun.com

                          http://mirrors.sohu.com

                          http://mirrors.163.com

                     (2)項目的官方站點

                     (3)第三方組織:

                            搜索引擎:

                              http://pkgs.org

                              http://rpmfind.net

                              http://rpm.pbone.net

                      (4)自己制作rpm包:

  8、rpm包管理:

   centos系統上使用rpm命令管理程序包:

       安裝、卸載、升級、查詢、校驗、數據庫維護等;

   rpm  [options]  PACKAGE_FILE …

   安裝: -i 在當前系統中安裝(install)一個新的rpm軟件包;

     rpm  -ivh  PACKAGE_FILE……

   -U:檢查并升級系統中的某個軟件包,若該軟件包原來未安裝,則等同于-i選項;

   -e:卸載指定名稱的軟件包;

   -F:檢查并更新系統中的某個軟件包,若該軟件包原來并未安裝,則放棄安裝;

   –force 強制安裝某個軟件包,當需要替換現在已安裝的軟件包及文件、或者安裝一個比當前使用的軟件版本更舊的軟件時,可以使用此選項;

   –nodeps在安裝、升級或卸載一個軟件包時,不檢查與其他軟件包的依賴關系;

   -h:在安裝或升級軟件包的過程中,以“#”號顯示安裝進度;

   -v:顯示軟件安裝過程中的詳細信息;

   -vv:顯示軟件安裝過程中更詳細的信息;

   -V:校驗安裝后的文件有沒有被篡改;

   –test:測試安裝,但不真正執行安裝;

   –nosignature:不檢查來源合法性;

   –nodigest:不檢查包完整性;

   –nosciptis:不執行程序包腳本片段;

         %pre:安裝前腳本:–nopre

         %post:安裝后腳本:–nopost

         %preun:卸載前腳本:–nopreun

         %postun:卸載后腳本:–nopostun

   –oldpackage:降級程序包;

  升級:

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

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

     -U:升級或安裝;

     -F:升級;

     rpm -Uvh PACKAGE_FILE

     rpm -Fvh PACKAGE_FILE

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

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

卸載:

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

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

          –nodeps:忽略依賴關系;

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

rpm查詢:

   rpm命令的查詢功能主要通過“-p”選項實現,主要針對當前系統中的已經安裝的軟件包;

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

   [select-options]

     PACKAGE-NAME:查詢指定的程序包是否已經安裝,及其版本;

       -qa:–all 查詢所有已經安裝過的rpm包;

       -qf:file 查詢指定的文件是由哪個程序包安裝的;

       -qi:info 查詢指定軟件包的名稱、版本、許可協議、用途描述等詳細信息;

       -ql:list 顯示指定的軟件包在當前系統中安裝的所有目錄、文件列表;

       -qc:configfile 顯示指定軟件包在當前系統中安裝的配置文件列表;

       -qd:docfiles 顯示指定軟件包在當前系統中安裝的文檔文件列表;

   使用“-qp”選項時,需要使用rpm包文件作為參數,主要查詢系統中未安裝的軟件包信息;

        -qpi:查詢指定軟件包的名稱、版本、許可協議、用途描述等詳細信息;

        -qpl:查詢指定的軟件包在當前系統中準備安裝的所有目錄、文件列表;  

        -qpc:查詢定軟件包在當前系統中準備安裝的配置文件列表;

        -qpd:查詢指定軟件包在當前系統中準備安裝的文檔文件列表; 

校驗rpm包:

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

       來源合法性驗證:

       完整性驗證:

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

          對于centos發行版來說導入公鑰的方法:

          [root@centos7 ~]# rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

          驗證:

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

            手動驗證:rpm -k PACKAGE_FILE

            [root@centos7 Packages]# rpm -K zsh-5.0.2-7.el7.x86_64.rpm 

            zsh-5.0.2-7.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK

rpm數據庫重建:

    rpm 管理器數據庫路徑:/var/lib/rpm

    獲取幫助:

        centos6:man rpm   

        centos7:man rpmdb  

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

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

             –rebuilddb :重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建;

             rpm  –initdb

             rpm  –rebuilddb

   yum創建:

        centos : yum dnf

        yum repository : yum repo

        存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定的目錄下:repodata):

        文件服務器:

            ftp://

            http://

            nfs://

            file:///

         yum客戶端:

            配置文件:

            /etc/yum.conf  :yum主配置文件為所有倉庫提供公共配置

            /etc/yum.repos.d/*.repo :為倉庫的指向提供配置

           yum倉庫指向的定義:

            [repositoryID]

            name=some name for this repository

            baseurl=url://path/to/repository

            enabled={1|0}

            gpgcheck={1|0}

            enabedgroups={1|0}

            failovermethod={roundrobin|priority}

                 默認為:roundrobin,意為隨機挑選;

            cost=

                默認為:1000

       示例:

             1 [base]

             2 name=base

             3 baseurl=http://10.1.0.1/cobbler/ks_mirror/7/

             4         file:///mnt

             5 enabled=1

             6 gpgcheck=1

             7 gpgkey=http://10.1.0.1/cobbler/ks_mirror/7/

             8 

             9 

            10 [fedora]

            11 name=fedora

            12 baseurl=http://10.1.0.1/fedora-epel/7/x86_64/

            13 enabled=1

            14 gpgcheak=0

            15

     yum命令的用法:

            yum [options] [command][package…..]

          yum-config-manager  –disable “倉庫名”  禁用指定的倉庫

          yum-config-manager  –enable  “倉庫名” 啟用指定的倉庫

          示例:

          [root@centos7 yum.repos.d]# yum-config-manager –disable base

          [root@centos7 yum.repos.d]# yum-config-manager –enable base

          顯示倉庫列表:

          repolist [all|enable|disable]

          [root@centos7 yum.repos.d]# yum repolist

          Loaded plugins: fastestmirror, langpacks

          repo      repo name                 status

          base        base                    9.007

          fedora       fedora                     0

          repolist: 9.007

          [root@centos7 yum.repos.d]# 

          顯示所有程序包:

          list

          示例:

          [root@centos7 yum.repos.d]# yum list

          yum安裝程序包:

          install 

          reinstall 重新安裝;

          示例:

         升級程序包:

          update

          檢查可用升級:

          check-update

          卸載程序包:

          remove 

          查看程序包information

          info

          查看指定的特性(可以是某文件)是由哪個程序包所提供;

          provides

          清理本地緩存:

          clean

          構建緩存:

          makecache

          搜索:

          search  string1 string2

          以指定的關鍵字搜索程序包名及summary信息;

          查看指定包所依賴的capabilities

          deplist package1

          查看yum事物歷史

          history

          安裝及升級本地程序包:

          localinstall

          localupdate

          包租管理的相關命令:

          groupinstall

          groupupdate

          grouplist

          groupremove

          groupinfo

編譯安裝:

      解包、配置、編譯、安裝

第一步:configure腳本

        選項:指定安裝位置、指定啟用的特性

              –help:獲取其支持使用的選項

        選項的分類:

             安裝路徑設定:

               –prefix=/path:指定默認安裝位置,默認為/usr/local

               –sysconfdir=/path:配置文件的安裝路徑

                system types :支持交叉編譯;

          optional features :可選特性

                 –disable-feature

                 –enable-feature[=arg]

          optional packages:可選包

                 –with-packsge[=arg]依賴包

                 –without-package禁用依賴關系

  第二部:make

  第三部:make  install

  安裝后的配置:

       (1)二進制程序目錄導入至path環境變量中

            編輯文件/etc/profile.d/NAME.sh

            export PATH=/path/to/bin:$PATH

        (2)導入庫文件路徑

              編輯/etc/ld.so.conf.d/name.conf

              添加新的庫文件所在目錄至此文件中

           讓系統重新生成緩存

              ldconfig  -v

         (3)導入頭文件

               基于鏈接的方式實現:

                  in -sv

          (4)導入幫助手冊

               編輯/etc/man.config|man_db.conf文件

                  添加一個MANPATH

       

     

             

 

     

  

       

      

  

         

        

    

    

      

     

        

       

       

       

    

           

       

     

     

 

            

   

    

     

 

            

   

    

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

(0)
zhengyibozhengyibo
上一篇 2016-09-01
下一篇 2016-09-01

相關推薦

  • 淺談DNS基本原理以及實現方法(二)

             DNS作為互聯網服務的一個基礎型服務,了解和掌握DNS服務的原理和配置將是每一個運維人員必備的技能,這就如同闖蕩江湖的俠客不但要有的招式,還要懂的運用這些招式的心法一樣,接下來我將從DNS的正反向解析、主從同步、子域授權以及Bind view這四個方面來揭開它神…

    Linux干貨 2015-12-19
  • IoC/DIP其實是一種管理思想

    關于IoC的的概念提出來已經很多年了,其被用于一種面象對像的設計。我在這里再簡單的回顧一下這個概念。我先談技術,再說管理。 話說,我們有一個開關要控制一個燈的開和關這兩個動作,最常見也是最沒有技術含量的實現會是這個樣子: 然后,有一天,我們發現需要對燈泡擴展一下,于是我們做了個抽象類: 但是,如果有一天,我們發現這個開關可能還要控制別的不單單是燈泡的東西,我…

    Linux干貨 2016-08-15
  • 基于Cobbler實現多版本操作系統自動部署

    前言     在生產環境中,當需要批量部署幾十甚至上百臺服務器時,實現自動化安裝操作系統尤為重要,按照傳統的光盤引導安裝是不可想象的;此前我們通過pxe+kickstart簡單實現了自動化安裝,但只能實現單一版本安裝,當需要部署不同版本或不同引導模式(BIOS、EFI)時,此種方式就不夠靈活。而Cobbler正是為了解…

    Linux干貨 2015-08-11
  • 用PHP編寫Hadoop的MapReduce程序

    Hadoop流 雖然Hadoop是用java寫的,但是Hadoop提供了Hadoop流,Hadoop流提供一個API, 允許用戶使用任何語言編寫map函數和reduce函數.Hadoop流動關鍵是,它使用UNIX標準流作為程序與Hadoop之間的接口。因此,任何程序只要可以從標準輸入流中讀取數據,并且可以把數據寫入標準輸出流中,那么就可以通過Hadoop流使…

    Linux干貨 2015-04-13
  • 位運算符及其應用

    一、C語言的六種位運算符: & 按位與 | 按位或 ^ 按位異或 ~ 取反 << 左移 >> 右移 1.   按位與運算 按位與運算符"&"是雙目運算符。     &nb…

    Linux干貨 2015-11-18
  • 推薦-虛擬化網絡之OpenvSwitch(二)

    上一篇介紹了openvswitch的基礎知識,接下來我們來做一個實驗,利用GRE通道搭建一個跨多宿主機的虛擬化網絡,深入了解openvswitch的功能。 一、實驗拓撲 ip地址分配:  A1:192.168.10.1/24  A2:192.168.10.10/24   B1:192.168.10.2/24 &nbsp…

    2016-03-27
欧美性久久久久