美文网首页linux答疑
OpenStack学习笔记(一):建立本地yum源

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

作者: 邵胜奥 | 来源:发表于2017-03-31 00:30 被阅读454次

    获取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
    

    遇过的问题:

    相关文章

      网友评论

      • 廖马儿:请问下,怎么才能做到在windows2008 server搭建yum源呢?
        邵胜奥:yum是red hat版本的linux的一种简便的下载安装方式,在如果是使用windows2008 server的服务器的话是没有yum的,有需要的软件需要去到对应的网站上面下载安装。

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

      本文链接:https://www.haomeiwen.com/subject/bmdswttx.html