1. 程式人生 > 實用技巧 >yum命令

yum命令

yum管理工具

yum主要用於自動安裝、升級rpm軟體包,它能自動查詢並解決rpm包之間的依賴關係;

要成功的使用YUM工具安裝更新軟體或系統,就需要有一個包含各種rpm軟體包的repository(軟體倉庫),這個軟體倉庫我們習慣稱為yum源;

網際網路上有大量的yum源,但由於受到網路環境的限制,導致軟體安裝耗時過長甚至失敗,特別是當有大量伺服器大量軟體包需要安裝時,緩慢的進度條令人難以忍受,因此我們在優化系統時,一般都會更換國內的源;

目前常見得國內yum源:阿里,搜狐,網易都可以.

還可以搭建本地yum源,相比較而言,本地YUM源伺服器最大優點是區域網的快速網路連線和穩定性,有了區域網中的YUM源伺服器,即便在Internet連線中斷的情況下,也不會影響其他YUM客戶端的軟體安裝和升級.

yum與rpm關係

1,rpm本身是一個包管理器,所以它具備一個管理器的打包、安裝查詢、升級、解除安裝、校驗、資料庫管理這些基本功能;

2,使用rpm命令安裝最讓人頭疼的問題就是軟體包之間的依賴關係,使用yum工具會自動處理我們安裝過程中包之間依賴關係,它只是一個前端的工具,並不能替代rpm包管理器;

3,yum本身並不會知道包之間的依賴關係,而包之間的依賴關係等元資料,會存放在repodata這個檔案中;

4,以光碟為例,當我們使用掛在光碟到本地時,如 mount /dev/cdrom /media/cdrom ,就會在/media/cdrom/下看到光碟內的目錄和檔案,repodata檔案中的repomd.xml就存放著各個rpm包之間的關聯資訊,而TRANS.TBL存放著rpm包的分組資訊;

5,客戶端在使用yum命令時,會先下載yum的配置檔案,從中找到yum倉的路徑,再下載repodate裡的元資料,而後安裝rpm包;yum客戶端安裝過程:1,獲取倉庫元資料目錄repodata/2,分析要安裝的程式包3,獲取程式包.

yum配置方式

1,直接配置/etc/yum.conf檔案;

2,在/etc/yum.repos.d/目錄下建立以.repo結尾的檔案

yum的配置檔案分為主配置段[/etc/yum.conf]和倉庫配置段[/etc/yum.repos.d/*.repo];

這麼設計是因為yum倉庫可有多個,如果都寫在/etc/yum.conf檔案中,不便於檢視,所以有了倉庫配置段;

yum工具會將所有在/etc/yum.repos.d/目錄內以.repo結尾的檔案來作為配置檔案;

比如我們可以在/etc/yum.repos.d/下為每一個yum倉庫定義一個.repo檔案,或者在一個.repo檔案中分段表示多個yum倉,

yum.conf檔案

yum配置檔案分為兩部分:main和repository

main部分定義了全域性配置選項,整個yum 配置檔案應該只有一個main,常位於/etc/yum.conf中;

repository部分定義了每個源/伺服器的具體配置,可以有一到多個,常位於/etc/yum.repo.d/目錄下的各檔案中;

yum.conf詳解

[main]
#yum快取的目錄.yum在此儲存下載的rpm包和資料庫,預設設定為/var/cache/yum
cachedir=/var/cache/yum

#安裝完成後是否保留軟體包,0為不保留(預設為0),1為保留
keepcache=0

#Debug資訊輸出等級,範圍為0-10,預設為2
debuglevel=2

#yum日誌檔案位置,使用者可以到/var/log/yum.log檔案去查詢過去所做的更新。
logfile=/var/log/yum.log

#包的策略,一共有兩個選項:newest和last.這個作用是如果你設定了多個repository,而同一軟體在不同的repository中同時存在,yum 應該安裝哪一個,如果是newest,則yum 會安裝最新的那個版本;如果是last,則yum 會將伺服器id 以字母表排序,並選擇最後的那個伺服器上的軟體安裝,一般都是選newest
pkgpolicy=newest

#指定一個軟體包,yum 會根據這個包判斷你的發行版本,預設是redhat-release,也可以是安裝的任何針對自己發行版的rpm包
distroverpkg=redhat-release

#有1和0兩個選項,表示yum 是否容忍命令列發生與軟體包有關的錯誤,比如你要安裝1,2,3三個包,而其中3此前已經安裝了,如果你設為1,則yum 不會出現錯誤資訊。預設是0
tolerant=1

#有1和0兩個選項,設定為1,則yum 只會安裝和系統架構匹配的軟體包,例如,yum 不會將i686的軟體包安裝在適合i386的系統中,預設為1
exactarch=1

#網路連線發生錯誤後的重試次數,如果設為0,則會無限重試。預設值為6.
retries=6

#這是一個update 的引數,具體請參閱yum(8),簡單的說就是相當於upgrade,允許更新陳舊的RPM包
obsoletes=1

#是否啟用外掛,預設1為允許,0表示不允許。我們一般會用yum-fastestmirror這個外掛
plugins=1

除了上述預設之外,還有一些可以新增的選項:
exclude=selinux*
#排除某些軟體在升級名單之外,可以用萬用字元,列表中各個專案要用空格隔開,這個對於安裝了諸如美化包,中文補丁的朋友特別有用

gpgcheck=1
#有1和0兩個選擇,分別代表是否進行gpg(GNU Private Guard)校驗,以確定rpm 包的來源是有效和安全的。這個選項如果設定在[main]部分,則對每個repository 都有效,預設值為0.

.repo檔案格式

一個repo檔案定義了一個或多個軟體倉庫,指定yum從哪裡下載或更新的軟體包;

repodata目錄所在的父目錄就是一個可用倉庫

base.repo檔案格式

#包來源的名稱,可自定義,不能重名
[base]

#yum倉庫的名稱,可自定義,一般見名知意
name=base $releasever - $basearch

#表示從列出的baseurl中順序選擇還是隨機選擇
failovermethod=priority|roundrobin

#排除軟體程式不允許安裝更新,空格分隔,支援萬用字元
exclude=software1* software2* software3* ...

#指定yum源,file指向本地檔案,http指向網際網路網站,可指多個,順序或隨機使用倉庫,注意,不能頂格寫
baseurl=
        file:///mnt/cdrom
        http://mirrors.163.com/centos/$releasever/os/$basearch/    
        http://mirrors.sohu.com/centos/$releasever/os/$basearch/

#是否啟動此倉庫,1為啟動,0為禁用
enabled=1

#是否對下載的rpm進行gpg的校驗,以確定rpm包的來源是有效和安全的,1為啟動,0為禁用
gpgcheck=1

#定義用於校驗的gpg金鑰
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#定義開銷,預設為1000,數字越小,越優先使用
cost=1000

配置檔案中常用的四個巨集

$releasever:程式的版本,如CentOS6.5替換為6

$arch:系統架構,如i386,x86 64等,注意,=號左右不能出現空格

$basearch:系統基本架構,如i686,i586等的基本架構為i386

$YUM0-9:在系統中定義的環境變數,可以在yum中使用

基於本地光碟配置yum源示例:

mount /dev/cdrom/ /media/cdrom/
vim /etc/yum.repo.d/cdrom.repo
[cdrom]
name=local cdrom
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

基於公網映象網站配置yum源示例:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
yum makecache

yum命令

選項:

-c:指定配置檔案
-v:詳細模式
-q:靜默模式
-C:完全從快取中執行,而不去下載或者更新任何標頭檔案

yum -y:自動回答yes

引數:

#自動搜尋最快的映象外掛
yum install yum-fastestmirror

#安裝yum圖形視窗外掛
yum install yumex

#檢視可批量安裝的列表
yum grouplist

#根據關鍵字package_name查詢安裝包
yum search package_name

#列出所有可用repo  
yum repolist {enable|disabled|all}

#列出rpm包,支援萬用字元,如php*
yum list {all|installed|available}

#檢視包的描述資訊
yum info package_name

#列出所有的包組的資訊
yum groupinfo group_name

#清理yum快取
yum clean {all|package|metadata|expire-cache|rpmdb|plugins}

# 清除快取目錄下的headers
yum clean headers

#清楚快取目錄下舊的headers
yum clean oldheaders

#安裝程式包
yum install package_name

#重灌
yum reinstall 

#升級,不跟包名,升級所有可升級的包
yum update 
yum update package_name

#解除安裝
yum remove|erase pack_name

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

#安裝包組
yum groupinstall "group_name"

#解除安裝包組
yum groupremove "group_name"

#不安裝僅下載包到本地,需要安裝外掛yum-plugin-downloadonly
yum install --downloadonly --downloaddir=/local_rpm/*.rpm

跟開發相關的包組:
Development Tools 開發工具
Server Platform Development 服務開發平臺
Desktop Platform Development 圖形開發平臺

錯誤1:

安裝包時提示failure: Packages/package_name from base: [Errno 256] No more mirrors to try.

解決辦法:

#yum clean all

#yum makecache

#yum -y update

yum源和yum倉庫

基於本地光碟配置yum源示例:

mount /dev/cdrom/ /media/cdrom/
vim /etc/yum.repo.d/cdrom.repo
[cdrom]
name=local cdrom
baseurl=file:///media/cdrom
enabled=1
gpgcheck=0

基於公網映象網站配置yum源示例:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
yum clean all
yum makecache

使用第三方YUM源(EPEL,RPMForge,RPMFusion)

CentOS自帶的yum源中rpm包數量有限,很多時候找不到我們需的軟體包,所以我們需要安裝包含豐富的第三方YUM源來滿足我們的需求.

# 安裝yum-priorities外掛,yum-priorities外掛的作用主要是設定呼叫源時的優先順序的,一般將官方的優先順序設定為最高,在每個庫最後加上priority=[#]欄位來設定每個映象的優先順序,#=1-99,1為最高,99為最低
yum install -y yum-priorities

#新增欄位:priority=#(N為1到99的正整數,數值越小越優先);一般在[base],[addons],[updates],[extras]欄位下設定高優先順序;[CentOSplus],[contrib]欄位下設定低優先順序,其他第三的軟體源為最低優先順序;
vim /etc/yum.repo.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
priority=1

#安裝epel
#32位:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-8.noarch.rpm
#64位:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
vi /etc/yum.repos.d/epel.repo  #在每個庫後面新增優先順序2
[epel]
...
priority=2

#安裝rpmforge
#32位:
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
#64位:
rpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# 設定優先順序
vi /etc/yum.repos.d/rpmforge.repo
[rpmforge]
...
priority=3

#安裝rpmfusion
#32位:
rpm -ivh http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm
#64位:
rpm -ivh http://download1.rpmfusion.org/free/el/updates/6/x86_64/rpmfusion-free-release-6-1.noarch.rpm
# 設定優先順序
vi /etc/yum.repos.d/rpmfusion-free-updates.repo
[rpmfusion-free-updates]
...
prioryty=4

# 設定優先順序
vi /etc/yum.repos.d/rpmfusion-free-updates-testing.repo
[rpmfusion-free-updates-testing]
...
priority=4

# 載入所有yum源
yum check-update
# 列出所有第三方yum源
yum list

搭建本地yum伺服器

使用場景:很多企業都會自建yum倉來便於企業內部的rpm包安裝,這樣在安裝軟體時就可以利用區域網內的高速頻寬進行下載和安裝rpm包,縮短了通過公網下載的長時間等待;

方法示例:

#建立yum倉庫目錄
mkdir -p /application/yum/centos6.6/x86_64/    
cd /application/yum/centos6.6/x86_64/
rz
#上傳rpm包到此目錄,此目錄下面還可以包括資料夾

#安裝createrepo軟體
yum -y install createrepo 

#初始化repodata索引檔案
createrepo -pdo /application/yum/centos6.6/x86_64/ /application/yum/centos6.6/x86_64/

#提供yum服務,可以用Apache或nginx提供web服務,但用Python的http模組更簡單,適用於內網環境
python -m SimpleHTTPServer 80 &
python -m SimpleHTTPServer 80 &>/dev/null &  

#新增新的rpm包,這裡只下載軟體不安裝
yumdownloader zlib-devel
cp zlib-devel-1.2.3-29.el6.x86_64.rpm /application/yum/centos6.6/x86_64/
createrepo --update /application/yum/centos6.6/x86_64/  #每加入一個rpm包就要更新一下。

#客戶端配置
vi /etc/yum.repos.d/etiantian.repo 
[etiantian]
name=Server
baseurl=http://yum.etiantian.org
enabled=1
gpgcheck=0
#在CentOS-Base.repo的幾個可用源加上enabled=0使其不可用,唯一能用的是etiantian.repo,分發修改過的CentOS-Base.repo檔案。要使用外部源,則使用yum --enablerepo=base -y install

注:yumdownloader,由yum-utils包提供