OpenStack高可用集群下册):部署与运维》—11.1.2 制作OpenStack离线安装yum源

网友投稿 1148 2022-05-30

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的语法如下:

《OpenStack高可用集群(下册):部署与运维》—11.1.2 制作OpenStack离线安装yum源

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源并进行离线安装是非常必要的。

OpenStack 云计算

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:万物皆可Hook!重新捡起Hook神器-Xposed框架
下一篇:【C++】关键字(保留字)完整介绍
相关文章