一、使用場景
很多企業都會自建yum倉來便於企業內部的rpm包安裝,這樣在安裝軟件時就可以利用局域網內的高速帶寬進行下載和安裝rpm包,縮短了通過公網下載的長時間等待。
二、yum與rpm的說明
首先需要對yum與rpm包本身以及他們之間的關系進行一些說明。rpm本身是一個包管理器,所以它具備一個管理器的打包、安裝查詢、升級、卸載、校驗、數據庫管理這些基本功能,這就解釋了為什麼我們在安裝一個rpm包前使用rpm -qpi /path/name.rpm能查到這個包中的信息,其中如果出現Relocations:(notrelocatable)這個提示,說明這個rpm包再安裝過程中是不允許更改安裝位置的。
使用rpm命令安裝最讓人頭疼的問題就是軟件包之間的依賴關系,使用yum工具會自動處理我們安裝過程中包之間依賴關系 ,它只是一個前端的工具,並不能替代rpm包管理器。我們有沒有想過,yum為什麼會知道包之間的相互依賴關系呢?yum本身並不會知道包之間的依賴關系,而包之間的依賴關系等元數據,會存放在repodata這個文件中。以光盤為例,當我們使用mount /dev/cdrom /media命令後,就會在/media/下看到該目錄,所以這就解釋了在自定義yum倉時為什麼repodata文件的路徑就是yum倉baseurl的所在路徑。
repodata文件中的repomd.xml就存放著各個rpm包之間的關聯信息,而TRANS.TBL存放著rpm包的分組信息
而客戶端在使用yum命令時,會先下載yum的配置文件,從中找到yum倉的路徑,再下載repodate裡的元數據,而後安裝rpm包
三、yum配置文件詳解
通過上面,我們知道yum是一個前端工具程序,和其他程序一樣自身都有配置文件,其中就包含了yum倉的位置指向。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倉,.repo文件中第一行為repoID,且此repoID不能重復,這就是為什麼上圖下載的yum配置文件名為base的原因。
四、搭建步驟
通過上面可以知道,使用yum安裝rpm包需要有repodata目錄,該目錄可以通過yum createrepo
1.使用本地光盤充當yum源安裝createreop命令
(1)放入光盤,使用mount /dev/cdrom /media 將光盤內的目錄掛載到/media目錄下,
(2)使用vim /etc/yum.repos.d/dvd.repo 創建一個名為dvd.repo的配置文件
[base]——repoID 不能重復
name——任意字符串
baseurl——指定yum倉的位置,本地文件使用協議未file://,後面的/media為yum倉路徑(repodata在/media/目錄下)
enable——是否啟用此yum倉,1表示啟用;0禁用
gpgcheck——gpg檢測,1為檢測;0為不檢測,出於安全rpm包在發行時會用自己的私鑰加密,並發布公鑰,/media/目錄下RPM-GPG-KEY-CentOS-6就為用戶的公鑰,如果gpgcheck值為1,就需要導入公鑰,否則無法安裝,公鑰位置為前一張圖所示
cost——開銷值,也可以不寫,不寫默認為1000。前面說過yum倉可以有多個,通過cost值大小來設置yum倉的優先順序
(3)創建好後,輸入yum repolist,可以看到yum倉已經被識別
2.安裝並啟動httpd服務
使用yum install httpd 安裝httpd程序,安裝完後並啟用httpd服務,通過netstat -ntl查看80端口是否正常偵聽,需要通過http協議訪問的安裝包必須放在/var/www/html目錄內。
3.復制二進制rpm包到/var/www/html目錄內,並創建repodate
(1)使用mirror命令從公網下載一個鏡像,放置/var/www/html/內,下載後的目錄為openstact-juno
(2)進入/var/www/html/openstact-juno 目錄刪除鏡像本身自帶的repodata(此步驟是為測試createrepo)
(3)使用createrepo/var/www/html/openstact-juno 創建新的repodata目錄,創建過程中可以看到他在抽取生成新的元數據
(4)此時,局域網內通過浏覽器輸入 http://ip/filename就能看到結果了
五、本地yum倉驗證
驗證本地yum倉是否正常對外提供服務,可以在局域網內另找一台host或使用本host來進行驗證,本例繼續使用原有host
1.輸入 vim /etc/yum.repos.d/openstack-juno.repo 創建一個配置文件,為方便測試,不檢測gpgcheck
2.此時yum repolist中就包含新的openstack-juno
3.使用yum list all | less 找一個openstack-juno內的yum包,再使用 yum installopenstack-ceilometer-compute.noarch 安裝,可以從repository看到,openstack-juno已被使用,此致,操作完成