utils/rpm_verify.py

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

import sys
import os
import requests
import urlparse
import BeautifulSoup
import re
import threading

global_lock = threading.Lock()
#定义一个函数
def get_all_packages_name():
    """
    To get candidate packages name
    """ 
	#定义一个空字典
    name_dict = {}
    num = 0
# python调用shell 脚本的两种方式之一,一种是调用os.system,其返回值只能是0,1,2.
#一种是os.popen.其会把命令执行的结果作为返回值返回,例如这里我们就是要repoquery -qa --repoid 
#命令的执行结果。这个执行结果每一行代表一个package.
    packages_list = os.popen("repoquery -qa --repoid=" + repo_id).readlines()
    for packagename in packages_list:
	#取:后的第一个字符串,就是package的namee
        packagename = packagename.split(':')[0]
        pos = packagename.rfind('-')
        packagename = packagename[:pos]
		#将包的数量和name 存在字典中
        name_dict[packagename] = name_dict.get(packagename, 0) + 1
        num += 1
    print("The repository:%s has %d packages"%(repo_id, num))
	#返回这个字典
    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):
	#得到package的字典
    packages_name = get_all_packages_name()
    #新建两个文件,这个文件的路径logdir/del_failure_list 和 logdir/del_success_list
    del_failure = open(os.path.join(logdir, "del_failure_list"), "w")
    del_success = open(os.path.join(logdir, "del_success_list"), "w")
	#packages_name.keys 就是package的name
    for package in packages_name.keys():
		#通过os.system  执行sudo yum erase -y 来删除这个包
        os.system("sudo yum erase -y " + package)
		#通过os.popen 执行rpm -qa 命令看这个包还能否查到
		ret = os.popen("rpm -qa | grep " + package).readlines()
		#如果能查到说明前面删除包的命令失败了,则将这个包写入到del_failure 中,删除成功的话,则写入到del_success 中
        if len(ret) > 0:
            del_failure.write("%s\t\n"%package)
	else :
            del_success.write("%s\t\n"%package)
    return

#这个函数是要安装包,和rpm_erase_all_packages 中的函数一致,就不分析了.
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("sudo yum install -y " + package)
        ret = os.popen("rpm -qa | grep " + package).readlines()
        if len(ret) > 0:
            install_success.write("%s\t\n"%package)
	else :
            install_failure.write("%s\t\n"%package)
    return
#通过命令行执行的话,则下面这个if条件成立
if __name__ == "__main__":
#赋值
    logdir = "/tmp/rpmverifylog"
    cmd = ""
    repo_id = "Estuaryftp"
#根据输入的数量来分参数赋值  
    if len(sys.argv) >= 4:
        repo_id = str(sys.argv[3])
    if len(sys.argv) >= 3:
        logdir = str(sys.argv[2])
    if len(sys.argv) >= 2:
        cmd = str(sys.argv[1])
#logdir 这个路径如果不存在的话,则通过os.makedirs来新建
    if not os.path.exists(logdir):
        os.makedirs(logdir)

#    for url in REPO_URLS:
#        pos = url.find('/')
#        PARENT_URLS.append(url[pos:])
#可以看到cmd 命令分为install和erase,分别执行前面分析过的rpm_install_all_packages 和 rpm_erase_all_packages 函数
    if cmd == "install" :
        rpm_install_all_packages(logdir)
    elif cmd == "erase" :
        rpm_erase_all_packages(logdir)
    else :
	#cmd 如果不是install 或者 erase的话,则打印log 说明这个python脚本的用法.
        print("Usage: ./rpm_verify.py {install | erase} <log dir>")

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值