Linux 程序包管理 rpm yum dnf

Linux程序包管理:

  • 包管理器功能:打包,包管理(安裝,升級,卸載,查詢,校驗)

  • 目前Linux中最常見有兩種常用工具

    • deb:debian Linux使用 包括ubuntu

    • rpm:Redhat Package Manager ,Centos等在使用

  • 程序包的組成:

    • 二進制程序:/bin,  /sbin,  /usr/bin, /usr/sbin

    • 庫文件: /lib64, /usr/64

    • 配置文件:/etc

    • 幫助文件:manual, info

  • 包管理器:

    • 打包:將源文件,一個一個單一的歸檔文件中

    • 安裝:將文件釋放到相應路徑下

    • 卸載:收集所有相關文件刪除

    • 升級:更新相關文件

    • 查詢:查詢程序包相關信息

    • 校驗:程序包的來源合法性,完整性

  • rpm數據庫/var/lib/rpm

       rpm通過數據庫記錄rpm文件的相關參數,用於軟件的升級,刪除,查詢和驗證;若數據庫損壞,可通過命令rpm --rebuilddb 重建數據庫




rpm包:

  • rpm打包:打包rpmbuild工具 基於specs文件按照各種規則完成打包。

  • 分包機制:一個程序包含各種功能,其中可能只有幾種功能常用,幾種功能偶爾用,幾種功能很少用,將程序功能分開打包,分爲核心包和支包。

    • 核心包:software-Version

    • 支包:software-devel-Version

  • rpm包命名機制:

    • name-Version-Release.ARCH.rpm

      5個字段

      name:包名

      Version:版本信息

         major.minor    主版本號.次版本號

      Release:發佈版本次數

      ARCH:適合的硬件平臺 i386, i586, i686, x86_64

包與包之間:有可能存在依賴關係    例如安裝A之前需要先安裝B,安裝B之前需要先安裝C等等。rpm數據庫:/var/lib/rpm

    記錄包名,安裝生成文件,校驗信息,依賴關係等等。



如何獲取rpm包

  • 發行版提供的程序包,在光盤中一般在Packages目錄中

  • fedora-EPEL ,組織收入rpm包,正式,權威,安全

  • 項目的官方站點, 比如tomcat,SVN官方站點

  • 搜索引擎:第三方提供,注意安全問題

    http://rpmfind.net

    http://rpm.pbone.net

    http://pkgs.org





rpm命令實現程序包管理

  • 安裝

    •  rpm {-i|--install} [install-options] PACKAGE_FILE ...

           -i :install

           -v:查看詳細的安裝信息;-vv,-vvv更加詳細的安裝信息

           -h:顯示安裝進度

    • install-options
         [--allfiles] [--badreloc] [--excludepath OLDPATH]
         [--excludedocs] [--force] [-h,--hash]
         [--ignoresize] [--ignorearch] [--ignoreos]
         [--includedocs] [--justdb] [--nocollections]
         [--nodeps] [--nodigest] [--nosignature]
         [--noorder] [--noscripts] [--notriggers]
         [--oldpackage] [--percent] [--prefix NEWPATH]
         [--relocate OLDPATH=NEWPATH]
         [--replacefiles] [--replacepkgs]
         [--test]

      --nodeps:忽略依賴關係,強制安裝

      --replacefiles:當某程序已經安裝了,使用該命令直接覆蓋安裝

      --replacepkgs:重新安裝某個軟件

      --test:測試軟件是否可以安裝到系統中

 示例:

#安裝一個軟件
[root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%]

#安裝openstack 存在依賴關係,不能安裝
[root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm 
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
error: Failed dependencies:
    openstack-ceilometer-common = 2014.2.2-1.fc22 is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch
    python-ceilometerclient is needed by openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch
#
#使用--nodeps選項 忽略依賴關係,可以安裝,但是不能使用
[root@localhost packages]# rpm -ivh openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:openstack-ceilometer-alarm-2014.2################################# [100%]

#同時安裝多個軟件
[root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm  openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm --nodeps
warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
warning: openstack-ceilometer-alarm-2014.2.2-1.fc22.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 8e1431d5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:openstack-ceilometer-alarm-2014.2################################# [ 50%]
   2:2048-cli-0.9-4.git20141214.723738################################# [100%]
   
#通過網絡安裝
[root@localhost packages]# rpm -ivh ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm
Retrieving ftp://rpmfind.net/linux/centos/5.11/os/x86_64/CentOS/centos-release-notes-5.11-0.x86_64.rpm
warning: /var/tmp/rpm-tmp.he2qSD: Header V3 DSA/SHA1 Signature, key ID e8562897: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:centos-release-notes-5.11-0      ################################# [100%]



  • 升級:

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

         -Uvh:如果安裝過舊版本程序包,則更新至新版本;如果沒有,則直接安裝

         -Fvh:如果安裝過舊版本程序包,則更新至新版本;如果沒有,則不安裝

      此處選擇[install-options] 同安裝時的選項

          --oldpackage:對程序進行降級安裝




  • 查詢

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

            -qa:查詢本機已經安裝的所有軟件

            -q :只查詢指定軟件是否安裝

            -qi : 查詢指定軟件的詳細信息,開發商,版本等

            -ql:查詢軟件安裝生成的所有文件列表

            -qc:查詢指定程序包安裝生成的配置文件

            -q --scripts:查詢程序包相關的腳步

                preinstall:安裝前腳本

                postinstal:安裝後腳本

                preuninstall:卸載前腳本

                postuninstall:卸載後腳本

          -qp[icdl] :查詢未安裝軟件的信息,參數作用和上面一樣

示例:

#確認軟件是否安裝成功
[root@localhost Packages]# rpm -q NetworkManager-adsl
NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64

#查詢已安裝軟件的詳細信息
[root@localhost Packages]# rpm -qi NetworkManager-adsl
Name        : NetworkManager-adsl
Epoch       : 1
Version     : 1.0.0
Release     : 14.git20150121.b4ea599c.el7
Architecture: x86_64
Install Date: Wed 16 Sep 2015 06:24:35 PM CST
Group       : System Environment/Base
Size        : 28480
License     : GPLv2+
Signature   : RSA/SHA256, Sat 14 Mar 2015 04:19:28 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : NetworkManager-1.0.0-14.git20150121.b4ea599c.el7.src.rpm
Build Date  : Fri 06 Mar 2015 12:19:16 PM CST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.gnome.org/projects/NetworkManager/
Summary     : ADSL device plugin for NetworkManager
Description :
This package contains NetworkManager support for ADSL devices.

#查詢安裝相關腳本
[root@localhost Packages]# rpm -q --scripts zlib
postinstall program: /sbin/ldconfig
postuninstall program: /sbin/ldconfig

 


  • 卸載

    •  rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
                 [--notriggers] [--test] PACKAGE_NAME ...

示例


[root@localhost packages]# rpm -ivh 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm 
warning: 2048-cli-0.9-4.git20141214.723738c.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:2048-cli-0.9-4.git20141214.723738################################# [100%]

#卸載軟件 Package_name 軟件名
[root@localhost packages]# rpm -e 2048-cli
[root@localhost packages]# rpm -q 2048-cli
package 2048-cli is not installed



  • 校驗

    •  rpm {-V|--verify} [select-options] [verify-options]

        -V:後面加軟件名,若該軟件中文件被修改了,就會被列出

        -Va:列出系統上所有被改動過的文件

        -Vf:勒出某個文件是否被改動過

        S file Size differs 文件大小被修改
        M Mode differs 權限和文件類型被修改
        5 digest (formerly MD5 sum) differs MD5內容發生變化
        D Device major/minor number mismatch 設備的主/次代碼已經改變
        L readLink(2) path mismatch Link路徑發生變化
        U User ownership differs 文件屬主被修改
        G Group ownership differs 文件屬組被修改
        T mTime differs 文件創建時間被修改
        P caPabilities differ 依賴關係發生改變

示例

#查詢/etc/fstab的變化
[root@localhost Packages]# rpm -Vf /etc/fstab 
S.5....T.  c /etc/bashrc



  • 包校驗

      驗證

        來源合法性校驗:非對稱加密 (公鑰)

        完整性驗證:單向加密

#該路徑下存放了密鑰 公鑰文件
[root@localhost Packages]# ls /etc/pki/rpm-gpg/
RPM-GPG-KEY-CentOS-7  RPM-GPG-KEY-CentOS-Debug-7  RPM-GPG-KEY-CentOS-Testing-7

     導入密鑰命令:

          rpm --import  /path/to/Key_file

[root@localhost Packages]#rpm --import RPM-GPG-KEY-CentOS-7

     手動校驗:

            rpm -K /path/to/rpm_file

[root@localhost Packages]# rpm -K zlib-1.2.7-13.el7.x86_64.rpm 
zlib-1.2.7-13.el7.x86_64.rpm: rsa sha1 (md5) pgp md5 OK
#此時再次安裝時 就沒有了警告消息
[root@localhost Packages]# rpm -ivh NetworkManager-adsl-1.0.0-14.git20150121.b4ea599c.el7.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:NetworkManager-adsl-1:1.0.0-14.gi################################# [100%]


注意:

    使用rpm管理軟件,無論是安裝,卸載總要面臨包依賴關係問題,忽略依賴關係安裝軟件,安裝後的軟件不能使用,忽略依賴關係的卸載,造成其他相關軟件不能使用。







YUM:Yellowdog Updater Modified

CentOS7 yum 源的配置與使用


如有錯誤,敬請指正!

謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章