程序包管理

程序包

linux的程序包主要分為兩類;二進制可執行安裝包和源代碼程序文件包

    二進制應用程序的組成部分:
    二進制文件、庫文件、配置文件、幫助文件
  查看二進制程序所依賴的庫文件:
    ldd /PATH/TO/BINARY_FILE

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

        配置文件為:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf
        緩存文件:/etc/ld.so.cache

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

    1、程序的組成組成清單 (每個包獨有)
        文件清單
        安裝或卸載時運行的腳本
    2、數據庫(公共)
        程序包名稱及版本
        依賴關系;
        功能說明;
        安裝生成的各文件的文件路徑及校驗碼信息;

管理程序包的方式:
    使用包管理器:rpm
    使用前端工具:yum, dnf

獲取程序包的途徑:
    (1) 系統發版的光盤或官方的服務器;
        CentOS鏡像:
            http://mirrors.aliyun.com
            http://mirrors.sohu.com
            http://mirrors.163.com

    (2) 項目官方站點
    (3) 第三方組織:
        Fedora-EPEL
        搜索引擎:
            http://pkgs.org
            http://rpmfind.net
            http://rpm.pbone.net
    (4) 自己制作

建議:檢查其合法性
    來源合法性;
    程序包的完整性;

程序包管理器

linux中在二進制可執行安裝程序包安裝上會涉及多個文件的操作, 操作過程就會比較復雜, 為簡化該過程就使用程序安裝包管理器來管理程序包的安裝過程, 大大簡化了程序包安裝過程. Linux根據發行版本不同, 使用不同的程序包管理器實現對程序包的管理, 以下是一些發行版本的包管理器的前端工具 
yum:rpm包管理器的前端工具; apt-get:deb包管理器前端工具; zypper: suse上的rpm前端管理工具; dnf: Fedora 22+ rpm包管理器前端管理工具;

RPM

RPM是Red Hat Package Manager的縮寫,原意是Red Hat軟件包管理: 這一文件格式名稱雖然打上了RedHat的標志,但是其原始設計理念是開放式的,現在包括OpenLinux、S.u.S.E.以及Turbo Linux等Linux的分發版本都有采用,可以算是公認的行業標準了。

RPM軟件包

RPM軟件包分為二進制包(Binary)、源代碼包(Source)和Delta包三種。二進制包可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝。源代碼包經常以src.rpm作為后綴名。 rpm 包種類、格式

rpm格式二進制可執行安裝包

  gd-2.0.35-11.el6.x86_64.rpm

src.rpm格式  源碼包格式

  gd-2.0.35-11.el6.src.rpm

rpm命名方式:name-version-release.arch.rpm

    name:表示包的名稱,包括主包名和分包名
    version:表示包的版本信息
    release“用于標識rmp包本身的發型號,可還包含適應的操作系統
    arch:表示主機平臺

gd-devel-2.0.35-11.el6.x8664.rpm源碼包 gd是這個主包名,devel是這個包的分包名 2.0.35是表示版本信息,2為主版本,0為次版本,35為修訂號, 11.el6中的11是表示發行號,el6表示是RHEL6 x8664是表示包適合的平臺,如果是noarch這表示與平臺無關

rpm工具命令的使用

rpm {-i|–install} [install-options] PACKAGE_FILE … -i:install安裝 -v|vv|vvv: verbose顯示詳細信 -h: 以#顯示程序包管理執行進度;每個#表示2%的進度

        rpm -ivh PACKAGE_FILE ...

            [install-options]
                --test: 測試安裝,但不真正執行安裝過程;dry run模式;
                --nodeps:忽略依賴關系;
                --replacepkgs: 重新安裝;

                --nosignature: 不檢查來源合法性;
                --nodigest:不檢查包完整性;

                --noscipts:不執行程序包腳本片斷;
                    %pre: 安裝前腳本; --nopre
                    %post: 安裝后腳本; --nopost
                    %preun: 卸載前腳本; --nopreun
                    %postun: 卸載后腳本;  --nopostun

        1.  碰到多個依賴關系可以多個安裝
        2. 重新安裝時,如果重新安裝有可能導致之前的配置文件失效

升級: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …

        upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
        freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作;

        rpm -Uvh PACKAGE_FILE ...
        rpm -Fvh PACKAGE_FILE ...

        --oldpackage:降級;
        --force: 強行升級;

    注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核;
         (2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;

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

    [select-options]挑選選項
        -a: 所有包
        -f: 查看指定的文件由哪個程序包安裝生成

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

        --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
        --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
        CAPABILITY:可以查詢路徑,文件
    [query-options]查詢選項
        --changelog:查詢rpm包的changlog修改日志
        -c: 查詢程序的配置文件
        -d: 查詢程序的文檔
        -i: information 相關信息
                        Name:姓名
                        Version:版本
                        Release:發行號
                        Architecture:支持的平臺
                        Install Date:安裝日期
                        Group:支持的包組
                        Size:大小
                        License:許可證
                        Signature:簽名日期
                        source RPM:額外提供了源碼包
                        Build Date:制造日期
                        Build Host:在那個服務器上安裝
                        Relovations:有沒有重新公共
                        Packager:作者
                        vendor:提供組織
                        URL:官方站點
                        Summary:簡要功能描述
                        Description:描述信息
        -l: 查看指定的程序包安裝后生成的所有文件;
        --scripts:程序包自帶的腳本片斷
        -R: 查詢指定的程序包所依賴的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;


        -qa   查看所有已經安裝的包
              rpm -qa  查看所有包名
               rpm -qa |  grep 包名查看某個包名
       -qi  查看包的摘要信息
       -qf  查看文件是有那個包安裝的
          rpm  -qf  /path/to/file
       -ql  查看包安裝生成的文件清單
        -qc  查看包安裝生成的配置文件
        -qd  查看包安裝生成的幫助文檔
         -q  --scripts 查看相關的腳本
          rpm -q --scripts  包名
         -qp[i|l|d|c] 查看尚未安裝包的詳細信息
             rpm -qpi /path/to/rpm_file

卸載: rpm {-e|–erase} [–allmatches] [–nodeps]忽略依賴關系 [–noscripts] [–notriggers] [–test] PACKAGE_NAME …

校驗: rpm {-V|–verify} [select-options] [verify-options]

       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 mTime differs修改時間不匹配
       P caPabilities differ 

包來源合法性驗正及完整性驗正:
    完整性驗正:SHA256
    來源合法性驗正:RSA


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


    導入所需要公鑰:
        rpm --import /PATH/FROM/GPG-PUBKEY-FILE

        CentOS 7發行版光盤提供的密鑰文件:RPM-GPG-KEY-CentOS-7

數據庫重建: 數據庫 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作;

        rebuilddb:重建
            無論當前存在與否,直接重新創建數據庫;

RPM示例

實驗環境:centos7 1.初始化數據庫 通過rpm命令查詢一個rpm包是否安裝了,也要通過rpm命令來安裝;不是所有的軟件包都能通過rpm命令來安裝的,文件已.rpm后綴結尾的才行; 數據庫重建: rpm 數據庫 var/lib/rpm rpm {–initdb|–rebuilddb} initdb: 初始化 如果事先不存在數據庫,則新建之;否則,不執行任何操作;

        rebuilddb:重建 #會花很長時間
            無論當前存在與否,直接重新創建數據庫;

2.軟件包的安裝 rpm {-i|–install} [install-options] PACKAGE_FILE … -v: verbose -vv: 顯示更多的verbose -h: 以#顯示程序包管理執行進度;每個#表示2%的進度

        rpm -ivh PACKAGE_FILE ...

            [install-options]
                --test: 測試安裝,但不真正執行安裝過程;dry run模式;
                --nodeps:忽略依賴關系;
                --replacepkgs: 重新安裝;

                --nosignature: 不檢查來源合法性;
                --nodigest:不檢查包完整性;

                --noscipts:不執行程序包腳本片斷;
                    %pre: 安裝前腳本; --nopre
                    %post: 安裝后腳本; --nopost
                    %preun: 卸載前腳本; --nopreun
                    %postun: 卸載后腳本;  --nopostun

        1.  碰到多個依賴關系可以多個安裝
        2. 重新安裝時,如果重新安裝有可能導致之前的配置文件失效
  [root@localhost Packages]# rpm -ivh --test zziplib-0.13.62-5.el7.x86_64.rpm 
  準備中...                          ################################# [100%]
  #只用來檢查依賴關系可以用--test,如果要重新安裝可以用--replacepkgs。
  [root@localhost Packages]# rpm -ivh zziplib-0.13.62-5.el7.x86_64.rpm 
  準備中...                          ################################# [100%]
  正在升級/安裝...
  1:zziplib-0.13.62-5.el7            ################################# [100%]

3.軟件包的升級: rpm {-U|–upgrade} [install-options] PACKAGEFILE … rpm {-F|–freshen} [install-options] PACKAGEFILE …

        upgrage:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”;
        freeshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作;

        rpm -Uvh PACKAGE_FILE ...
        rpm -Fvh PACKAGE_FILE ...

        --oldpackage:降級;
        --force: 強行升級;

    注意:(1) 不要對內核做升級操作;Linux支持多內核版本并存,因此,對直接安裝新版本內核;
         (2) 如果原程序包的配置文件安裝后曾被修改,長級時,新版本的提供的同一個配置文件并不會直接覆蓋老版本的配置文件,而把新版本的文件重命名(FILENAME.rpmnew)后保留;


       [root@localhost Packages]# rpm -Uvh zziplib-0.13.62-5.el7.x86_64.rpm 
    準備中...                          ################################# [100%]
   軟件包 zziplib-0.13.62-5.el7.x86_64 已經安裝
    #如果想對程序包進行降級可以使用--oldpackage進行降級;

4.軟件包的查詢 
rpm {-q|–query} [select-options] [query-options]

    [select-options]挑選選項
        -a: 所有包
        -f: 查看指定的文件由哪個程序包安裝生成

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

        --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供;
        --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
        CAPABILITY:可以查詢路徑,文件
    [query-options]查詢選項
        --changelog:查詢rpm包的changlog修改日志
        -c: 查詢程序的配置文件
        -d: 查詢程序的文檔
        -i: information 相關信息
                        Name:姓名
                        Version:版本
                        Release:發行號
                        Architecture:支持的平臺
                        Install Date:安裝日期
                        Group:支持的包組
                        Size:大小
                        License:許可證
                        Signature:簽名日期
                        source RPM:額外提供了源碼包
                        Build Date:制造日期
                        Build Host:在那個服務器上安裝
                        Relovations:有沒有重新公共
                        Packager:作者
                        vendor:提供組織
                        URL:官方站點
                        Summary:簡要功能描述
                        Description:描述信息
        -l: 查看指定的程序包安裝后生成的所有文件;
        --scripts:程序包自帶的腳本片斷
        -R: 查詢指定的程序包所依賴的CAPABILITY;
        --provides: 列出指定程序包所提供的CAPABILITY;

    用法:
        -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE
        -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...
        -qa

yum

Yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及CentOS中的Shell前端軟件包管理器?;赗PM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟件包,無須繁瑣地一次次下載、安裝

YUM的特點:
   可以同時配置多個資源庫(Repository)
   簡潔的配置文件(/etc/yum.conf)
   自動解決增加或刪除rpm包時遇到的依賴性問題
   使用方便
   保持與RPM數據庫的一致性

yum源

yum源安裝: yum源大致上分為兩類: 本地 網絡 本地光盤yum源的搭建:

      通過ISO鏡像掛載或者復制文件
      mount /dev/cdrom /media/cdrom

      編輯本地YUM源文件
      cd /etc/yum.repos.d/
      清除老配置,rm -rf *
      vim localcdrom.repo

     配置文件:
    [c7-media]
    name=CentOS-$releasever - Media
    baseurl=file:///media/CentOS/
    file:///media/cdrom/
    file:///media/cdrecorder/
    gpgcheck=1
    enabled=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

     清除yum緩存并更新
      yum clean all
      yum makecache
    已加載插件:fastestmirror
     c7-media                                                                     | 3.6 kB  00:00:00     
     (1/4): c7-media/group_gz                                                     | 155 kB  00:00:00     
     (2/4): c7-media/filelists_db                                                 | 6.2 MB  00:00:00     
     (3/4): c7-media/primary_db                                                   | 5.3 MB  00:00:00     
     (4/4): c7-media/other_db                                                     | 2.3 MB  00:00:00     
    Determining fastest mirrors
     元數據緩存已建立

網絡源安裝 編輯網絡YUM源文件

      cd /etc/yum.repos.d/
      清除老配置,rm -rf *
      vim networkcdrom.repo
        配置文件:
       [c7-network]
       name=network
       baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64
       gpgcheck=0
       enabled=1

     清除yum緩存并更新
      yum clean all
      yum makecache

注:以上配置是很簡單的配置

   yum客戶端:
    配置文件:
        /etc/yum.conf:為所有倉庫提供公共配置或者不屬于倉庫的配置
        /etc/yum.repos.d/*.repo:為倉庫的指向提供配置

    倉庫指向的定義:
    [repositoryID] 
    name=Some name for this repository 倉庫名字
    baseurl=url://path/to/repository/  指向倉庫的路徑
    enabled={1|0}  是否啟用此倉庫
    gpgcheck={1|0} 校驗其完整性及其來源
    gpgkey=URL指向密鑰文件
    enablegroups={1|0}是否允許在此倉庫中使用組,來管理此倉庫
    failovermethod={roundrobin|priority}
        默認為:roundrobin,意為隨機挑選;
                            priority:表示優先級
    cost=  
        默認為1000

                    注:=左右不可出現空格
    教室里的yum源:http://172.16.0.1/cobbler/ks_mirror/CentOS-6.6-x86_64/
    CentOS 6.6 X84_64 epel: http://172.16.0.1/fedora-epel/6/x86_64/
     yum repolist :顯示可以使用的yum的倉庫
yum命令的用法:
    yum [options] [command] [package ...]

   command is one of:
    * install package1 [package2] [...]  安裝
    * update [package1] [package2] [...]
    * update-to [package1] [package2] [...]
    * check-update
    * upgrade [package1] [package2] [...]
    * upgrade-to [package1] [package2] [...]
    * distribution-synchronization [package1] [package2] [...]
    * remove | erase package1 [package2] [...]
    * list [...]
    * info [...]
    * provides | whatprovides feature1 [feature2] [...]
    * clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
    * makecache
    * groupinstall group1 [group2] [...]
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]
    * search string1 [string2] [...]
    * shell [filename]
    * resolvedep dep1 [dep2] [...]
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)
    * reinstall package1 [package2] [...]
    * downgrade package1 [package2] [...]
    * deplist package1 [package2] [...]
    * repolist [all|enabled|disabled]
    * version [ all | installed | available | group-* | nogroups* | grouplist | groupinfo ]
    * history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]
    * check
    * help [command]   幫助

顯示倉庫列表:
    repolist [all|enabled|disabled]
     all:所有
     enabled:啟用的
     disabled:禁用的
顯示程序包:
    list       顯示anaconda的是操作系統安裝的
        # yum list [all | glob_exp1] [glob_exp2] [...]
              glob_exp1:使用glob的通配符
        # yum list {available|installed|updates} [glob_exp1] [...]
              available:可用的  
              installed:所有安裝的
              updates:所有可升級
安裝程序包:
    install package1 [package2] [...]
   可以一次安裝多個包   默認是安裝最新的
    reinstall package1 [package2] [...]  (重新安裝)

升級程序包:
    update [package1] [package2] [...]

    downgrade package1 [package2] [...] (降級)

檢查可用升級包:
    check-update

卸載程序包:
    remove | erase package1 [package2] [...]
 卸載時會把依賴的包也會卸載的,
查看程序包information:
    info [...]

查看指定的特性(可以是某文件)是由哪個程序包所提供:
    provides | whatprovides feature1 [feature2] [...]

清理本地緩存:
    clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
     packages 
     metadata
     expire-cache 
      rpmdb 
     plugins 
     all
構建緩存:
    makecache

搜索:
    search string1 [string2] [...]

    以指定的關鍵字搜索程序包名及summary信息;
  rpm -k
查看指定包所依賴的capabilities:
    deplist package1 [package2] [...]

查看yum事務歷史:
    history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|rollback|new|sync|stats]

安裝及升級本地程序包:
    * localinstall rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use install)
    * localupdate rpmfile1 [rpmfile2] [...]
       (maintained for legacy reasons only - use update)

包組管理的相關命令:
    * groupinstall group1 [group2] [...] 
    * groupupdate group1 [group2] [...]
    * grouplist [hidden] [groupwildcard] [...]
    * groupremove group1 [group2] [...]
    * groupinfo group1 [...]

如何使用光盤當作本地yum倉庫:
    (1) 掛載光盤至某目錄,例如/media/cdrom
        # mount -r -t iso9660 /dev/cdrom /media/cdrom
    (2) 創建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled=

yum的命令行選項:
    --nogpgcheck:禁止進行gpg check;
    -y: 自動回答為“yes”;
    -q:靜默模式;
    --disablerepo=repoidglob:臨時禁用此處指定的repo;
    --enablerepo=repoidglob:臨時啟用此處指定的repo;
    --noplugins:禁用所有插件;

yum的repo配置文件中可用的變量:
    $releasever: 當前OS的發行版的主版本號;
    $arch: 平臺;
    $basearch:基礎平臺;
    $YUM0-$YUM9

    http://mirrors.magedu.com/centos/$releasever/$basearch/os

列表

  yum list  <package_name>  
 列出指定安裝軟件的清單
  yum list installed            
 列出所有已安裝的軟件包
  yum list extras              
 列出所有已安裝但不在 yum 倉庫內的軟件包
  yum grouplist                
 列出所有的組
  yum grouplist "Group1"     
 列出指定組的軟件包列表

安裝

  yum -y install  <package_name>      
  安裝指定的軟件 
  yum  -y groupinstall   "Group1"  "Group2"  
  安裝指定的組     
  yum -y localinstall <package_name> 
  安裝下載到本地的rpm包
  yum reinstall  <package_name>       
  重新安裝一遍

更新

  yum check-update           
 列出所有可更新的軟件清單 
  yum update
 更新所有安裝的軟件
  yum update  <package_name>  
 更新指定的軟件

信息

  yum  info       
安裝指定的軟件 
  yum  info <package_name>            
顯示指定包的信息
  yum  groupinfo "Group1"   "Group2"   
顯示指定組的信息

yum  repolist [all|enable|disable]  
查看yum倉庫的個數,默認顯示啟用的
 yum  makecache
手動生成緩存
yum search  <package_name> 
yum list | grep “*package*”
查找rpm
yum reinstall  <package_name>   
重新安裝一遍
yum  whatprovides “*/COMMAND”
查看命令是用那個軟件包提供的

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

(0)
N19_kingN19_king
上一篇 2016-05-29
下一篇 2016-05-31

相關推薦

  • Linux基礎之文件管理和bash特性

    部分文件管理命令,bash的一些基礎特性,部分glob文件匹配示例

    Linux干貨 2018-01-16
  • N22-妙手-第一周博客作業

           描述計算機的組成及其功能 1946年馮諾依曼提出馮 諾依曼結構,也稱普林斯頓結構,即一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。根據他的結構,計算機組成是: (1)運算器:負責數據的算術運算和邏輯運算 (2)控制器:  負責對程序信息和數據進行分析,控制并協調其輸…

    Linux干貨 2016-08-15
  • N-22-南京-修 第三周博客作業

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

    Linux干貨 2016-09-15
  • 正則表達式

    grep:Global search REgular expression and Print out the line         文本搜索工具,根據用戶指定的”模式“對目標文本逐行進行匹配檢查;打印匹配到的行        模式:由正則表達式字符及文本字符所編寫的過濾條件…

    Linux干貨 2016-08-08
  • shell之變量總結

    1 什么是shell變量 按照定義來說,變量是存儲設備中的一些可讀寫的存儲單元.變量可以定制用戶本身的工作環境。使用變量可以保存有用信息,使系統獲知用戶相關設置。變量也用 于保存暫時信息。例如:一變量為EDITOR,系統中有許多編輯工具,但哪一個適用于系統呢?將此編輯器名稱賦給EDITOR,這樣,在使用cron或其 他需要編輯器的應用時,這就是你將一直使用的…

    Linux干貨 2016-08-15
  • 任務計劃

                          Linux任務計劃 一、任務計劃     (1)未來的某一個時間點執行一次某任務:at、batch     (2)周期性運行某…

    2017-05-14
欧美性久久久久