1. 程式人生 > >Linux基礎管理——軟件包管理:rpm,yum高級使用方法(史上最全,沒有之一)

Linux基礎管理——軟件包管理:rpm,yum高級使用方法(史上最全,沒有之一)

rpm yum 軟件包管理 yum倉庫 yum源地址配置

前言:

GRU Linux操作系統中,實現軟件包管理的常見工具有RPM和yum;本專題將就Centos系統中安裝包的命名、校驗、密鑰導入導出、包安裝、卸載、升級、查詢等眾多rpm包管理相關的操作實現進行總結。


1、安裝包


1.1、包管理器分類


二進制應用程序的組成部分:二進制文件、庫文件、配置文件、幫助文件。所以包管理器就是對這四類文件進行分門別類存儲的一個管理工具。


程序包管理器:

    debian:deb文件, dpkg包管理器。    
    redhat: rpm文件, rpm包管理器。


    狹義的rpm: Redhat Package Manager。
    廣義的rpm:RPM Package Manager。


1.2、包命名


源代碼:

name-VERSION.tar.gz|bz2|xz
     VERSION: major.minor.release

rpm包命名方式:

    name-VERSION-release.arch.rpm
        例:bash-4.2.46-19.el7.x86_64.rpm
    VERSION: major.minor.release
release:release.OS


常見的arch:

    x86: i386, i486, i586, i686    
    x86_64: x64, x86_64, amd64
    powerpc: ppc
    跟平臺無關:noarch


1.3、包的分類和拆包


Application-VERSION-ARCH.rpm: 主包

Application-devel-VERSION-ARCH.rpm 開發子包
Application-utils-VERSION-ARHC.rpm 其它子包
Application-libs-VERSION-ARHC.rpm 其它子包
包之間可能存在依賴關系,甚至循環依賴;


解決依賴包管理工具:

    yum:rpm包管理器的前端工具;    
    apt-get:deb包管理器前端工具;
    zypper: suse上的rpm前端管理工具;
    dnf: Fedora 18+ rpm包管理器前端管理工具。


1.4、庫文件


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

    ldd /PATH/TO/BINARY_FILE

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

    ldconfig 加載庫文件;
    /sbin/ldconfig -p: 顯示本機已經緩存的所有可用庫文件名及文件路徑映射關系;
        配置文件:/etc/ld.so.conf, /etc/ld.so.conf.d/*.conf;
        緩存文件:/etc/ld.so.cache;



1.5程序包管理器


功能:

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


包文件組成 (每個包獨有):

    RPM包內的文件    
    RPM的元數據,如名稱,版本,依賴性,描述等;
    安裝或卸載時運行的腳本


數據庫(公共):/var/lib/rpm

    程序包名稱及版本;    
    依賴關系;
    功能說明;
    包安裝後生成的各文件路徑及校驗碼信息。


1.6、程序包的來源


管理程序包的方式:

    使用包管理器:rpm    
    使用前端工具:yum, dnf


獲取程序包的途徑:

(1) 系統發版的光盤或官方的服務器;

    CentOS鏡像:    
        https://www.centos.org/download/
        http://mirrors.aliyun.com
        http://mirrors.sohu.com
        http://mirrors.163.com


(2) 項目官方站點;


(3) 第三方組織:

    Fedora-EPEL:    Extra Packages for Enterprise Linux;
    Rpmforge:RHEL推薦,包很全;
    搜索引擎:
        http://pkgs.org
        http://rpmfind.net
        http://rpm.pbone.net
        https://sourceforge.net/



(4) 自己制作


    註意:第三方包建議要檢查其合法性:來源合法性,程序包的完整性




2、rpm包管理


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

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


2.1、安裝

語法:

    rpm {-i|--install} [install-options] PACKAGE_FILE…


常用選項:

    -v: verbose    
    -vv:
    -h: 以#顯示程序包管理執行進度


命令選項組合:

    rpm -ivh PACKAGE_FILE ...



[install-options]:

    --test: 測試安裝,但不真正執行安裝,即dry run模式;
    --nodeps:忽略依賴關系;    
    --replacepkgs | replacefiles;
    --nosignature: 不檢查來源合法性;
    --nodigest:不檢查包完整性;
    --noscripts:不執行程序包腳本;
        %pre: 安裝前腳本; --nopre
        %post: 安裝後腳本; --nopost
        %preun: 卸載前腳本; --nopreun
        %postun: 卸載後腳本; --nopostun


2.2、升級安裝包

語法:

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


註意:

    upgrade:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則“安裝”。    
    freshen:安裝有舊版程序包,則“升級”;如果不存在舊版程序包,則不執行升級操作。
    --oldpackage:降級;    
    --force: 強制安裝;


註意:

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



2.3、包查詢


語法:

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


[select-options]

    -a: 所有包    
    -f: 查看指定的文件由哪個程序包安裝生成
    -p rpmfile:針對尚未安裝的程序包文件做查詢操作
    
    --whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個包所提供。
    --whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴。即哪個包需要這個能力、提供了這個能力。
? rpm2cpio 包文件|cpio –itv 預覽包內文件;
? rpm2cpio 包文件|cpio –id “ *.conf” 釋放包內文件;



[query-options]

    --changelog:查詢rpm包的changelog    
    -c: 查詢程序的配置文件
    -d: 查詢程序的文檔
    -i: information
    -l: 查看指定的程序包安裝後生成的所有文件
    --scripts:程序包自帶的腳本
    
    --provides: 列出指定程序包所提供的CAPABILITY
    -R: 查詢指定的程序包所依賴



常用查詢用法:

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



2.4、包卸載

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




2.5、包校驗


語法:

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 -K|checksig rpmfile 檢查包的完整性和簽名    
    rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
            /CentOS 7發行版光盤提供:RPM-GPG-KEY-CentOS-7/
        
    rpm -qa “gpg-pubkey*”


2.6、rpm數據庫

數據庫位置:/var/lib/rpm


(1)initdb(初始化):

rpm {--initdb|--rebuilddb}
如果事先不存在數據庫,則新建之;否則,不執行任何操作;

(2)rebuilddb:重建已安裝的包頭的數據庫索引目錄。



3、yum介紹


YUM:

Yellowdog Update Modifier,rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具。


yum repository:

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

文件服務器:

    http://    
    https://
    ftp://
    file://



3.1、yum配置文件


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



3.2、yum倉庫

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

    $releasever:當前OS的發行版的主版本號;
    $arch:平臺,i386,i486,i586,x86_64等;
    $basearch:基礎平臺;i386, x86_64;
    $YUM0-$YUM9:自定義變量;


實例:

    http://server/centos/$releasever/$basearch/    
    http://server/centos/7/x86_64
    http://server/centos/6/i384


3.3、yum源

阿裏雲repo文件:

    http://mirrors.aliyun.com/repo/


CentOS系統的yum源:

    阿裏雲:https://mirrors.aliyun.com/centos/$releasever/os/x86_64/    
    實驗環境:http://172.16.0.1/cobbler/ks_mirror/$releasever/



EPEL的yum源:

    阿裏雲:https://mirrors.aliyun.com/epel/$releasever/x86_64    
    實驗環境:http://172.16.0.1/fedora-epel/$releasever/x86_64/



3.4、yum-config-manager


生成172.16.0.1_cobbler_ks_mirror_CentOS-Xx86_64_.repo:

    yum-config-manager --add-repo=http://172.16.0.1/cobbler/ks_mirror/7/


    yum-config-manager --disable     /“倉庫名" 禁用倉庫/
    yum-config-manager --enable     /“倉庫名” 啟用倉庫/



4、yum命令使用


4.1、程序包管理語法

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


顯示倉庫列表:

yum repolist [all|enabled|disabled]


顯示程序包:

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


安裝程序包:

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


升級程序包:

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



檢查可用升級:

    yum check-update


卸載程序包:

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


查看程序包information:

    yum info [...]


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

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



清理本地緩存:

清除/var/cache/yum/$basearch/$releasever緩存:
    yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]


構建緩存:

    yum makecache



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

    yum search string1 [string2] [...]


查看指定包所依賴的capabilities:

    yum deplist package1 [package2] [...]


查看yum事務歷史:

    yum history [info|list|packages-list|packages-info|
    summary|addon-info|redo|undo|
    rollback|new|sync|stats]
    yum history
    yum history info 6
    yum history undo 6


日誌:

    /var/log/yum.log


localinstall和localupdate:

    安裝及升級本地程序包:
        
    yum localinstall rpmfile1 [rpmfile2] [...]
    (用install替代)
    
    yum localupdate rpmfile1 [rpmfile2] [...]
    (用update替代)




4.1、包組管理的相關命令及語法


    yum groupinstall group1 [group2] [...]



4.2、yum的命令行選項


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



4.3、系統安裝光盤作為本地yum倉庫

(1) 掛載光盤至某目錄,例如/mnt/cdrom

    mount /dev/cdrom /mnt/cdrom


(2) 創建配置文件

    [CentOS7]    
    name=
    baseurl=
    gpgcheck=
    enabled=

創建yum倉庫:

    createrepo [options] <directory>



5、程序包編譯


5.1、程序包編譯安裝


    Application-VERSION-release.src.rpm 
    --> 安裝後,使用rpmbuild命令制作成二進制格式的rpm包,而後再安裝源代碼
    -->預處理-->編譯-->匯編-->鏈接-->執行


源代碼組織格式:

    多文件:文件中的代碼之間,很可能存在跨文件依賴關系    
    C、 C++:make 項目管理器
        configure腳本 --> Makefile.in --> Makefile
    java: maven



C語言源代碼編譯安裝三步驟:

    (1)、 ./configure        
        1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;執行時會參考用戶的指定以及Makefile.in文件生成Makefile
        2) 檢查依賴到的外部環境,如依賴的軟件包
        
    (2)、 make 根據Makefile文件,構建應用程序
    (3)、 make install 復制文件到相應路徑


開發工具:

    autoconf: 生成configure腳本    
    automake:生成Makefile.in


註意:安裝前查看INSTALL,README。



開源程序源代碼的獲取:

(1)官方自建站點:
    apache.org (ASF:Apache Software Foundation)
    mariadb.org
    ...
(2)代碼托管:
    SourceForge.net
    Github.com
    code.google.com


c/c++編譯器:

    gcc (GNU C Complier)


5.2、編譯C源代碼


準備:提供開發工具及開發環境

開發工具:make, gcc等
開發環境:開發庫,頭文件;glibc:標準庫。



實現:通過“包組”提供開發組件

    Development ToolsServer
    Platform Development


第一步:configure腳本

    選項:指定安裝位置、指定啟用的特性    
    --help: 獲取其支持使用的選項


選項分類:

    安裝路徑設定:    
    --prefix=/PATH: 指定默認安裝位置,默認為/usr/local/
    --sysconfdir=/PATH:配置文件安裝位置
    System types:支持交叉編譯


Optional Features: 可選特性

    --disable-FEATURE    
    --enable-FEATURE[=ARG]


Optional Packages: 可選包

    --with-PACKAGE[=ARG],依賴包
    --without-PACKAGE,禁用依賴關系
註意:通常被編譯操作依賴的程序包,需要安裝此程序包的“開發”組件,其包名一般類似於name-devel-VERSION。


第二步:make;
第三步:make install;




5.3、安裝後的配置

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

    編輯文件/etc/profile.d/NAME.sh    
    export PATH=/PATH/TO/BIN:$PATH


(2) 導入庫文件路徑

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

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



讓系統重新生成緩存:

    ldconfig [-v]



(3) 導入頭文件

    基於鏈接的方式實現:ln -sv



(4) 導入幫助手冊

    編輯/etc/man.config|man_db.conf文件,添加一個MANPATH


Linux基礎管理——軟件包管理:rpm,yum高級使用方法(史上最全,沒有之一)