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包提供