utils/verify_incontainer.py

#这是一个python脚本
#!/usr/bin/env python

import sys
import os
#import requests
import urlparse
#import BeautifulSoup
import re
import threading
#锁住这个文件,因此这个python 脚本不能同时执行两份 ?
global_lock = threading.Lock()

#REPO_URLS = [ 
#   "http://repo.estuarydev.org/releases/5.0/centos/"
#]
#"""
#REPO_URLS = [ 
#   "http://repo.linaro.org/rpm/linaro-overlay/centos-7/repo",
#   "http://download.fedoraproject.org/pub/epel/7/aarch64",
#   "http://repo.estuarydev.org/releases/5.0/centos/"
#   "http://mirror.centos.org/altarch/7/os/aarch64/"
#]
#"""
#PARENT_URLS = []


def get_all_packages_name():
    """
    To get candidate packages name
    """ 
    name_dict = {}
    num = 0
	#通过os.system来执行shell 脚本
    os.system("mv /etc/apt/sources.list /root/")
    os.system("wget -O - http://repo.estuarydev.org/releases/ESTUARY-GPG-KEY | apt-key add -")
    if targetos == "ubuntu":
        os.system("wget -O /etc/apt/sources.list.d/estuary.list https://raw.githubusercontent.com/open-estuary/distro-repo/master/estuaryftp_ubuntu.list")
    elif targetos == "debian":
        os.system("wget -O /etc/apt/sources.list.d/estuary.list https://raw.githubusercontent.com/open-estuary/distro-repo/master/estuaryftp_debian.list") 
    os.system("apt-get update")
	#通过os.popen来执行shell 脚本,其和os.system的区别在之前的文章中分析过
    packages_list = os.popen("apt-cache search all ").readlines()
	#下面这个for循环构建package的字典
    for packagename in packages_list:
        #packagename = packagename.split(':')[0]
        pos = packagename.rfind('-')
        packagename = packagename[:pos]
        name_dict[packagename] = name_dict.get(packagename, 0) + 1
        num += 1
    print("The repository has %d packages"%(num))
    os.system("mv /root/sources.list /etc/apt/")
    os.system("apt-get update")
	#打印字典
    print name_dict
	#返回字典
    return name_dict

#    name_dict = {}
#    repos_list = []
#    available_repos = os.popen("yum repolist").readlines()
#    begin_to_parse = False
#    for key in available_repos:
#        if re.search('repo id', key):
#            begin_to_parse = True
#            continue      
#        elif not begin_to_parse:
#            continue
#        
#        if not re.search("repolist", key):
#            repo_id = re.split(' +', key)[0]
#            if repo_id[0] == '!':
#                repo_id = repo_id[1:]
#            repo_id = repo_id.split('/')[0]
#            repos_list.append(repo_id)

#    for repo_id in repos_list:
#        num = 0
#        packages_list = os.popen("repoquery -qa --repoid=" + repo_id).readlines()
#        for packagename in packages_list:
#            packagename = packagename.split(':')[0]
#            pos = packagename.rfind('-')
#            packagename = packagename[:pos]
#            name_dict[packagename] = name_dict.get(packagename, 0) + 1
#            num += 1
#        print("The repository:%s has %d packages"%(repo_id, num))
#    return name_dict

def rpm_erase_all_packages(logdir):
    packages_name = get_all_packages_name()
    #通过apt-get remove -y  来删除get_all_packages_name返回字典中的所有package。
	#删除后,通过dpkg -l | grep package的方式查询这个package是否删除成功。
	#删除成功后,将此包名写入del_success_list 文件中,否则写入到del_failure_list 中
    del_failure = open(os.path.join(logdir, "del_failure_list"), "w")
    del_success = open(os.path.join(logdir, "del_success_list"), "w")
    for package in packages_name.keys():
        os.system("apt-get remove -y " + package)
        ret = os.popen("dpkg -l | grep " + package).readlines()
        
        if len(ret) > 0:
            del_failure.write("%s\t\n"%package)
	else :
            del_success.write("%s\t\n"%package)
    return
#处理方法和前面删除包的做法一致
def rpm_install_all_packages(logdir):
    packages_name = get_all_packages_name()

    install_failure = open(os.path.join(logdir, "install_failure_list"), "w")
    install_success = open(os.path.join(logdir, "install_success_list"), "w")
    for package in packages_name.keys():
        os.system("apt-get install -y " + package)
        ret = os.popen("dpkg -l | grep " + package).readlines()
        
        if len(ret) > 0:
            install_success.write("%s\t\n"%package)
	else :
            install_failure.write("%s\t\n"%package)
    return
#从命令行执行的话__name__ == "__main__"
if __name__ == "__main__":
    logdir = "/tmp/debverifylog"
    cmd = ""
    targetos = "ubuntu" 
	#根据位置参数给参数赋值
    if len(sys.argv) >= 4:
        targetos = str(sys.argv[3])
    if len(sys.argv) >= 3:
        logdir = str(sys.argv[2])
    if len(sys.argv) >= 2:
        cmd = str(sys.argv[1])
    #/tmp/debverifylog 目录不存在的话,则创建   
    if not os.path.exists(logdir):
        os.makedirs(logdir)    
	#根据命令是install还是erase 分别调用安装或者删除函数,如果命令不是这两个,则打印error信息
	#从这里看到python中字符串比较也是用的==
    if cmd == "install" :
        rpm_install_all_packages(logdir)
    elif cmd == "erase" :
        rpm_erase_all_packages(logdir)
    else :
        print("Usage: ./rpm_verify.py {install | erase} <log dir> <debian/ubuntu>")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值