什麼是yum
yum是Yellowdog update Modified的簡稱。yum的宗旨是自動化的升級、安裝/移除rpm安裝包(也就是說yum這個命令它的操作對象是RPM包),收集rmp的相關信息,檢查依賴性,並提示用戶解決。
yum的關鍵之處是要有可靠的repository,顧名思義這就是軟件的倉庫,它可以是http或者ftp站點,也可以是本地的軟件池,但是必須包含rpm的header,rmp的header包括了rmp的各種信息,包括描述、功能、提供的文件、依賴性等,正是收集了這些信息,才能自動化的完成餘下的任務。yum本身就是運行在linux上的自動管理安裝包的系統。
yum 的理念是使用一箇中心倉庫(repository)管理一部分甚至一個distribution 的應用程序相互關係,根據計算出來的軟件依賴關係進行相關的升級、安裝、刪除等等操作,減少了Linux 用戶一直頭痛的dependencies 的問題。這一點上,yum 和apt 相同。apt 原爲debian 的deb 類型軟件管理所使用,但是現在也能用到RedHat 門下的rpm 了。
注:linux下的RPM的全稱是“RedHat Package Manager”,最早是Red Hat公司開發的,而rpm包則是軟件編譯完成後按照RPM機制打包起來的一個文件,可以用rpm命令安裝的一個軟件安裝包,它省去了Linux軟件安裝中編譯的步驟,安裝成功後軟件就可以用了。儘管幾乎所有的Linux發行版本都使用這種形式進行軟件包的管理安裝、更新和卸載軟件,但是並不受linux用戶喜愛,主要原因就是因爲rpm軟件包之間的依賴性問題往往會很繁瑣,一般用戶根本無法解決。
RPM包的特點是:
1.實現已經編譯好;
2.安裝方便;
3.安裝過程中要求環境一致;
4.反安裝時要從最上層開始。
RPM包的名稱規則示例:
ttpd-manual- 2.0.40-21.i386.rpm,
ttp-manual是軟件包的名稱,2是主版本號;0是次版本號;40是次版本號;21是編譯的次數;i386是適合的平臺;.rpm說明這是一個RPM包。
yum的特點
1.可以同時配置多個資源庫(repository)
2.簡潔的配置文件(一般配置文件是/etc/yum.conf)
3.自動解決增加或者刪除rpm包時遇到的依賴問題
4.保持與rpm的數據庫一致
yum的配置文件
yum的配置文件,它的絕對路徑一般是:/etc/yum.conf。yum的一切配置信息都存儲在這個文件中,這是yum系統中最重要的內容。
yum.conf一般分爲main和repository兩部分,但是默認情況下只有main部分。每一個yum.conf都只能有一個main部分。repository 部分定義了每個源/服務器的具體配置,可以有一到多個。常位於/etc/yum.repo.d 目錄下的各文件中。
使用cat /etc/yum.conf查看該文件的內容:
1.cachedir:此項爲yum下載的RPM包的緩存目錄,yum在此存儲下載的rpm包和數據庫
2.keepcache:緩存是否保存,1表示安裝後保留軟件包,0表示安裝後刪除軟件包
3.debuglevel:出錯日誌級別,級別爲0-10,默認爲2(只保留安裝和刪除記錄)
4.logfile:存放系統更新軟件的記錄,用戶可以在該配置項配置的文件中檢查自己在過去的日子都做了哪些更新
5.pkgpolicy: 包的策略。一共有兩個選項,newest和last,這個作用是如果你設置了多個repository,而同一軟件在不同的repository中同時存 在,yum應該安裝哪一個,如果是newest,則yum會安裝最新的那個版本。如果是last,則yum會將服務器id以字母表排序,並選擇最後的那個服務器上的軟件安裝。
6.distroverp:指定一個軟件包,yum會根據這個包判斷你的發行版本,默認是RedHat-release,也可以是安裝的任何針對自己發行版的rpm包。
7.tolerent:也有1和0兩個選項,表示yum是否容忍命令行發生與軟件包有關的錯誤,比如你要安裝1,2,3三個包,而其中3此前已經安裝了,如果你設爲1,則yum不會出現錯誤信息。默認是0。
8.exactarch:有兩個選項1和0,代表是否只升級和你安裝軟件包cpu體系一致的包,如果設爲1,則如你安裝了一個i386的rpm,則yum不會用1686的包來升級。
9.retries:網絡連接發生錯誤後的重試次數,如果設爲0,則會無限重試。
10.obsoletes:這是一個update的參數,具體請參閱yum(
8
),簡單的說就是相當於upgrade,允許更新陳舊的RPM包。
11.gpgcheck:是否檢查GPG(GNU Private Guard),一種密鑰方式簽名。
12.plugins:否允許使用插件,默認是
0
不允許,但是我們一般會用yum-fastestmirror這個插件。
13.installonly_limit:允許保留多少個內核包。
14.exclude:屏蔽不想更新的RPM包,可用通配符,多個RPM包之間使用空格分離。
15.reposdir:該選項用戶指定 .repo 文件的絕對路徑。.repo 文件包含軟件倉庫的信息 (作用與 /etc/yum.conf 文件中的 [repository] 片段相同)。 reposdir=[包含 .repo 文件的目錄的絕對路徑]
16.bugtracker_url:追蹤bug路徑
使用:man 5 yum.conf #可獲得yum.conf的詳解
yum的工作原理
yum的工作模式是C/S架構:
Server端(yum倉庫):依賴關係庫、原文件、校驗碼文件。
Client端:yum客戶端程序、配置文件(連接Server路徑信息)。
執行yum命令時,會首先從”/etc/yum.repo.d”目錄下的衆多repo文件中取得軟件倉庫的地址並下載“元數據”,“元數據”包含註冊於該軟件倉庫內所有軟件包的包名及其所需的依賴環境等信息,yum得到這些信息後會和本地以後環境做對比,進而列出確認需要安裝哪些包,並在用戶確認後開始安裝。
“元數據”由位於yum源服務器相關路徑的repodata目錄下的repomd.xml做索引。
yum系統的工作流程:
yum的基本工作流程如下:
服務器端:在服務器上面存放了所有的rpm軟件包,然後以相關的功能去分析每個rpm文件的依賴性關係,將這些數據記錄成文件存放在服務器的某特定目錄內。
客戶端:如果需要安裝某個軟件時,先下載服務器上面記錄的依賴性關係文件(可通過WWW或FTP方式),通過對服務器端下載的紀錄數據進行分析,然後取得所有相關的軟件,一次全部下載下來進行安裝。
.repo文件
什麼是repo文件? repo文件是Fedora中yum源(軟件倉庫)的配置文件,通常一個repo文件定義了一個或者多個軟件倉庫的細節內容,例如我們將從哪裏下載需要安裝或者升級的軟件包,repo文件中的設置內容將被yum讀取和應用!
進入/etc/yum.repos.d/目錄下,可以看到默認情況下有如下三個文件:
其中CentOS-Base.repo 是yum 網絡源的配置文件(一般都是用這個)
CentOS-Debuginfo.repo debug包尤其和內核相關的更新和軟件安裝
CentOS-Media.repo 這個是使用光盤掛載後調用的文件(我機器上沒有)
CentOS-Vault.repo 這個是最近新版本的加入的老版本的yum源配置(沒有。。。)
國內yum源的安裝(163,阿里雲,epel)
----阿里雲鏡像源
1、備份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2、下載新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
之後運行 yum clean all,yum makecache 生成緩存。
----163鏡像源
第一步:備份你的原鏡像文件,以免出錯後可以恢復。
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
第二步:下載新的CentOS-Base.repo 到/etc/yum.repos.d/
CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS5-Base-163.repo
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS6-Base-163.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
之後運行 yum clean all,yum makecache 生成緩存。
epel.repo:EPEL(Extra Packages for Enterprise Linux)是由 Fedora 社區打造,爲 RHEL 及衍生髮行版如 CentOS等提供高質量軟件包的項目。裝上了 EPEL,就像在 Fedora 上一樣,可以通過 yum install 軟件包名,即可安裝很多以前需要編譯安裝的軟件、常用的軟件或一些比較流行的軟件,比如現在流行的nginx、htop、ncdu、vnstat等等,都可以使用EPEL很方便的安裝更新。前可以直接通過執行命令: yum install epel-release 直接進行安裝,如果不能安裝,則先進行安裝epel源:
1、備份(如有配置其他epel源)
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
mv /etc/yum.repos.d/epel-testing.repo /etc/yum.repos.d/epel-testing.repo.backup
2、下載新repo 到/etc/yum.repos.d/
epel(RHEL 7)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
epel(RHEL 6)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
epel(RHEL 5)
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-5.repo
----官方源直接安裝
CentOS/RHEL 5 :
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm
CentOS/RHEL 6 :
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
CentOS/RHEL 7 :
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
倉庫(.repo文件)配置文件
#serverid是用於區別各個不同的repository,必須有一個獨一無二的名稱。若重複了,是前面覆蓋後面--還是反過來呢???用enabled 測試是後面覆蓋前面
[serverid]
#name,是對repository的描述,支持像$releasever $basearch這樣的變量; name=Fedora Core $releasever - $basearch - Released Updates
name=Some name for this server
#baseurl是服務器設置中最重要的部分,只有設置正確,才能從上面獲取軟件。它的格式是:
#baseurl=url://server1/path/to/repository/
#url://server2/path/to/repository/
#url://server3/path/to/repository/
#其中url支持的協議有 http:// ftp:// file://三種。baseurl後可以跟多個url,你可以自己改爲速度比較快的鏡像站,但#baseurl只能有一個,也就是說不能像如下格式:
#baseurl=url://server1/path/to/repository/
#baseurl=url://server2/path/to/repository/
#baseurl=url://server3/path/to/repository/
#其中url指向的目錄必須是這個repository header目錄的上一級,它也支持$releasever $basearch這樣的變量。
baseurl=url://path/to/repository/
#指定一個鏡像服務器的地址列表,通常是開啓的,本例中加了註釋符號禁用了,我們可以試試,將$releasever和$basearch替換
#成自己對應的版本和架構,例如10和i386,在瀏覽器中打開,我們就能看到一長串鏡可用的鏡像服務器地址列表。
#解釋下幾個變量
#$releasever 發行版的版本,從[main]部分的distroverpkg獲取,如果沒有,則根據redhat-release包進行判斷。
#$arch cpu體系,如i686,athlon等
#$basearch cpu的基本體系組,如i686和athlon同屬i386,alpha和alphaev6同屬alpha。
#
#url之後可以加上多個選項,如gpgcheck、exclude、failovermethod等,比如:
#gpgcheck=1
#exclude=gaim
#其中gpgcheck,exclude的含義和[main]部分相同,但只對此服務器起作用
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=fedora-$releasever&arch=$basearch
#failovermethode 有兩個選項roundrobin和priority,意思分別是有多個url可供選擇時,yum選擇的次序,roundrobin是隨機選擇,如果連接失 敗則使用下一個,依次循環,priority則根據url的次序從第一個開始。如果不指明,默認是roundrobin。
failovermethod=priority
#當某個軟件倉庫被配置成 enabled=0 時,yum 在安裝或升級軟件包時不會將該倉庫做爲軟件包提供源。使用這個選項,可以啓用或禁用軟件倉庫。
#通過 yum 的 --enablerepo=[repo_name] 和 --disablerepo=[repo_name] 選項,或者通過 PackageKit 的"添加/刪除軟件"工具,也能夠方便地啓用和禁用指定的軟件倉庫
enabled=[1 or 0]
補充:
[repositoryID] #倉庫ID,唯一標識別,不能重複
name=Some name for this repository # 完整的倉庫名稱
baseurl=url://path/to/repository/ # yum倉庫指明的訪問路徑
enabled={1|0} #是否啓用此yum倉庫,默認啓用
gpgcheck={1|0} #是否檢查完整性和來源合法性
gpgkey=URL #祕鑰文件位置,可能是對方倉庫提供
enablegroups={1|0} #是否基於組來批量管理程序包
failovermethod={roundrobin|priority} #故障轉移方法:輪詢、根據優先級選擇; 默認roundrobin隨機
cost=# #設置開銷,默認爲1000
說明:
1)*.repo可以將多個[repositoryID]的配置信息放在一個而文件內,也可以切成多個方便管理
2)baseurl可以使用:ftp:// 、http:// 、nfs:// 、file:/// 指明URL路徑
3)baseurl等號兩邊不能有空格,其後可以填寫多個鏡像訪問路徑,每行一個,不能頂行寫
多個訪問路徑間聯繫是鏡像相同,目的是爲了做備用訪問
4)更多選項使用man 5 yum.conf查看,基本配置只需前三行就可以
5)發行版光盤鏡像安裝可能會自動配置網絡鏡像URL地址
yum命令格式
yum的命令形式一般是如下:yum [options] [command] [package ...]
[options]是可選的,選項包括-h(幫助),-y(當安裝過程提示選擇全部爲"yes"),-q(不顯示安裝的過程)等等。 [command]爲所要進行的操作。 [package ...]是操作的對象。
1.OPTIONS
--nogpgcheck:禁止進行gpg check;
-y: 自動回答爲“yes”;
-q: 靜默模式,不輸出顯示信息;
--disablerepo=repoidglob:臨時禁用此處指定的repo;
--enablerepo=repoidglob:臨時啓用此處指定的repo;
--noplugins:禁用所有插件;
2.常用COMMAND
(1)顯示倉庫列表:repolist
# yum repolist [all|enabled|disabled] [所有|可用的|不可用]
yum常用命令
1.列出所有可更新的軟件清單命令:yum check-update
2.更新所有軟件命令:yum update
3.僅安裝指定的軟件命令:yum install <package_name>
4.僅更新指定的軟件命令:yum update <package_name>
5.列出所有可安裝的軟件清單命令:yum list
6.刪除軟件包命令:yum remove <package_name>
7.查找軟件包 命令:yum search <keyword>
8.清除緩存命令:
yum clean packages: 清除緩存目錄下的軟件包
yum clean headers: 清除緩存目錄下的 headers
yum clean oldheaders: 清除緩存目錄下舊的 headers
yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除緩存目錄下的軟件包及舊的headers