天天看點

軟體包管理RPM與yum

    程式包管理器的基本功能是:将編譯好的應用程式的各組成檔案打包一個或幾個程式封包件,進而友善快捷地實作程式包的安裝、解除安裝、查詢、更新和校驗等管理操作。其組成一般分為兩個部分:

    1)、程式的組成組成清單 (每個包獨有)

    檔案清單、安裝或解除安裝時運作的腳本

    2)、資料庫(公共)

    程式包名稱及版本、依賴關系;功能說明;安裝生成的各檔案的檔案路徑及校驗碼資訊。

    在軟體安裝後,其個檔案的存放位置一般是:

可運作程式檔案

/usr/bin、/usr/sbin、/usr/local/bin、

/usr/local/sbin

程式可使用的動态庫

/usr/lib

軟體使用手冊與說明文檔

/usr/share/doc

一些man幫助檔案

/usr/share/man

2、RPM指令的介紹

    RPM 全名是『 RedHat Package Manager ,RPM is Package Manager』。

    具體指令的使用方法:

安裝:

    rpm -i /PATH/TO/PACKAGE_FILE

        -h: 以#顯示進度;每個#表示2%; -v:顯示詳細過程

        -vv: 更詳細的過程-i:--install

        --test: 測試安裝,但不真正執行安裝過程;dry run模式;

    rpm -ivh /PATH/TO/PACKAGE_FILE

        --nodeps: 忽略依賴關系;--replacepkgs: 重新安裝,替換原有安裝;

        --force: 強行安裝,可以實作重裝或降級--nosignature: 不檢查來源合法性;

        --nodigest:不檢查包完整性;

        --noscipts:不執行程式包腳本片斷;

        %pre: 安裝前腳本;--nopre    %post: 安裝後腳本;--nopost

        %preun: 解除安裝前腳本;--nopreun    %postun: 解除安裝後腳本--nopostun

解除安裝:

    rpm -e PACKAGE_NAME--nodeps忽略依賴關系

查詢:

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

    rpm -q PACKAGE_NAME:查詢指定的包是否已經安裝

    rpm -qi PACKAGE_NAME: 查詢指定包的說明資訊;

    rpm -ql PACKAGE_NAME: 查詢指定包安裝後生成的檔案清單;

    rpm -qc PACEAGE_NEME:查詢指定包安裝的配置檔案;

    rpm -qd PACKAGE_NAME: 查詢指定包安裝的幫助檔案;

    rpm -q --scripts PACKAGE_NAME: 查詢指定包中包含的腳本

    rpm -qf /path/to/somefile: 查詢指定的檔案是由哪個rpm包安裝生成的;

查詢尚未安裝的rpm封包件的相關資訊:

    查詢安裝後會生成的檔案清單:rpm -qpl /path/to/package_file

    查詢其簡單描述資訊:rpm -qpi /path/to/package_file

更新:

    rpm -Uvh  /PATH/TO/NEW_PACKAGE_FILE: 如果裝有老版本的,則更新;否則,安裝;

    rpm -Fvh  /PATH/TO/NEW_PACKAGE_FILE:如果裝有老版本的,則更新;否則,退出;

        --oldpackage:降級;--force: 強行更新;

    rpm --oldpackage: 降級

注意:

(1) 不要對核心做更新操作;Linux支援多核心版本并存,是以直接安裝新版本核心;

(2) 如果原程式包的配置檔案安裝後曾被修改,更新時新版本的提供的同一個配置檔案并不會直接覆寫老版本的配置檔案,而把新版本的檔案重命名(FILENAME.rpmnew)後保留;

檢查包安裝後生成的檔案是否被修改:

    rpm -V PACKAGE_NAME

檢驗來源合法性和軟體包完整性

    來源合法性:通過公鑰加密機制(RSA)

    包完整性:通過單向加密機制(md5|sha1)

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

        rpm -K /PAPT/TO/PACKAGE_FILE

        dsa, gpg: 驗正來源合法性,也即驗正簽名; --nosignature,略過此項

        sha1, md5: 驗正軟體包完整性;           --nodigest,略過此項

重建資料庫:

    rpm--initdb:初始化資料庫,沒有才建立,有就不用建立;

    rpm--rebuilddb: 重建資料庫,強制重建立立;

3、YUM介紹與指令使用

    YUM是一個前端管理器,其組成可以分成兩部分。檔案伺服器與yum用戶端。

    所謂檔案伺服器就是共享rpm包的服務端,其可以通過FTP、http、nfs服務提供,還可以直接在本地直接file建立.

    YUM用戶端的作用:

        1、配置檔案:指定各可用的yum倉庫;

        2、緩存中繼資料:yum會到各可用yum倉庫擷取中繼資料,并緩存至本地; 

        3、分析中繼資料:根據具體操作請求完成中繼資料分析, 可能包括檢查依賴關系、檔案清單等資訊;

        4、執行具體操作:即使用yum指令

    本地用戶端的配置檔案有:

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

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

    配置檔案的基本格式:由兩段組成,各字段的含義

        [main] :主配置段

        [repo] :倉庫配置段

        [repo_ID]        倉庫的配置名,注意各個配置檔案中的配置名不能出現重複

        name=String  倉庫名稱 

        baseurl=倉庫的通路路徑

        enabled={1|0}    是否使用倉庫

        gpgcheck={1|0}  是否進行來源合法性檢查 

        gpgkey=公鑰檔案(可以在本地,也可是伺服器端路徑)

        cost=定義此倉庫開銷,預設為1000

YUM指令的使用:yum [options] [command] [package ...]

Optinon:  

       --nogpgcheck:禁止進行gpg check;-y: 自動回答為“yes”;-q:靜默模式;

       --disablerepo=repoidglob:臨時禁用此處指定的repo;

       --enablerepo=repoidglob:臨時啟用此處指定的repo;

       --noplugins:禁用所有插件;

Command:

    repolist [all|enabled|disabled]: 列出所有可用yum repo

    clean [all|packages|metadata|expire-cache|rpmdb|plugins]: 清理緩存

    list [all|installed|available]: 列出rpm包

    info package_name: 列出包的描述資訊

    grouplist: 列出所有包組

    groupinfo "package_group_name":顯示包組資訊

    install package_name ...: 安裝指定的程式包

    reinstall package_name ...: 重新安裝指定的程式包

    check-update: 檢查可更新的包

    update package_name ...: 更新指定的程式包

    downgrade package_name:降級

    whatprovides|provides /path/to/somefile: 查詢某檔案是由哪個包安裝生成的

    erase|remove  package_name ...:解除安裝

    groupinstall "group_name":安裝指定的包組

    groupremove "group_name": 解除安裝指定的包組

安裝本地包:

    install /path/to/package_file

手動禁止檢查來源及完整性:--nogpgcheck

    yum install /tmp/zsh-2.3.1-2.el6.x86_64.rpm --nogpgcheck

4、自建YUM倉庫

1、準備檔案伺服器;使用httpd為例,在這裡我對阿裡雲中的openstack-juno所有安裝包做鏡像

3、建立yum倉庫

4、使用另一台機器配置使用自建的yum倉庫

5、關閉其他可用源,測試配置epel的yum源

6、此時就可以與其他的源一起配合使用了

    本文轉自 夢想成大牛 51CTO部落格,原文連結:http://blog.51cto.com/yinsuifeng/1844212,如需轉載請自行聯系原作者