OpenStack学习笔记(一):建立本地yum源

获取yum的安装包

不管是安装openstack还是相关的组件,都常用yum命令来下载,而默认的yum源经常是指向国外的网站,下载速度都不会太快,这时候有两个选择:

  • 更改repo文件,使其指向国内的yum源
  • 更改repo文件,使其指向本地的yum源

本文主要讲述的是第二种,即更改repo文件,使其指向本地的yum源。

系统环境

  • windows 10操作系统
  • python3.5.2
    (主要用到lxml,requests,os三个包,如果lxml无法安装,也可以用BeautifulSoup或者正则代替)
  • wget1.5.1
  • centos7

使用本地yum源主要分为以下几步:

  • 在windows上下载所需的RPM包
  • 将RPM包上传到centos7的虚拟机
  • 使用createrepo创建索引
  • 修改repo文件使其指向本地文件

在windows上下载所需的RPM包

在下载RPM包的时候选择的是国内的开源镜像站阿里云和网易云,下载过程中主要分为两步:
  • 生成链接文件
  • 使用wget下载文件中的链接
之所以使用wget是开始看到wget有一个参数-r可以递归下载,可是在windows系统上试验时候发现只能下载html文件,不能下载整个目录,查资料和试验后决定先写一个简单的爬虫爬取镜像站RPM包的地址,生成一个text文件,然后使用wget的-i选项来下载相应的文件,python脚本如下:
    from lxml import etree
    import requests
    import os
    
    
    class wget_list(object):
        def __init__(self,url):
            self.url_b=url
            self.response = requests.get(self.url_b)
            self.response.encoding = 'utf-8'
            self.html = etree.HTML(self.response.text)
            self.url_list=[]
            self.comd_b='wget -nc -P '
        def get_child_url(self):
            self.tmp = self.html.xpath('////@href')
            for i in self.tmp:
                self.url_list.append(self.url_b+i.text)
            return self.url_list
        def write_url_list(self,file_dict,url_w):
            f = open(file_dict, 'a')
            for i in url_w:
                f.write(i)
                f.write('\n')
            f.close()
        def wget_url(self,file_dict,file_name):
            comd=self.comd_b+file_dict+' '+file_name
            os.system(comd)
            
    url='http://mirrors.aliyun.com/epel/7/x86_64/'
    file_dict='F:\wget\epel'
    file_name='F:\wget\epel.txt'
    t=wget_list(url)
    lu=t.get_child_url()
    
    for i in lu:
        wmt=wget_list(i)
        li2=wmt.get_child_url()
        wmt.write_url_list(file_name,li2)
    
    t.wget_url(file_dict,file_name)
主要思想是先爬取网页,分析网页后拿到网页上面的全部链接,然后将链接写入txt文件,最后调用wget命令下载列表中的文件。
以epel为例,阿里云上分为了多个文件夹,每个文件夹里面又有很多的rpm文件,总共10000+个文件,如果一个一个下载几乎不可能,但是可以通过爬虫获取链接,然后批量下载。下面解释下代码部分。
    class wget_list(object):
        def __init__(self,url):
            self.url_b=url
            self.response = requests.get(self.url_b)
            self.response.encoding = 'utf-8'
            self.html = etree.HTML(self.response.text)
            self.url_list=[]
            self.comd_b='wget -nc -P '

以上部分初始化,通过传入的url链接生成etree,并初始化相关变量。

        def get_child_url(self):
            self.tmp = self.html.xpath('//a')
            for i in self.tmp:
                self.url_list.append(self.url_b+i.text)

get_child_url这个方法是获取子链接,通过之前生成的etree来通过xpath进行解析,通过分析页面发现子链接都是a标签,所以可以通过下面这xpath获取所有的子链接,再将子链接写入到url_list这个变量里。

        def write_url_list(self,file_dict,url_w):
            f = open(file_dict, 'a')
            for i in url_w:
                f.write(i)
                f.write('\n')

write_url_list这个方法是将传入的url列表追加写入到txt文件,主要用于保存构造的下载链接。

        def wget_url(self,file_dict,file_name):
            comd=self.comd_b+file_dict+' '+file_name
            os.system(comd)

wget_url这个方法则是根据传入的文件和目录,文件内的url下载到目录下。

创建repo文件

创建repo文件主要可以分为以下几步:

  • 下载安装createrepo
  • 上传RPM包
  • 执行createrepo命令

下载安装createrepo包

获取了rpm安装包之后可以在linux环境下使用createrepo命令来创建索引,之后使用yum命令就可以直接安装,而使用createrepo命令需要先下载createrepo包,这个包可以直接使用系统盘来安装,过程如下:

  • 挂载光盘到指定目录
  • 修改repo文件
  • 直接使用yum命令下载
    挂载光盘到指定目录可以直接使用以下mount命令,这样子就可以将光盘的内容挂载到指定目录了
    mount -o loop /dev/cdrom /mnt/cdrom/
    备份并新增repo文件:
    cd /etc/yum.repos.d/
    rename .repo .repo.bak *
    vi local.repo
    然后在新增的repo文件输入如下命令:
    [base]
    name=base
    baseurl=file:///mnt/cdrom
    gpgcheck=0
    enable=1
    因为yum命令会判断/etc/yum.repos.d目录下的后缀为repo的文件信息进行下载安装,所以先将原repo文件重命名备份,然后新增一个后缀为repo的文件即可。
    文件内容第一行、第二行仅仅指代库的名称,可以任意填写,但中括号内的必须唯一,第三行指yum源的repodata文件夹坐在目录,后面的两项指的是不需要验证,且该内容有效。
    最后通过以下命令来下载安装createrepo包。
    yum install createrepo

上传RPM包

以在镜像站下载的openstack-liberty为例子,在进行简单的IP配置之后,可以通过相关工具将文件上传到指定目录,比较常用的有secureCRT自带secureFX来将下载的openstack-liberty上传到centos的目录下。

createrepo命令

createrepo is a program that creates a repomd (xml-based rpm metadata) repository from a set of rpms.

根据命令介绍,craterepo是一个创建RPM包的仓库索引的程序,常用的主要有-p -o -d

-d --database
Generate sqlite databases for use with yum. This is now the default.
-p --pretty
Output xml files in pretty format.
-o --outputdir <url>
Optional output directory (useful for read only media).

-d指使用sqlite数据库使用yum,这个是默认选项;
-p指的是用漂亮的个数输出xml文件
-o指的是输出目录,选项后必须接目录
现在可以使用以下命令来创建repodata文件

    createrepo -p  -d -o /var/ftp/openstack-liberty /var/ftp/openstack-liberty

由执行命令后的截图可以看到生成了一个repodata文件夹,文件夹下面有一个repomd.xml文件和其他文件,这里就是仓库的索引文件,同理用命令对其他的RPM包也创建repo文件。


配置yum源

配置本机yum源

配置本机yum源,只需要按照之前的步骤,执行以下命令修改repo文件即可,修改后的文件如图所示:

vi /etc/yum.repos.d/local.repo 

图中显示repo文件包含了3个包,base,openstack-liberty和epel,其中base是光盘自带的基础包,openstack-liberty是从开源镜像站下载的rpm包,epel是centos的一些扩展应用包,基本能解决大部分软件的安装问题。可以通过以下命令验证是否配置成功,运行结果如图所示,可以看到存在base,epel,openstack-liberty三个包:

yum clean all
yum list

这里配置本机yum源完成。

配置FTP服务器

配置好本机yum源后,为了不必再其他机器上面也上传文件等一系列操作,可以直接建立一个ftp服务器,然后其他机器可以直接配置repo文件指向该目录,具体步骤如下:

  • 安装vsftpd
    yum install vsftpd
  • 启动ftp服务并设置为自启动
    systemctl restart vsftpd.service
    systemctl enable vsftpd.service
  • 修改配置文件指定ftp的目录,在最后一行添加一句anon_root=/var/ftp/来指定ftp目录,之后可以登录本机FTP站点验证。
    vi /etc/vsftpd/vsftpd.conf
  • 关闭防火墙
    systemctl stop firewalld.service
    systemctl disable firewalld.service
  • 清空iptables
    iptables -Z
    iptables -F
    iptables -X

修改repo文件

在另一台机上面备份repo文件,然后修改repo文件如下:

  cd /etc/yum.repos.d/       
  rename .repo .repo.bak *
  vi local.repo

在另一台机执行命令,进行测试,发现可以正常使用,至此,本地yum配置完成。

yum clean all
yum list

遇过的问题:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容