OpenStack高可用集群(上冊(cè)):原理與架構(gòu)》—3 集群資源管理系統(tǒng)">《OpenStack高可用集群(上冊(cè)):原理與架構(gòu)》—3 集群資源管理系統(tǒng)
1346
2025-04-01
11.1.2 制作OpenStack離線安裝yum源
在Linux系統(tǒng)的軟件包管理工具中,rpm和yum是兩個(gè)最常見的工具。rpm是由Redhat公司開發(fā)的包管理工具,即Redhat Package Management的縮寫。rpm可用于軟件包的安裝、卸載和查看等操作,但是rpm包并不能解決軟件包依賴問(wèn)題。而Linux作為一個(gè)開源系統(tǒng)平臺(tái),很多軟件包的安裝和運(yùn)行需要依賴額外軟件,如在使用rpm命令安裝某個(gè)軟件包時(shí),可能需要先安裝另一個(gè)依賴軟件包,而rpm并不能自動(dòng)處理這種依賴關(guān)系。相反,yum軟件包管理工具卻可以自動(dòng)處理軟件包之間的依賴關(guān)系,并能夠通過(guò)網(wǎng)絡(luò)yum源自動(dòng)進(jìn)行依賴查詢和安裝。因此,yum是Linux系統(tǒng)中非常重要的軟件包管理工具。在OpenStack的離線部署中,用戶可以事先同步網(wǎng)絡(luò)yum源至本地,并將同步到本地的軟件包制作成本地yum源,之后利用本地yum進(jìn)行OpenStack集群節(jié)點(diǎn)的快速安裝部署。
1. yum基礎(chǔ)介紹
yum是Yellowdog Updater Modified的簡(jiǎn)稱。yellowdog是一個(gè)Linux發(fā)行版。yum最初便是由yellowdog發(fā)行版的開發(fā)者Terra Soft利用Python語(yǔ)言開發(fā)而來(lái)的,當(dāng)然,Terra Soft開發(fā)時(shí)還稱之為yup(yellow dog updater)。之后杜克大學(xué)的Linux開發(fā)團(tuán)隊(duì)對(duì)其進(jìn)行了改進(jìn),之后便將其稱之為yum(Yellowdog Updater Modified)。yum的主要任務(wù)就是自動(dòng)處理與軟件包相關(guān)的操作,如軟件升級(jí)、安裝或移除rpm包、收集rpm包的相關(guān)信息以及檢查軟件包依賴性并自動(dòng)將依賴關(guān)系告知用戶。yum最重要的地方在于配置yum倉(cāng)庫(kù)(Repository),即yum源。Repository可以是HTTP或FTP站點(diǎn),也可以是本地目錄或文件夾(File)。對(duì)于任何一個(gè)yum倉(cāng)庫(kù),都必須生成一張包含全部軟件元數(shù)據(jù)信息的清單表(Manifest),元數(shù)據(jù)信息又稱rpm軟件包的header,header包括了rpm包的各種信息,如軟件包的描述、功能介紹、包含的文件以及依賴的軟件包列表等。yum倉(cāng)庫(kù)中的Manifest對(duì)全部rpm軟件進(jìn)行了匯總統(tǒng)計(jì),當(dāng)用戶在使用yum命令進(jìn)行指定rpm軟件包的操作時(shí),yum便會(huì)查詢Manifest以獲取相關(guān)的信息。Linux提供了Createrepo軟件包用以創(chuàng)建軟件倉(cāng)庫(kù),在制作本地yum源時(shí),通常利用Createrepo將包含rpm軟件包的目錄創(chuàng)建為yum倉(cāng)庫(kù),然后在/etc/yum.repos.d中配置指向該倉(cāng)庫(kù)的yum源即可(通常命名為filename.repo形式)。
yum有兩類配置文件:一個(gè)是yum.conf配置文件,這是yum服務(wù)的通用全局配置文件;另一個(gè)是yum特定倉(cāng)庫(kù)配置文件,倉(cāng)庫(kù)配置文件通常以.repo結(jié)尾。yum.conf是yum的全局性配置文件,位于/etc目錄,通常情況無(wú)須更改此配置文件。yum.conf主要用于配置yum的緩存目錄、運(yùn)行調(diào)式級(jí)別、日志文件、插件和gpg檢查是否啟用等全局性默認(rèn)參數(shù)。如下是Centos7系統(tǒng)中的yum.conf配置文件內(nèi)容,不同Linux版本的yum.conf內(nèi)容類似:
[root@mitaka ~]# more /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever? //yum下載軟件包的緩存目錄
keepcache=0? ? ? //是否保存緩存,1為保存
debuglevel=2? ? ?//調(diào)式級(jí)別(0-10)
logfile=/var/log/yum.log? ? //yum日志文件
exactarch=1? //是否允許更新不同架構(gòu)的rpm包,如是否在i386上更新i686的rpm包
obsoletes=1? //是否允許update陳舊的rpm包,1為允許
gpgcheck=1? ?//是否進(jìn)行g(shù)pg(GNU Private Guard)檢查
plugins=1? ? //是否允許使用插件,1為允許,通常需要使用yum-fastestmirror插件
installonly_limit=5 //允許保留多少kernel包
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release //告知yum系統(tǒng)版本
……
# metadata_expire=90m? ? ? //rpm包元數(shù)據(jù)到期時(shí)間
# PUT YOUR REPOS HERE OR IN separate files named file.repo? in
#/etc/yum.repos.d
yum特定倉(cāng)庫(kù)配置文件位于/etc/yum.repos.d目錄,通常特定的yum倉(cāng)庫(kù)對(duì)應(yīng)一個(gè)獨(dú)立的倉(cāng)庫(kù)配置文件(也可以在同一個(gè)配置文件中指定多個(gè)倉(cāng)庫(kù)源)。對(duì)于Centos 7系統(tǒng),默認(rèn)的yum倉(cāng)庫(kù)配置文件如下:
[root@mitaka ~]# ls -l /etc/yum.repos.d
total 28
-rw-r--r--. 1 root root 1664 Dec? 9? 2015 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Dec? 9? 2015 CentOS-CR.repo
-rw-r--r--. 1 root root? 649 Dec? 9? 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root? 290 Dec? 9? 2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root? 630 Dec? 9? 2015 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Dec? 9? 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 Dec? 9? 2015 CentOS-Vault.repo
其中,每一個(gè)repo文件都可以包含一個(gè)或多個(gè)yum源倉(cāng)庫(kù)。以CentOS-Base.repo為例,該倉(cāng)庫(kù)配置文件中的內(nèi)容如下:
[root@mitaka bak]# more 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-7
……
CentOS-Base.repo中一共配置了base、updates、extras和centosplus四個(gè)yum源,每個(gè)yum源的配置形式都是固定的,通常由name、mirrorlist(或baseur)、gpgcheck、enabled和gpgkey幾個(gè)參數(shù)組成。其中,name是由用戶自定義的yum源名稱,可以根據(jù)yum源的功能特性進(jìn)行自定義命名。mirrorlist或baseurl用于指定yum倉(cāng)庫(kù)源的位置,baseurl的值是一個(gè)具體的rpm軟件包倉(cāng)庫(kù),該倉(cāng)庫(kù)中通常包含一個(gè)存放rpm包元數(shù)據(jù)信息的repodata目錄,而mirrorlist是一個(gè)存放rpm包倉(cāng)庫(kù)鏈接的列表網(wǎng)站,yum會(huì)在mirrorlist指定的列表中選擇合適的rpm倉(cāng)庫(kù)作為軟件下載或更新的yum源。enabled參數(shù)用于設(shè)置是否啟用該yum源,僅有enbaled為1的情況下,yum才會(huì)搜索此yum源。gpgcheck和gpgkey主要用于設(shè)置yum倉(cāng)庫(kù)的gpg校驗(yàn),gpgcheck參數(shù)用于設(shè)置是否需要進(jìn)行g(shù)pg驗(yàn)證,如果值為0則不需要,此時(shí)也無(wú)須設(shè)置gpgkey參數(shù);如果值為1則表示需要進(jìn)行驗(yàn)證,則此時(shí)需要設(shè)置gpgkey以提供gpg驗(yàn)證碼。
2.同步OpenStack安裝包至本地
此處以制作基于Redhat發(fā)行的OpenStack版本(RDO,Redhat Distribution OpenStack)本地yum源為例,進(jìn)行OpenStack離線安裝yum源制作的講解。根據(jù)不同的OpenStack版本,用戶可能需要通過(guò)不同的方式啟用OpenStack repository,這里以在CentOS 7系統(tǒng)中部署Mitaka版本為例。為了支持RDO的OpenStack repository,通常需要啟用extras repository,而Centos 7的CentOS-Base.repo中默認(rèn)已經(jīng)存在extras repository,因此僅需在Centos 7系統(tǒng)中安裝OpenStack的Mitaka版本rpm包倉(cāng)庫(kù)即可:
yum install centos-release-openstack-mitaka
安裝完成之后,/etc/yum.repos.d中將會(huì)增加幾個(gè)與OpenStack和Ceph相關(guān)的.repo配置文件,這些配置文件中已經(jīng)設(shè)置了OpenStack和Ceph的yum源倉(cāng)庫(kù)。這幾個(gè)新增的repository配置文件分別是CentOS-OpenStack-mitaka.repo、CentOS-Ceph-Hammer.repo和CentOS-QEMU-EV.repo。/etc/yum.repos.d目錄中的repository配置文件如下:
[root@mitaka yum.repos.d]# ls -l /etc/yum.repos.d
total 40
-rw-r--r--. 1 root root 1664 Dec? 9? 2015 CentOS-Base.repo
-rw-r--r--? 1 root root 1057 Feb 25? 2016 CentOS-Ceph-Hammer.repo
-rw-r--r--. 1 root root 1309 Dec? 9? 2015 CentOS-CR.repo
-rw-r--r--. 1 root root? 649 Dec? 9? 2015 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root? 290 Dec? 9? 2015 CentOS-fasttrack.repo
-rw-r--r--. 1 root root? 630 Dec? 9? 2015 CentOS-Media.repo
-rw-r--r--? 1 root root 1128 Oct? 6 03:30 CentOS-OpenStack-mitaka.repo
-rw-r--r--? 1 root root? 578 Oct? 6? 2015 CentOS-QEMU-EV.repo
-rw-r--r--. 1 root root 1331 Dec? 9? 2015 CentOS-Sources.repo
-rw-r--r--. 1 root root 1952 Dec? 9? 2015 CentOS-Vault.repo
其中,CentOS-OpenStack-mitaka.repo中設(shè)置了Mitaka版本OpenStack的rpm安裝包yum源,其內(nèi)容如下:
[root@mitaka yum.repos.d]# more CentOS-OpenStack-mitaka.repo
……
[centos-openstack-mitaka]
name=CentOS-7-OpenStack mitaka
baseurl=http://mirror.centos.org/centos/7/cloud/$basearch/openstack-mitaka
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
……
在CentOS-OpenStack-mitaka.repo中,僅啟用了centos-openstack-mitaka這個(gè)yum源,該yum源中指定了安裝OpenStack所需rpm包的倉(cāng)庫(kù)路徑。正常情況下,此時(shí)已經(jīng)可以進(jìn)行在線安裝OpenStack,而如果需要進(jìn)行離線安裝,則還需到centos-openstack-mitaka這個(gè)yum源設(shè)置的rpm倉(cāng)庫(kù)中下載Redhat封裝的OpenStack Mitaka版本rpm軟件包到本地。下載yum倉(cāng)庫(kù)中的rpm包有兩種方式:一種是通過(guò)rsync命令遠(yuǎn)程同步rpm包到本地;另一種是通過(guò)reposync自動(dòng)以repository為單位同步rpm包到本地。rsync是一個(gè)功能相當(dāng)豐富的文件同步工具,可以基于TCP/IP網(wǎng)絡(luò)將遠(yuǎn)程文件同步到本地,并且具有豐富的參數(shù)可供選擇。如果采用rsync進(jìn)行OpenStack rpm安裝包的同步,則可以參考如下OpenStack安裝包同步腳本:
#!/bin/bash
#This Script used to download openstack mitaka rpm packages to local
rsyncBin="/usr/bin/rsync" //命令路徑,如果沒有則需要安裝rsync包
rsyncPerm='-avrt --delete --no-iconv --bwlimit=1000' //rsync執(zhí)行參數(shù)
Local_path='/data/openstack-mitaka'? //本地存放路徑
LogFile='/data/yum_repo/rsync_yum_log'? //存放同步操作的日志路徑
Date=`date +%Y-%m-%d`? ? ? ? ? ? ? ? ? ? ? ?//日期設(shè)置
#check
function check_rsync()
{
if [ $? -eq 0 ];then
echo "Rsync is success!" >>$LogFile/$Date.log
else
echo "Rsync is failed! " >>$LogFile/$Date.log
fi
}
if [ ! -d "$LogFile" ];then
mkdir -p $LogFile
fi
if [ ! -d "$Local_path" ];then
mkdir -p $Local_path
fi
//開始同步openstack-mitaka
echo 'Now start to rsync openstack-mitaka!' >>$LogFile/$Date.log
$RsyncBin $RsyncPerm rsync://mirror.centos.org/centos/7/cloud/x86_64\
/openstack-mitaka $Local_path >>$LogFile/$Date.log 2>&1
//同步完成后驗(yàn)證同步是否成功
check_rsync
相比之下,由yum-utils提供的reposync yum源同步工具是更為方便的選擇,reposync的語(yǔ)法如下:
reposync --repoid=REPOID --download_path=DESTDIR
其中,--repoid用于指定需要同步到本地的yum倉(cāng)庫(kù)ID;--download_path用于指定存放rpm包的本地路徑。reposync可以根據(jù)用戶指定的repo ID進(jìn)行同步,可以通過(guò)yum提供的repolist命令查看repo ID,具體如下:
[root@mitaka openstack-mitaka]# yum repolist
……
repo id? ? ? ? ? ? ? ? ? ? ? ? ? ? ?repo name? ? ? ? ? ? ? ? ? ? ? ?status
base/7/x86_64? ? ? ? ? ? ? ? ? ? ? ?CentOS-7 - Base? ? ? ? ? ? ? ? ?9,007
centos-ceph-hammer/7/x86_64? ? ? ? ?CentOS-7 - Ceph Hammer? ? ? ? ? ? ?40
centos-openstack-mitaka/x86_64? ? ? CentOS-7 - OpenStack mitaka? ? ?1,582
centos-qemu-ev/7/x86_64? ? ? ? ? ? ?CentOS-7 - QEMU EV? ? ? ? ? ? ? ? ?52
extras/7/x86_64? ? ? ? ? ? ? ? ? ? ?CentOS-7 - Extras? ? ? ? ? ? ? ? ?393
updates/7/x86_64? ? ? ? ? ? ? ? ? ? CentOS-7 - Updates? ? ? ? ? ? ? 2,560
repolist: 13,634
repolist的輸出中有三列,其中第一列便是與各個(gè)yum倉(cāng)庫(kù)對(duì)應(yīng)的ID。這里,OpenStack Mitaka的yum倉(cāng)庫(kù)對(duì)應(yīng)的ID為centos-openstack-mitaka/x86_64。因此,要同步基于Mitaka的RDO安裝包到本地/data/openstack-mitaka目錄,則同步命令如下:
reposync --repoid=centos-openstack-mitaka/x86_64\
--download_path=/data/openstack-mitaka
同步所需時(shí)間取決于倉(cāng)庫(kù)大小和網(wǎng)絡(luò)速度,就OpenStack Mitaka RDO源而言,同步完成之后,RDO源(http://mirror.centos.org/centos/7/cloud/x86_64/openstack-mitaka/)中的rpm包將被全部下載到本地目錄/data/openstack-mitaka中。下載后的rpm包如圖11-2所示。
圖11-2 OpenStack Mitaka安裝包截圖
3. OpenStack本地yum源制作
OpenStack安裝包下載到本地目錄后,需要重新生成yum倉(cāng)庫(kù)或者更新原有倉(cāng)庫(kù)。就RDO而言,由于遠(yuǎn)程RDO源本身就是yum倉(cāng)庫(kù),因此同步完成后遠(yuǎn)程yum倉(cāng)庫(kù)中的repodata也會(huì)被同步到本地,但是倉(cāng)庫(kù)路徑可能已經(jīng)改變,因此僅需對(duì)同步到本地的yum倉(cāng)庫(kù)進(jìn)行升級(jí)即可。創(chuàng)建或更新本地yum倉(cāng)庫(kù)的命令為createrepo,該命令由createrepo安裝包提供,具體如下:
[root@mitaka ~]# whereis createrepo
createrepo: /usr/bin/createrepo /usr/share/createrepo
/usr/share/man/man8/createrepo.8
[root@mitaka ~]# rpm -qf /usr/bin/createrepo
createrepo-0.9.9-23.el7.noarch
因此,如果不能使用createrepo命令,則應(yīng)安裝createrepo軟件包(通常Linux發(fā)行版的ISO鏡像中包含該軟件包):
yum install createrepo
如果當(dāng)前存放rpm包的路徑中沒有repodata目錄或repodata目錄損壞,則可以重新創(chuàng)建yum倉(cāng)庫(kù),在當(dāng)前目錄(/data/openstack-mitaka)創(chuàng)建yum倉(cāng)庫(kù)的命令如下:
[root@mitaka ~]#createrepo --baseurl=/data/openstack-mitaka \
/data/openstack-mitaka
……
創(chuàng)建成功之后,在/data/openstack-mitaka目錄下將會(huì)看到repodata目錄:
[root@mitaka openstack-mitaka]# ls -ld repodata
drwxr-xr-x 2 root root 4096 May 18 11:37 repodata
repodata目錄中存放了與此yum倉(cāng)庫(kù)相關(guān)的元數(shù)據(jù)信息,yum通過(guò)這些元數(shù)據(jù)與倉(cāng)庫(kù)進(jìn)行交互。如果當(dāng)前目錄中已經(jīng)存在repodata目錄,而僅希望更新當(dāng)前yum倉(cāng)庫(kù),則可以使用createrepo的--update參數(shù),命令如下:
[root@mitaka ~]# createrepo --baseurl=/data/openstack-mitaka --update\
/data/openstack-mitaka
yum倉(cāng)庫(kù)創(chuàng)建完成后,需要在/etc/yum.repos.d中進(jìn)行相應(yīng)的配置,以便yum命令能夠直接訪問(wèn)創(chuàng)建的yum倉(cāng)庫(kù)。本例中,在/etc/yum.repos.d中創(chuàng)建一個(gè)repository配置文件openstack-mitaka.repo,其內(nèi)容如下:
[root@mitaka yum.repos.d]# more openstack-mitaka.repo
[openstack-mitaka]
name=openstack-mitaka? ? ? ? ? ? ? ? ? ? //自定義倉(cāng)庫(kù)名稱
baseurl=file:///data/openstack-mitaka? ? //倉(cāng)庫(kù)地址
enbaled=1? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //啟用此倉(cāng)庫(kù)
gpgcheck=0? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //不進(jìn)行GPG驗(yàn)證
配置完成后,通常需要清除yum中原有的cache,并重新生成cache。清除yum陳舊cache的命令如下:
[root@mitaka yum.repos.d]# yum clean all
然后,重新生成cache,命令如下:
[root@mitaka yum.repos.d]# yum makecache
至此,已經(jīng)可以使用本地yum源進(jìn)行離線OpenStack安裝。下面以安裝OpenStack對(duì)象存儲(chǔ)Swift為例。這里安裝與Swift相關(guān)的全部軟件包,正常情況下yum應(yīng)該自動(dòng)解析依賴并到本地openstack-mitaka倉(cāng)庫(kù)中下載Swfit軟件包和依賴包并進(jìn)行安裝,安裝過(guò)程如下:
[root@mitaka ~]# yum install openstack-swift-*
……
Install? 7 Packages (+3 Dependent packages)
Total download size: 2.0 M
Installed size: 8.4 M
Is this ok [y/d/N]:
從上述安裝過(guò)程中可以看到,yum自動(dòng)解析與Swift相關(guān)的軟件包,并在openstack-mitaka這個(gè)本地yum倉(cāng)庫(kù)中查詢到了全部所需的安裝包,只要用戶確認(rèn)安裝并輸入“y”,yum就會(huì)自動(dòng)到/data/openstack-mitaka目錄中提取RPM安裝包進(jìn)行安裝。與在線網(wǎng)絡(luò)安裝相比,基于本地yum源的離線安裝速度要快得多,并且通過(guò)NFS共享方式,可以向多個(gè)節(jié)點(diǎn)發(fā)送并行命令進(jìn)行批量安裝。尤其是在大規(guī)模集群安裝部署中,制作OpenStack本地yum源并進(jìn)行離線安裝是非常必要的。
OpenStack 云計(jì)算
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。