Linux學習筆記之 RPM包管理、Yum安裝,配置及使用

相關理論介紹


爲什麼需要RPM包來管理程序?

由於Linux真正可以執行的程序一定是二進制文件,因爲機器只能識別二進制數字,而程序員在開發時多是使用高級語言進行編程的,所以要想這些程序能夠在Linux上運行,源代碼必須最終被編譯成二進制文件。但是二進制應用程序的文件的構成也是複雜的,如果單獨安裝管理應用程序,並記錄程序相關的文檔,配置文件,會很不方便,所以需要對這些編譯後的二進制文件打包處理,因此就有了RPM包和PRM包管理器。


二進制應用程序的組成部分:

    二進制文件:/bin, /sbin, /usr/bin, /usr/sbin

    庫文件:/linb, /lib64, /usr/lib6

    配置文件:/etc

    幫助文件:manaul, info,README.txt, INSTALL.txt

    

常見程序包管理器有:

    debian:deb, dpt

    redhat: rpm, 

    rpm: Redhat Package Manager

wKioL1YHzlCDzPFOAADWXAgaMXY941.jpg

wKiom1YHzkmj83szAAGv5cF6cNM685.jpg


RPM程序包管理


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

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

    文件清單

    安裝或卸載時運行的腳本

2、數據庫(公共)

    程序包名稱及版本

    依賴關係;

    功能說明;

    安裝生成的各文件的文件路徑及校驗碼信息;


管理程序包的方式:

    使用包管理器:rpm

    使用前端工具:yum, dnf


獲取程序包的途徑:

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

    CentOS鏡像:

    http://mirrors.aliyun.com

    http://mirrors.sohu.com

    http://mirrors.163.com

(2) 項目官方站點,如apache官方站點www.apache.org

(3) 第三方組織:

    Fedora-EPEL

    搜索引擎:

    http://pkgs.org

    http://rpmfind.net

    http://rpm.pbone.net

RPM程序包管理器

RPM主要能實現對rpm包安裝、升級、卸載、查詢、校驗等功能。 


安裝:


rpm {-i|--install} [install-options] PACKAGE_FILE ...
    -ivh:安裝包, v顯示安裝進度, 
    -ivvh: vv的作用是詳細顯示安裝了哪些文件, 還有vvv
    --nodeps:忽略依賴關係強制安裝, 可能導致軟件功能不正常
    --test:測試安裝,但不會正真安裝;dry run模式
    --replacepkgs:強制重新安裝
    --no scripts: 不執行程序包腳本片段
    %pre: 安裝前腳本;--nopre
    %post: 安裝後腳本; --nopost
    %preun: 卸載前腳本; --nopreun
    %postun: 卸載後腳本; --nopostun
    
[root@node2 Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm 
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]   
   1:zsh                    ########################################### [100%]  #顯示進度
   
[root@node2 Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm         #重新安裝
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]
   
[root@node2 Packages]# rpm -ivh php-5.3.3-38.el6.x86_64.rpm 
warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
error: Failed dependencies: #由於被依賴的包沒有安裝,所以導致安裝失敗,此時需先安裝被其依賴的包,纔可繼續安裝;或強制忽略依賴關係
php-cli(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64
php-common(x86-64) = 5.3.3-38.el6 is needed by php-5.3.3-38.el6.x86_64

[root@node2 Packages]# rpm -ivh --nodeps  php-5.3.3-38.el6.x86_64.rpm             #強制忽略後,可以完成安裝,但程序不一定可以正常運行
warning: php-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:php                    ########################################### [100%]
   
[root@node2 Packages]# rpm -ivh --test  httpd-2.2.15-39.el6.centos.x86_64.rpm     #測試安裝不會真正安裝程序包
warning: httpd-2.2.15-39.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
package httpd-2.2.15-39.el6.centos.x86_64 is already installed

[root@node2 Packages]# rpm -q httpd-2.2.15-39.el6.centos.x86_64.rpm #測試安裝並沒有正真安裝程序包
package httpd-2.2.15-39.el6.centos.x86_64.rpm is not installed

    

升級:

rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
    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被誰所依賴

[root@node2 Packages]# rpm -qa  #可查看系統安裝過的所有的包

[root@node2 Packages]# rpm -qf /etc/passwd    #查看/etc/passwd 由那個包提供
setup-2.8.14-20.el6_4.1.noarch

[root@node2 Packages]# rpm -q --whatprovides passwd    #查詢那個包提供了passwd功能
passwd-0.77-4.el6_2.2.x86_64

[root@node2 Packages]# rpm -q --whatrequires passwd    #查詢passwd功能被誰依賴
usermode-1.102-3.el6.x86_64

[root@node2 //]# rpm -q php-com      #查詢php-com有否安裝
package php-com is not installed

[root@node2 //]# rpm -ql -p /mnt/cdrom/Packages/php-common-5.3.3-38.el6.x86_64.rpm #指定路徑,查找還未安裝的php-common包
warning: /mnt/cdrom/Packages/php-common-5.3.3-38.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
/etc/php.d
/etc/php.d/curl.ini
/etc/php.d/fileinfo.ini
/etc/php.d/json.ini
/etc/php.d/phar.ini
/etc/php.d/zip.ini
/etc/php.ini
/usr/lib64/php

常用組合

 -qi PACKAGE, -qf FILE, -qc PACKAGE, -ql PACKAGE, -qd PACKAGE

 -qpi PACKAGE_FILE, -qpl PACKAGE_FILE, ...

 -qa


卸載

rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE

[root@node2 ~]# rpm -q zsh
zsh-4.3.11-4.el6.centos.x86_64
[root@node2 ~]# rpm -e zsh    #卸載zsh程序包,如果成功卸載不會有任何輸出
[root@node2 ~]# rpm -q zsh    #已經卸載成功
package zsh is not installed


校驗

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


數據庫重建

[root@centos7 rpm]# ls /var/lib/rpm  #數據庫相關文件
Basenames     __db.001  __db.003  Group       Name          Packages     Requirename  Sigmd5
Conflictname  __db.002  Dirnames  Installtid  Obsoletename  Providename  Sha1header   Triggername

rpm {--initdb|--rebuilddb}
    initdb: 初始化
      如果事先不存在數據庫,則新建之;否則,不執行任何操作;
    rebuilddb:重建
      無論當前存在與否,直接重新創建數據庫;
      
[root@node2 //]# echo '###' >> /etc/httpd/conf/httpd.conf #向httpd.conf末尾追加一行
[root@node2 //]# rpm -V httpd   #對比httpd安裝包的元數據,查看httpd相關文檔是否有變化
S.5....T.  c /etc/httpd/conf/httpd.conf  #S, 5,T 表明其有改動過

[root@node2 Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm #未導入gpgkey,安裝時候會有warning提示信息
warning: zsh-4.3.10-7.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]
   
[root@node2 Packages]# rpm --import /mnt/cdrom/RPM-GPG-KEY-CentOS-6 #導入gpgkey
[root@node2 Packages]# rpm -ivh --replacepkgs zsh-4.3.10-7.el6.x86_64.rpm #不再有warning 
Preparing...                ########################################### [100%]
   1:zsh                    ########################################### [100%]


Yum介紹


RPM包管理器在安裝rpm包時,如果有包的安裝存在依賴關係,則得首先安裝被其依賴的包,有時候包與包之間的依賴關係複雜,使用RPM來手動安裝包,就變得非常痛苦和低效。

Yum(Yellowdog Updater Modified): 是一前端包管理軟件,基於RPM包管理,能夠從指定服務器下載PRM包,並且自動判斷依賴關係,並自動安裝所有被依賴的包,無需頻繁的一次次下載,安裝。


yum repository: yum repo(yum倉庫)

存儲了衆多rpm包,以及包的相關的元數據文件(放置於特定目錄下:repodata,所以repodata所在的目錄就是yum 倉庫要指向的路徑)

每次啓動yum命令時,都連接yum服務器調取取元數據(通過對比校驗碼確認是否有數據更改,決定是否要下載,更新本地過時的緩存)


yum客戶端

配置文件:

/etc/yum.conf:爲所有倉庫提供公共配置 ,一般無需修改

/etc/yum.repos.d/*.repo:爲倉庫的指向提供配置,如果文件名字不以.repo結果,則該倉庫不會被應用


倉庫指向的定義

[repositoryID]  #倉庫ID
name=name for this repository     #倉庫名稱
baseurl=url://path/to/repository/    #指定倉庫的路徑
enabled={1|0}  #1代表啓用
gpgcheck={1|0}#是否檢查源的合法性,驗證簽名信息
gpgkey=ur1 #指明密鑰文件
enablegroups={1|0}
failovermethod={roundrobin|priority}
默認爲:roundrobin,意爲隨機挑選;priority 從第一個開始查找
cost=
默認爲1000
相關命令:
顯示倉庫列表:
    repolist [all|enabled|disabled]


顯示程序包

list

# yum list [all | glob_exp1] [glob_exp2] [...]

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

[root@node2 ~]# yum list httpd
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
Installed Packages
httpd.x86_64                                                                               2.2.15-39.el6.centos                                                                                @LocalCD/$releasever
Available Packages
httpd.x86_64                                                                               2.2.15-45.el6.centos

安裝程序包:

install package1 [package2] [...]

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


升級程序包:

update [package1] [package2] [...]

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


檢查可用升級:

check-update


卸載程序包:

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


查看程序包information:

info [...]


包組管理的相關命令:

* groupinstall group1 [group2] [...]

* groupupdate group1 [group2] [...]

* grouplist [hidden] [groupwildcard] [...]

* groupremove group1 [group2] [...]

* groupinfo group1 [...]


yum grouplist #查看源裏面的所有包組

yum groupinstall "Development tools"

yum groupinfo "Development tools"


清理本地緩存

    yum clean [ packages | metadata | expire-cache | rpmdb | plugins | all ] 

    常用yum clean all, yum通常會自動刪除已安裝的包的緩存


構建緩存:

makecache


yum的命令行選項

    --nogpgcheck:禁止進行gpg check;

    -y: 自動回答爲“yes”;

    -q:靜默模式;

    --disablerepo=repoidglob:臨時禁用此處指定的repo,(即便配置文件中已經啓用,命令模式優先於配置文件)

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

    --noplugins:禁用所有插件;


練習:使用本地光盤搭建一個Yum倉庫,利用Yum安裝程序包


第一步:掛載光盤,找到Repodata目錄

[root@node2 /]# mount /dev/cdrom /mnt/cdrom/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@node2 /]# ls /mnt/cdrom/  #Repodata所在的目錄就是倉庫要指向的路徑,裏面定義了包與包之間的依賴關係
[root@node2 /]# ll /mnt/cdrom/
total 712
-r--r--r-- 2 root root     14 Oct 24  2014 CentOS_BuildTag
dr-xr-xr-x 3 root root   2048 Oct 24  2014 EFI
-r--r--r-- 2 root root    212 Nov 28  2013 EULA
-r--r--r-- 2 root root  18009 Nov 28  2013 GPL
dr-xr-xr-x 3 root root   2048 Oct 24  2014 images
dr-xr-xr-x 2 root root   2048 Oct 24  2014 isolinux
dr-xr-xr-x 2 root root 686080 Oct 24  2014 Packages
-r--r--r-- 2 root root   1354 Oct 20  2014 RELEASE-NOTES-en-US.html
dr-xr-xr-x 2 root root   4096 Oct 24  2014 repodata
-r--r--r-- 2 root root   1706 Nov 28  2013 RPM-GPG-KEY-CentOS-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Debug-6
-r--r--r-- 2 root root   1730 Nov 28  2013 RPM-GPG-KEY-CentOS-Security-6
-r--r--r-- 2 root root   1734 Nov 28  2013 RPM-GPG-KEY-CentOS-Testing-6
-r--r--r-- 1 root root   3380 Oct 24  2014 TRANS.TBL
[root@node2 /]#


第二步:自定義xxx.repo文件,並配置,並禁用系統自帶的.repo文件

[root@node2 yum.repos.d]# cat local.repo 
[LocalCD]
name="local CD"
baseurl=file:///mnt/cdrom #定義了yum倉庫的路徑
gpgcheck=no    #不做包合法性檢查
enabled=1    #啓用此yum源,如果沒有此行,也會默認啓用

[root@node2 yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-fasttrack.repo  CentOS-Media.repo  CentOS-Vault.repo  local.repo
[root@node2 yum.repos.d]# mv CentOS-Base.repo{,.bak}  #J將系統自帶的倉庫配置文件改名後,就可以停用它


第三步:檢查yum倉庫能否正常使用    

[root@node2 yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
repo id                                                                      repo name                                                                       status
LocalCD                                                                      "local CD"                                                                      6,518
repolist: 6,518
[root@node2 yum.repos.d]# yum install zsh    #嘗試yum install zsh, 出現如下信息即代表正常
Loaded plugins: fastestmirror, refresh-packagekit, security
Setting up Install Process
Loading mirror speeds from cached hostfile
Resolving Dependencies
--> Running transaction check
---> Package zsh.x86_64 0:4.3.10-7.el6 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=============================================================================================================================================================================================
 Package                                  Arch                                        Version                                             Repository                                    Size
=============================================================================================================================================================================================
Installing:
 zsh                                      x86_64                                      4.3.10-7.el6                                        LocalCD                                      2.1 M
Transaction Summary
=============================================================================================================================================================================================
Install       1 Package(s)
Total download size: 2.1 M


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