軟件包管理

1.程序包管理器
源代碼-->目標二進制格式-->組織稱為一個或有限幾個“包”文件;
    安裝、升級、卸載、查詢、校驗

程序包管理器:

debian(Ubuntu):dpt,工具:dpkg,程序包以“.deb”結尾
redhat:redhat package manager ,rpm,".rpm";rpm is package manager;
S.u.S.E:rpm ,'.rpm'Gentoo:portsArchLinux:
2.程序包的組成格式
源代碼:name-VERSION.tar.gz
    VERSION:major.minor.releaserpm包命名格式:
    name-VERSION-release.arch.rpm
        VERSION:major.minor.release
        release.arch:rpm包的發行號
            release.os:2.el7.i386.rpm
             archetecture(架構):i386,x64(amd64),ppc,noarch(沒平臺要求,可以使用在任意平臺架構上)rpm拆包:主包和支包
    主包:name-VERSION-release.arc.rpm
    支包:name-function-VERSION-release.arc.rpm
        function:devel(開發包),utils(工具程序),libs(庫文件)依賴關系
    X,Y,Z 
        X-->Y,Z
            Y-->A,B,C
            C-->Y
前端工具:自動解決依賴關系;
        yum :rhel系列系統上rpm包管理器的前端工具;        
        apt-get(apt-cache):deb包管理器的前端工具
        zypper:suse的rpm管理器前端工具
        dnf:Fedora 22+系統上rpm包管理器的前端工具
3.程序包管理器功能和組成部分
功能:將編譯好的應用程序的各組成文件打包成一個或幾個程序包文件,從而更方便地實現程序包的安裝、升級、卸載和查看
1.程序包的組成清單(每個程序包都單獨實現);
    文件清單
    安裝和卸載時運行的腳本
2.數據庫(公共)
    程序包的名稱和版本
    依賴關系
    功能說明
    安裝生成的各文件路徑及校驗碼信息;
    等等等    
    CentOS上的程序包數據庫位置/var/lib/rpm/
4.獲取程序包的途徑
(1)系統發行版的光盤或官方的文件服務器(或鏡像站點);
    http://mirrors.aliyun.com
    http://mirrors.sohu.com,
    http://mirrors.163.com(2)項目的官方站點
(3)第三方組織制作的rpm包:
    (a)EPEL:
    (b)搜索引擎查找
        http://pkgs.org
        http://rpm.pvone.net
        http://rpmfind.netstat
    

建議:檢查其合法性(完整性)
    來源合法性:
    程序包的完整性;
5.CentOS系統上rpm命令管理程序包

命令介紹

安裝、升級、卸載、查詢和校驗、數據庫維護rpm命令:rpm [OPTION] [PACKAGE_FILE]
    安裝:-i,--install
    升級:-U,--update,-F,-freshen
    卸載:-e,--erase
    查詢:-q,--query
    校驗:-V ,--verify
    數據庫維護:--builddb,--initdb

rpm包安裝

rpm {-i|--install} [install-options] PACKAGE_FILE ...
    
    rpm -ivh PACKAGE_FILE...
    
    GENERAL OPTIONS:
        -v:verbose,詳細信息       
        -vv:更詳細的輸出        
        [install-options]
            -h:hash marks輸出進度條;每個#表示2%的進度        
            --test:測試安裝,檢查并報告依賴關系及沖突消息等;         
            --nodeps:忽略依賴關系,不建議使用,安裝后會不能使用;      
            --replacepkgs:重新安裝:rpm -ivh 
            --replacepkgs zsh-5.0.2-7.el7.x86_64.rpm   
            --nodigest:不檢查包的完整性信息        
            --nosignature:不檢查包的來源信息及包的完整性注意:rpm可以自帶腳本;
    四類: --noscripts
        preinstall:安裝過程開始之前運行的腳本,%pre: --nopre
        postinstall:安裝過程完成以后運行的腳本:%post --nopost
        preuninstall:卸載過程真正開始執行之前運行的腳本,%preun --nopreun
        postuninstall卸載過程完成以后運行的腳本,%postun --nopostun

rpm包升級

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    -U:升級或安裝
    -F:升級,如果老版本不存在,則不進行安裝    
         rpm -Uvh PACKAGE_FILE ...
     
      rpm -Fvh PACKAGE_FILE ... 
    
    --oldpackage:降級安裝;
    --force:強制升級;
    注意:(1)不要對內核做升級操作。linux 支持多內核版本并存,因此,直接安裝新版本內核;
      (2)如果某源程序包的配置文件安裝后曾修改過,升級時。新版本的程序提供的同一個配置文件不會覆蓋原有版本的配置文件。而是把新版本的配置文件重命名(FILENAME.rpmnew)后提供;

卸載:

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts]
       [--notriggers] [--test] PACKAGE_NAME ...
       --allmatches:卸載所有匹配指定名稱的程序包的各版本
       --nodos:忽略依賴關系
       --test:測試卸載,
       dry run 模式
       rpm -e zsh

查詢

rpm {-q|--query} [select-options] [query-options] 
1) [select-options]
    rpm -q PACKAGE_NAME:查詢指定的程序包是否已安裝,及其版本;
    -a,--all:查詢所有已經安裝過的包   
    -f FILE:查詢指定的文件由哪個程序安裝生成  
    -p,--package PACKAGE_FILE:用于實現對未安裝的程序包做查詢操作。   
    --whatprovides CAPABILITY:查詢指定的CAPABILITY(能力)由哪個程序包提供      
        bin]# rpm -q --whatprovides config\(bash\)
        bash-4.1.2-40.el6.x86_64
        rpm -q --whatprovides zprof.so'()(64bit)'


    --whatrequires CAPABILITY:查詢指定的CAPABILITY(能力)被哪個包所依賴;
2)[query-options] 
    --changlog:查詢   
    -l,--list :安裝生成的所有文件列表   
    -i,--info :查詢程序包相關的information,版本號,大小,所屬的組,等   
    -c,--configfiles:查詢指定的程序包的配置文件   
    -d,--docfiles:查詢指定的程序包提供的幫助文檔   
    --provides:列出指定的程序包的所有CAPABILITY(能力)       
        bin]# rpm -q --provides bash
        config(bash) = 4.1.2-40.el6
        bash = 4.1.2-40.el6
        bash(x86-64) = 4.1.2-40.el6
    -R,--requires:查詢指定的程序包的依賴關系;   
    --scripts:查看程序包自帶的腳本片段;用法:
    -qi PACKAGE:信息,
    -qf FILE 文件由哪個包安裝來,
    -qc PACKAGE配置文件,
    -ql PACKAGE:安裝生成的文件列表,
    -qd,提供的幫助文檔qpi,qpl,qpc...查詢未安裝的程序包的信息。

校驗:

rpm -V zsh #校驗rpm安裝后有沒有被修改過
   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

    [root@CentOS6 bin]# rpm -V zsh
    S.5....T.  c /etc/zshrc
rpm {-V|--verify} [select-options] [verify-options]

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

來源合法性驗證:
    數字簽名:
完整性驗證
rpm --import /media/cdrom/RPM-GPG-KEY-GentOS-7導入密鑰信息
rpm -K zsh-5.0.2-14.el7.x86_64.rpm


獲取并導入信任的包制作者的密鑰:
    對于CentOS發行版本來說:rpm --import /etc/pki/rpm-gpg/RPM-KEY-CentOS-7驗證:
    (1)安裝此組織簽名的程序時,會自動執行驗證
    (2)手動過驗證:rpm -K PACKAGE_NAME

數據庫重建:

rpm管理器數據庫路徑:/var/lib/rpm
    查詢操作:通過此處的數據庫進行;
    
獲取幫助:    CentOS6:man rpm    CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb}[-v] [--dbpath DIRECTORY] [--root DIRECTORY]

    --initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的;當前有時不執行任何操作
    --rebuilddb  :重新構建,通過讀取當前系統上所有已安裝過的程序包進行重新創建;

6.yum概述

yum(全稱為 Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器。
基於RPM包管理,能夠從指定的服務器自動下載RPM包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
yum提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。

7.yum客戶端的配置

1)yum respository(yum 倉庫):
    yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)2)yum中常用的文件服務器類型    ftp://
    http://
    file:///(本地yum源)3)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,意為隨機挑選;
        cost= 默認為1000注意:3)中參數不是全部都需要進行配置,但最基本的必須包括以下三點
    (1):[repositoryID]
    (2):baseurl=url://path/to/repository/
    (3) enabled={1|0}4)在CentOS6環境上安裝yum倉庫示例:
    (1)虛擬機CentOS-6.8
        yum源:http://10.1.0.1/cobbler/ks_mirror/6/
    (2)進入yum repo 配置目錄,在yum.repos.d下原有很多.repo結尾的文件,均已移至其下的old文件夾中
            [root@CentOS6 ~]# cd /etc/yum
            yum/         yum.conf     yum.repos.d/ 
            [root@CentOS6 ~]# cd /etc/yum.repos.d/
            [root@CentOS6 yum.repos.d]# ls
            base.repo  old
            [root@CentOS6 yum.repos.d]# 
    (3)創建并編輯bash.repo文件,在其中加入一下內容
        [base]
        name=CentOS 6
        baseurl=http://10.1.0.1/cobbler/ks_mirror/6/
        gpgcheck=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
        enabled=1
    (4)執行yum clean all清除原有yum緩存,然后執行yum makecache重新創建yum緩存文件。    
5)yum-config-manager命令的使用
   (1) 生成repo-http_10.1.0.1_cobbler_ks_mirror_CentOS-6-x86_64_.repo

        imagewKioL1e5K47zSqp0AABtTDOf4Pk558.png-wh_50

(2)  yum-config-manager --disbale "倉庫名" 禁用倉庫
(3)yum-config-manager --enable "倉庫名" 啟用倉庫
    yum-config-manager --enable fedora(倉庫名是在配置時中括號中的名字)

8.使用yum安裝和卸載程序包

顯示倉庫列表:repolist [all|enabled|disabled

[root@CentOS6 yum.repos.d]# yum repolist allLoaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
base                                                                                 | 4.0 kB     00:00     cdrom                                                                                | 4.0 kB     00:00 ... 
fedora                                                                               | 4.3 kB     00:00     repo id                                       repo name                                      status
base                                          CentOS 6                                       enabled:  6,696cdrom                                         CentOS 2                                       enabled:  6,696fedora                                        CentOS                                         enabled: 11,768repolist: 25,160[root@CentOS6 yum.repos.d]#

顯示程序包list

yum list [all | glob_exp1] [glob_exp2] [...]yum list {available|installed|updates} [glob_exp1]

安裝程序包:

install package1 [package2] [...]
reinstall package1 [package2][...] (重新安裝)

imagewKioL1e5LP6De0z9AACrtVCVbxM514.png-wh_50

升級程序包

update [package1] [package2][...]    downgrade  [package1] [package2][...]  (降級)    檢查可用升級:        check-update

卸載程序包:

remove |erase package1 [package2][...]

imagewKiom1e5K47CchWEAACchw-Sv2M124.png-wh_50

查看程序包information:

info[...]

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

provides |whatprovides feature1 [feature2] [...]

本地緩存的清理和構建

清理:
    clean [package |metadata |expire-cache|rpmdb|plugins|all]
構建:
    makecache

imagewKioL1e5K43SPSxIAACw_kDRiIo151.png-wh_50

9.yum的選項及其它:

使用光盤當本地yum倉庫

(1)掛載光盤至某目錄,例如/media/cdrom    #mount /dev/cdrom /media/cdrom(2)創建配置文件
    [CentOS7]
    name=
    baseurl=
    gpgcheck=
    enabled

yum的命令行選項

--nogogcheck:禁止進行gpg check-y:自動回答“yes“-q:靜默模式--disablerepo=repoidglob:臨時禁用此處指定的repo--enablerepo=repoidglob:臨時啟用此處指定的repo--noplugins:禁用所有插件

yum的repo配置文件中可用的變量

$releasever:當前OS的發行版本的主版本號$arch:平臺,i386,i486,i586,x86_64...$basearch:基礎平臺;i386$YUM0-$YUM9:自定義變量
示例:
    http://server/centos/$releasever/$basearch/
    http://server/centos/7/x86_64
    http://server/centos/6/i384

創建yum倉庫:

createrepo[options] <directory>

原創文章,作者:提著醬油瓶打醋,如若轉載,請注明出處:http://www.www58058.com/38262

(0)
提著醬油瓶打醋提著醬油瓶打醋
上一篇 2016-08-20
下一篇 2016-08-21

相關推薦

  • 手動添加用戶

        通常使用useradd命令可以輕松添加一個用戶,然后使用passwd命令設置一個密碼后就可以登錄系統了,其實這一過程完成可以自己手動完成,下面就讓我們來通過修改配置文件來添加一個用戶。 一、修改/etc/passwd文件     在etc/passwd文件中手動添加一行內…

    Linux干貨 2015-04-27
  • linux基礎學習之進程管理和任務計劃

    內容:   進程相關概念(用戶空間、內核空間,進程、線程)   進程及系統相關工具(ps、top、pgrep、pidof、kill)   調整nice值(nice、renice)   作業管理(jobs、fg、bg、kill,&)   計劃任務(at、crontab) 一、進程相關概念 內核的功用:進…

    Linux干貨 2016-09-07
  • clsass 10 shell編程(二)及文件查找及壓縮

    一、選擇執行(條件判斷if) 流程控制 過程式編程語言:     順序執行     選擇執行     循環執行 使用read 命令來接受輸入 使用read 來把輸入值分配給一個或多個shell變量:   &nb…

    Linux干貨 2016-08-18
  • HTTP響應連接介紹

    HTTP即超文本傳輸協議,web站點的實現就是基于HTTP協議得以實現。本文將詳細討論HTTP。 1. HTTP協議版本: HTTP從誕生到現在一共有如下幾個版本: HTTP 0.9:是最早的版本,為HTTP的原型版本,其功能非常簡陋; HTTP 1.0:此版本增加了很多新特性,如cache,method,MIME等,MIME的出現讓網頁不再是單純的純文本界…

    2017-05-31
  • OSI和TCP/IP

            我們生活中各方面都離不開網絡,那網絡究竟是什么東西呢?它是怎么做到讓在不同地點的人無視空間距離完成通信的呢?首先我們來了解一下網絡的基本概念。網絡是由節點和連線構成,表示諸多對象及其相互聯系。在數學上,網絡是一種圖,一般認為專指加權圖。網絡除了數學定義外,還有具體…

    2017-09-02
  • 文本處理工具(練習+作業)

    文本處理工具(cut,sort,uniq)練習 1、找出ifconfig命令結果中本機的所有IPv4地址 [root@localhost ~]# ifconfig | tr -cs '[:digit:].' '\n'| sort -t. -k3 |tail -5 2、查出分區空間使用率的最大百分比值 [root@loc…

    Linux干貨 2016-08-07

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-22 13:29

    文章架構清晰,層次明了,同時熟練使用包管理器各命令是基本技能需要熟練使用和掌握。

欧美性久久久久