歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> 關於Linux >> Linux自建yum倉及相關知識詳解

Linux自建yum倉及相關知識詳解

日期:2017/3/1 11:47:39   编辑:關於Linux

一、使用場景

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

二、yum與rpm的說明

首先需要對yum與rpm包本身以及他們之間的關系進行一些說明。rpm本身是一個包管理器,所以它具備一個管理器的打包、安裝查詢、升級、卸載、校驗、數據庫管理這些基本功能,這就解釋了為什麼我們在安裝一個rpm包前使用rpm -qpi /path/name.rpm能查到這個包中的信息,其中如果出現Relocations:(notrelocatable)這個提示,說明這個rpm包再安裝過程中是不允許更改安裝位置的。

wKiom1dVGbPw78cYAACRdVHKLkE375.png-wh_50

使用rpm命令安裝最讓人頭疼的問題就是軟件包之間的依賴關系,使用yum工具會自動處理我們安裝過程中包之間依賴關系 ,它只是一個前端的工具,並不能替代rpm包管理器。我們有沒有想過,yum為什麼會知道包之間的相互依賴關系呢?yum本身並不會知道包之間的依賴關系,而包之間的依賴關系等元數據,會存放在repodata這個文件中。以光盤為例,當我們使用mount /dev/cdrom /media命令後,就會在/media/下看到該目錄,所以這就解釋了在自定義yum倉時為什麼repodata文件的路徑就是yum倉baseurl的所在路徑。

wKioL1dVGrnS6g7bAACEyVyIK3o659.png-wh_50

repodata文件中的repomd.xml就存放著各個rpm包之間的關聯信息,而TRANS.TBL存放著rpm包的分組信息

wKiom1dVGbSwWlGKAADyaiX5urU589.png-wh_50

而客戶端在使用yum命令時,會先下載yum的配置文件,從中找到yum倉的路徑,再下載repodate裡的元數據,而後安裝rpm包

wKioL1dVGrqibCAXAABbOnamGGw546.png-wh_50

三、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的原因。

wKiom1dVGbXwwEIcAAAhMpJMZqc343.png-wh_50

四、搭建步驟

通過上面可以知道,使用yum安裝rpm包需要有repodata目錄,該目錄可以通過yum createrepo 來創建,但是有時本地服務器可能沒有安裝createrepo命令,又沒有yum倉,以下,我們就以這種情況為例來介紹yum倉的搭建:

1.使用本地光盤充當yum源安裝createreop命令

(1)放入光盤,使用mount /dev/cdrom /media 將光盤內的目錄掛載到/media目錄下,

wKioL1dVGruCU6ZZAACa5li0pWY209.png-wh_50

(2)使用vim /etc/yum.repos.d/dvd.repo 創建一個名為dvd.repo的配置文件

wKiom1dVGbXh8ZG9AAAe-BwE_tM044.png-wh_50

[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倉已經被識別

wKioL1dVGruB0zqZAAAxH9XsLxE230.png-wh_50

2.安裝並啟動httpd服務

使用yum install httpd 安裝httpd程序,安裝完後並啟用httpd服務,通過netstat -ntl查看80端口是否正常偵聽,需要通過http協議訪問的安裝包必須放在/var/www/html目錄內。

wKiom1dVGbbTsImOAABMfCBO2rs282.png-wh_50

3.復制二進制rpm包到/var/www/html目錄內,並創建repodate

(1)使用mirror命令從公網下載一個鏡像,放置/var/www/html/內,下載後的目錄為openstact-juno

wKiom1dVGbbQHuSCAAAsaDtqzBc683.png-wh_50

(2)進入/var/www/html/openstact-juno 目錄刪除鏡像本身自帶的repodata(此步驟是為測試createrepo)

wKioL1dVGrygNrA5AAAMJukJO-I361.png-wh_50

(3)使用createrepo/var/www/html/openstact-juno 創建新的repodata目錄,創建過程中可以看到他在抽取生成新的元數據

wKioL1dVGrzy1dP3AAAzj3u5vHo428.png-wh_50

(4)此時,局域網內通過浏覽器輸入 http://ip/filename就能看到結果了

wKiom1dVGbfT1CGNAAFb2NvkzR8045.png-wh_50

五、本地yum倉驗證

驗證本地yum倉是否正常對外提供服務,可以在局域網內另找一台host或使用本host來進行驗證,本例繼續使用原有host

1.輸入 vim /etc/yum.repos.d/openstack-juno.repo 創建一個配置文件,為方便測試,不檢測gpgcheck

wKiom1dVGbfips-kAAAoXr9WzKQ401.png-wh_50

2.此時yum repolist中就包含新的openstack-juno

wKioL1dVGr3CxW_aAAA6FQcx4pE133.png-wh_50

3.使用yum list all | less 找一個openstack-juno內的yum包,再使用 yum installopenstack-ceilometer-compute.noarch 安裝,可以從repository看到,openstack-juno已被使用,此致,操作完成

wKioL1dVGr3Cg4xyAADshOnfC9g015.png-wh_50

Copyright © Linux教程網 All Rights Reserved