• 建立局域网内使用的CentOS7-OpenStack源


    by 无若

    1. 先建立局域网内使用的CentOS7源

    这个参看 http://www.cnblogs.com/gleaners/p/5735472.html

    2. 抓取所有OpenStack的包,文件夹完全对应。
    这里专门写了一个snatch_repo.py
    代码如下:

    #coding=utf-8
    import requests
    import re
    import string
    import urllib2 as url
    import urllib
    import Queue
    import os
    import sys
    from contextlib import closing 
    
    class ProgressBar(object):  
        def __init__(self, title, count=0.0, run_status=None, fin_status=None, total=100.0,    unit='', sep='/', chunk_size=1.0):  
            super(ProgressBar, self).__init__()  
            self.info = '[%s] %s %.2f %s %s %.2f %s'  
            self.title = title  
            self.total = total  
            self.count = count  
            self.chunk_size = chunk_size  
            self.status = run_status or ''  
            self.fin_status = fin_status or ' ' * len(self.statue)  
            self.unit = unit  
            self.seq = sep  
      
        def __get_info(self):  
            # [名称]状态 进度 单位 分割线 总数 单位  
            _info = self.info % (self.title, self.status, self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)  
            return _info  
      
        def refresh(self, count=1, status=None):  
            self.count += count  
            # if status is not None:  
            self.status = status or self.status  
            end_str = '
    '  
            if self.count >= self.total:  
                end_str = '
    '  
                self.status = status or self.fin_status  
                  
            sys.stdout.flush()
            sys.stdout.write(self.__get_info()+end_str)  
            sys.stdout.flush()
    
    def get_regex_outcome_list(text, regex):
        """
        获取文本的正则表达式截取
        """
        lst = []
        reobj = re.compile(regex)
        for match in reobj.finditer(text):
            #match.start()
            #match.end()
            lst.append(match.group())
        return lst
    
    def wget_file(url, file_name):
        """
        下载文件
        """
        #r = requests.get(url)
        #with open(file_name, 'wb') as code:
        #    code.write(r.content)
        
        with closing(requests.get(url, stream=True)) as response:  
            chunk_size = 1024  
            content_size = float(response.headers['content-length'])  
            ''' 
            需要根据 response.status_code 的不同添加不同的异常处理 
            '''  
            print('content_size', content_size,response.status_code ,  )  
            progress = ProgressBar('processing:'  
                        , total=content_size  
                        , unit='KB'  
                        , chunk_size=chunk_size  
                        , run_status='download...'  
                        , fin_status='download ok!')  
                # chunk_size = chunk_size < content_size and chunk_size or content_size  
            with open(file_name, 'wb') as file:  
                    for data in response.iter_content(chunk_size=chunk_size):  
                        file.write(data)  
                        progress.refresh(count=len(data))  
                          
            print('download ok!', ) 
    
    def page_to_url(url, html):
        """
        解析页面上的html,提取href中的url
        """
        lst = get_regex_outcome_list(html, 'href=".*"')
        context = ''
        path_lst = []
        for item in lst:
            item = item.replace('"','')
            item = item.replace('href=', '')
            path_lst.append((url+item, item))
        return path_lst
     
    def parser_path_list(init_url, path_lst, deep_queue):
        """
        解析路径列表,对路径做对应处理
        """
        for item in path_lst:
            url = item[0]
            file_name = item[1]
            if file_name[-1] == '/' and file_name != '../':
                deep_queue.put(url)
                dir_name = url[len(init_url):-1]
                try:
                    os.mkdir(dir_name)
                except Exception, e:
                    print e
            else:
                #pass
                file_path = url[len(init_url):-1]
                print file_path
                try:
                    wget_file(url, file_path)
                except Exception, e:
                    print e                
     
    def visit_all_path(init_url):
        """
        遍历所有路径
        """
        r = requests.get(init_url)
        path_lst = page_to_url(init_url, r.text)
        deep_queue = Queue.Queue()
        parser_path_list(init_url, path_lst, deep_queue)
    
        while not deep_queue.empty():
            print deep_queue.qsize()
            url = deep_queue.get()
            r = requests.get(url)
            path_lst = page_to_url(url, r.text)
            parser_path_list(init_url, path_lst, deep_queue)
            
            
        return path_lst
        
        
    
    if __name__ == '__main__':
        init_url = 'http://mirrors.aliyun.com/centos/7.2.1511/cloud/x86_64/openstack-liberty/'
        visit_all_path(init_url)

    # 代码里面使用的是阿里云的openstack-liberty。

    # 在做源的服务器(192.168.29.94)上建立对应的目录

    mkdir -p /var/ftp/pub/cloud/openstack-liberty

    # 将此代码(snatch_repo.py)拷贝至/var/ftp/pub/cloud/openstack-liberty/目录下

    cp snatch_repo.py /var/ftp/pub/cloud/openstack-liberty/

    # 由于snatch_repo.py中使用了requests模块,所以需要先安装requests模块

    pip install requests

    # 执行此脚本,下载,静静等待所有下载完毕

    python snatch_repo.py

    3. 清除老的repodata,生成新的repodata

    cp /var/ftp/pub/cloud/openstack-liberty/repodata/repomd.xml /tmp/

    yum -y install createrepo

    cd /var/ftp/pub/cloud/openstack-liberty/

    createrepo -g /tmp/repomd.xml .

    4. 配置客户机(假设:192.168.29.80)的源设置

    cd /etc/yum.repos.d/
    nano loacl_network_openstack_liberty.repo

    # 编辑如下内容

    [loacl_network_openstack_liberty]
    name=ftpyum
    baseurl=ftp://192.168.29.94/pub/cloud/openstack-liberty
    enabled=1
    gpgcheck=1
    gpgkey=ftp://192.168.29.94/pub/centos7/RPM-GPG-KEY-CentOS-7

    # 重新设定repo

    yum clean all
    yum makecache

    5. 客户机(假设:192.168.29.80)验证

    yum install openstack-keystone

  • 相关阅读:
    利用async和await异步操作解决node.js里面fs模块异步读写,同步结果的问题
    node.js的fs核心模块读写文件操作 -----由浅入深
    node.js 发布订阅模式
    js 发布订阅模式
    vue.js定义一个一级的路由 ----由浅入深
    vue.js编程式路由导航 --- 由浅入深
    vue.js嵌套路由-------由浅入深
    Spring事件体系
    Hibernate监听器
    学习网站地址
  • 原文地址:https://www.cnblogs.com/gleaners/p/5735743.html
Copyright © 2020-2023  润新知