import os
import subprocess
import configparser
from logger import log
import compile_rpm_package
from help_parse import parameter_classify
from extract_source_code import construct_test_cases
current_dir = os.path.dirname(os.path.abspath(__file__))
config = configparser.ConfigParser()
config.read('./config.ini')
download_dir = config.get('Directories', 'download_dir', fallback=current_dir)
build_dir = config.get('Directories', 'build_dir', fallback=current_dir)
log_dir = config.get('Directories', 'log_dir', fallback=current_dir)
download_dir = os.path.abspath(download_dir) + "/"
build_dir = os.path.abspath(build_dir) + "/"
log_dir = os.path.abspath(log_dir) + "/"
package_name = ""
def install_source_package():
"""
下载与安装源码包
"""
parameter_classify.initialize_parameters()
packages = config.get("Packages", "packages").split(",")
if not os.path.exists(log_dir):
os.makedirs(log_dir)
for package in packages:
package = package.strip()
if not os.path.exists(download_dir + "" + package + "/"):
os.makedirs(download_dir + "" + package + "/")
cur_log_dir = log_dir + "" + package + "/"
log_file = f"{cur_log_dir}{package}.txt"
if not os.path.exists(cur_log_dir):
os.makedirs(cur_log_dir)
print("第一步:下载源码包")
command = f"yumdownloader --source {package} --destdir {download_dir}{package}/"
sub_status, sub_res = subprocess.getstatusoutput(command)
if sub_status != 0:
print("源码包 " + package + " 下载失败")
continue
else:
print("源码包 " + package + " 下载成功")
source_dir = download_dir + "" + package + "/"
sub_status, sub_res = subprocess.getstatusoutput(f"ls {source_dir}")
source_name = sub_res
print("第二步:安装源码包")
if not os.path.exists(build_dir + "" + package + "/"):
os.makedirs(build_dir + "" + package + "/")
install_command = f"rpm -ivh --define '_topdir {build_dir}{package}/' {source_dir}{source_name}"
sub_status, sub_res = subprocess.getstatusoutput(install_command)
if sub_status != 0:
print("SRPM包 " + source_name + " 安装失败")
print("第三步:改用 yum install 的方式安装软件包")
sub_status, sub_res = subprocess.getstatusoutput("yum list installed | grep" + " " + package)
if len(str(sub_res)) == 0:
sub_status, sub_res = subprocess.getstatusoutput("yum install -y" + " " + package)
if sub_status != 0:
print("软件包 " + package + " 安装失败")
else:
print("软件包 " + package + " 安装完成")
else:
print("软件包 " + package + " 已存在,无需安装")
construct_test_cases("", package, log_file, package, "UnKnown")
else:
print("SRPM包 " + source_name + " 安装完成")
global package_name
package_name = package
compile_rpm_package.compile_rpm_package(build_dir + "" + package +"/", log_file, package)
if __name__ == '__main__':
"""
工具入口
"""
install_source_package()