《OpenStack高可用集群(下册):部署与运维》—11.1.2 制作OpenStack离线安装yum源
11.1.2 制作OpenStack离线安装yum源
在Linux系统的软件包管理工具中,rpm和yum是两个最常见的工具。rpm是由Redhat公司开发的包管理工具,即Redhat Package Management的缩写。rpm可用于软件包的安装、卸载和查看等操作,但是rpm包并不能解决软件包依赖问题。而Linux作为一个开源系统平台,很多软件包的安装和运行需要依赖额外软件,如在使用rpm命令安装某个软件包时,可能需要先安装另一个依赖软件包,而rpm并不能自动处理这种依赖关系。相反,yum软件包管理工具却可以自动处理软件包之间的依赖关系,并能够通过网络yum源自动进行依赖查询和安装。因此,yum是Linux系统中非常重要的软件包管理工具。在OpenStack的离线部署中,用户可以事先同步网络yum源至本地,并将同步到本地的软件包制作成本地yum源,之后利用本地yum进行OpenStack集群节点的快速安装部署。
1. yum基础介绍
yum是Yellowdog Updater Modified的简称。yellowdog是一个Linux发行版。yum最初便是由yellowdog发行版的开发者Terra Soft利用Python语言开发而来的,当然,Terra Soft开发时还称之为yup(yellow dog updater)。之后杜克大学的Linux开发团队对其进行了改进,之后便将其称之为yum(Yellowdog Updater Modified)。yum的主要任务就是自动处理与软件包相关的操作,如软件升级、安装或移除rpm包、收集rpm包的相关信息以及检查软件包依赖性并自动将依赖关系告知用户。yum最重要的地方在于配置yum仓库(Repository),即yum源。Repository可以是HTTP或FTP站点,也可以是本地目录或文件夹(File)。对于任何一个yum仓库,都必须生成一张包含全部软件元数据信息的清单表(Manifest),元数据信息又称rpm软件包的header,header包括了rpm包的各种信息,如软件包的描述、功能介绍、包含的文件以及依赖的软件包列表等。yum仓库中的Manifest对全部rpm软件进行了汇总统计,当用户在使用yum命令进行指定rpm软件包的操作时,yum便会查询Manifest以获取相关的信息。Linux提供了Createrepo软件包用以创建软件仓库,在制作本地yum源时,通常利用Createrepo将包含rpm软件包的目录创建为yum仓库,然后在/etc/yum.repos.d中配置指向该仓库的yum源即可(通常命名为filename.repo形式)。
yum有两类配置文件:一个是yum.conf配置文件,这是yum服务的通用全局配置文件;另一个是yum特定仓库配置文件,仓库配置文件通常以.repo结尾。yum.conf是yum的全局性配置文件,位于/etc目录,通常情况无须更改此配置文件。yum.conf主要用于配置yum的缓存目录、运行调式级别、日志文件、插件和gpg检查是否启用等全局性默认参数。如下是Centos7系统中的yum.conf配置文件内容,不同Linux版本的yum.conf内容类似:
[root@mitaka ~]# more /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever //yum下载软件包的缓存目录
keepcache=0 //是否保存缓存,1为保存
debuglevel=2 //调式级别(0-10)
logfile=/var/log/yum.log //yum日志文件
exactarch=1 //是否允许更新不同架构的rpm包,如是否在i386上更新i686的rpm包
obsoletes=1 //是否允许update陈旧的rpm包,1为允许
gpgcheck=1 //是否进行gpg(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系统版本
……
# metadata_expire=90m //rpm包元数据到期时间
# PUT YOUR REPOS HERE OR IN separate files named file.repo in
#/etc/yum.repos.d
yum特定仓库配置文件位于/etc/yum.repos.d目录,通常特定的yum仓库对应一个独立的仓库配置文件(也可以在同一个配置文件中指定多个仓库源)。对于Centos 7系统,默认的yum仓库配置文件如下:
[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
其中,每一个repo文件都可以包含一个或多个yum源仓库。以CentOS-Base.repo为例,该仓库配置文件中的内容如下:
[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四个yum源,每个yum源的配置形式都是固定的,通常由name、mirrorlist(或baseur)、gpgcheck、enabled和gpgkey几个参数组成。其中,name是由用户自定义的yum源名称,可以根据yum源的功能特性进行自定义命名。mirrorlist或baseurl用于指定yum仓库源的位置,baseurl的值是一个具体的rpm软件包仓库,该仓库中通常包含一个存放rpm包元数据信息的repodata目录,而mirrorlist是一个存放rpm包仓库链接的列表网站,yum会在mirrorlist指定的列表中选择合适的rpm仓库作为软件下载或更新的yum源。enabled参数用于设置是否启用该yum源,仅有enbaled为1的情况下,yum才会搜索此yum源。gpgcheck和gpgkey主要用于设置yum仓库的gpg校验,gpgcheck参数用于设置是否需要进行gpg验证,如果值为0则不需要,此时也无须设置gpgkey参数;如果值为1则表示需要进行验证,则此时需要设置gpgkey以提供gpg验证码。
2.同步OpenStack安装包至本地
此处以制作基于Redhat发行的OpenStack版本(RDO,Redhat Distribution OpenStack)本地yum源为例,进行OpenStack离线安装yum源制作的讲解。根据不同的OpenStack版本,用户可能需要通过不同的方式启用OpenStack repository,这里以在CentOS 7系统中部署Mitaka版本为例。为了支持RDO的OpenStack repository,通常需要启用extras repository,而Centos 7的CentOS-Base.repo中默认已经存在extras repository,因此仅需在Centos 7系统中安装OpenStack的Mitaka版本rpm包仓库即可:
yum install centos-release-openstack-mitaka
安装完成之后,/etc/yum.repos.d中将会增加几个与OpenStack和Ceph相关的.repo配置文件,这些配置文件中已经设置了OpenStack和Ceph的yum源仓库。这几个新增的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中设置了Mitaka版本OpenStack的rpm安装包yum源,其内容如下:
[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这个yum源,该yum源中指定了安装OpenStack所需rpm包的仓库路径。正常情况下,此时已经可以进行在线安装OpenStack,而如果需要进行离线安装,则还需到centos-openstack-mitaka这个yum源设置的rpm仓库中下载Redhat封装的OpenStack Mitaka版本rpm软件包到本地。下载yum仓库中的rpm包有两种方式:一种是通过rsync命令远程同步rpm包到本地;另一种是通过reposync自动以repository为单位同步rpm包到本地。rsync是一个功能相当丰富的文件同步工具,可以基于TCP/IP网络将远程文件同步到本地,并且具有丰富的参数可供选择。如果采用rsync进行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执行参数
Local_path='/data/openstack-mitaka' //本地存放路径
LogFile='/data/yum_repo/rsync_yum_log' //存放同步操作的日志路径
Date=`date +%Y-%m-%d` //日期设置
#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
//同步完成后验证同步是否成功
check_rsync
相比之下,由yum-utils提供的reposync yum源同步工具是更为方便的选择,reposync的语法如下:
reposync --repoid=REPOID --download_path=DESTDIR
其中,--repoid用于指定需要同步到本地的yum仓库ID;--download_path用于指定存放rpm包的本地路径。reposync可以根据用户指定的repo ID进行同步,可以通过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的输出中有三列,其中第一列便是与各个yum仓库对应的ID。这里,OpenStack Mitaka的yum仓库对应的ID为centos-openstack-mitaka/x86_64。因此,要同步基于Mitaka的RDO安装包到本地/data/openstack-mitaka目录,则同步命令如下:
reposync --repoid=centos-openstack-mitaka/x86_64\
--download_path=/data/openstack-mitaka
同步所需时间取决于仓库大小和网络速度,就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仓库或者更新原有仓库。就RDO而言,由于远程RDO源本身就是yum仓库,因此同步完成后远程yum仓库中的repodata也会被同步到本地,但是仓库路径可能已经改变,因此仅需对同步到本地的yum仓库进行升级即可。创建或更新本地yum仓库的命令为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命令,则应安装createrepo软件包(通常Linux发行版的ISO镜像中包含该软件包):
yum install createrepo
如果当前存放rpm包的路径中没有repodata目录或repodata目录损坏,则可以重新创建yum仓库,在当前目录(/data/openstack-mitaka)创建yum仓库的命令如下:
[root@mitaka ~]#createrepo --baseurl=/data/openstack-mitaka \
/data/openstack-mitaka
……
创建成功之后,在/data/openstack-mitaka目录下将会看到repodata目录:
[root@mitaka openstack-mitaka]# ls -ld repodata
drwxr-xr-x 2 root root 4096 May 18 11:37 repodata
repodata目录中存放了与此yum仓库相关的元数据信息,yum通过这些元数据与仓库进行交互。如果当前目录中已经存在repodata目录,而仅希望更新当前yum仓库,则可以使用createrepo的--update参数,命令如下:
[root@mitaka ~]# createrepo --baseurl=/data/openstack-mitaka --update\
/data/openstack-mitaka
yum仓库创建完成后,需要在/etc/yum.repos.d中进行相应的配置,以便yum命令能够直接访问创建的yum仓库。本例中,在/etc/yum.repos.d中创建一个repository配置文件openstack-mitaka.repo,其内容如下:
[root@mitaka yum.repos.d]# more openstack-mitaka.repo
[openstack-mitaka]
name=openstack-mitaka //自定义仓库名称
baseurl=file:///data/openstack-mitaka //仓库地址
enbaled=1 //启用此仓库
gpgcheck=0 //不进行GPG验证
配置完成后,通常需要清除yum中原有的cache,并重新生成cache。清除yum陈旧cache的命令如下:
[root@mitaka yum.repos.d]# yum clean all
然后,重新生成cache,命令如下:
[root@mitaka yum.repos.d]# yum makecache
至此,已经可以使用本地yum源进行离线OpenStack安装。下面以安装OpenStack对象存储Swift为例。这里安装与Swift相关的全部软件包,正常情况下yum应该自动解析依赖并到本地openstack-mitaka仓库中下载Swfit软件包和依赖包并进行安装,安装过程如下:
[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]:
从上述安装过程中可以看到,yum自动解析与Swift相关的软件包,并在openstack-mitaka这个本地yum仓库中查询到了全部所需的安装包,只要用户确认安装并输入“y”,yum就会自动到/data/openstack-mitaka目录中提取RPM安装包进行安装。与在线网络安装相比,基于本地yum源的离线安装速度要快得多,并且通过NFS共享方式,可以向多个节点发送并行命令进行批量安装。尤其是在大规模集群安装部署中,制作OpenStack本地yum源并进行离线安装是非常必要的。
- 点赞
- 收藏
- 关注作者
评论(0)