diff --git a/0001-format-code.patch b/0001-format-code.patch deleted file mode 100644 index b1db6131ad6a00dff9dec877722f0e63c08f7a3a..0000000000000000000000000000000000000000 --- a/0001-format-code.patch +++ /dev/null @@ -1,119 +0,0 @@ -From 8dbd8088e6895367eb09f3a01389a6ebe3ce9feb Mon Sep 17 00:00:00 2001 -From: FanSheng Meng -Date: Mon, 16 Oct 2023 14:07:46 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83=E4=BB=A3=E7=A0=81=E6=A0=BC?= - =?UTF-8?q?=E5=BC=8F?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - .../centos7/openeuler/centos72openeuler.py | 6 ++---- - views/migration.py | 11 +++++++---- - 2 files changed, 9 insertions(+), 8 deletions(-) - -diff --git a/ut-Migration-tools-0.1/centos7/openeuler/centos72openeuler.py b/ut-Migration-tools-0.1/centos7/openeuler/centos72openeuler.py -index 05a444c..7ccdb44 100644 ---- a/ut-Migration-tools-0.1/centos7/openeuler/centos72openeuler.py -+++ b/ut-Migration-tools-0.1/centos7/openeuler/centos72openeuler.py -@@ -28,7 +28,6 @@ def run_subprocess(cmd): - print(output) # Print the output to console - return output, process.returncode - except subprocess.CalledProcessError as e: -- #print(f"Command '{e.cmd}' failed with return code {e.returncode}.") - print(e.stderr) # Print the error output to console - return e.stderr, e.returncode - -@@ -87,6 +86,7 @@ def add_boot_option(): - except Exception as e: - print(e) - -+ - def swap_release(release): - tmp_dir = '/var/tmp' - rpme_release = 'rpm -qf /etc/os-release | xargs -i rpm -e --nodeps {}' -@@ -163,6 +163,7 @@ def system_sync(): - return False - return True - -+ - def main(): - if not check_pkg("yum-utils"): - print("please install yum-utils") -@@ -187,7 +188,6 @@ def main(): - with open(repofile, 'w') as f: - f.write(openeuler_repo) - -- - openEuler_release = 'openEuler-release' - if not check_pkg(openEuler_release): - print("swaping release") -@@ -240,7 +240,6 @@ def main(): - print("Removing confilct package yum...") - system_sync() - -- - # boot cui - print("set boot target to cui") - cmd = 'systemctl set-default multi-user.target' -@@ -263,6 +262,5 @@ def main(): - os.system("reboot") - - -- - if __name__ == '__main__': - main() -diff --git a/views/migration.py b/views/migration.py -index 1312d33..477627b 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -1,12 +1,11 @@ - # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. - # SPDX-License-Identifier: MulanPubL-2.0-or-later -- --from flask import * - import os -- -+from flask import * - from client_requests import * - from func.utils import * - -+ - def check_services(data, url): - info = post_client_data(data, url) - if info is None or info.status_code != 200: -@@ -27,26 +26,30 @@ def check_os(data): - if services: - return services - -+ - def check_storage(data): - services = check_services(data, '/check_storage') - if services: - return services - -+ - def close_tool(data): - os.system('kill -9 `ps -ef | grep "start_webview.py" | grep -v grep | awk \'{print $2}\'`') - data = {"ip": "0.0.0.0"} - data_json = json.dumps(data) - return data_json - -+ - def check_user(data): - services = check_services(data, '/check_user') - if services: - json_data = json.loads(data) -- with open('/usr/lib/migration-tools-server/.passwd.txt','w',encoding='utf-8') as f: -+ with open('/usr/lib/migration-tools-server/.passwd.txt', 'w', encoding='utf-8') as f: - text = json_data['passwd'] - f.write(text) - return services - -+ - def check_repo(data): - services = check_services(data, '/check_repo') - if services: --- -2.20.1 - diff --git a/0002-modify-excel-report-content.patch b/0002-modify-excel-report-content.patch deleted file mode 100644 index f8c376842e49c2debebf4498ee7ea7c4a8891d17..0000000000000000000000000000000000000000 --- a/0002-modify-excel-report-content.patch +++ /dev/null @@ -1,223 +0,0 @@ -From 2954e8c9e13cacb09bdd668e38adce53162c6e3a Mon Sep 17 00:00:00 2001 -From: FanSheng Meng -Date: Mon, 16 Oct 2023 14:30:12 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=A7=84=E8=8C=83=E4=BB=A3=E7=A0=81=E6=A0=BC?= - =?UTF-8?q?=E5=BC=8F?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - func/Abitxt2xls.py | 103 +++++++----------- - .../centos7/uos/centos72uos.sh | 1 - - 2 files changed, 40 insertions(+), 64 deletions(-) - -diff --git a/func/Abitxt2xls.py b/func/Abitxt2xls.py -index 77c4ebd..d80ad4c 100644 ---- a/func/Abitxt2xls.py -+++ b/func/Abitxt2xls.py -@@ -1,32 +1,24 @@ - # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. - # SPDX-License-Identifier: MulanPubL-2.0-or-later -- - # coding=utf-8 --''''' --main function:主要实现把txt中的每行数据写入到excel中 --''' --################# - import datetime - import json - import socket - import xlwt -- - from func.share import * - - --#检测报告导出绝对路径 --report_path_bef="/var/tmp/uos-migration/UOS_analysis_report/" --report_path_ago='/var/tmp/uos-migration/UOS_migration_log/' -- -+report_path_bef = "/var/tmp/uos-migration/UOS_analysis_report/" -+report_path_ago = '/var/tmp/uos-migration/UOS_migration_log/' - txtFileName = '/var/tmp/uos-migration/data/exp-rst/abi-compat-pkg.txt' - txtFileName1 = '/var/tmp/uos-migration/data/exp-rst/abi-incompat-pkg.txt' - SysInfoFile = '/var/tmp/uos-migration/data/exp-rst/systeminfo.txt' - SysInfoFile_after = '/var/tmp/uos-migration/data/exp-rst/trans-end-sysinfo.txt' --PkgCompFile1= '/var/tmp/uos-migration/data/exp-rst/pkginfo_1.txt' --PkgCompFile2= '/var/tmp/uos-migration/data/exp-rst/pkginfo_2.txt' --PkgCompFile3= '/var/tmp/uos-migration/data/exp-rst/pkginfo_3.txt' --PkgCompFile4= '/var/tmp/uos-migration/data/exp-rst/pkginfo_4.txt' --PkgCompFile1_after= '/var/tmp/uos-migration/data/exp-rst/pkginfo_1_trans.txt' -+PkgCompFile1 = '/var/tmp/uos-migration/data/exp-rst/pkginfo_1.txt' -+PkgCompFile2 = '/var/tmp/uos-migration/data/exp-rst/pkginfo_2.txt' -+PkgCompFile3 = '/var/tmp/uos-migration/data/exp-rst/pkginfo_3.txt' -+PkgCompFile4 = '/var/tmp/uos-migration/data/exp-rst/pkginfo_4.txt' -+PkgCompFile1_after = '/var/tmp/uos-migration/data/exp-rst/pkginfo_1_trans.txt' - - - def get_host_ip(): -@@ -39,117 +31,102 @@ def get_host_ip(): - return ip - - --def accord_line_write(txtLineFile, sheet_line, line_num, colu_num): -+def accord_line_write(txt_line_file, sheet_line, line_num, column_num): - # 通过列的形式写入文件 -- with open(txtLineFile,'r') as line_f: -+ with open(txt_line_file, 'r') as line_f: - x = line_num -- y = colu_num -+ y = column_num - sys_lines = line_f.readlines() - for line in sys_lines: - for value in line.strip().split("|"): -- sheet_line.write(x,y,value) -+ sheet_line.write(x, y, value) - y += 1 - x += 1 - y = 0 - line_f.close() - - --def accord_colu_write(txtColuFile,sheet_colu, line_num, colu_num): -+def accord_column_write(txt_column_file, sheet_column, line_num, column_num): - # 通过行的形式写入文件 -- with open(txtColuFile,'r') as colu_f: -+ with open(txt_column_file, 'r') as column_f: - x = line_num -- y = colu_num -- sys_colus = colu_f.readlines() -- for line in sys_colus: -+ y = column_num -+ sys_columns = column_f.readlines() -+ for line in sys_columns: - for value in line.strip().split("|"): -- sheet_colu.write(x,y,value) -+ sheet_column.write(x, y, value) - x += 1 -- colu_f.close() -+ column_f.close() -+ - - def system_info(check_file): -- #新建一个sheet - sheet_sysinfo = check_file.add_sheet("系统基本信息") - accord_line_write(SysInfoFile, sheet_sysinfo, 0, 0) - - --#sheet1-系统基本信息 -+# sheet1-系统基本信息 - def system_info_after(sys): -- #新建一个sheet - sheet_sysinfo = sys.add_sheet("系统基本信息") - accord_line_write(SysInfoFile_after, sheet_sysinfo, 0, 0) - - --#sheet2-软件包对比 -+# sheet2-软件包对比 - def pkg_comp(pkg): -- #新建一个sheet - sheet_pkgcomp = pkg.add_sheet("软件包对比") - accord_line_write(PkgCompFile1, sheet_pkgcomp, 0, 0) -- accord_colu_write(PkgCompFile2, sheet_pkgcomp, 3, 0) -- accord_colu_write(PkgCompFile4, sheet_pkgcomp, 3, 1) -+ accord_column_write(PkgCompFile2, sheet_pkgcomp, 3, 0) -+ accord_column_write(PkgCompFile4, sheet_pkgcomp, 3, 1) - - --#sheet2-软件包对比 -+# sheet2-软件包对比 - def pkg_comp_after(pkg): -- #新建一个sheet - sheet_pkgcomp = pkg.add_sheet("软件包对比") - accord_line_write(PkgCompFile1_after, sheet_pkgcomp, 0, 0) -- accord_colu_write(PkgCompFile2, sheet_pkgcomp, 3, 0) -- accord_colu_write(PkgCompFile3, sheet_pkgcomp, 3, 1) -- accord_colu_write(PkgCompFile4, sheet_pkgcomp, 3, 2) -+ accord_column_write(PkgCompFile2, sheet_pkgcomp, 3, 0) -+ accord_column_write(PkgCompFile3, sheet_pkgcomp, 3, 1) -+ accord_column_write(PkgCompFile4, sheet_pkgcomp, 3, 2) - - --#sheet4-ABI兼容 -+# sheet4-ABI兼容 - def abi_incomp_info(file_incomp): -- #新建一个sheet - sheet_comp = file_incomp.add_sheet("ABI兼容") - accord_line_write(txtFileName, sheet_comp, 0, 0) - --#sheet5-ABI不兼容 -+ -+# sheet5-ABI不兼容 - def abi_comp_pkg(file_comp): -- #新建一个sheet - sheet_incomp = file_comp.add_sheet("ABI不兼容") -- - accord_line_write(txtFileName1, sheet_incomp, 0, 0) - -+ - def abi_txt2xls(): -- #兼容性检查报告名规则:UOS_migration_log_10.0.2.3_cy.server_202110192140.xls -- hostip = get_host_ip() -+ # 兼容性检查报告名规则:UOS_migration_log_10.0.2.3_cy.server_202110192140.xls -+ host_ip = get_host_ip() - hostname = socket.gethostname() -- excelFileName = "UOS_migration_log_"+hostip+"_"+hostname+"_"+datetime.datetime.now().strftime('%Y%m%d%H%M')+".xls" -- -- report_name_check=report_path_bef+excelFileName -+ excel_file_name = "UOS_migration_log_"+host_ip+"_"+hostname+"_"+datetime.datetime.now().strftime('%Y%m%d%H%M')+".xls" -+ report_name_check = report_path_bef + excel_file_name - - if os.path.exists(report_name_check): - os.remove(report_name_check) -- -- #新建一个excel文件 -- check_file = xlwt.Workbook(encoding='utf-8',style_compression=0) -- -+ check_file = xlwt.Workbook(encoding='utf-8', style_compression=0) - system_info(check_file) - pkg_comp(check_file) - abi_incomp_info(check_file) - abi_comp_pkg(check_file) -- - check_file.save(report_name_check) - - - def abi_txt2xls_after_mig(): -- -- hostip = get_host_ip() -+ host_ip = get_host_ip() - hostname = socket.gethostname() -- excelFileName_after = "UOS_migration_log_"+hostip+"_"+hostname+"_"+datetime.datetime.now().strftime('%Y%m%d%H%M')+".xls" -- -- report_name_after=report_path_ago+excelFileName_after -+ excel_file_name_after = "UOS_migration_log_"+host_ip+"_"+hostname+"_"+datetime.datetime.now().strftime('%Y%m%d%H%M')+".xls" -+ report_name_after = report_path_ago+excel_file_name_after - - if os.path.exists(report_name_after): - os.remove(report_name_after) -- -- #新建一个excel文件 -- after_mig_xls = xlwt.Workbook(encoding='utf-8',style_compression=0) -- -+ after_mig_xls = xlwt.Workbook(encoding='utf-8', style_compression=0) - system_info_after(after_mig_xls) - pkg_comp_after(after_mig_xls) - abi_incomp_info(after_mig_xls) - abi_comp_pkg(after_mig_xls) -- - after_mig_xls.save(report_name_after) -diff --git a/ut-Migration-tools-0.1/centos7/uos/centos72uos.sh b/ut-Migration-tools-0.1/centos7/uos/centos72uos.sh -index 7248b14..18a9ddf 100755 ---- a/ut-Migration-tools-0.1/centos7/uos/centos72uos.sh -+++ b/ut-Migration-tools-0.1/centos7/uos/centos72uos.sh -@@ -1,6 +1,5 @@ - #!/bin/bash - # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -- - # SPDX-License-Identifier: MulanPubL-2.0-or-later - - set -x --- -2.20.1 - diff --git a/0003-delete-redundant-code.patch b/0003-delete-redundant-code.patch deleted file mode 100644 index 66ebce86552f2f2d6ef4652552f2ae052a13c5d1..0000000000000000000000000000000000000000 --- a/0003-delete-redundant-code.patch +++ /dev/null @@ -1,131 +0,0 @@ -From 54d64a8d9f3593e97ffee25484c25a9891cd70f2 Mon Sep 17 00:00:00 2001 -From: FanSheng Meng -Date: Mon, 16 Oct 2023 15:59:16 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E4=BB=A3?= - =?UTF-8?q?=E7=A0=81?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - func/Abisystmcompchk.sh | 31 +------------------------------ - 1 file changed, 1 insertion(+), 30 deletions(-) - -diff --git a/func/Abisystmcompchk.sh b/func/Abisystmcompchk.sh -index e6b828e..15938fc 100755 ---- a/func/Abisystmcompchk.sh -+++ b/func/Abisystmcompchk.sh -@@ -1,11 +1,4 @@ - #!/bin/bash --# 项目名称: abi结果自动化分析实现 --# 所属系统: UOS --# 文件名称: Abisystemcompcheck --# 功 能: 基于系统兼容性检查报告的自动化分析 --# : 输出系统兼容百分比,非兼容包原因列表,兼容包列表等。 --# 作 者: lihaipeng -- - ########################变量定义################################# - - LOCAL_DIR=/var/tmp/uos-migration/data -@@ -227,8 +220,7 @@ get_abi_comp_rest() - NUM1=0 - #兼容性开关,0-兼容;1-不兼容 - COMP_FLAG=0 -- #cat ./$abi_diff_file.tmp | while read line -- while read line -+ while read line - do - if [[ $line == *$DATA_LINE_1* ]];then - NUM2=$(( $NUM1 % 5 )) -@@ -262,7 +254,6 @@ get_abi_comp_rest() - then - abi_var_comp_2="${abi_diff_file%.*}|$line|兼容" - else -- #echo "$abi_diff_file|$line|不规范,清确认!" >> $EXP_DIR/$ABI_DIFF_PKG_ERR - abi_var_incomp_2="$NAME|$COMP_TYPE|$data_line|$line" - echo $abi_var_incomp_2 >> $EXP_DIR/$ABI_INCOMPAT_PKG - #此时abi编译以来库文件或者二进制包不兼容,那么该rpm包不兼容 -@@ -280,7 +271,6 @@ get_abi_comp_rest() - #abi检查结果中,rpm包以来的库文件或者二进制文件兼容 - abi_var_comp_3="${abi_diff_file%.*}|$line|兼容" - else -- #echo "$abi_diff_file|$line|不规范,清确认!" >> $EXP_DIR/$ABI_DIFF_PKG_ERR - abi_var_incomp_3="$NAME|$COMP_TYPE|$data_line|$line|" - echo $abi_var_incomp_3 >> $EXP_DIR/$ABI_INCOMPAT_PKG - #此时abi编译以来库文件或者二进制包不兼容,那么该rpm包不兼容 -@@ -333,11 +323,6 @@ get_abi_comp_rest() - ABI_INCOMP_NUM_TMP=`cat $EXP_DIR/$ABI_INCOMPAT_PKG | awk -F "|" '{print $1}' | sort | uniq | wc -l` - ABI_INCOMP_NUM=`expr $ABI_INCOMP_NUM_TMP - 2` - sed -i 's/INCOMP_PKG_NUM/'$ABI_INCOMP_NUM'/g' $EXP_DIR/$ABI_INCOMPAT_PKG -- -- #cp -f $EXP_DIR/$ABI_COMPAT_PKG $EXP_DIR/$PKG_COMP_LIST_03 -- #sed -i '/包名/d' $EXP_DIR/$PKG_COMP_LIST_03 -- -- - echo "兼容包列表:$EXP_DIR/$ABI_COMPAT_PKG" - echo "非兼容包列表:$EXP_DIR/$ABI_INCOMPAT_PKG" - echo "------------------------- 获取abi兼容、非兼容包列表结束 -------------------------" -@@ -346,7 +331,6 @@ get_abi_comp_rest() - #4. 获取系统基本信息 - get_system_info() - { -- #echo "====================Start enter get_system_info==============" - #数据清理 - rm -f $EXP_DIR/$SYSTEM_INFO - -@@ -381,15 +365,12 @@ get_system_info() - cur_sysinfo=${cur_sysinfo_2:1:$cur_sysinfo_len} - - system_info_2_line2=${SYSTEM_INFO_2_LINE2//CUR_VERSION/$cur_sysinfo} -- #system_info_2_line2=${system_info_2_line2_tmp//TRA_VERSION/$trans_sysinfo} - echo $system_info_2_line2 >> $EXP_DIR/$SYSTEM_INFO - - #获取内核版本 - cur_kernel_info=`uname -r` -- #trans_kernel_info="******" - - system_info_3_line3=${SYSTEM_INFO_3_LINE3//CUR_KERNEL_VERSION/$cur_kernel_info} -- #system_info_3_line3=${system_info_3_line3_tmp//TRA_KERNEL_VERSION/$trans_kernel_info} - echo $system_info_3_line3 >> $EXP_DIR/$SYSTEM_INFO - echo " " >> $EXP_DIR/$SYSTEM_INFO - -@@ -409,19 +390,12 @@ get_system_info() - - abi_comp_pkg_num_tmp=`cat $EXP_DIR/$ABI_COMPAT_PKG | wc -l` - cur_pkg_num=`expr $abi_comp_pkg_num_tmp - 1` -- #cur_pkg_sum=`rpm -qa | wc -l` -- #trans_pkg_sum=`rpm -qa | wc -l` - - system_info_9_line9=${SYSTEM_INFO_9_LINE9//REPLACE_PKG_NUM/$cur_pkg_num} -- #system_info_9_line9=${system_info_9_line9_tmp//INSTALL_PKG_NUM/$trans_pkg_sum} - echo $system_info_9_line9 >> $EXP_DIR/$SYSTEM_INFO - echo " " >> $EXP_DIR/$SYSTEM_INFO - - echo $SYSTEM_INFO_11_LINE11 >> $EXP_DIR/$SYSTEM_INFO -- -- #abi_comp_pkg_num_tmp=`cat $EXP_DIR/$ABI_COMPAT_PKG | wc -l` -- #abi_comp_pkg_num=`expr $abi_comp_pkg_num_tmp - 1` -- #system_info_12_line12=${SYSTEM_INFO_12_LINE12//COMP_NUM/$abi_comp_pkg_num} - system_info_12_line12=${SYSTEM_INFO_12_LINE12//COMP_NUM/$cur_pkg_num} - echo $system_info_12_line12 >> $EXP_DIR/$SYSTEM_INFO - -@@ -450,7 +424,6 @@ pkg_comp_rst() - rm -f $EXP_DIR/$PKG_COMP_LIST_01 - - pkg_sum_num=`cat $EXP_DIR/$UOS_PKG_RPMS_LIST | wc -l` -- #pkg_num_inst=`cat $EXP_DIR/$UOS_PKG_RPMS_LIST | grep uelc20 | wc -l` - pkg_num_inst_tmp=`cat $EXP_DIR/$ABI_COMPAT_PKG | wc -l` - pkg_num_inst=`expr $pkg_num_inst_tmp - 1` - -@@ -476,8 +449,6 @@ pkg_comp_rst() - pkginfo_3_line3=${pkginfo_3_line3_tmp//UOS_VERSION/$trans_sysinfo_1} - echo $pkginfo_3_line3 >> $EXP_DIR/$PKG_COMP_LIST_01 - -- #cat $EXP_DIR/$UOS_PKG_RPMS_LIST | grep uelc20 > $EXP_DIR/$PKG_COMP_LIST_04 -- #echo "==============End enter pkg_comp_rst=========" - } - - create_file_path --- -2.20.1 - diff --git a/0004-connect-sql-function.patch b/0004-connect-sql-function.patch deleted file mode 100644 index 8f64baa41fc29dd2cb725d7bc0e562ba4775c2a8..0000000000000000000000000000000000000000 --- a/0004-connect-sql-function.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 9d1aaac6870109b79ce77963f4270ba192a60a6f Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 6 Nov 2023 17:37:23 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E6=95=B0=E6=8D=AE=E5=BA=93?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - connect_sql.py | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - create mode 100644 connect_sql.py - -diff --git a/connect_sql.py b/connect_sql.py -new file mode 100644 -index 0000000..e24a467 ---- /dev/null -+++ b/connect_sql.py -@@ -0,0 +1,30 @@ -+import pymysql -+ -+class DBHelper: -+ # 构造函数 -+ def __init__(self, host=db_host, user=db_user, pwd=db_password, db=db_name): -+ self.host = host -+ self.user = user -+ self.pwd = pwd -+ self.db = db -+ self.connect = None -+ self.cursor = None -+ -+ # 连接数据库 -+ def connectDatabase(self): -+ try: -+ self.connect = pymysql.connect(host=self.host, user=self.user, password=self.pwd, db=self.db, -+ charset='utf8') -+ except: -+ print('connectDatabase failed') -+ return False -+ self.cursor = self.connect.cursor() -+ return True -+ -+ # 关闭数据库 -+ def close(self): -+ # 如果数据打开,则关闭;否则没有操作 -+ if self.connect and self.cursor: -+ self.cursor.close() -+ self.connect.close() -+ return True --- -2.20.1 - diff --git a/0005-execution-sql-function.patch b/0005-execution-sql-function.patch deleted file mode 100644 index 1e0d4bbf1f76796c9f8b6211ae23e14d1669522e..0000000000000000000000000000000000000000 --- a/0005-execution-sql-function.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 8dd714b9fe161358f48857fff9a08faac2af6af4 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 6 Nov 2023 17:44:45 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=89=A7=E8=A1=8Csql=E8=AF=AD=E5=8F=A5?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - connect_sql.py | 39 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 39 insertions(+) - -diff --git a/connect_sql.py b/connect_sql.py -index e24a467..b5d0570 100644 ---- a/connect_sql.py -+++ b/connect_sql.py -@@ -28,3 +28,42 @@ class DBHelper: - self.cursor.close() - self.connect.close() - return True -+ -+ def execute(self, sql): -+ """ -+ 传入查询 修改 删除sql语句 -+ :param sql: -+ :return:self.cursor -+ """ -+ self.connectDatabase() -+ # 处理显示的数据 -+ try: -+ self.cursor.execute(sql) -+ self.connect.commit() -+ except Exception as e: -+ print('%s执行失败:%s' % (sql, e)) -+ else: -+ self.close() -+ print('%s 执行成功' % sql) -+ data = self.cursor -+ return data -+ -+ def insert(self, sql, val): -+ """ -+ 传入sql语句 -+ :param sql: -+ :return:self.cursor -+ 如果想获取查询数据需要fetchall() -+ """ -+ self.connectDatabase() -+ # 处理显示的数据 -+ try: -+ self.cursor.executemany(sql, val) -+ self.connect.commit() -+ except Exception as e: -+ print('%s执行失败:%s' % (sql, e)) -+ else: -+ self.close() -+ print('%s 执行成功' % sql) -+ data = self.cursor -+ return data --- -2.20.1 - diff --git a/0006-add-loger-interface-function.patch b/0006-add-loger-interface-function.patch deleted file mode 100644 index 6bc11de24f8cdcd89003c28e3ce9ab7322ff91c2..0000000000000000000000000000000000000000 --- a/0006-add-loger-interface-function.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0d0a26ccedd820a583e4579d240542e346e459f3 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Tue, 7 Nov 2023 11:05:17 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97=E5=8A=9F?= - =?UTF-8?q?=E8=83=BD?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - logger.py | 34 ++++++++++++++++++++++++++++++++++ - 1 file changed, 34 insertions(+) - create mode 100644 logger.py - -diff --git a/logger.py b/logger.py -new file mode 100644 -index 0000000..2bdd144 ---- /dev/null -+++ b/logger.py -@@ -0,0 +1,34 @@ -+# -*-coding:UTF-8-*- -+ -+import logging -+ -+class Logger: -+ def __init__(self, path,clevel = logging.DEBUG,Flevel = logging.DEBUG): -+ self.logger = logging.getLogger(path) -+ self.logger.setLevel(logging.DEBUG) -+ fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S') -+ #设置CMD日志 -+ sh = logging.StreamHandler() -+ sh.setFormatter(fmt) -+ sh.setLevel(clevel) -+ #设置文件日志 -+ fh = logging.FileHandler(path) -+ fh.setFormatter(fmt) -+ fh.setLevel(Flevel) -+ self.logger.addHandler(sh) -+ self.logger.addHandler(fh) -+ -+ def debug(self,message): -+ self.logger.debug(message) -+ -+ def info(self,message): -+ self.logger.info(message) -+ -+ def war(self,message): -+ self.logger.warning(message) -+ -+ def error(self,message): -+ self.logger.error(message) -+ -+ def cri(self,message): -+ self.logger.critical(message) -\ No newline at end of file --- -2.20.1 - diff --git a/0007-add-function-to-import-machine.patch b/0007-add-function-to-import-machine.patch deleted file mode 100644 index 3bcf280e969395efef3846f364505d5011c3cdd9..0000000000000000000000000000000000000000 --- a/0007-add-function-to-import-machine.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 8024e49a1416a322625fe36c80621301e2a89d73 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 13:51:43 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=BB=E6=9C=BA=E5=AF=BC?= - =?UTF-8?q?=E5=85=A5=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 12 +++++++++++- - views/server.py | 13 +++++++++++++ - 2 files changed, 24 insertions(+), 1 deletion(-) - create mode 100644 views/server.py - -diff --git a/index.py b/index.py -index 6a5fc72..a505915 100644 ---- a/index.py -+++ b/index.py -@@ -7,7 +7,7 @@ import os - import sys - import json - from func import share --from views import migration -+from views import migration, server - - from flask import Flask, render_template, url_for, request, redirect, make_response, session, Response - app = Flask(__name__) -@@ -26,8 +26,18 @@ mods = { - 'export_migration_reports': migration.export_migration_reports, - 'system_migration': migration.system_migration, - 'migration_details': migration.migration_details, -+ 'import_host_info': server.import_host_info, - } - -+@app.route('/import_host_info', methods=['GET', 'POST']) -+def import_host_info(): -+ """ -+ 导入主机信息 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') - - def check_methods(): - if request.method == 'POST': -diff --git a/views/server.py b/views/server.py -new file mode 100644 -index 0000000..764d5bd ---- /dev/null -+++ b/views/server.py -@@ -0,0 +1,13 @@ -+import json -+ -+def import_host_info(data): -+ """ -+ 导入agent主机信息 -+ :param data: -+ :return: -+ """ -+ agent_info = json.loads(data).get("data") -+ if not agent_info: -+ data = {"data": "faild"} -+ json_data = json.dumps(data) -+ return json_data -\ No newline at end of file --- -2.20.1 - diff --git a/0008-add-agent_info-table-in-database.patch b/0008-add-agent_info-table-in-database.patch deleted file mode 100644 index 2d4ed611b20848eb83c842716a50b58495470931..0000000000000000000000000000000000000000 --- a/0008-add-agent_info-table-in-database.patch +++ /dev/null @@ -1,97 +0,0 @@ -From dbca836df232ed21f05798878dfb1773501fd4c2 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 14:16:49 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=B7=BB=E5=8A=A0ag?= - =?UTF-8?q?ent=5Finfo=E8=A1=A8?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - uos-sysmig.sql | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ - views/server.py | 10 +++++++++- - 2 files changed, 61 insertions(+), 1 deletion(-) - create mode 100644 uos-sysmig.sql - -diff --git a/uos-sysmig.sql b/uos-sysmig.sql -new file mode 100644 -index 0000000..eaf8aed ---- /dev/null -+++ b/uos-sysmig.sql -@@ -0,0 +1,52 @@ -+-- MySQL dump 10.13 Distrib 8.0.27, for Linux (x86_64) -+-- -+-- Host: 10.12.21.200 Database: uos-sysmig -+-- ------------------------------------------------------ -+-- Server version 8.0.27 -+ -+/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -+/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -+/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -+/*!50503 SET NAMES utf8 */; -+/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -+/*!40103 SET TIME_ZONE='+00:00' */; -+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -+ -+-- -+-- Table structure for table `agent_info` -+-- -+ -+DROP TABLE IF EXISTS `agent_info`; -+/*!40101 SET @saved_cs_client = @@character_set_client */; -+/*!50503 SET character_set_client = utf8mb4 */; -+CREATE TABLE `agent_info` ( -+ `agent_id` int NOT NULL AUTO_INCREMENT, -+ `agent_ip` varchar(256) NOT NULL, -+ `agent_username` varchar(256) NOT NULL, -+ `agent_passwd` varbinary(256) NOT NULL, -+ `hostname` varchar(256) DEFAULT NULL, -+ `agent_os` varchar(256) DEFAULT NULL, -+ `agent_arch` varchar(45) DEFAULT NULL, -+ `agent_storage` int DEFAULT NULL, -+ `agent_kernel` varchar(45) DEFAULT NULL, -+ `agent_repo_kernel` varchar(256) DEFAULT NULL, -+ `agent_migration_os` varchar(256) DEFAULT NULL, -+ `agent_history_faild_reason` varchar(45) DEFAULT NULL, -+ `agent_online_status` int DEFAULT '0', -+ `repo_status` int DEFAULT NULL, -+ PRIMARY KEY (`agent_id`), -+ KEY `agent_ip` (`agent_ip`) -+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -+/*!40101 SET character_set_client = @saved_cs_client */; -+ -+-- -+-- Dumping data for table `agent_info` -+-- -+ -+LOCK TABLES `agent_info` WRITE; -+/*!40000 ALTER TABLE `agent_info` DISABLE KEYS */; -+/*!40000 ALTER TABLE `agent_info` ENABLE KEYS */; -+UNLOCK TABLES; -\ No newline at end of file -diff --git a/views/server.py b/views/server.py -index 764d5bd..65ddba9 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -10,4 +10,12 @@ def import_host_info(data): - if not agent_info: - data = {"data": "faild"} - json_data = json.dumps(data) -- return json_data -\ No newline at end of file -+ return json_data -+ -+ -+ sql = "insert into agent_info(agent_ip, agent_username, agent_passwd) values (%s, %s, AES_ENCRYPT(%s, 'coco'));" -+ for i in agent_info: -+ agent_ip = i.get('agent_ip') -+ agent_username = i.get('agent_hostname') -+ agent_passwd = i.get('agent_password') -+ val = ((agent_ip, agent_username, agent_passwd),) -\ No newline at end of file --- -2.20.1 - diff --git a/0009-add-task_stream-table-in-database.patch b/0009-add-task_stream-table-in-database.patch deleted file mode 100644 index 9eac0c9db498ec5c7f0156c1f4d636863dcf7ff1..0000000000000000000000000000000000000000 --- a/0009-add-task_stream-table-in-database.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 79ffefe397e47be74776b1761785f42049c67fae Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 14:51:51 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E6=B7=BB=E5=8A=A0ta?= - =?UTF-8?q?sk=5Fstream=E8=A1=A8?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - uos-sysmig.sql | 46 +++++++++++++++++++++++++++++++++++++++++++++- - views/server.py | 4 +++- - 2 files changed, 48 insertions(+), 2 deletions(-) - -diff --git a/uos-sysmig.sql b/uos-sysmig.sql -index eaf8aed..d65006d 100644 ---- a/uos-sysmig.sql -+++ b/uos-sysmig.sql -@@ -49,4 +49,48 @@ CREATE TABLE `agent_info` ( - LOCK TABLES `agent_info` WRITE; - /*!40000 ALTER TABLE `agent_info` DISABLE KEYS */; - /*!40000 ALTER TABLE `agent_info` ENABLE KEYS */; --UNLOCK TABLES; -\ No newline at end of file -+UNLOCK TABLES; -+ -+-- -+-- Table structure for table `task_stream` -+-- -+ -+DROP TABLE IF EXISTS `task_stream`; -+/*!40101 SET @saved_cs_client = @@character_set_client */; -+/*!50503 SET character_set_client = utf8 */; -+CREATE TABLE `task_stream` ( -+ `task_stream_id` int NOT NULL AUTO_INCREMENT, -+ `agent_ip` varchar(256) DEFAULT NULL, -+ `agent_id` int DEFAULT NULL, -+ `tasks` varchar(256) DEFAULT NULL, -+ `stream_status` varchar(256) DEFAULT NULL, -+ `stream_CreateTime` timestamp NULL DEFAULT NULL, -+ `stream_Updatetime` timestamp NULL DEFAULT NULL, -+ PRIMARY KEY (`task_stream_id`), -+ KEY `task_stream_id` (`task_stream_id`) -+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; -+/*!40101 SET character_set_client = @saved_cs_client */; -+ -+-- -+-- Dumping data for table `task_stream` -+-- -+ -+LOCK TABLES `task_stream` WRITE; -+/*!40000 ALTER TABLE `task_stream` DISABLE KEYS */; -+/*!40000 ALTER TABLE `task_stream` ENABLE KEYS */; -+UNLOCK TABLES; -+ -+-- -+-- Dumping routines for database 'uossysmig' -+-- -+/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; -+ -+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -+/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -+/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -+/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -+ -+-- Dump completed on 2022-09-06 17:43:02 -diff --git a/views/server.py b/views/server.py -index 65ddba9..121993a 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -1,4 +1,5 @@ - import json -+from connect_sql import DBHelper - - def import_host_info(data): - """ -@@ -18,4 +19,5 @@ def import_host_info(data): - agent_ip = i.get('agent_ip') - agent_username = i.get('agent_hostname') - agent_passwd = i.get('agent_password') -- val = ((agent_ip, agent_username, agent_passwd),) -\ No newline at end of file -+ val = ((agent_ip, agent_username, agent_passwd),) -+ DBHelper().insert(sql, val) -\ No newline at end of file --- -2.20.1 - diff --git a/0010-create-task-stream-interface.patch b/0010-create-task-stream-interface.patch deleted file mode 100644 index 40089916f033bac632e10b0fb43da7efdd183627..0000000000000000000000000000000000000000 --- a/0010-create-task-stream-interface.patch +++ /dev/null @@ -1,62 +0,0 @@ -From f42944e0769e1514524dfe4ad348ab95dd1503ae Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 15:28:26 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=BB=BA=E4=BB=BB=E5=8A=A1=E6=B5=81?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/server.py | 32 +++++++++++++++++++++++++++++++- - 1 file changed, 31 insertions(+), 1 deletion(-) - -diff --git a/views/server.py b/views/server.py -index 121993a..d36f013 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -1,4 +1,6 @@ - import json -+from datetime import datetime -+ - from connect_sql import DBHelper - - def import_host_info(data): -@@ -20,4 +22,32 @@ def import_host_info(data): - agent_username = i.get('agent_hostname') - agent_passwd = i.get('agent_password') - val = ((agent_ip, agent_username, agent_passwd),) -- DBHelper().insert(sql, val) -\ No newline at end of file -+ DBHelper().insert(sql, val) -+ -+ -+ -+ -+def get_agent_id(agent_ip): -+ """ -+ 获取agent_id -+ :param agent_ip: -+ :return: -+ """ -+ sql = "select agent_id from agent_info where agent_ip='%s'" % agent_ip -+ get_agent_id = DBHelper().execute(sql).fetchall() -+ return get_agent_id[0][0] -+ -+ -+def create_task_stream(agent_ip): -+ """ -+ 创建任务流 -+ :return: -+ """ -+ create_task_stream_sql = "insert into task_stream(agent_ip,agent_id,stream_status," \ -+ "stream_CreateTime,stream_Updatetime) values (%s, %s, %s, %s, %s);" -+ -+ stream_status = 'None' -+ agent_id = get_agent_id(agent_ip) -+ time = datetime.now().strftime('%Y-%-m-%d %H:%M:%S') -+ values = ((agent_ip, agent_id, stream_status, time, time),) -+ DBHelper().insert(create_task_stream_sql, values) -\ No newline at end of file --- -2.20.1 - diff --git a/0011-replace-agent-with-func-diractory.patch b/0011-replace-agent-with-func-diractory.patch deleted file mode 100644 index 0094141121446da8624bb0ac35ddb85f443b527c..0000000000000000000000000000000000000000 --- a/0011-replace-agent-with-func-diractory.patch +++ /dev/null @@ -1,345 +0,0 @@ -From e7cb51995639db8f663af96a9da3211df5333eb5 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 15:40:32 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=B0=86func=E6=9B=BF=E6=8D=A2=E4=B8=BAagent?= - =?UTF-8?q?=E4=BB=A5=E4=BE=BF=E5=8C=BA=E5=88=86server=E4=B8=8Eagent?= - =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - client_requests.py | 2 +- - index.py | 2 +- - migration-tools-client.py | 4 ++-- - start_webview.py | 2 +- - static/css/admin/jquery.min.map | 2 +- - {func => sysmig_agent}/7badpackage.txt | 0 - {func => sysmig_agent}/8badpackage.txt | 0 - {func => sysmig_agent}/Abisystmcompchk.sh | 0 - {func => sysmig_agent}/Abitranrept.sh | 0 - {func => sysmig_agent}/Abitxt2xls.py | 2 +- - {func => sysmig_agent}/centos72uos.sh | 0 - {func => sysmig_agent}/centos82uos.py | 4 ++-- - {func => sysmig_agent}/check.py | 20 ++++++++--------- - {func => sysmig_agent}/kernel.sh | 0 - {func => sysmig_agent}/share.py | 2 +- - {func => sysmig_agent}/utils.py | 0 - uos-sysmig.sql | 26 +++++++++++++++++++++++ - views/migration.py | 2 +- - views/server.py | 12 +++++++++++ - 19 files changed, 59 insertions(+), 21 deletions(-) - rename {func => sysmig_agent}/7badpackage.txt (100%) - rename {func => sysmig_agent}/8badpackage.txt (100%) - rename {func => sysmig_agent}/Abisystmcompchk.sh (100%) - rename {func => sysmig_agent}/Abitranrept.sh (100%) - rename {func => sysmig_agent}/Abitxt2xls.py (99%) - rename {func => sysmig_agent}/centos72uos.sh (100%) - rename {func => sysmig_agent}/centos82uos.py (99%) - rename {func => sysmig_agent}/check.py (97%) - rename {func => sysmig_agent}/kernel.sh (100%) - rename {func => sysmig_agent}/share.py (99%) - rename {func => sysmig_agent}/utils.py (100%) - -diff --git a/client_requests.py b/client_requests.py -index 4069ea0..7f021c6 100644 ---- a/client_requests.py -+++ b/client_requests.py -@@ -2,7 +2,7 @@ - # SPDX-License-Identifier: MulanPubL-2.0-or-later - import json - import requests --from func.share import getSysMigConf -+from sysmig_agent.share import getSysMigConf - - - uos_sysmig_conf = json.loads(getSysMigConf()) -diff --git a/index.py b/index.py -index a505915..2cb89aa 100644 ---- a/index.py -+++ b/index.py -@@ -6,7 +6,7 @@ - import os - import sys - import json --from func import share -+from sysmig_agent import share - from views import migration, server - - from flask import Flask, render_template, url_for, request, redirect, make_response, session, Response -diff --git a/migration-tools-client.py b/migration-tools-client.py -index db94230..c1ca962 100644 ---- a/migration-tools-client.py -+++ b/migration-tools-client.py -@@ -3,8 +3,8 @@ - import os - import json - from flask import * --from func import check --from func.share import * -+from sysmig_agent import check -+from sysmig_agent.share import * - - app = Flask(__name__) - -diff --git a/start_webview.py b/start_webview.py -index 070182e..2bd3243 100755 ---- a/start_webview.py -+++ b/start_webview.py -@@ -3,7 +3,7 @@ - - import webview - import json --from func.share import getSysMigConf -+from sysmig_agent.share import getSysMigConf - - uos_sysmig_conf = json.loads(getSysMigConf()) - ip = json.loads(uos_sysmig_conf).get('serverip').strip()[1:-1] -diff --git a/static/css/admin/jquery.min.map b/static/css/admin/jquery.min.map -index 2529eaf..1a304ea 100644 ---- a/static/css/admin/jquery.min.map -+++ b/static/css/admin/jquery.min.map -@@ -1 +1 @@ --{"version":3,"file":"jquery-2.1.1.min.js","sources":["jquery-2.1.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","nodeType","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","value","isArraylike","makeArray","results","Object","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","strundefined","MAX_NEGATIVE","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","childNodes","e","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","doc","parent","defaultView","top","addEventListener","attachEvent","className","createComment","innerHTML","firstChild","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","truncate","sibling","n","targets","l","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","list","stack","once","fire","data","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","completed","removeEventListener","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","defineProperty","uid","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","t","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","fixInput","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","backgroundClip","clearCloneStyle","cssText","computePixelPositionAndBoxSizingReliable","divStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","cssHooks","opacity","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus",1223,"xhrSupported","ActiveXObject","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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"} -\ No newline at end of file -+{"version":3,"file":"jquery-2.1.1.min.js","sources":["jquery-2.1.1.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","nodeType","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","value","isArraylike","makeArray","results","Object","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","strundefined","MAX_NEGATIVE","pop","push_native","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","childNodes","e","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","doc","parent","defaultView","top","addEventListener","attachEvent","className","createComment","innerHTML","firstChild","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","truncate","sibling","n","targets","l","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","list","stack","once","fire","data","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","sysmig_agent","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","completed","removeEventListener","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","defineProperty","uid","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","t","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","fixInput","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","backgroundClip","clearCloneStyle","cssText","computePixelPositionAndBoxSizingReliable","divStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","cssHooks","opacity","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","ajaxLocParts","ajaxLocation","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus",1223,"xhrSupported","ActiveXObject","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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"} -\ No newline at end of file -diff --git a/func/7badpackage.txt b/sysmig_agent/7badpackage.txt -similarity index 100% -rename from func/7badpackage.txt -rename to sysmig_agent/7badpackage.txt -diff --git a/func/8badpackage.txt b/sysmig_agent/8badpackage.txt -similarity index 100% -rename from func/8badpackage.txt -rename to sysmig_agent/8badpackage.txt -diff --git a/func/Abisystmcompchk.sh b/sysmig_agent/Abisystmcompchk.sh -similarity index 100% -rename from func/Abisystmcompchk.sh -rename to sysmig_agent/Abisystmcompchk.sh -diff --git a/func/Abitranrept.sh b/sysmig_agent/Abitranrept.sh -similarity index 100% -rename from func/Abitranrept.sh -rename to sysmig_agent/Abitranrept.sh -diff --git a/func/Abitxt2xls.py b/sysmig_agent/Abitxt2xls.py -similarity index 99% -rename from func/Abitxt2xls.py -rename to sysmig_agent/Abitxt2xls.py -index d80ad4c..f676cf9 100644 ---- a/func/Abitxt2xls.py -+++ b/sysmig_agent/Abitxt2xls.py -@@ -5,7 +5,7 @@ import datetime - import json - import socket - import xlwt --from func.share import * -+from sysmig_agent.share import * - - - report_path_bef = "/var/tmp/uos-migration/UOS_analysis_report/" -diff --git a/func/centos72uos.sh b/sysmig_agent/centos72uos.sh -similarity index 100% -rename from func/centos72uos.sh -rename to sysmig_agent/centos72uos.sh -diff --git a/func/centos82uos.py b/sysmig_agent/centos82uos.py -similarity index 99% -rename from func/centos82uos.py -rename to sysmig_agent/centos82uos.py -index 04d5a12..0a715b0 100755 ---- a/func/centos82uos.py -+++ b/sysmig_agent/centos82uos.py -@@ -44,12 +44,12 @@ def get_bad_packages(): - local_os_version = version[0] - badpackages = '' - if '8' == local_os_version: -- with open('func/8badpackage.txt','r') as bf: -+ with open('sysmig_agent/8badpackage.txt','r') as bf: - for bad_package in bf: - badpackages = badpackages + ' ' + bad_package.strip() - bf.close() - else: -- with open('func/7badpackage.txt','r') as bf: -+ with open('sysmig_agent/7badpackage.txt','r') as bf: - for bad_package in bf: - badpackages = badpackages + ' ' + bad_package.strip() - bf.close() -diff --git a/func/check.py b/sysmig_agent/check.py -similarity index 97% -rename from func/check.py -rename to sysmig_agent/check.py -index 47de418..3d4d3e9 100644 ---- a/func/check.py -+++ b/sysmig_agent/check.py -@@ -12,9 +12,9 @@ from multiprocessing import Process - - - from settings import * --from func.utils import * --from func.share import * --from func.Abitxt2xls import * -+from sysmig_agent.utils import * -+from sysmig_agent.share import * -+from sysmig_agent.Abitxt2xls import * - - os.chdir('/usr/lib/migration-tools-agent') - -@@ -375,7 +375,7 @@ def fork_sh(cmd): - - - def env(): -- cmd = 'sh func/Abisystmcompchk.sh' -+ cmd = 'sh sysmig_agent/Abisystmcompchk.sh' - t = Process(target=fork_sh, args=(cmd,)) - t.start() - -@@ -603,21 +603,21 @@ def Sysmig(data_j): - AGENT_OS = os_version_ret[0]+version[0] - kernel_version = json.loads(data_j).get('kernel_version') - if re.fullmatch('8',version[0]): -- cmd = 'python3 func/centos82uos.py' -+ cmd = 'python3 sysmig_agent/centos82uos.py' - t = Process(target=run_cmd2file, args=(cmd,)) - t.start() - elif re.search('centos7',AGENT_OS): -- ex_kernel = 'sh func/centos72uos.sh -e "kernel-devel* kernel-headers* kernel-tools* kernel* bpftool perf python-perf kernel-abi* kernel-modules kernel-core kmod-kvdo"' -+ ex_kernel = 'sh sysmig_agent/centos72uos.sh -e "kernel-devel* kernel-headers* kernel-tools* kernel* bpftool perf python-perf kernel-abi* kernel-modules kernel-core kmod-kvdo"' - if kernel_version == '0': - run_cmd2file(ex_kernel) - messageState('3') - elif kernel_version == '3.10.0' : - run_cmd2file(ex_kernel) -- cmd_k = 'sh func/kernel.sh -k 3.10.0' -+ cmd_k = 'sh sysmig_agent/kernel.sh -k 3.10.0' - run_cmd2file(cmd_k) - messageState('3') - else: -- cmd = 'sh func/centos72uos.sh' -+ cmd = 'sh sysmig_agent/centos72uos.sh' - run_cmd2file(cmd) - messageState('3') - -@@ -647,7 +647,7 @@ def system_migration(data_j): - oldos = oldos.split(':',1) - main_conf(oldos[1]) - if os.path.exists('/var/tmp/uos-migration/data/exp-rst/systeminfo.txt'): -- run_cmd2file('sh func/Abitranrept.sh') -+ run_cmd2file('sh sysmig_agent/Abitranrept.sh') - abi_txt2xls_after_mig() - messageState('4') - elif re.fullmatch('4',state): -@@ -659,7 +659,7 @@ def system_migration(data_j): - elif re.fullmatch('3',state): - messageState('5') - if os.path.exists('/var/tmp/uos-migration/data/exp-rst/systeminfo.txt'): -- run_cmd2file('func/Abitranrept.sh') -+ run_cmd2file('sysmig_agent/Abitranrept.sh') - abi_txt2xls_after_mig() - if os.path.exists('/var/tmp/uos-migration/UOS_migration_log/rpms-list-after.txt'): - res = '0' -diff --git a/func/kernel.sh b/sysmig_agent/kernel.sh -similarity index 100% -rename from func/kernel.sh -rename to sysmig_agent/kernel.sh -diff --git a/func/share.py b/sysmig_agent/share.py -similarity index 99% -rename from func/share.py -rename to sysmig_agent/share.py -index 6ad5749..ec9265b 100644 ---- a/func/share.py -+++ b/sysmig_agent/share.py -@@ -8,7 +8,7 @@ import re - import shutil - import subprocess - --from func.utils import list_to_json -+from sysmig_agent.utils import list_to_json - - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' -diff --git a/func/utils.py b/sysmig_agent/utils.py -similarity index 100% -rename from func/utils.py -rename to sysmig_agent/utils.py -diff --git a/uos-sysmig.sql b/uos-sysmig.sql -index d65006d..4a33bb0 100644 ---- a/uos-sysmig.sql -+++ b/uos-sysmig.sql -@@ -80,6 +80,32 @@ LOCK TABLES `task_stream` WRITE; - /*!40000 ALTER TABLE `task_stream` ENABLE KEYS */; - UNLOCK TABLES; - -+-- -+-- Table structure for table `cur_task` -+-- -+ -+DROP TABLE IF EXISTS `cur_task`; -+/*!40101 SET @saved_cs_client = @@character_set_client */; -+/*!50503 SET character_set_client = utf8mb4 */; -+CREATE TABLE `cur_task` ( -+ `task_id` int NOT NULL AUTO_INCREMENT, -+ `task_status` varchar(256) DEFAULT NULL, -+ `stream_CreateTime` timestamp NULL DEFAULT NULL, -+ `stream_Updatetime` varchar(45) DEFAULT NULL, -+ `agent_ip` varchar(256) DEFAULT NULL, -+ PRIMARY KEY (`task_id`) -+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -+/*!40101 SET character_set_client = @saved_cs_client */; -+ -+-- -+-- Dumping data for table `cur_task` -+-- -+ -+LOCK TABLES `cur_task` WRITE; -+/*!40000 ALTER TABLE `cur_task` DISABLE KEYS */; -+/*!40000 ALTER TABLE `cur_task` ENABLE KEYS */; -+UNLOCK TABLES; -+ - -- - -- Dumping routines for database 'uossysmig' - -- -diff --git a/views/migration.py b/views/migration.py -index 477627b..f9fe01d 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -3,7 +3,7 @@ - import os - from flask import * - from client_requests import * --from func.utils import * -+from sysmig_agent.utils import * - - - def check_services(data, url): -diff --git a/views/server.py b/views/server.py -index d36f013..49353b4 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -2,6 +2,7 @@ import json - from datetime import datetime - - from connect_sql import DBHelper -+from sysmig_agent.share import getSysMigConf - - def import_host_info(data): - """ -@@ -23,7 +24,18 @@ def import_host_info(data): - agent_passwd = i.get('agent_password') - val = ((agent_ip, agent_username, agent_passwd),) - DBHelper().insert(sql, val) -+ create_task_stream(agent_ip) - -+ time = datetime.now().strftime('%Y-%-m-%d %H:%M:%S') -+ uos_sysmig_conf = json.loads(getSysMigConf()) -+ ip = json.loads(uos_sysmig_conf).get('serverip').strip()[1:-1] -+ host_report_sql = "insert into report_info(agent_ip,create_time,report_name,report_type) values (%s, %s, %s, %s);" -+ host_report_sql_val = ((ip, time, '迁移主机列表_%s' % time, '主机列表'),) -+ DBHelper().insert(host_report_sql, host_report_sql_val) -+ # TODO: 用户权限检测 -+ -+ data_json = json.dumps(data) -+ return data_json - - - --- -2.20.1 - diff --git a/0012-add-agent_task-in-database.patch b/0012-add-agent_task-in-database.patch deleted file mode 100644 index 948601e7a90e1602e6275c50dabf47702a53e41b..0000000000000000000000000000000000000000 --- a/0012-add-agent_task-in-database.patch +++ /dev/null @@ -1,87 +0,0 @@ -From c146375a219621e13c187df66c45971a4f50aa6c Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 15:51:39 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0agent=5Ftask=E8=A1=A8?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - uos-sysmig.sql | 33 +++++++++++++++++++++++++++++++++ - views/server.py | 17 ++++++++++++++++- - 2 files changed, 49 insertions(+), 1 deletion(-) - -diff --git a/uos-sysmig.sql b/uos-sysmig.sql -index 4a33bb0..9f31049 100644 ---- a/uos-sysmig.sql -+++ b/uos-sysmig.sql -@@ -80,6 +80,39 @@ LOCK TABLES `task_stream` WRITE; - /*!40000 ALTER TABLE `task_stream` ENABLE KEYS */; - UNLOCK TABLES; - -+-- -+-- Table structure for table `agent_task` -+-- -+ -+DROP TABLE IF EXISTS `agent_task`; -+/*!40101 SET @saved_cs_client = @@character_set_client */; -+/*!50503 SET character_set_client = utf8mb4 */; -+CREATE TABLE `agent_task` ( -+ `agent_id` int NOT NULL, -+ `agent_ip` varchar(256) DEFAULT NULL, -+ `task_id` int DEFAULT NULL, -+ `task_stream_id` int DEFAULT NULL, -+ `task_code` varchar(256) DEFAULT NULL, -+ `task_type` int DEFAULT NULL, -+ `task_status` int DEFAULT NULL, -+ `task_progress` int DEFAULT NULL, -+ `task_CreateTime` timestamp NULL DEFAULT NULL, -+ `task_Updatetime` timestamp NULL DEFAULT NULL, -+ `task_data` varchar(256) DEFAULT NULL, -+ PRIMARY KEY (`agent_id`), -+ KEY `task_id` (`task_id`) -+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; -+/*!40101 SET character_set_client = @saved_cs_client */; -+ -+-- -+-- Dumping data for table `agent_task` -+-- -+ -+LOCK TABLES `agent_task` WRITE; -+/*!40000 ALTER TABLE `agent_task` DISABLE KEYS */; -+/*!40000 ALTER TABLE `agent_task` ENABLE KEYS */; -+UNLOCK TABLES; -+ - -- - -- Table structure for table `cur_task` - -- -diff --git a/views/server.py b/views/server.py -index 49353b4..cf07d2f 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -62,4 +62,19 @@ def create_task_stream(agent_ip): - agent_id = get_agent_id(agent_ip) - time = datetime.now().strftime('%Y-%-m-%d %H:%M:%S') - values = ((agent_ip, agent_id, stream_status, time, time),) -- DBHelper().insert(create_task_stream_sql, values) -\ No newline at end of file -+ DBHelper().insert(create_task_stream_sql, values) -+ -+ create_cur_task_sql = "insert into cur_task(task_status,stream_CreateTime,stream_Updatetime," \ -+ "agent_ip) values (%s, %s, %s, %s);" -+ values = (('None', time, time, agent_ip),) -+ DBHelper().insert(create_cur_task_sql, values) -+ -+ get_task_id = "select max(task_id) task_id from cur_task" -+ task_id = DBHelper().execute(get_task_id).fetchone() -+ task_stream_id_sql = "select task_stream_id from task_stream where agent_ip='%s'" % agent_ip -+ task_stream_id = DBHelper().execute(task_stream_id_sql).fetchone() -+ values = ((agent_id, agent_ip, task_id[0], 0, 0, time, time, task_stream_id[0], "00"),) -+ create_agent_task_sql = "insert into agent_task(agent_id,agent_ip,task_id,task_status,task_progress," \ -+ "task_CreateTime,task_Updatetime,task_stream_id,task_data) values " \ -+ "(%s, %s, %s, %s, %s, %s, %s, %s, %s);" -+ DBHelper().insert(create_agent_task_sql, values) -\ No newline at end of file --- -2.20.1 - diff --git a/0013-display-agent-host-information.patch b/0013-display-agent-host-information.patch deleted file mode 100644 index def9fbfbea8e1d2a7e774a83161ccfa221b5c028..0000000000000000000000000000000000000000 --- a/0013-display-agent-host-information.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 2140a85929564d0104bc364cd4e306f75c7dc77d Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 16:35:55 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=BB=E6=9C=BA=E4=BF=A1?= - =?UTF-8?q?=E6=81=AF=E5=B1=95=E7=A4=BA?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 13 +++++++++++ - views/server.py | 59 +++++++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 70 insertions(+), 2 deletions(-) - -diff --git a/index.py b/index.py -index 2cb89aa..0c64990 100644 ---- a/index.py -+++ b/index.py -@@ -27,6 +27,7 @@ mods = { - 'system_migration': migration.system_migration, - 'migration_details': migration.migration_details, - 'import_host_info': server.import_host_info, -+ 'host_info_display': server.host_info_display, - } - - @app.route('/import_host_info', methods=['GET', 'POST']) -@@ -39,6 +40,18 @@ def import_host_info(): - if mod: - return Response(mod, content_type='application/json') - -+ -+@app.route('/host_info_display', methods=['GET', 'POST']) -+def host_info_display(): -+ """ -+ 显示主机信息 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - def check_methods(): - if request.method == 'POST': - data = request.get_data() -diff --git a/views/server.py b/views/server.py -index cf07d2f..d2ca719 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -38,7 +38,6 @@ def import_host_info(data): - return data_json - - -- - def get_agent_id(agent_ip): - """ - 获取agent_id -@@ -77,4 +76,60 @@ def create_task_stream(agent_ip): - create_agent_task_sql = "insert into agent_task(agent_id,agent_ip,task_id,task_status,task_progress," \ - "task_CreateTime,task_Updatetime,task_stream_id,task_data) values " \ - "(%s, %s, %s, %s, %s, %s, %s, %s, %s);" -- DBHelper().insert(create_agent_task_sql, values) -\ No newline at end of file -+ DBHelper().insert(create_agent_task_sql, values) -+ -+ -+def pagebreak(data, page, size): -+ """ -+ 页面数据分页 -+ :param data: -+ :return: -+ """ -+ page_start = (page - 1) * size -+ page_end = page * size -+ result = data[page_start:page_end] -+ -+ return result -+ -+def host_info_display(data): -+ """ -+ 显示主机信息 -+ agent_ip,hostname,agent_online_status,agent_os,agent_arch, -+ agent_history_faild_reason,task_CreateTime,task_status -+ :return: -+ """ -+ page = json.loads(data).get('page') -+ size = json.loads(data).get('size') -+ sql = "select agent_ip,hostname,agent_online_status,agent_os,agent_arch," \ -+ "agent_history_faild_reason from agent_info;" -+ data = DBHelper().execute(sql).fetchall() -+ data = list(data) -+ for i in range(0, len(data)): -+ data[i] = list(data[i]) -+ agent_task = "select task_CreateTime,task_data from agent_task where agent_ip = '%s';" % data[i][0] -+ get_agent_task = DBHelper().execute(agent_task).fetchall() -+ get_agent_task = list(get_agent_task) -+ -+ if not get_agent_task: -+ data[i] += ["", ""] -+ else: -+ task_CreateTime = get_agent_task[0][0].strftime('%Y-%-m-%d %H:%M:%S') -+ task_status = get_agent_task[0][1] -+ data[i].append(task_CreateTime) -+ data[i].append(task_status) -+ -+ res = {} -+ res['num'] = len(data) -+ info_list = [] -+ info_dict_keys_list = ['agent_ip', 'hostname', 'agent_online_status', 'agent_os', 'agent_arch', -+ 'failure_reasons', 'task_CreateTime', 'task_status'] -+ for i in data: -+ info_list.append(dict(zip(info_dict_keys_list, i))) -+ -+ page_list = pagebreak(info_list, page, size) -+ res['info'] = page_list -+ res['page'] = page -+ res['size'] = size -+ -+ json_res = json.dumps(res) -+ return json_res -\ No newline at end of file --- -2.20.1 - diff --git a/0014-modify-task-stream-interface.patch b/0014-modify-task-stream-interface.patch deleted file mode 100644 index 61d8ca5b9f5b0d12e55fc3767187ab19f74d21e4..0000000000000000000000000000000000000000 --- a/0014-modify-task-stream-interface.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 5866f586616e48dfea53107cf6f8c3364c658951 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 17:08:00 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=BB=E5=8A=A1=E6=B5=81?= - =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 13 ++++++++++++- - views/server.py | 31 ++++++++++++++++++++++++++++++- - 2 files changed, 42 insertions(+), 2 deletions(-) - -diff --git a/index.py b/index.py -index 0c64990..059431b 100644 ---- a/index.py -+++ b/index.py -@@ -4,7 +4,6 @@ - # SPDX-License-Identifier: MulanPubL-2.0-or-later - - import os --import sys - import json - from sysmig_agent import share - from views import migration, server -@@ -28,6 +27,7 @@ mods = { - 'migration_details': migration.migration_details, - 'import_host_info': server.import_host_info, - 'host_info_display': server.host_info_display, -+ 'sql_task': server.modify_task_stream, - } - - @app.route('/import_host_info', methods=['GET', 'POST']) -@@ -52,6 +52,17 @@ def host_info_display(): - return Response(mod, content_type='application/json') - - -+@app.route('/sql_task', methods=['GET', 'POST']) -+def modify_task_stream(): -+ """ -+ 修改任务流 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - def check_methods(): - if request.method == 'POST': - data = request.get_data() -diff --git a/views/server.py b/views/server.py -index d2ca719..a00e696 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -132,4 +132,33 @@ def host_info_display(data): - res['size'] = size - - json_res = json.dumps(res) -- return json_res -\ No newline at end of file -+ return json_res -+ -+ -+def modify_task_stream(data): -+ """ -+ 修改任务流状态 -+ :return: -+ """ -+ task_id = json.loads(data).get('task_id') -+ get_task_status_sql = "select task_status,task_stream_id from agent_task where task_id='%s';" % task_id -+ info = DBHelper().execute(get_task_status_sql).fetchone() -+ task_status = info[0] -+ task_stream_id = info[1] -+ if task_status == 0: -+ task_status = 'None' -+ elif task_status == 1: -+ task_status = 'Doing' -+ elif task_status == 2: -+ task_status = 'Done' -+ else: -+ task_status = 'Cancel' -+ time = datetime.now() -+ modify_task_status_sql = "update cur_task set task_status='%s',stream_Updatetime='%s' " \ -+ "where task_id ='%s';" % (task_status, time, task_id) -+ DBHelper().execute(modify_task_status_sql) -+ -+ modify_task_stream_sql = "update task_stream set stream_status='%s',stream_Updatetime='%s' " \ -+ "where task_stream_id='%s';" % (task_status, time, task_stream_id) -+ DBHelper().execute(modify_task_stream_sql) -+ return 'success' -\ No newline at end of file --- -2.20.1 - diff --git a/0015-delete-host-information-interface.patch b/0015-delete-host-information-interface.patch deleted file mode 100644 index 9fb524a3d5e04437ffed02e9aeff004fe4ff21bb..0000000000000000000000000000000000000000 --- a/0015-delete-host-information-interface.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 6725378c0a35beed675d7cb73e1f16c712ece59a Mon Sep 17 00:00:00 2001 -From: lixin -Date: Thu, 9 Nov 2023 17:13:41 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=A0=E9=99=A4=E4=B8=BB?= - =?UTF-8?q?=E6=9C=BA=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 13 +++++++++++++ - views/server.py | 23 ++++++++++++++++++++++- - 2 files changed, 35 insertions(+), 1 deletion(-) - -diff --git a/index.py b/index.py -index 059431b..c51a24c 100644 ---- a/index.py -+++ b/index.py -@@ -28,8 +28,10 @@ mods = { - 'import_host_info': server.import_host_info, - 'host_info_display': server.host_info_display, - 'sql_task': server.modify_task_stream, -+ 'delete_host_info': server.delete_host_info, - } - -+ - @app.route('/import_host_info', methods=['GET', 'POST']) - def import_host_info(): - """ -@@ -63,6 +65,17 @@ def modify_task_stream(): - return Response(mod, content_type='application/json') - - -+@app.route('/delete_host_info', methods=['GET', 'POST']) -+def delete_host_info(): -+ """ -+ 删除迁移主机 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - def check_methods(): - if request.method == 'POST': - data = request.get_data() -diff --git a/views/server.py b/views/server.py -index a00e696..e7570b8 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -161,4 +161,25 @@ def modify_task_stream(data): - modify_task_stream_sql = "update task_stream set stream_status='%s',stream_Updatetime='%s' " \ - "where task_stream_id='%s';" % (task_status, time, task_stream_id) - DBHelper().execute(modify_task_stream_sql) -- return 'success' -\ No newline at end of file -+ return 'success' -+ -+ -+def delete_host_info(data): -+ """ -+ 删除主机信息 -+ :return: -+ """ -+ data = json.loads(data) -+ for i in data.get('agent_ip'): -+ sql = "delete from agent_info where agent_ip='%s';" % i -+ DBHelper().execute(sql) -+ sql = "delete from agent_task where agent_ip='%s';" % i -+ DBHelper().execute(sql) -+ sql = "delete from task_stream where agent_ip='%s';" % i -+ DBHelper().execute(sql) -+ sql = "delete from cur_task where agent_ip='%s';" % i -+ DBHelper().execute(sql) -+ -+ res = {'data': 'success'} -+ json_res = json.dumps(res) -+ return json_res -\ No newline at end of file --- -2.20.1 - diff --git a/0016-get-local-ip-on-the-agent.patch b/0016-get-local-ip-on-the-agent.patch deleted file mode 100644 index eec7fcd2243e9dccd0c5b3716158729a77f190b8..0000000000000000000000000000000000000000 --- a/0016-get-local-ip-on-the-agent.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 36a4d4629cef2cf5df278fd2ca503b6b84a89751 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:01:24 +0800 -Subject: [PATCH] =?UTF-8?q?agent=E8=8E=B7=E5=8F=96=E6=9C=AC=E5=9C=B0IP?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index ec9265b..ea3d63a 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -7,9 +7,20 @@ import platform - import re - import shutil - import subprocess -- -+import socket - from sysmig_agent.utils import list_to_json - -+ -+def get_local_ip(): -+ try: -+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -+ s.connect(('8.8.8.8', 80)) -+ ip = s.getsockname()[0] -+ return ip -+ finally: -+ s.close() -+ -+ - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' - if not os.path.exists(confpath): --- -2.20.1 - diff --git a/0017-add-process-data-in-database.patch b/0017-add-process-data-in-database.patch deleted file mode 100644 index 72285b1dca058a82e2c7e60a696362218a47e2cd..0000000000000000000000000000000000000000 --- a/0017-add-process-data-in-database.patch +++ /dev/null @@ -1,42 +0,0 @@ -From a3b140660e4180fdeddc7d2bb8009a78218a9235 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:21:12 +0800 -Subject: [PATCH] =?UTF-8?q?agent=E5=A2=9E=E5=8A=A0=E4=BB=BB=E5=8A=A1?= - =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE=E5=BA=93?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index ea3d63a..aae815c 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -9,7 +9,7 @@ import shutil - import subprocess - import socket - from sysmig_agent.utils import list_to_json -- -+from connect_sql import DBHelper - - def get_local_ip(): - try: -@@ -20,6 +20,12 @@ def get_local_ip(): - finally: - s.close() - -+def sql_abi_progress(data): -+ sql = "UPDATE agent_task SET task_progress = {} ,task_Updatetime = NOW() WHERE agent_ip = '{}';".format(data, get_local_ip()) -+ try: -+ ret = DBHelper().execute(sql) -+ except: -+ pass - - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' --- -2.20.1 - diff --git a/0018-detection-of-imported-host-information-interface.patch b/0018-detection-of-imported-host-information-interface.patch deleted file mode 100644 index a0fff0f30545145a3324a84d6f308fcc9de3a8db..0000000000000000000000000000000000000000 --- a/0018-detection-of-imported-host-information-interface.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 2dacf8188d8bfb223092ac386768b19cf8f4ab64 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 10:23:53 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E5=AF=BC=E5=85=A5=E4=B8=BB?= - =?UTF-8?q?=E6=9C=BA=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 28 ++++++++++++++++++++-------- - views/migration.py | 13 +++++++++++++ - 2 files changed, 33 insertions(+), 8 deletions(-) - -diff --git a/index.py b/index.py -index c51a24c..edd4440 100644 ---- a/index.py -+++ b/index.py -@@ -29,9 +29,20 @@ mods = { - 'host_info_display': server.host_info_display, - 'sql_task': server.modify_task_stream, - 'delete_host_info': server.delete_host_info, -+ 'check_info': migration.check_info, - } - - -+def check_methods(): -+ if request.method == 'POST': -+ data = request.get_data() -+ json_data = json.loads(data) -+ mod = mods.get(json_data['mod']) -+ if mod: -+ response_str = mod(data) -+ return response_str -+ -+ - @app.route('/import_host_info', methods=['GET', 'POST']) - def import_host_info(): - """ -@@ -76,14 +87,15 @@ def delete_host_info(): - return Response(mod, content_type='application/json') - - --def check_methods(): -- if request.method == 'POST': -- data = request.get_data() -- json_data = json.loads(data) -- mod = mods.get(json_data['mod']) -- if mod: -- response_str = mod(data) -- return response_str -+@app.route('/check_info', methods=['GET', 'POST']) -+def check_info(): -+ """ -+ 检测系统版本和空间大小 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') - - - @app.route('/', methods=['GET', 'POST']) -diff --git a/views/migration.py b/views/migration.py -index f9fe01d..b359d36 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -1,11 +1,24 @@ - # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. - # SPDX-License-Identifier: MulanPubL-2.0-or-later - import os -+ -+from connect_sql import DBHelper -+from logger import * -+ - from flask import * - from client_requests import * - from sysmig_agent.utils import * - - -+def check_info(data): -+ """ -+ 检测系统版本和空间大小 -+ :param data: -+ :return: -+ """ -+ return 'success' -+ -+ - def check_services(data, url): - info = post_client_data(data, url) - if info is None or info.status_code != 200: --- -2.20.1 - diff --git a/0019-update-abi-result-to-database.patch b/0019-update-abi-result-to-database.patch deleted file mode 100644 index fe491322d4548069b2811f257f3016d4bdfa21f4..0000000000000000000000000000000000000000 --- a/0019-update-abi-result-to-database.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0f2c2d8cbda956a27bb0eb3ee1a0dd14a55f8e19 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:27:15 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0abi=E6=A3=80=E6=B5=8B?= - =?UTF-8?q?=E7=BB=93=E6=9E=9C=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93=E4=B8=AD?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index aae815c..27e8ff8 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -20,6 +20,8 @@ def get_local_ip(): - finally: - s.close() - -+ -+ - def sql_abi_progress(data): - sql = "UPDATE agent_task SET task_progress = {} ,task_Updatetime = NOW() WHERE agent_ip = '{}';".format(data, get_local_ip()) - try: -@@ -27,6 +29,13 @@ def sql_abi_progress(data): - except: - pass - -+ -+def abi_file_connect(sql_r): -+ abi_sql = "INSERT INTO agent_ABI_check_result VALUES('"+ get_local_ip()+"'," + sql_r + ',NOW());' -+ s = DBHelper() -+ ret_sql_msg = s.execute(abi_sql) -+ -+ - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' - if not os.path.exists(confpath): --- -2.20.1 - diff --git a/0020-get-task-process-and-migration-stage-information.patch b/0020-get-task-process-and-migration-stage-information.patch deleted file mode 100644 index 4f433fada61a3fffd226398a0cf5246d610c5cf2..0000000000000000000000000000000000000000 --- a/0020-get-task-process-and-migration-stage-information.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 492a8e59c09991cb8bd1550cf62e849c15e1e517 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:30:03 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=BB=BB=E5=8A=A1=E8=BF=9B?= - =?UTF-8?q?=E5=BA=A6=E5=92=8C=E8=BF=81=E7=A7=BB=E9=98=B6=E6=AE=B5=E4=BF=A1?= - =?UTF-8?q?=E6=81=AF?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 27e8ff8..0c989a8 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -30,6 +30,13 @@ def sql_abi_progress(data): - pass - - -+def sql_show_tables(): -+ sql = "SELECT task_progress,task_data FROM agent_task WHERE agent_ip = '{}';".format(get_local_ip()) -+ ret_sql_msg_info = DBHelper().execute(sql) -+ if ret_sql_msg_info: -+ print(str(ret_sql_msg_info.fetchall()) + '\n') -+ -+ - def abi_file_connect(sql_r): - abi_sql = "INSERT INTO agent_ABI_check_result VALUES('"+ get_local_ip()+"'," + sql_r + ',NOW());' - s = DBHelper() --- -2.20.1 - diff --git a/0021-get-agent-ip-interface.patch b/0021-get-agent-ip-interface.patch deleted file mode 100644 index e2edb0b015ef57d7a1ee4e91322daff3224f0765..0000000000000000000000000000000000000000 --- a/0021-get-agent-ip-interface.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 371237696acb7ea7c34191cd629f3dd8d9cff8df Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 10:32:24 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96agent=20ip=E5=9C=B0=E5=9D=80?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/migration.py | 19 +++++++++++++++++++ - 1 file changed, 19 insertions(+) - -diff --git a/views/migration.py b/views/migration.py -index b359d36..7b2f4ed 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -10,6 +10,25 @@ from client_requests import * - from sysmig_agent.utils import * - - -+def get_agent_ip(data, sql, url): -+ """ -+ 获取agent_ip地址 -+ :return: -+ """ -+ agent_info = DBHelper().execute(sql).fetchall() -+ data = json.loads(data) -+ for i in agent_info: -+ task_status_sql = "select task_status from agent_task where agent_ip='%s'" % list(i)[0] -+ task_status = DBHelper().execute(task_status_sql).fetchall()[0][0] -+ if task_status == 0 or task_status == 2: -+ update_sql = "update agent_task set task_progress=0,task_status=1 where agent_ip='%s'" % list(i)[0] -+ DBHelper().execute(update_sql) -+ get_task_id_sql = "select task_id from cur_task where agent_ip='%s'" % list(i)[0] -+ task_id = DBHelper().execute(get_task_id_sql).fetchall() -+ data['task_id'] = task_id[0][0] -+ json_data = json.dumps(data) -+ -+ - def check_info(data): - """ - 检测系统版本和空间大小 --- -2.20.1 - diff --git a/0022-udpate-agent-host-status-online.patch b/0022-udpate-agent-host-status-online.patch deleted file mode 100644 index 1b688d1cc70de961a36e113a0d267350d342d54b..0000000000000000000000000000000000000000 --- a/0022-udpate-agent-host-status-online.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 3a4f5ea15df617babd1f7c39143d01b937bbb417 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:35:43 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E6=9C=BA=E5=9C=A8=E7=BA=BF=E7=8A=B6?= - =?UTF-8?q?=E6=80=81=E6=9B=B4=E6=96=B0?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 15 +++++++++++++++ - 1 file changed, 15 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 0c989a8..abbe452 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -30,6 +30,21 @@ def sql_abi_progress(data): - pass - - -+def sql_online_statue(statue, task_id): -+ """ -+ sql:agent主机的在线状态更新 -+ :param statue: 0:在线; 1:离线 -+ :param task_id:agent的json内的task_id -+ :return: -+ """ -+ # sql = "UPDATE agent_info SET agent_online_status = {} WHERE agent_ip = {};".format(statue, get_local_ip()) -+ sql = "UPDATE agent_info SET agent_online_status = {} WHERE agent_ip = (SELECT agent_ip FROM agent_task WHERE task_id = '{}');".format( -+ statue, task_id) -+ try: -+ ret = DBHelper().execute(sql) -+ except: -+ pass -+ - def sql_show_tables(): - sql = "SELECT task_progress,task_data FROM agent_task WHERE agent_ip = '{}';".format(get_local_ip()) - ret_sql_msg_info = DBHelper().execute(sql) --- -2.20.1 - diff --git a/0023-update-the-status-of-the-migration-phase.patch b/0023-update-the-status-of-the-migration-phase.patch deleted file mode 100644 index 95e41a78defc55b94a24fabe052d721c4ad238b5..0000000000000000000000000000000000000000 --- a/0023-update-the-status-of-the-migration-phase.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c92f1168709c3974b33ae04553c58f739909ba99 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:38:27 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=81=E7=A7=BB=E9=98=B6?= - =?UTF-8?q?=E6=AE=B5=E7=9A=84=E7=8A=B6=E6=80=81?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index abbe452..5a51266 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -45,6 +45,17 @@ def sql_online_statue(statue, task_id): - except: - pass - -+ -+def sql_mig_statue(statue): -+ # sql = "UPDATE agent_task SET task_statues = {} , task_Updatetime = NOW() WHERE task_id = '{}';".format(statue, task_id) -+ sql = "UPDATE agent_task SET task_data = '{}' , task_Updatetime = NOW() WHERE agent_ip = '{}';".format(statue, -+ get_local_ip()) -+ try: -+ ret = DBHelper().execute(sql) -+ except: -+ pass -+ -+ - def sql_show_tables(): - sql = "SELECT task_progress,task_data FROM agent_task WHERE agent_ip = '{}';".format(get_local_ip()) - ret_sql_msg_info = DBHelper().execute(sql) --- -2.20.1 - diff --git a/0024-add-url-processing-function.patch b/0024-add-url-processing-function.patch deleted file mode 100644 index 3ff5811811e9c1d994771cfec9ea5c9560832e29..0000000000000000000000000000000000000000 --- a/0024-add-url-processing-function.patch +++ /dev/null @@ -1,48 +0,0 @@ -From b627e1aecff4edd096c4ce6cc04486adc04fe89e Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 10:44:12 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0url=E5=A4=84=E7=90=86?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - interaction.py | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - create mode 100644 interaction.py - -diff --git a/interaction.py b/interaction.py -new file mode 100644 -index 0000000..e4016ab ---- /dev/null -+++ b/interaction.py -@@ -0,0 +1,25 @@ -+import requests -+import json -+from sysmig_agent.share import getSysMigConf -+ -+headers = {'content-type': 'application/json'} -+ -+class Interaction: -+ def __init__(self, url, data): -+ self.url = url -+ self.data = data -+ -+ def send_post_requests(self): -+ try: -+ r = requests.post(url=self.url, data=self.data, headers=headers, timeout=10) -+ except: -+ r = None -+ return r -+ -+ -+def splice_url(data, url, ip): -+ uos_sysmig_conf = json.loads(getSysMigConf(ip)) -+ port = json.loads(uos_sysmig_conf).get('agentport').strip()[1:-1] -+ post_url = "http://" + ip + ":" + port + url -+ data = Interaction(post_url, data) -+ return data.send_post_requests() -\ No newline at end of file --- -2.20.1 - diff --git a/0025-update-migration-status-to-database.patch b/0025-update-migration-status-to-database.patch deleted file mode 100644 index bf4992f926a62b66a5e1112bb9ea93e53f12fbb4..0000000000000000000000000000000000000000 --- a/0025-update-migration-status-to-database.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 04d1e8e872dab7113d5cc80cd3cdf38e93d4bc30 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:47:31 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=BF=81=E7=A7=BB=E4=BB=BB?= - =?UTF-8?q?=E5=8A=A1=E7=9A=84=E7=8A=B6=E6=80=81=E5=88=B0=E6=95=B0=E6=8D=AE?= - =?UTF-8?q?=E5=BA=93?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 5a51266..a3b2c2d 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -54,7 +54,18 @@ def sql_mig_statue(statue): - ret = DBHelper().execute(sql) - except: - pass -- -+ -+ -+def sql_task_statue(statue, task_id = None): -+ if task_id: -+ sql = "UPDATE agent_task SET task_status = {} , task_Updatetime = NOW() WHERE task_id = '{}';".format(statue, task_id) -+ else: -+ sql = "UPDATE agent_task SET task_status = {} , task_Updatetime = NOW() WHERE agent_ip = '{}';".format(statue, get_local_ip()) -+ try: -+ ret = DBHelper().execute(sql) -+ except Exception : -+ pass -+ - - def sql_show_tables(): - sql = "SELECT task_progress,task_data FROM agent_task WHERE agent_ip = '{}';".format(get_local_ip()) --- -2.20.1 - diff --git a/0026-create-repository-and-disable-local-repofile.patch b/0026-create-repository-and-disable-local-repofile.patch deleted file mode 100644 index 99d145eb2c2c4764d8230d7ea2fb2fbbe88711d2..0000000000000000000000000000000000000000 --- a/0026-create-repository-and-disable-local-repofile.patch +++ /dev/null @@ -1,55 +0,0 @@ -From a5919afd74bff0611aed9f1ebe2064a51c4031e5 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:51:43 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=BF=81=E7=A7=BB=E8=BD=AF?= - =?UTF-8?q?=E4=BB=B6=E6=BA=90=EF=BC=8C=E8=87=AA=E5=8A=A8disable=E6=8E=89?= - =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E9=BB=98=E8=AE=A4=E7=9A=84=E8=BD=AF=E4=BB=B6?= - =?UTF-8?q?=E6=BA=90?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index a3b2c2d..3e7bb30 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -79,6 +79,32 @@ def abi_file_connect(sql_r): - s = DBHelper() - ret_sql_msg = s.execute(abi_sql) - -+def local_disabled_release_repo(): -+ """ -+ 将系统内存在的repository文件置为不可用,只保留switch-to-uos.repo -+ :return: -+ """ -+ path = '/etc/yum.repos.d' -+ if os.path.exists(path): -+ file_list = os.listdir(path) -+ for file in file_list: -+ fpath = os.path.join(path, file) -+ if os.path.isdir(fpath): -+ continue -+ else: -+ if re.fullmatch('switch-to-uos.repo', file, re.IGNORECASE): -+ continue -+ elif not re.search('repo', file, re.IGNORECASE): -+ continue -+ with open(fpath, 'r') as fdst: -+ allrepo = fdst.read() -+ fdst.close() -+ with open(fpath + '.disabled', 'w+') as fdst: -+ fdst.write( -+ '#This is a yum repository file that was disabled . \n' + allrepo) -+ fdst.close() -+ os.remove(fpath) -+ - - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' --- -2.20.1 - diff --git a/0027-fix-grub-file-for-system-option.patch b/0027-fix-grub-file-for-system-option.patch deleted file mode 100644 index 181c77d614f7848e8399795b4757025f8e85bfa8..0000000000000000000000000000000000000000 --- a/0027-fix-grub-file-for-system-option.patch +++ /dev/null @@ -1,111 +0,0 @@ -From b47bd5687781d5c82d1cd267c11c690fd01c5317 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 10:57:31 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=BF=81=E7=A7=BB=E5=90=8E?= - =?UTF-8?q?=E5=BC=95=E5=AF=BC=E9=A1=B9=E8=A6=86=E7=9B=96=E7=B3=BB=E7=BB=9F?= - =?UTF-8?q?=E4=B8=8D=E5=85=A8=E7=9A=84=E9=97=AE=E9=A2=98?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 53 ++++++++++++++++++++++++++++++------------- - 1 file changed, 37 insertions(+), 16 deletions(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 3e7bb30..68fcfa0 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -106,6 +106,8 @@ def local_disabled_release_repo(): - os.remove(fpath) - - -+ -+ - def getSysMigConf(): - confpath = '/etc/migration-tools/migration-tools.conf' - if not os.path.exists(confpath): -@@ -234,45 +236,64 @@ def process_special_pkgs(): - - - def title_conf(oldosname): -- oldosname=oldosname.strip() -+ """ -+ Change the boot start option after system migration -+ :param oldosname:old system name -+ :return: -+ """ -+ oldosname = oldosname.strip() -+ if oldosname == 'redhat': -+ capital = 'Red Hat' -+ elif oldosname == 'centos': -+ capital = 'CentOS' - path = '/boot/loader/entries' -- #path='/root/a' -+ # path='/root/a' - if os.path.exists(path): - file_list = os.listdir(path) - else: - return None - fl = False - for file in file_list: -- fpath = os.path.join(path,file) -+ fpath = os.path.join(path, file) - if os.path.isdir(fpath): - continue - else: -- with open(fpath,'r') as fp: -+ with open(fpath, 'r') as fp: - strall = fp.read() - fp.close() -- if re.search('uniontech',strall,re.IGNORECASE): -+ if re.search('uniontech', strall, re.IGNORECASE): - fl = True - for file in file_list: -- ustr=None -- fpath = os.path.join(path,file) -+ ustr = None -+ brackets = "" -+ fpath = os.path.join(path, file) - if os.path.isdir(fpath): - continue - else: -- with open(fpath,'r') as fp: -+ with open(fpath, 'r') as fp: - strall = fp.read() - fp.close() -- if re.search(oldosname,strall,re.IGNORECASE): -+ ''' -+ if re.search(oldosname, strall, re.IGNORECASE): - if fl: - os.remove(fpath) - continue - else: -- ustr = re.sub(oldosname,"UniontechOS",strall,1,flags=re.IGNORECASE) -- if re.search('8 \(Core\)',strall): -- ustr = re.sub(' 8 ',' 20 ',ustr,1,flags=re.IGNORECASE) -- ustr = re.sub("Core","kongzi",ustr,1,flags=re.IGNORECASE) -- with open(fpath,'w') as ptitle: -- ptitle.write(ustr) -- ptitle.close() -+ print(strall,capital) -+ ustr = re.sub(capital, "UniontechOS", strall, 1, flags=re.IGNORECASE) -+ ''' -+ if re.search(capital, strall): -+ line = strall.split('\n', -1)[0] -+ for char in range(len(line)): -+ if line[char] == '(': -+ p = char -+ continue -+ if line[char] == ')': -+ e = char+1 -+ brackets = line[p:e] -+ break -+ title = 'title UniontechOS Linux ' + brackets + ' 20 (kongzi)' -+ open(fpath, 'w').write(strall.replace(line, title)) - - - def main_conf(osname): --- -2.20.1 - diff --git a/0028-send-agent-task.patch b/0028-send-agent-task.patch deleted file mode 100644 index 820de691af00c368c2eceadf1e20ee2b27e5d9c5..0000000000000000000000000000000000000000 --- a/0028-send-agent-task.patch +++ /dev/null @@ -1,61 +0,0 @@ -From add93aadd87a53dc960b1e0d2fdb6ed4cb4e2d30 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 10:58:42 +0800 -Subject: [PATCH] =?UTF-8?q?agent=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/migration.py | 28 ++++++++++++++++++++++++++++ - 1 file changed, 28 insertions(+) - -diff --git a/views/migration.py b/views/migration.py -index 7b2f4ed..985a1bf 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -8,6 +8,32 @@ from logger import * - from flask import * - from client_requests import * - from sysmig_agent.utils import * -+from interaction import splice_url -+ -+ -+migration_log = Logger('/var/tmp/uos-migration/migration.log', logging.DEBUG, logging.DEBUG) -+ -+def send_task_to_agent(data, url, ip): -+ """ -+ 向agent下发任务 -+ :param data: -+ :param url: -+ :param ip: -+ :return: -+ """ -+ log_info = "post " + url + ":" + str(data) -+ migration_log.info(log_info) -+ info = splice_url(data, url, ip) -+ if info.status_code == 200: -+ migration_log.info(info.text) -+ elif info is None or info.status_code == 404: -+ sql = "update agent_info set agent_online_status=1 where agent_ip ='%s';" % ip -+ DBHelper().execute(sql) -+ migration_log.error("%s:请求失败,agent端没有启动" % ip) -+ elif info.status_code != 404 and info.status_code != 200: -+ sql = "update agent_info set agent_online_status=1 where agent_ip ='%s';" % ip -+ DBHelper().execute(sql) -+ migration_log.error("%s:请求失败,错误状态码为%s" % (ip, info.status_code)) - - - def get_agent_ip(data, sql, url): -@@ -35,6 +61,8 @@ def check_info(data): - :param data: - :return: - """ -+ sql = "select agent_ip from agent_info where agent_online_status = 0;" -+ get_agent_ip(data, sql, '/check_info') - return 'success' - - --- -2.20.1 - diff --git a/0029-json-and-list-format-interchange.patch b/0029-json-and-list-format-interchange.patch deleted file mode 100644 index 52456724461b1c3730fb287cc52b238929a14514..0000000000000000000000000000000000000000 --- a/0029-json-and-list-format-interchange.patch +++ /dev/null @@ -1,86 +0,0 @@ -From dd381efe588297b6f450665d374fcaafab0206e5 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 11:07:17 +0800 -Subject: [PATCH] =?UTF-8?q?json=E5=92=8Clist=E6=A0=BC=E5=BC=8F=E4=BA=92?= - =?UTF-8?q?=E6=8D=A2?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 35 ++++++++++++++++++++++++++--------- - 1 file changed, 26 insertions(+), 9 deletions(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 68fcfa0..1a12a7e 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -1,14 +1,17 @@ - # SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. - # SPDX-License-Identifier: MulanPubL-2.0-or-later - --import logging - import os --import platform -+import sys -+import json - import re --import shutil - import subprocess -+import shutil - import socket --from sysmig_agent.utils import list_to_json -+import platform -+import logging -+ -+sys.path.append("..") - from connect_sql import DBHelper - - def get_local_ip(): -@@ -192,17 +195,19 @@ def get_disk_info(string): - - - def add_boot_option(): -- print("Current system is uefi, add boot option to boot manager.") -- subprocess.run('which efibootmgr > /dev/null 2>&1 || dnf install -y efibootmgr', shell=True) -+ """ -+ Current system is uefi, add boot option to boot manager. -+ """ -+ subprocess.run('which efibootmgr > /dev/null 2>&1 || yum install -y efibootmgr', shell=True) - disk_name = subprocess.check_output('mount | grep /boot/efi | awk \'{print $1}\'', shell=True) - disk_name = str(disk_name, 'utf-8') - disk_name = disk_name.split('\n')[0] -- dev_name,part_num = get_disk_info(disk_name) -+ dev_name, part_num = get_disk_info(disk_name) - if dev_name == "" or part_num == "": -- print("Parse /boot/efi disk info failed, update boot loader failed.") -+ # "Parse /boot/efi disk info failed, update boot loader failed. - return - -- cmd="" -+ cmd = "" - arch = platform.machine() - if arch == "x86_64": - cmd = 'efibootmgr -c -d ' + dev_name + ' -p ' + part_num + ' -l "/EFI/uos/grubx86.efi" -L "Uniontech OS"' -@@ -296,6 +301,18 @@ def title_conf(oldosname): - open(fpath, 'w').write(strall.replace(line, title)) - - -+def json_list_to_json(keylist, valuelist): -+ res = dict(zip(keylist, valuelist)) -+ # logdss.info (res) -+ return json.dumps(res) -+ -+def list_to_json(keylist, valuelist): -+ res = dict(zip(keylist, valuelist)) -+ res = json.dumps(res) -+ # logdss.info (res) -+ return json.dumps(res) -+ -+ - def main_conf(osname): - logger = logging.getLogger() - logger.setLevel(logging.INFO) --- -2.20.1 - diff --git a/0030-system-information-import-info-the-database-after-migration.patch b/0030-system-information-import-info-the-database-after-migration.patch deleted file mode 100644 index a9a8b8342f17c56b6ca5763f91b3691764496fa1..0000000000000000000000000000000000000000 --- a/0030-system-information-import-info-the-database-after-migration.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 88d87089720784e3dd57b1f780e5ecc398ed03be Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 11:20:58 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=90=8E=E7=B3=BB=E7=BB=9F?= - =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=AF=BC=E5=85=A5=E6=95=B0=E6=8D=AE=E5=BA=93?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 33 +++++++++++++++++++++++++++++++++ - 1 file changed, 33 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 1a12a7e..6b8da14 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -368,3 +368,36 @@ def main_conf(osname): - - logger.info("Switch complete.UniontechOS recommends rebooting this system.") - return 0 -+ -+ -+def sql_os_newversion(localos): -+ sql = "UPDATE agent_info SET agent_migration_os = '{}' WHERE agent_ip = '{}';".format(localos, get_local_ip()) -+ try: -+ ret = DBHelper().execute(sql) -+ except: -+ pass -+ -+ -+def get_new_osversion(): -+ new_os = '统信服务器操作系统V20({})' -+ path = '/etc/os-version' -+ if os.path.exists(path): -+ with open(path,'r') as v: -+ ret = v.readlines() -+ localos=ostype='' -+ for i in range(len(ret)): -+ if not ret[i]: -+ continue -+ if 'MinorVersion' in ret[i]: -+ strminor = str(ret[i]) -+ _, localos = strminor.split('=',1) -+ if 'EditionName[zh_CN]' in ret[i]: -+ strminor = str(ret[i]) -+ _, ostype = strminor.split('=',1) -+ ostype = re.sub('[^a-zA-Z]+','',ostype) -+ localos = localos.strip().strip('\n') + ostype.strip().strip('\n') -+ localos = new_os.format(localos.strip().strip('\n')) -+ sql_os_newversion(localos) -+ -+ else: -+ sql_os_newversion('NULL') --- -2.20.1 - diff --git a/0031-migration-check-and-extract-macros.patch b/0031-migration-check-and-extract-macros.patch deleted file mode 100644 index f8725569ee27eac9095dc706313564b74717cb3d..0000000000000000000000000000000000000000 --- a/0031-migration-check-and-extract-macros.patch +++ /dev/null @@ -1,72 +0,0 @@ -From 1d617ae642fc8236c2ec2cb8b0782a7584987771 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 11:27:00 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E6=A3=80=E6=B5=8B=E5=92=8C?= - =?UTF-8?q?=E9=83=A8=E5=88=86=E5=AE=8F=E6=8F=90=E5=8F=96?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 38 +++++++++++++++++++++++++++++++++++++- - 1 file changed, 37 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 6b8da14..57bef1e 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -14,6 +14,43 @@ import logging - sys.path.append("..") - from connect_sql import DBHelper - -+defaultencoding = 'utf-8' -+# logdss = Logger('./logdss.log',logging.DEBUG,logging.DEBUG) -+new_os = '统信服务器操作系统V20({})' -+AGENT_DIR = '/var/tmp/uos-migration/' -+PRE_MIG = '/var/tmp/uos-migration/UOS_analysis_report/rpmva-before.txt' -+PRE_MIG_DIR = '/var/tmp/uos-migration/UOS_analysis_report' -+MIGRATION_DIR = '/var/tmp/uos-migration/UOS_migration_log' -+MIGRATION_REPORT_DIR = '/var/tmp/uos-migration/UOS_migration_completed_report' -+ -+ -+PROGRESS = '/var/tmp/uos-migration/.progress' -+RPMS = '/var/tmp/uos-migration/.rpms' -+MIGRATION_KERNEL = '/var/tmp/uos-migration/kernel' -+MIGRATION_LOG = '/var/tmp/uos-migration/UOS_migration_log/log' -+MIGRATION_DATA_RPMS_DIR = '/var/tmp/uos-migration/data/exp-rst' -+MIGRATION_DATA_RPMS_3_INFO = '/var/tmp/uos-migration/data/exp-rst/pkginfo_3.txt' -+pstate = '/var/tmp/uos-migration/.state' -+ -+abi_file = '/var/tmp/uos-migration/data/exp-rst/agent_ABI_check_result.csv' -+#Abi -+local_dir = '/var/tmp/uos-migration/data/' -+exp_rst_dir = local_dir+'exp-rst/' -+ -+current_system_unique = exp_rst_dir + 'current-system-unique.csv' -+migration_system_install = exp_rst_dir + 'migration-system-install.csv' -+migration_system_total = exp_rst_dir + 'migration-system-total.csv' -+abi_comp_chk = exp_rst_dir + 'abi-comp-chk.csv' -+abi_incomp_chk = exp_rst_dir + 'abi-incomp-chk.csv' -+exitFlag = 0 -+total_rpm_nums = 0 -+percentage = '' -+deal_rpm_num = 0 -+agent_abi_check_result = exp_rst_dir + 'agent_ABI_check_result.csv' -+suffix_list = ['.mo', '.gz', '.xml', '.conf', '.png', '.page', '.woff', '.ttf', '.pyc', '.typelib', '.pdf', '.ppt', '.txt', '.ico', '.icc', '.tcc', '.gif', '.oga', '.rom', '.jpg', '.dict', '.webm', '.pyc', '.wav', '.ucode', '.ttc', '.gresource', '.otf', '.t1', '.db', '.elc', '.cache', '.fd', '.iso', '.efi', '.mmdb', '.bz2', '.img', '.bin', '.fw', '.cis', '.itb', '.inp', '.sbcf', '.ddc', '.sfi', '.bseq', '.mfa2', '.chk', '.mgc', '.stub', '.dfu', '.dat', '.sys', '.bts', '.dlmem', '.brd', '.hwm', '.pwd', '.pwi', '.exe', '.der', '.p12', '.ogg', '.signed', '.dafsa', '.gpg', '.tri', '.x86_64'] -+ -+ -+ - def get_local_ip(): - try: - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -@@ -379,7 +416,6 @@ def sql_os_newversion(localos): - - - def get_new_osversion(): -- new_os = '统信服务器操作系统V20({})' - path = '/etc/os-version' - if os.path.exists(path): - with open(path,'r') as v: --- -2.20.1 - diff --git a/0032-add-migration.py-to-migration-function.patch b/0032-add-migration.py-to-migration-function.patch deleted file mode 100644 index 44cb6a6754e8f6fd045e0cfb827bc9c99e441641..0000000000000000000000000000000000000000 --- a/0032-add-migration.py-to-migration-function.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 8cd79eb6eea6032de7ba93b9be82cb0891b2ea63 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 13:35:58 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0migration.py=EF=BC=8C?= - =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E8=BF=81=E7=A7=BB=E7=9B=B8=E5=85=B3=E5=8A=9F?= - =?UTF-8?q?=E8=83=BD=E4=BD=BF=E7=94=A8?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/check.py | 37 ---------------------- - sysmig_agent/migration.py | 66 +++++++++++++++++++++++++++++++++++++++ - 2 files changed, 66 insertions(+), 37 deletions(-) - create mode 100644 sysmig_agent/migration.py - -diff --git a/sysmig_agent/check.py b/sysmig_agent/check.py -index 3d4d3e9..141a734 100644 ---- a/sysmig_agent/check.py -+++ b/sysmig_agent/check.py -@@ -18,12 +18,6 @@ from sysmig_agent.Abitxt2xls import * - - os.chdir('/usr/lib/migration-tools-agent') - --def migInit_porgress(): -- uelc_rpm = os.popen('rpm -qa|wc -l').readlines() -- with open('/var/tmp/uos-migration/.rpms','w+') as fp: -- fp.write(uelc_rpm[0]) -- fp.close() -- - - def init_dir(): - if not os.path.isdir(PRE_MIG_DIR): -@@ -517,13 +511,6 @@ def mig_kernel(kernel_version): - return 1 - - --def migprogress(): -- with open(RPMS,'r+') as fpro: -- data = fpro.read() -- fpro.close() -- return int(data) -- -- - def migration_details(data_j): - uos_sysmig_conf = json.loads(getSysMigConf()) - AGENT_IP = json.loads(uos_sysmig_conf).get('agentip').strip()[1:-1] -@@ -539,18 +526,6 @@ def migration_details(data_j): - return list_to_json(keylist,valuelist) - - --def readline_log(): -- path = '/var/tmp/uos-migration/UOS_migration_log/mig_log.txt' -- if not os.path.exists(path): -- return 0 -- else: -- ln = 0 -- with open(path,'r') as rf: -- for line in rf: -- ln = ln + 1 -- rf.close() -- return ln -- - ##迁移进度 - def rpmsProgress(): - percent = 99 -@@ -561,18 +536,6 @@ def rpmsProgress(): - return rpms_progress - - --def mig_check_migration_progress(): -- percent = 98 -- rpms = migprogress() -- lines = readline_log() -- lines = lines//4 -- if lines >= rpms: -- lines = rpms -- data = percent*(lines/rpms) -- data = format(data, '.1f') -- messageProgress(data) -- -- - def check_migration_progress(data_j): - uos_sysmig_conf = json.loads(getSysMigConf()) - AGENT_IP = json.loads(uos_sysmig_conf).get('agentip').strip()[1:-1] -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -new file mode 100644 -index 0000000..c635041 ---- /dev/null -+++ b/sysmig_agent/migration.py -@@ -0,0 +1,66 @@ -+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -+# SPDX-License-Identifier: MulanPubL-2.0-or-later -+ -+from sysmig_agent.centos82uos import * -+ -+#sys.path.append("..") -+from connect_sql import DBHelper -+ -+RPMS = '/var/tmp/uos-migration/.rpms' -+ -+# migrations function -+ -+# migrations progress -+# 迁移进度 -+ -+def mig_whether_success(): -+ # rpms = int(migprogress()) -+ cmdrpm = 'rpm -qa | wc -l' -+ cmduelc = 'rpm -qa | grep oe1|wc -l' -+ rpms = int(os.popen(cmdrpm).readlines()[0]) -+ ret = int(os.popen(cmduelc).readlines()[0]) -+ res = (ret / rpms)*100 -+ res = format(res, '.0f') -+ return int(res) -+ -+ -+def migprogress(): -+ with open(RPMS, 'r+') as fpro: -+ data = fpro.read() -+ fpro.close() -+ return int(data) -+ -+ -+def readline_log(): -+ path = '/var/tmp/uos-migration/UOS_migration_log/mig_log.txt' -+ if not os.path.exists(path): -+ return None -+ else: -+ ln = 0 -+ with open(path, 'r') as rf: -+ for line in rf: -+ ln = ln + 1 -+ rf.close() -+ return ln -+ -+ -+def migInit_porgress(): -+ uelc_rpm = os.popen('rpm -qa|wc -l').readlines() -+ with open('/var/tmp/uos-migration/.rpms', 'w+') as fp: -+ fp.write(uelc_rpm[0]) -+ fp.close() -+ -+ -+# check_migration_progress -+def mig_check_migration_progress(): -+ percent = 98 -+ rpms = migprogress() -+ lines = readline_log() -+ if not lines: -+ return 0 -+ lines = lines // 6 -+ if lines >= rpms: -+ lines = rpms -+ data = percent * (lines / rpms) -+ data = format(data, '.1f') -+ return data --- -2.20.1 - diff --git a/0033-check-system-kernrel.patch b/0033-check-system-kernrel.patch deleted file mode 100644 index 5737544a1d5318e9e54ad546c90d3ef0f67cafee..0000000000000000000000000000000000000000 --- a/0033-check-system-kernrel.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 40d5cb8b4956b7a40ce04c9e54acbecdca196691 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 13:37:59 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=86=85=E6=A0=B8=E6=A3=80=E6=B5=8B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 12 ++++++++++++ - views/migration.py | 12 ++++++++++++ - 2 files changed, 24 insertions(+) - -diff --git a/index.py b/index.py -index edd4440..f0bf10d 100644 ---- a/index.py -+++ b/index.py -@@ -30,6 +30,7 @@ mods = { - 'sql_task': server.modify_task_stream, - 'delete_host_info': server.delete_host_info, - 'check_info': migration.check_info, -+ 'check_kernel': migration.check_kernel, - } - - -@@ -98,6 +99,17 @@ def check_info(): - return Response(mod, content_type='application/json') - - -+@app.route('/check_kernel', methods=['GET', 'POST']) -+def check_kernel(): -+ """ -+ 下发检测agent内核版本和软件仓库内核版本 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ -diff --git a/views/migration.py b/views/migration.py -index 985a1bf..d9ac551 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -53,6 +53,7 @@ def get_agent_ip(data, sql, url): - task_id = DBHelper().execute(get_task_id_sql).fetchall() - data['task_id'] = task_id[0][0] - json_data = json.dumps(data) -+ send_task_to_agent(json_data, url, list(i)[0]) - - - def check_info(data): -@@ -66,6 +67,17 @@ def check_info(data): - return 'success' - - -+def check_kernel(data): -+ """ -+ 检测agent内核版本和软件仓库内核版本 -+ :param data: -+ :return: -+ """ -+ sql = "select agent_ip from agent_info where agent_online_status=0 and agent_storage>=10 and repo_status=0;" -+ get_agent_ip(data, sql, '/check_kernel') -+ return 'success' -+ -+ - def check_services(data, url): - info = post_client_data(data, url) - if info is None or info.status_code != 200: --- -2.20.1 - diff --git a/0034-add-centos7-and-centos8-migration-interface.patch b/0034-add-centos7-and-centos8-migration-interface.patch deleted file mode 100644 index 9fed065e54975205967a98aeac62f658bcd5a5fa..0000000000000000000000000000000000000000 --- a/0034-add-centos7-and-centos8-migration-interface.patch +++ /dev/null @@ -1,77 +0,0 @@ -From 3d4c5f1d8dbc9595c38ff5313743245017851114 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 13:55:42 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0centos7=E5=92=8Ccentos8?= - =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=85=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/centos82uos.py | 2 +- - sysmig_agent/migration.py | 39 +++++++++++++++++++++++++++++++++++++ - 2 files changed, 40 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/centos82uos.py b/sysmig_agent/centos82uos.py -index 0a715b0..cc54eba 100755 ---- a/sysmig_agent/centos82uos.py -+++ b/sysmig_agent/centos82uos.py -@@ -10,7 +10,7 @@ import shutil - import argparse - import platform - import logging -- -+from sysmig_agent.share import * - from utils import * - - reposdir='' -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index c635041..76b3b8e 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -64,3 +64,42 @@ def mig_check_migration_progress(): - data = percent * (lines / rpms) - data = format(data, '.1f') - return data -+ -+ -+ -+def up_to_date_sql_migrate(): -+ data = mig_check_migration_progress() -+ sql_show_tables() -+ sql = "UPDATE agent_task SET task_progress = {} ,task_Updatetime = NOW() WHERE agent_ip = '{}';".format(data, get_local_ip()) -+ try: -+ ret = DBHelper().execute(sql) -+ except: -+ pass -+ return 0 -+ -+ -+def Sysmig(kernel_version): -+ os_version_ret = platform.dist() -+ version = os_version_ret[1].split('.',-1) -+ AGENT_OS = os_version_ret[0]+version[0] -+ data = state =0 -+ if re.fullmatch('8',version[0]): -+ cmd = 'python3 func/centos82uos.py' -+ run_cmd2file(cmd) -+ # t = Process(target=run_cmd2file, args=(cmd,)) -+ # t.start() -+ elif re.search('centos7',AGENT_OS): -+ ex_kernel = 'sh func/centos72uos.sh -e "kernel-devel* kernel-headers* kernel-tools* kernel* bpftool perf python-perf kernel-abi* kernel-modules kernel-core kmod-kvdo"' -+ if kernel_version == '0': -+ run_cmd2file(ex_kernel) -+ sql_mig_statue('3') -+ elif kernel_version == '3.10.0': -+ run_cmd2file(ex_kernel) -+ cmd_k = 'sh func/kernel.sh -k 3.10.0' -+ run_cmd2file(cmd_k) -+ sql_mig_statue('3') -+ else: -+ cmd = 'sh func/centos72uos.sh' -+ run_cmd2file(cmd) -+ sql_mig_statue('3') -+ --- -2.20.1 - diff --git a/0035-the-migration-process-can-choose-not-to-migrate-the-kernel.patch b/0035-the-migration-process-can-choose-not-to-migrate-the-kernel.patch deleted file mode 100644 index d07885cf6f9e8efd60d95762ec3deb1f19113663..0000000000000000000000000000000000000000 --- a/0035-the-migration-process-can-choose-not-to-migrate-the-kernel.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 103d2cfcdbc7096ac0fa2298ee6f4ec6948c3b6a Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 13:59:30 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E8=BF=87=E7=A8=8B=E5=8F=AF?= - =?UTF-8?q?=E9=80=89=E6=8B=A9=E4=B8=8D=E8=BF=81=E7=A7=BB=E5=86=85=E6=A0=B8?= - =?UTF-8?q?=E5=8A=9F=E8=83=BD?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index 76b3b8e..e510680 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -103,3 +103,21 @@ def Sysmig(kernel_version): - run_cmd2file(cmd) - sql_mig_statue('3') - -+ -+def ifnot_mig_kernel(kernel_version): -+ with open('/etc/yum.conf', 'r') as f: -+ content = f.read() -+ f.close() -+ if re.search(r'^distroverpkg=', content, re.MULTILINE): -+ content = re.sub(r"\n(distroverpkg=)", r"\n#\1", content) -+ if re.search(r'bugtracker_url=', content, re.MULTILINE): -+ content = re.sub(r"\n(bugtracker_url=)", r"\n#\1", content) -+ with open('/etc/yum.conf', 'w') as f: -+ f.write(content) -+ f.close() -+ if kernel_version == '0' or kernel_version == '3.10.0': -+ kernel_patterns = 'exclude= kernel* kernel-tools python3-perf kernel-headers kernel-devel bpftool perf kernel-core kmod-kvdo kpatch glibc-headers \n' -+ with open('/etc/yum.conf', 'a+') as f: -+ f.write(kernel_patterns) -+ f.close() -+ --- -2.20.1 - diff --git a/0036-add-an-interface-to-obtain-kernel-information.patch b/0036-add-an-interface-to-obtain-kernel-information.patch deleted file mode 100644 index bbaead4d71ce967de2c19dcd667270e40da885b0..0000000000000000000000000000000000000000 --- a/0036-add-an-interface-to-obtain-kernel-information.patch +++ /dev/null @@ -1,46 +0,0 @@ -From b3450704f0ebc4092848a0764d888898a47cece7 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 14:02:24 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=86=85=E6=A0=B8=E6=95=B0?= - =?UTF-8?q?=E6=8D=AE=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/index.py b/index.py -index f0bf10d..f6a171f 100644 ---- a/index.py -+++ b/index.py -@@ -31,6 +31,7 @@ mods = { - 'delete_host_info': server.delete_host_info, - 'check_info': migration.check_info, - 'check_kernel': migration.check_kernel, -+ 'get_kernel_data': server.get_kernel_data, - } - - -@@ -110,6 +111,17 @@ def check_kernel(): - return Response(mod, content_type='application/json') - - -+@app.route('/get_kernel_data', methods=['GET', 'POST']) -+def get_kernel_data(): -+ """ -+ 获取系统内核和仓库内核版本 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0037-add-subprocess-function-and-loggin.patch b/0037-add-subprocess-function-and-loggin.patch deleted file mode 100644 index cab08c7c8f0ed306668a487999cf8b15fe93dcb2..0000000000000000000000000000000000000000 --- a/0037-add-subprocess-function-and-loggin.patch +++ /dev/null @@ -1,71 +0,0 @@ -From e59fe433c7e013d76a26c9e268a4d3d69c2afb43 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:02:37 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0subprocess=E9=80=9A=E8=BF=87?= - =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=B9=B6=E8=AE=B0=E5=BD=95=E6=97=A5=E5=BF=97?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 47 +++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 47 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 57bef1e..9e7bd35 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -437,3 +437,50 @@ def get_new_osversion(): - - else: - sql_os_newversion('NULL') -+ -+ -+def run_subprocess(cmd="", print_cmd=True, print_output=True): -+ """Call the passed command and optionally log the called command (print_cmd=True) and its -+ output (print_output=True). Switching off printing the command can be useful in case it contains -+ a password in plain text. -+ """ -+ cwdo = '/var/tmp/uos-migration/UOS_migration_log/mig_log.txt' -+ cwde = '/var/tmp/uos-migration/UOS_migration_log/mig_err.txt' -+ # fderr = open(cwde, 'a') -+ # from logging import * -+ # if print_cmd: -+ # log.debug("Calling command '%s'" % cmd) -+ -+ # Python 2.6 has a bug in shlex that interprets certain characters in a string as -+ # a NULL character. This is a workaround that encodes the string to avoid the issue. -+ if print_output: -+ fdout = open(cwdo, 'a') -+ fderr = open(cwde, 'a') -+ if sys.version_info[0] == 2 and sys.version_info[1] == 6: -+ cmd = cmd.encode("ascii") -+ # cmd = shlex.split(cmd, False) -+ process = subprocess.Popen( -+ cmd, -+ # stdout=subprocess.PIPE, -+ # stderr=subprocess.STDOUT, -+ stdout=fdout, -+ stderr=fderr, -+ bufsize=1, -+ shell=True -+ ) -+ output = "" -+ try: -+ for line in iter(process.stdout.readline, b""): -+ output += line.decode() -+ except: -+ pass -+ -+ # loggerinst.info(line.decode().rstrip("\n")) -+ -+ # Call communicate() to wait for the process to terminate so that we can get the return code by poll(). -+ # It's just for py2.6, py2.7+/3 doesn't need this. -+ process.communicate() -+ -+ return_code = process.poll() -+ return output, return_code -+ --- -2.20.1 - diff --git a/0038-obtain-kernel-data.patch b/0038-obtain-kernel-data.patch deleted file mode 100644 index 0aa00e5dbe9eb093f3537119e9ce057ef3ffb80e..0000000000000000000000000000000000000000 --- a/0038-obtain-kernel-data.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 05c4f0df087afa8b95ba5f365a55cee52cdd8d56 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 14:08:34 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=86=85=E6=A0=B8=E6=95=B0?= - =?UTF-8?q?=E6=8D=AE=E6=96=B9=E6=B3=95?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/server.py | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/views/server.py b/views/server.py -index e7570b8..71cbb8e 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -181,5 +181,34 @@ def delete_host_info(data): - DBHelper().execute(sql) - - res = {'data': 'success'} -+ json_res = json.dumps(res) -+ return json_res -+ -+ -+def get_kernel_data(data): -+ """ -+ 获取系统内核和仓库内核版本 -+ :return: -+ """ -+ get_kernel_version_sql = 'select agent_ip,agent_kernel,agent_repo_kernel from agent_info where ' \ -+ 'agent_online_status=0 and repo_status=0 and agent_storage>=10 and ' \ -+ 'agent_migration_os is null;' -+ data = DBHelper().execute(get_kernel_version_sql).fetchall() -+ res = {} -+ info_list = [] -+ info_dict_keys_list = ['agent_ip', 'agent_kernel', 'agent_repo_kernel'] -+ if len(data) != 0: -+ for i in data: -+ if i[1] and i[2]: -+ kernel_arr = ('不迁移内核' + ',' + i[2]).split(',') -+ kernel_list = list(i) -+ kernel_list[2] = kernel_arr -+ else: -+ kernel_list = [list(i)[0], '', ''] -+ info_list.append(dict(zip(info_dict_keys_list, kernel_list))) -+ -+ res['info'] = info_list -+ res['num'] = len(info_list) -+ - json_res = json.dumps(res) - return json_res -\ No newline at end of file --- -2.20.1 - diff --git a/0039-repository-file-choose-kernel-version-to-migration.patch b/0039-repository-file-choose-kernel-version-to-migration.patch deleted file mode 100644 index 64750b07303982256fdab5fe2dc6b0927eb48b1c..0000000000000000000000000000000000000000 --- a/0039-repository-file-choose-kernel-version-to-migration.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 6047fe2bac9d1b63fd9099f1ca4944cc9c647d0a Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:10:28 +0800 -Subject: [PATCH] =?UTF-8?q?repo=E6=96=87=E4=BB=B6=E9=80=89=E6=8B=A9kernel?= - =?UTF-8?q?=E8=BF=81=E7=A7=BB?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 50 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 50 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index e510680..00b3c89 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -121,3 +121,53 @@ def ifnot_mig_kernel(kernel_version): - f.write(kernel_patterns) - f.close() - -+def disable_exclude(): -+ with open('/etc/yum.conf', 'r') as f: -+ content = f.read() -+ f.close() -+ if re.search(r'^exclude=', content, re.MULTILINE): -+ content = re.sub(r"\n(exclude=)", r"\n#\1", content) -+ #content = re.sub(r"\nexclude=", r"\n#exclude=", content) -+ with open('/etc/yum.conf','w+') as f: -+ f.write(content) -+ f.close() -+ -+ -+# migration kernel -+def mig_kernel(kernel_version): -+ disable_exclude() -+ cwd = '/var/tmp/uos-migration/kernel/' -+ if not os.path.exists(cwd): -+ os.mkdir(cwd) -+ ret = os.listdir(cwd) -+ for i in ret: -+ os.unlink(cwd+i) -+ cmd = ' rpm -qa | grep "kernel\|bpftool\|perf" |xargs -i rpm -q --qf "%{NAME}\\n" {}' -+ if '0' == kernel_version: -+ return None -+ else: -+ repo = '' -+ if '4.18.0' == kernel_version: -+ repo = 'UniontechOS-kernel-'+kernel_version.strip() -+ elif '5.10.0' == kernel_version: -+ repo = 'UniontechOS-kernel-'+kernel_version.strip() -+ elif '3.10.0' == kernel_version: -+ repo = 'UniontechOS-kernel-' + kernel_version.strip() -+ else: -+ return 1 -+ down_cmd = 'yumdownloader --destdir "/var/tmp/uos-migration/kernel" --enablerepo '+repo -+ ret = os.popen(cmd).readlines() -+ for i in ret: -+ downpackage = down_cmd+' '+i.strip()+'-'+kernel_version.strip() -+ # os.system(downpackage) -+ run_subprocess(downpackage) -+ -+ cwd = '/var/tmp/uos-migration/kernel/' -+ if os.listdir(cwd): -+ cmd = 'rpm -Uvh "{}*" --nodeps --oldpackage'.format(cwd) -+ # os.system(cmd) -+ run_subprocess(cmd) -+ else: -+ # loggen.debug('Can not download kernel .') -+ #log.err -+ return 1 --- -2.20.1 - diff --git a/0040-intial-logfile-and-tmpfile.patch b/0040-intial-logfile-and-tmpfile.patch deleted file mode 100644 index 995f902b92205775ed532484b9a9486ef6db7307..0000000000000000000000000000000000000000 --- a/0040-intial-logfile-and-tmpfile.patch +++ /dev/null @@ -1,54 +0,0 @@ -From ec2e4820e87b355faf0c3a92dc0b22ddb326b7b6 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:17:57 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E6=97=A5=E5=BF=97?= - =?UTF-8?q?=E5=92=8C=E7=BC=93=E5=AD=98=E6=96=87=E4=BB=B6=E5=88=9B=E5=BB=BA?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 30 ++++++++++++++++++++++++++++++ - 1 file changed, 30 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index 00b3c89..ef78ed8 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -171,3 +171,33 @@ def mig_kernel(kernel_version): - # loggen.debug('Can not download kernel .') - #log.err - return 1 -+ -+ -+def init_log_dir(): -+ if not os.path.isdir(PRE_MIG_DIR): -+ os.makedirs(PRE_MIG_DIR) -+ if not os.path.isdir(MIGRATION_KERNEL): -+ os.makedirs(MIGRATION_KERNEL) -+ if not os.path.isdir(MIGRATION_DIR): -+ os.makedirs(MIGRATION_DIR) -+ if not os.path.isdir(MIGRATION_DATA_RPMS_DIR): -+ os.makedirs(MIGRATION_DATA_RPMS_DIR) -+ if not os.path.exists(PROGRESS): -+ with open(PROGRESS,'w+') as fp: -+ fp.write(' ') -+ fp.close() -+ if not os.path.exists(MIGRATION_DATA_RPMS_3_INFO): -+ with open(MIGRATION_DATA_RPMS_3_INFO,'w+') as fp: -+ fp.write(' ') -+ fp.close() -+ if not os.path.exists(MIGRATION_LOG): -+ with open(MIGRATION_LOG,'w+') as fp: -+ fp.write(' ') -+ fp.close() -+ if not os.path.exists(PRE_MIG): -+ with open(PRE_MIG,'w+') as fp: -+ fp.write(' ') -+ fp.close() -+ migInit_porgress() -+ -+ --- -2.20.1 - diff --git a/0041-get-migration-status-from-database.patch b/0041-get-migration-status-from-database.patch deleted file mode 100644 index 39453d8f3284424a50df3043b4052e00c6aa871b..0000000000000000000000000000000000000000 --- a/0041-get-migration-status-from-database.patch +++ /dev/null @@ -1,33 +0,0 @@ -From ec7c2d5065e3aeab507bcc4f10e667e7712df201 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:21:06 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE=E5=BA=93?= - =?UTF-8?q?=E8=BF=81=E7=A7=BB=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 9 +++++++++ - 1 file changed, 9 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index ef78ed8..6dddb7b 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -201,3 +201,12 @@ def init_log_dir(): - migInit_porgress() - - -+def get_mig_state(task_id): -+ sql = "SELECT task_data FROM agent_task WHERE task_id = {} ;".format(task_id) -+ ret_sql_msg_info = DBHelper().execute(sql) -+ try: -+ state = ret_sql_msg_info.fetchall()[0][0] -+ if len(state): -+ return str(state) -+ except: -+ return None --- -2.20.1 - diff --git a/0042-get-initial-os-version-from-agent_info-interface.patch b/0042-get-initial-os-version-from-agent_info-interface.patch deleted file mode 100644 index b77b1cd923f81c844f0cab4f7a0182bd844bb117..0000000000000000000000000000000000000000 --- a/0042-get-initial-os-version-from-agent_info-interface.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 8dbb02f7ffc89e6e5f3a634dac500b197028124d Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:24:51 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=BB=8Eagent=5Finfo=E8=8E=B7=E5=8F=96?= - =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=B3=BB=E7=BB=9F=E7=89=88=E6=9C=AC?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index 6dddb7b..ebee24d 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -210,3 +210,14 @@ def get_mig_state(task_id): - return str(state) - except: - return None -+ -+ -+def get_old_osnameversion(): -+ sql = "SELECT agent_os FROM agent_info WHERE agent_ip = '{}' ;".format(get_local_ip()) -+ ret_sql_msg_info = DBHelper().execute(sql) -+ try: -+ state = ret_sql_msg_info.fetchall()[0][0] -+ if len(state): -+ return str(state) -+ except: -+ return None --- -2.20.1 - diff --git a/0043-process-os-version-and-os-name.patch b/0043-process-os-version-and-os-name.patch deleted file mode 100644 index 1272589beffc171128a26514ef9ccbfedc3e578d..0000000000000000000000000000000000000000 --- a/0043-process-os-version-and-os-name.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 1683b7dbd84ce4bdc399d3da731c9c5b22ed07fe Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:33:19 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E7=B3=BB=E7=BB=9F=E7=89=88?= - =?UTF-8?q?=E6=9C=AC=E5=92=8C=E7=B3=BB=E7=BB=9F=E5=90=8D=E7=A7=B0?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index ebee24d..fec143a 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -221,3 +221,17 @@ def get_old_osnameversion(): - return str(state) - except: - return None -+ -+ -+def get_old_osname(): -+ nv = get_old_osnameversion() -+ oldosname = re.sub(r'[0-9]', '', nv) -+ return oldosname -+ -+ -+def get_old_osversion(): -+ nv = get_old_osnameversion() -+ oldosversion = re.sub(r'[A-Z,a-z]', '', nv) -+ return oldosversion -+ -+ --- -2.20.1 - diff --git a/0044-migrate-in-myutiple-steps.patch b/0044-migrate-in-myutiple-steps.patch deleted file mode 100644 index b5a933e3034708d32d3764d1bb249c0486c868a0..0000000000000000000000000000000000000000 --- a/0044-migrate-in-myutiple-steps.patch +++ /dev/null @@ -1,75 +0,0 @@ -From ba4c9021051b1844ebf09435ae60ead631e468c4 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:40:46 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=88=86=E6=AD=A5=E9=AA=A4?= - =?UTF-8?q?=E8=BF=81=E7=A7=BB?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/migration.py | 51 +++++++++++++++++++++++++++++++++++++++ - 1 file changed, 51 insertions(+) - -diff --git a/sysmig_agent/migration.py b/sysmig_agent/migration.py -index fec143a..a3265e9 100644 ---- a/sysmig_agent/migration.py -+++ b/sysmig_agent/migration.py -@@ -235,3 +235,54 @@ def get_old_osversion(): - return oldosversion - - -+ -+def mig_system_migration(kernel_version): -+ res = '0' -+ #state = str(get_mig_state()) -+ state = 0 -+ print('-GET MIG STATE-'+state) -+ if '0' == state: -+ sql_mig_statue('1') -+ ifnot_mig_kernel(kernel_version) -+ # t = Process(target=Sysmig, args=(kernel_version,)) -+ # t.start() -+ Sysmig(kernel_version) -+ elif '2' == state: -+ sql_mig_statue('6') -+ mig_kernel(kernel_version) -+ with open(PRE_MIG, 'r') as fp: -+ stros = fp.readlines() -+ oldos = stros[0] -+ fp.close() -+ oldos = oldos.split(':',1) -+ main_conf(oldos[1]) -+ if os.path.exists('/var/tmp/uos-migration/data/exp-rst/systeminfo.txt'): -+ run_cmd2file('sh func/Abitranrept.sh') -+ # abi_txt2xls_trans() -+ sql_mig_statue('4') -+ elif '4' == state: -+ sql_mig_statue('5') -+ if os.path.exists('/var/tmp/uos-migration/UOS_migration_log/rpms-verified-after.txt'): -+ res = '0' -+ else: -+ res = '-1' -+ elif '3' == state: -+ sql_mig_statue('5') -+ if os.path.exists('/var/tmp/uos-migration/data/exp-rst/systeminfo.txt'): -+ run_cmd2file('func/Abitranrept.sh') -+ # abi_txt2xls_trans() -+ if os.path.exists('/var/tmp/uos-migration/UOS_migration_log/rpms-list-after.txt'): -+ res = '0' -+ else: -+ res = '-1' -+ elif '5' == state: -+ if '-1' == res : -+ data =' 迁移失败。' -+ keylist = ['ip','res','error'] -+ return 3 -+ else: -+ data = '迁移成功。' -+ return 2 -+ return 1 -+ -+ --- -2.20.1 - diff --git a/0045-modify-repository-file.patch b/0045-modify-repository-file.patch deleted file mode 100644 index 027c19b825e8f2404a5c89e88706c654ad99df42..0000000000000000000000000000000000000000 --- a/0045-modify-repository-file.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 481d09eba9e03bda1d87fc9d21451634d23fff30 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 14:47:54 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9repo=E6=A3=80=E6=B5=8B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 13 ++++++++++++- - views/migration.py | 15 ++++++++++++--- - 2 files changed, 24 insertions(+), 4 deletions(-) - -diff --git a/index.py b/index.py -index f6a171f..9665e29 100644 ---- a/index.py -+++ b/index.py -@@ -18,7 +18,6 @@ mods = { - 'check_os_kernel': migration.check_os_kernel, - 'check_migration_progress': migration.check_migration_progress, - 'check_progress': migration.check_progress, -- 'check_repo': migration.check_repo, - 'check_repo_kernel': migration.check_repo_kernel, - 'check_user': migration.check_user, - 'close_tool': migration.close_tool, -@@ -32,6 +31,7 @@ mods = { - 'check_info': migration.check_info, - 'check_kernel': migration.check_kernel, - 'get_kernel_data': server.get_kernel_data, -+ 'check_repo': migration.check_repo, - } - - -@@ -122,6 +122,17 @@ def get_kernel_data(): - return Response(mod, content_type='application/json') - - -+@app.route('/check_repo', methods=['GET', 'POST']) -+def check_repo(): -+ """ -+ 检测平台软件仓库 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ -diff --git a/views/migration.py b/views/migration.py -index d9ac551..a628694 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -123,9 +123,18 @@ def check_user(data): - - - def check_repo(data): -- services = check_services(data, '/check_repo') -- if services: -- return services -+ """ -+ 检测平台软件仓库 -+ :param data: -+ :return: -+ """ -+ sql = "select agent_ip from agent_info where agent_online_status = 0 and agent_storage >= 10;" -+ agent_ip_list = DBHelper().execute(sql) -+ for i in agent_ip_list: -+ repo_status_sql = "update agent_info set repo_status='2' where agent_ip='%s'" % list(i)[0] -+ DBHelper().execute(repo_status_sql) -+ get_agent_ip(data, sql, '/check_repo') -+ return 'success' - - - def check_os_kernel(data): --- -2.20.1 - diff --git a/0046-agent-sends-task-update-requrst-to-the-server.patch b/0046-agent-sends-task-update-requrst-to-the-server.patch deleted file mode 100644 index e499aff55d424d15fccdfd6dd7c2cccc6c8c7a69..0000000000000000000000000000000000000000 --- a/0046-agent-sends-task-update-requrst-to-the-server.patch +++ /dev/null @@ -1,72 +0,0 @@ -From a55f866eee6a937842777af38beee70ec1cad8e4 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 14:55:44 +0800 -Subject: [PATCH] =?UTF-8?q?agent=E5=90=91server=E5=8F=91=E9=80=81=E4=BB=BB?= - =?UTF-8?q?=E5=8A=A1=E6=9B=B4=E6=96=B0=E8=AF=B7=E6=B1=82?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/agent_request.py | 49 +++++++++++++++++++++++++++++++++++ - 1 file changed, 49 insertions(+) - create mode 100644 sysmig_agent/agent_request.py - -diff --git a/sysmig_agent/agent_request.py b/sysmig_agent/agent_request.py -new file mode 100644 -index 0000000..31d0cfe ---- /dev/null -+++ b/sysmig_agent/agent_request.py -@@ -0,0 +1,49 @@ -+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -+# SPDX-License-Identifier: MulanPubL-2.0-or-later -+ -+import requests -+import json -+from sysmig_agent.share import getSysMigConf ,json_list_to_json, sql_online_statue -+ -+uos_sysmig_conf = json.loads(getSysMigConf()) -+ip = json.loads(uos_sysmig_conf).get('serverip').strip()[1:-1] -+port = int(json.loads(uos_sysmig_conf).get('serverport').strip()[1:-1]) -+mod_sql = '/sql_task' -+ -+headers = {'content-type': 'application/json'} -+ -+ -+class PostIntranetIP: -+ def __init__(self, url, data): -+ self.url = url -+ self.data = data -+ -+ def post_intranetip(self): -+ try: -+ r = requests.post(url=self.url, data=self.data, headers=headers) -+ except: -+ r = None -+ return r -+ -+ -+def post_client_data(data): -+ post_url = "http://" + ip + ":" + str(port) + mod_sql -+ print('______>post:'+post_url+'\n____> data: '+str(data) +'ip port '+ip+str(port)) -+ post_data = PostIntranetIP(post_url, data) -+ return post_data.post_intranetip() -+ -+ -+def post_server(statue, task_id): -+ keylist = ['mod','statue','task_id'] -+ valuelist = ['sql_task',statue,str(task_id)] -+ data = json_list_to_json(keylist,valuelist) -+ -+# data={"mod":"sql_task", "statue": "task_start", "task_id":2} -+ t = post_client_data(data) -+ print("requires post return code :"+str(t)) -+ f = 0 -+ if not t or t.status_code != 200: -+ t = post_client_data(data) -+ sql_online_statue(1, task_id) -+ else: -+ sql_online_statue(0, task_id) --- -2.20.1 - diff --git a/0047-check-kernel-version-in-repository.patch b/0047-check-kernel-version-in-repository.patch deleted file mode 100644 index c29b8ed77665fff0ac1f3d2c9eb6a5b8feb1b830..0000000000000000000000000000000000000000 --- a/0047-check-kernel-version-in-repository.patch +++ /dev/null @@ -1,102 +0,0 @@ -From 0dfa49f9703103dd8f978d419555f5a4e8d72caf Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 15:01:48 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E8=BD=AF=E4=BB=B6=E6=BA=90?= - =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=86=85=E6=A0=B8=E7=89=88=E6=9C=AC?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/short_task.py | 79 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 79 insertions(+) - create mode 100644 sysmig_agent/short_task.py - -diff --git a/sysmig_agent/short_task.py b/sysmig_agent/short_task.py -new file mode 100644 -index 0000000..1e1a1c8 ---- /dev/null -+++ b/sysmig_agent/short_task.py -@@ -0,0 +1,79 @@ -+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -+# SPDX-License-Identifier: MulanPubL-2.0-or-later -+ -+# import os -+# import platform -+# from share import list_to_json -+# import sys -+# import re -+# import subprocess -+# import json -+from sysmig_agent.share import * -+from flask import Flask, render_template, url_for, redirect, make_response, session, Response -+import urllib.request -+from sysmig_agent.agent_request import post_server -+ -+sys.path.append("..") -+from connect_sql import DBHelper -+ -+ -+def os_kernel(): -+ platformInfo = platform.platform() -+ systemKernelVersion = platformInfo.split('-', -1) -+ agent_kernel = systemKernelVersion[1] -+ return agent_kernel -+ -+ -+ -+def os_repo_kernel(): -+ version_list = [] -+ os_version_ret = platform.dist() -+ version = os_version_ret[1].split('.', -1) -+ AGENT_OS = os_version_ret[0] + version[0] -+ try: -+ ret = os.popen("yum repolist all|awk '{print $1}'") -+ except: -+ ret = os.popen("yum repolist --all|awk '{print $1}'") -+ kernel_repo = kernel_repo_name = [] -+ str_kernel = '' -+ for r in ret.readlines(): -+ if not r: -+ continue -+ if 'UniontechOS' in r: -+ kernel_repo.append(r.strip('\n')) -+ if '8' == version[0]: -+ for i in range(len(kernel_repo)): -+ # cmd = 'yum repoquery --nvr kernel --enablerepo ' + kernel_repo[i] -+ cmd = 'yum repoquery --repo ' + kernel_repo[i] + ' kernel' -+ ret = str(subprocess.check_output(cmd, shell=True), 'utf-8')[:-1] -+ # except Exception: -+ ret = ret.split('\n', -1) -+ for i in range(len(ret)): -+ if re.match('kernel', ret[i]): -+ kernel_version = re.sub('kernel-.*:', '', ret[i]) -+ kernel_version = re.sub('-.*$', '', kernel_version) -+ version_list.append(kernel_version.strip()) -+ if not str_kernel: -+ str_kernel = kernel_version.strip() -+ else: -+ str_kernel = str_kernel + ',' + kernel_version.strip() -+ # print(version_list) -+ elif '7' == version[0]: -+ for i in range(len(kernel_repo)): -+ cmd = 'yum list --enablerepo {} kernel'.format(kernel_repo[i]) -+ if '3.10.0' in kernel_repo[i]: -+ cmd = 'yum list --enablerepo {} --disablerepo UniontechOS-AppStream kernel'.format(kernel_repo[i]) -+ ret = str(subprocess.check_output(cmd, shell=True), 'utf-8')[:-1] -+ ret = ret.split('\n', -1) -+ for n in range(len(ret)): -+ if 'uelc' in ret[n]: -+ # kernel_version = re.sub('kernel-.* ', '', ret[n]) -+ kernel_version = re.sub('-.*$', '', ret[n]) -+ kernel_version = kernel_version.split(' ',-1) -+ kernel_version = kernel_version[len(kernel_version)-1] -+ version_list.append(kernel_version.strip()) -+ if not str_kernel: -+ str_kernel = kernel_version.strip() -+ else: -+ str_kernel = str_kernel + ',' + kernel_version.strip() -+ return str_kernel --- -2.20.1 - diff --git a/0048-server-send-kernel-detection-task.patch b/0048-server-send-kernel-detection-task.patch deleted file mode 100644 index b100fd755f54d5872cc4c82ce62db4787906e07d..0000000000000000000000000000000000000000 --- a/0048-server-send-kernel-detection-task.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 0e0d63d10ebbd4ee9a0f755e2a1178a69e3d6d9e Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 15:05:30 +0800 -Subject: [PATCH] =?UTF-8?q?server=E4=B8=8B=E5=8F=91=E6=A3=80=E6=B5=8B?= - =?UTF-8?q?=E5=86=85=E6=A0=B8=E4=BB=BB=E5=8A=A1?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/short_task.py | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -diff --git a/sysmig_agent/short_task.py b/sysmig_agent/short_task.py -index 1e1a1c8..23d461b 100644 ---- a/sysmig_agent/short_task.py -+++ b/sysmig_agent/short_task.py -@@ -77,3 +77,29 @@ def os_repo_kernel(): - else: - str_kernel = str_kernel + ',' + kernel_version.strip() - return str_kernel -+ -+ -+ -+def check_kernel(data): -+ task_id = json.loads(data).get('task_id') -+ # 更新SQL任务开始状态 -+ sql_task_statue('1', task_id) -+ # 发送消息给Server更新任务流状态 -+ post_server('task_start', task_id ) -+ # agent kernel -+ agent_kernel = os_kernel() -+ # agent repo kernel -+ agent_repo_kernel = os_repo_kernel() -+ agent_ip = get_local_ip() -+ statue = 1 -+ sql = "UPDATE agent_info SET agent_kernel = '{}',agent_repo_kernel = '{}' WHERE agent_ip = '{}';".format( -+ agent_kernel, agent_repo_kernel, agent_ip) -+ try: -+ DBHelper().execute(sql) -+ statue = 2 -+ except: -+ statue = 3 -+ sql_task_statue(statue, task_id) -+ sql_task_statue(statue, task_id) -+ post_server('task_close', task_id) -+ return 's' --- -2.20.1 - diff --git a/0049-add-interface-to-check-repository-result.patch b/0049-add-interface-to-check-repository-result.patch deleted file mode 100644 index f89fc0875e4788062f01fe53e349f557d1f7cebf..0000000000000000000000000000000000000000 --- a/0049-add-interface-to-check-repository-result.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 7cbf75c501a0c8bc21c2c9ca041b3f283ec4a0ca Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 15:07:45 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BD=AF=E4=BB=B6=E4=BB=93?= - =?UTF-8?q?=E5=BA=93=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/index.py b/index.py -index 9665e29..d76404e 100644 ---- a/index.py -+++ b/index.py -@@ -32,6 +32,7 @@ mods = { - 'check_kernel': migration.check_kernel, - 'get_kernel_data': server.get_kernel_data, - 'check_repo': migration.check_repo, -+ 'get_repo_data': server.get_repo_data, - } - - -@@ -133,6 +134,17 @@ def check_repo(): - return Response(mod, content_type='application/json') - - -+@app.route('/get_repo_data', methods=['GET', 'POST']) -+def get_repo_data(): -+ """ -+ 定时检查软件仓库检测结果 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0050-check-free-space-in-system-disk.patch b/0050-check-free-space-in-system-disk.patch deleted file mode 100644 index 8ced3b9eb42c970a87370c884a05a89e55b1873f..0000000000000000000000000000000000000000 --- a/0050-check-free-space-in-system-disk.patch +++ /dev/null @@ -1,52 +0,0 @@ -From 50941c1ad6ad3be2d8b1826a690df73227e15831 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 15:09:48 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E7=B3=BB=E7=BB=9F=E7=9A=84?= - =?UTF-8?q?=E7=A3=81=E7=9B=98=E5=8F=AF=E7=94=A8=E7=A9=BA=E9=97=B4?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/share.py | 28 ++++++++++++++++++++++++++++ - 1 file changed, 28 insertions(+) - -diff --git a/sysmig_agent/share.py b/sysmig_agent/share.py -index 9e7bd35..0bd73f6 100644 ---- a/sysmig_agent/share.py -+++ b/sysmig_agent/share.py -@@ -484,3 +484,31 @@ def run_subprocess(cmd="", print_cmd=True, print_output=True): - return_code = process.poll() - return output, return_code - -+ -+ -+def os_storage(): -+ """ -+ 判断系统剩余空间大小 -+ :return: GB -+ """ -+ path = '/var/cache' -+ stat = os.statvfs(path) -+ CACHE_SPACE = 10.0 -+ state = 1 -+ ava_cache = format(stat.f_bavail * stat.f_frsize / 1024 // 1024 / 1024, '.1f') -+ if stat: -+ # with open(PRE_MIG,'a+') as pf: -+ # pf.write('/var/cache可用空间为'+ava_cache+'GB') -+ # pf.close() -+ if float(ava_cache) >= CACHE_SPACE: -+ state = 0 -+ return ava_cache -+ # data = '可用空间为'+ava_cache+'GB' -+ else: -+ return ava_cache -+ # data = '可用空间为' + ava_cache + 'GB,请清理/var/cache的空间后重试。' -+ else: -+ return ava_cache -+ # data = '可用空间为'+ava_cache+'GB,请清理/var/cache的空间后重试。' -+ # return list_to_json(keylist,valuelist) -+ --- -2.20.1 - diff --git a/0051-add-basic-system-detection-information-and-upload-the-database.patch b/0051-add-basic-system-detection-information-and-upload-the-database.patch deleted file mode 100644 index d2ff1b0a1e041ab3414fdb7e72daa9f551234665..0000000000000000000000000000000000000000 --- a/0051-add-basic-system-detection-information-and-upload-the-database.patch +++ /dev/null @@ -1,60 +0,0 @@ -From f9cd5557c5dbb1292cb6895d3da47d54af65b40d Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 15:15:58 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=A3=80=E6=B5=8B=E7=B3=BB?= - =?UTF-8?q?=E7=BB=9F=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF=E5=B9=B6=E4=B8=8A?= - =?UTF-8?q?=E4=BC=A0=E5=88=B0=E6=95=B0=E6=8D=AE=E5=BA=93?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/short_task.py | 35 +++++++++++++++++++++++++++++++++++ - 1 file changed, 35 insertions(+) - -diff --git a/sysmig_agent/short_task.py b/sysmig_agent/short_task.py -index 23d461b..11dd9ef 100644 ---- a/sysmig_agent/short_task.py -+++ b/sysmig_agent/short_task.py -@@ -103,3 +103,38 @@ def check_kernel(data): - sql_task_statue(statue, task_id) - post_server('task_close', task_id) - return 's' -+ -+ -+ -+def check_info(data): -+ task_id = json.loads(data).get('task_id') -+ # 更新SQL任务状态 -+ statue = 1 -+ sql_task_statue(statue, task_id) -+ # 发送消息给Server更新任务流状态 -+ post_server('task_start', task_id) -+ # 获取agent系统类型 -+ agent_os = get_agent_os() -+ # agent storage -+ agent_storage = os_storage() -+ agent_ip = get_local_ip() -+ sql = "UPDATE agent_info SET hostname = '{}', agent_os ='{}', agent_arch = '{}' ,agent_storage = {} ," \ -+ "agent_online_status = {} WHERE agent_ip = '{}';".format(platform.node(), agent_os, platform.machine(), -+ agent_storage, 0, agent_ip) -+ try: -+ DBHelper().execute(sql) -+ statue = 2 -+ except: -+ statue = 3 -+ sql_task_statue(statue, task_id) -+ # 更新SQL任务状态 -+ sql_task_statue(statue, task_id) -+ post_server('task_close', task_id) -+ return 'success' -+ -+def get_agent_os(): -+ os_version_ret = platform.dist() -+ version = os_version_ret[1].split('.', -1) -+ AGENT_OS = os_version_ret[0] + version[0] -+ return AGENT_OS -+ --- -2.20.1 - diff --git a/0052-increase-the-weight-of-abi-detection-result.patch b/0052-increase-the-weight-of-abi-detection-result.patch deleted file mode 100644 index 861eab1b7e9e5dfe94f5203f5684e81f15c54070..0000000000000000000000000000000000000000 --- a/0052-increase-the-weight-of-abi-detection-result.patch +++ /dev/null @@ -1,120 +0,0 @@ -From bcfdd0fe37de13d71ae503e3f084bf86ff51b37b Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 17:35:30 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0abi=E6=A3=80=E6=B5=8B?= - =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=9D=83=E9=87=8D?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/abi_weight.py | 97 ++++++++++++++++++++++++++++++++++++++ - 1 file changed, 97 insertions(+) - create mode 100644 sysmig_agent/abi_weight.py - -diff --git a/sysmig_agent/abi_weight.py b/sysmig_agent/abi_weight.py -new file mode 100644 -index 0000000..ce6b15f ---- /dev/null -+++ b/sysmig_agent/abi_weight.py -@@ -0,0 +1,97 @@ -+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -+# SPDX-License-Identifier: MulanPubL-2.0-or-later -+ -+import os -+ -+# ABI_INCOMPAT_PATH = '/home/xzx/nfs/abi-incompat-pkg.txt' -+# ABI_COMPAT_PATH = '/home/xzx/nfs/abi-compat-pkg.txt' -+pwd = '/root/nfs' -+ABI_INCOMPAT_PATH = pwd+'/abi-incompat-pkg.txt' -+ABI_COMPAT_PATH = pwd + '/abi-compat-pkg.txt' -+AppStream =pwd + '/uos-sysmig/ut-Migration-tools/sysmig_agent/AppStream.txt' -+BaseOS = pwd + '/uos-sysmig/ut-Migration-tools/sysmig_agent/txts/BaseOS.txt' -+ -+ -+def get_list_pkg(path): -+ with open(path, 'r') as ap: -+ rpm = ap.readlines() -+ ap.close() -+ return rpm -+# -+ -+# 调用 -+def get_abi_incompat_pkg(): -+ query = [] -+ rpms = get_list_pkg(ABI_INCOMPAT_PATH) -+ for i in range(len(rpms)): -+ rpm = rpms[i].split('|', -1) -+ if len(query) > 0: -+ for q in range(len(query)): -+ if str(rpm[0]).strip() == str(query[q]): -+ break -+ if q == len(query) - 1: -+ query.append(rpm[0]) -+ else: -+ query.append(rpm[0]) -+ return query -+ -+ -+def return_error(debuginfo): -+ #####logging debug info -+ print(debuginfo) -+ -+ -+# 传入txt和rpm队列返回匹配个数 -+def match_rpm(txt_path, rpm_query): -+ with open(txt_path, 'r') as ap: -+ appstream_rpms = ap.readlines() -+ ap.close() -+ total_rpm = 0 -+ q = [] -+ for i in range(len(rpm_query)): -+ for n in range(len(appstream_rpms)): -+ if str(rpm_query[i].strip().strip('\n')) == str(appstream_rpms[n].strip().strip('\n')): -+ total_rpm = total_rpm + 1 -+ q.append(rpm_query[i]) -+ break -+ if n == (len(appstream_rpms)): -+ print('No compat with AppStream and BaseOS list : ' + rpm_query[i]) -+ return total_rpm -+ -+ -+def rpm_priority(rpm_compat_query, rpm_incompat_query): -+ app_weight = 50 -+ base_weight = 50 -+ if not os.path.exists(AppStream) and os.path.exists(BaseOS): -+ return return_error('debuginfo:can not open this file...') -+ total_incompat_app = match_rpm(AppStream, rpm_incompat_query) -+ total_incompat_base = match_rpm(BaseOS, rpm_incompat_query) -+ total_compat_app = match_rpm(AppStream, rpm_compat_query) -+ total_compat_base = match_rpm(BaseOS, rpm_compat_query) -+ app_weight_percent = (total_compat_app / (total_incompat_app + total_compat_app)) * app_weight -+ base_weight_percent = (total_compat_base / (total_incompat_base + total_compat_base)) * base_weight -+ AllWeight = app_weight_percent + base_weight_percent -+ AllWeight = format(AllWeight, '.0f') -+ return AllWeight -+ -+ -+def first_high_weight(rpm_incompat_query): -+ riq = ['gcc', 'glibc', 'binutils'] -+ for i in range(len(riq)): -+ for n in range(len(rpm_incompat_query)): -+ if riq[i] == rpm_incompat_query[n]: -+ return False -+ return True -+ -+ -+def abi_check_priority(): -+ rpm_incompat_query = get_abi_incompat_pkg() -+ rpm_compat_query = get_list_pkg(ABI_COMPAT_PATH) -+ del rpm_incompat_query[:2] -+ del rpm_compat_query[0] -+ if first_high_weight(rpm_incompat_query): -+ AllWeight = rpm_priority(rpm_compat_query, rpm_incompat_query) -+ else: -+ AllWeight = 0 -+ print(AllWeight) -+ --- -2.20.1 - diff --git a/0053-get-repository-detection-result.patch b/0053-get-repository-detection-result.patch deleted file mode 100644 index bdc939244c8d25b79edf8ec84b09b0d4cb5f4387..0000000000000000000000000000000000000000 --- a/0053-get-repository-detection-result.patch +++ /dev/null @@ -1,81 +0,0 @@ -From d99a78a973b264280272bac87590870d598d7541 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Fri, 10 Nov 2023 17:42:17 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BD=AF=E4=BB=B6=E4=BB=93?= - =?UTF-8?q?=E5=BA=93=E6=A3=80=E6=B5=8B=E7=BB=93=E6=9E=9C?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/server.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 54 insertions(+), 1 deletion(-) - -diff --git a/views/server.py b/views/server.py -index 71cbb8e..b13d908 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -211,4 +211,57 @@ def get_kernel_data(data): - res['num'] = len(info_list) - - json_res = json.dumps(res) -- return json_res -\ No newline at end of file -+ return json_res -+ -+ -+def get_repo_data(data): -+ """ -+ 定时检查软件仓库检测结果 -+ :return: -+ """ -+ task_status_sql = "select agent_id from agent_task where task_status=2" -+ get_task_status = DBHelper().execute(task_status_sql).fetchall() -+ if len(get_task_status) == 0: -+ data = {"centos7_x86": "", "centos8_x86": "", "centos7_aarch64": "", "centos8_aarch64": ""} -+ json_data = json.dumps(data) -+ return json_data -+ else: -+ centos7_x86_sql = "select agent_ip from agent_info where (agent_os='centos7' or agent_os='redhat7') " \ -+ "and agent_arch='x86_64' and repo_status=1;" -+ -+ centos8_x86_sql = "select agent_ip from agent_info where (agent_os='centos8' or agent_os='redhat8') " \ -+ "and agent_arch='x86_64' and repo_status=1;" -+ -+ centos7_aarch64_sql = "select agent_ip from agent_info where (agent_os='centos7' or agent_os='redhat7') " \ -+ "and agent_arch='aarch64' and repo_status=1;" -+ -+ centos8_aarch64_sql = "select agent_ip from agent_info where (agent_os='centos8' or agent_os='redhat8') " \ -+ "and agent_arch='aarch64' and repo_status=1;" -+ -+ data = {} -+ get_centos7_x86_status = DBHelper().execute(centos7_x86_sql).fetchall() -+ if len(get_centos7_x86_status) == 0: -+ data['centos7_x86'] = 'success' -+ else: -+ data['centos7_x86'] = 'faild' -+ -+ get_centos8_x86_status = DBHelper().execute(centos8_x86_sql).fetchall() -+ if len(get_centos8_x86_status) == 0: -+ data['centos8_x86'] = 'success' -+ else: -+ data['centos8_x86'] = 'faild' -+ -+ get_centos7_aarch64_status = DBHelper().execute(centos7_aarch64_sql).fetchall() -+ if len(get_centos7_aarch64_status) == 0: -+ data['centos7_aarch64'] = 'success' -+ else: -+ data['centos7_aarch64'] = 'faild' -+ -+ get_centos8_aarch64_status = DBHelper().execute(centos8_aarch64_sql).fetchall() -+ if len(get_centos8_aarch64_status) == 0: -+ data['centos8_aarch64'] = 'success' -+ else: -+ data['centos8_aarch64'] = 'faild' -+ -+ json_data = json.dumps(data) -+ return json_data -\ No newline at end of file --- -2.20.1 - diff --git a/0054-removed-detection-abi-script.patch b/0054-removed-detection-abi-script.patch deleted file mode 100644 index 5a3c330b57704ee96981b8df4c52c8d9e1e7f911..0000000000000000000000000000000000000000 --- a/0054-removed-detection-abi-script.patch +++ /dev/null @@ -1,643 +0,0 @@ -From 0864ae482d003c316f7f03839e49d54133981698 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Fri, 10 Nov 2023 17:42:55 +0800 -Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4ABI=E6=A3=80=E6=B5=8B?= - =?UTF-8?q?=E8=84=9A=E6=9C=AC?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.sh | 458 -------------------------------- - sysmig_agent/Abitranrept.sh | 153 ----------- - 2 files changed, 611 deletions(-) - delete mode 100755 sysmig_agent/Abisystmcompchk.sh - delete mode 100755 sysmig_agent/Abitranrept.sh - -diff --git a/sysmig_agent/Abisystmcompchk.sh b/sysmig_agent/Abisystmcompchk.sh -deleted file mode 100755 -index 15938fc..0000000 ---- a/sysmig_agent/Abisystmcompchk.sh -+++ /dev/null -@@ -1,458 +0,0 @@ --#!/bin/bash --########################变量定义################################# -- --LOCAL_DIR=/var/tmp/uos-migration/data -- --#原始数据目录 --UOS_DIR=$LOCAL_DIR/uos/rpms --DIFF_DIR=$LOCAL_DIR/all-diff -- --#输出结果目录 --EXP_DIR=$LOCAL_DIR/exp-rst -- --#系统基本信息文件 --SYSTEM_INFO=systeminfo.txt -- --#软件包对比文件 --PKG_COMP_LIST_01=pkginfo_1.txt --PKG_COMP_LIST_02=pkginfo_2.txt --PKG_COMP_LIST_04=pkginfo_4.txt -- --#不兼容兼容定义 --START_CHANGE="================ changes of START===============" --ENDS_CHANGE="================ end of changes of END===============" -- --#兼容、不兼容检查结果输出列表 --ABI_COMPAT_PKG=abi-compat-pkg.txt --ABI_INCOMPAT_PKG=abi-incompat-pkg.txt -- --#生成总包文件 --UOS_PKG_RPMS_LIST=uos-pkg-rpms-list.txt --OTH_PKG_RPMS_LIST=oth-pkg-rpms-list.txt -- --ABI_DIFF_PKG_ERR=abi-diff-pkg-err.txt --SUFFIX=.oked -- --CACHE_SPACE="/var/tmp/uos-migration/UOS_analysis_report/rpmva-before.txt" -- --#1. 创建目录 --create_file_path() --{ -- #接收yum仓库下载的rpm目录 -- if [ ! -d "$UOS_DIR" ] -- then -- mkdir -p $UOS_DIR -- echo "mkdir -p $UOS_DIR success ... " -- fi -- -- #数据导出目录 -- if [ ! -d "$EXP_DIR" ] -- then -- mkdir -p $EXP_DIR -- echo "mkdir -p $EXP_DIR success ... " -- fi -- -- #abidiff工具检测结果目录 -- if [ ! -d "$DIFF_DIR" ] -- then -- mkdir -p $DIFF_DIR -- echo "mkdir -p $DIFF_DIR success ... " -- fi --} -- --#2. 获取rpm包列表,并解压rpm包 --get_rpm_list() --{ -- #清理历史数据 -- if [ -f "$EXP_DIR/$UOS_PKG_RPMS_LIST" ] -- then -- rm -f $EXP_DIR/$UOS_PKG_RPMS_LIST -- fi -- -- if [ -f "$EXP_DIR/$OTH_PKG_RPMS_LIST" ] -- then -- rm -f $EXP_DIR/$OTH_PKG_RPMS_LIST -- fi -- -- #获取当前系统包列表 -- for line in `rpm -qa | sort` -- do -- var=${line%-*} -- echo ${var%-*} >> $EXP_DIR/$OTH_PKG_RPMS_LIST -- done -- -- #源仓库批量下载当前系统包列表 -- for downpkg in `cat $EXP_DIR/$OTH_PKG_RPMS_LIST` -- do -- string=$downpkg -- downpkg_list="${downpkg_list} ${string}" -- done -- -- yumdownloader --destdir=$UOS_DIR $downpkg_list --skip-broken -- -- #获取迁移系统包列表 -- cd $UOS_DIR && for line1 in `ls *.rpm`;do var1=${line1%-*} echo ${var1%-*} >> $EXP_DIR/$UOS_PKG_RPMS_LIST ;done -- -- #当前系统与迁移系统共有的包列表 -- grep -f $EXP_DIR/$UOS_PKG_RPMS_LIST $EXP_DIR/$OTH_PKG_RPMS_LIST > $EXP_DIR/$PKG_COMP_LIST_04 -- -- #当前系统有,迁移系统无的包列表 -- grep -wvf $EXP_DIR/$UOS_PKG_RPMS_LIST $EXP_DIR/$OTH_PKG_RPMS_LIST > $EXP_DIR/$PKG_COMP_LIST_02 -- -- #根据包名找到对应的.rpm包,通过判断:(包名长度+1)个字符为数字判断是否为要解压的包 -- for data in `cat $EXP_DIR/$PKG_COMP_LIST_04` -- do -- data_len=`expr length "$data"` -- len_char=`expr $data_len + 1` -- -- cmd_rst=`ls $data*` -- #针对同一包名多个查找结果处理 -- for pkg_name in $cmd_rst -- do -- char=${pkg_name:$len_char:1} -- echo "$char" | [ -n "`sed -n '/^[0-9][0-9]*$/p'`" ] && rpm2cpio $pkg_name | cpio -idmv -- if [ $? == 0 ];then -- -- #条件不完整,可根据情况添加检测的目录 -- rpm -qpl $pkg_name | grep -v ".build-id\|\/etc\/\|\/share\/" > $EXP_DIR/rpm-pkg-info.txt -- deal_file $EXP_DIR/rpm-pkg-info.txt $data -- mv $UOS_DIR/$pkg_name $UOS_DIR/$pkg_name$SUFFIX -- fi -- done -- done --} -- -- --#根据解压列表,过滤出兼容性检测的文件 --deal_file() --{ -- #清理数据 -- rm -f $EXP_DIR/$2.diff -- -- for line in `cat $1` -- do -- rst=`file -i $line` -- if [[ ${rst#*charset=} == "binary" ]];then -- -- #获取要对比的文件名 -- uos_bin=${line##*\/} -- -- #获取要对比的文件名路径 -- uos_path_1=${line#*\/} -- uos_path=${uos_path_1%%\/*} -- -- #获取本系统文件名 -- rst_find=`find /$uos_path -name $uos_bin` -- if [[ ${rst_find} != 0 ]];then -- -- #做对比到处结果 -- abidiff .$line $rst_find > $EXP_DIR/abidiff_comp_rst.txt -- #abidiff工具检测结果不存在报错 -- if [[ ! -f "$EXP_DIR/abidiff_comp_rst.txt" ]];then -- echo "abidiff $line $rst_find err!!!!" -- continue -- else -- if [[ -s $EXP_DIR/abidiff_comp_rst.txt ]];then -- -- #存在不为空,按照abipkgdiff工具结果格式生成报告 -- echo ${START_CHANGE//START/\'$uos_bin\'} >> $DIFF_DIR/$2.diff -- cat $EXP_DIR/abidiff_comp_rst.txt >> $DIFF_DIR/$2.diff -- echo ${ENDS_CHANGE//END/\'$uos_bin\'} >> $DIFF_DIR/$2.diff -- echo " " >> $DIFF_DIR/$2.diff -- else -- #存在为空,直接导入结果列表 -- cat $EXP_DIR/abidiff_comp_rst.txt >> $DIFF_DIR/$2.diff -- fi -- fi -- fi -- fi -- done --} -- --#3. abi检查结果,包括兼容、非兼容的二进制包 --# 逐个处理 .diff 结果文件 --get_abi_comp_rest() --{ -- echo "" -- echo "------------------------- 获取abi兼容、非兼容包列表开始 -------------------------" -- TOTAL_NUM=0 -- TOTAL_COMP_NUM=0 -- FILE_SO=".so" -- FILE_EXEC=".exec" -- FILE_MOD=".mod" -- DATA_LINE_1="================ changes" -- DATA_LINE_2="Functions changes summary: " -- DATA_LINE_3="Variables changes summary: " -- DATA_LINE_4="Function symbols changes summary: " -- DATA_LINE_5="Variable symbols changes summary: " -- ABI_DIFF_PKG_ABNO=abi-diff-pkg-abno.txt -- ABI_INCOMPAT_PKG_ERR=abi-incompat-pkg-err.txt -- -- ABI_COMPAT_PKG_LINE="包名" -- ABI_INCOMPAT_PKG_LINE1="abi不兼容的包有INCOMP_PKG_NUM|" -- ABI_INCOMPAT_PKG_LINE2="包名|不兼容类型|不兼容来源|说明" -- -- cd $DIFF_DIR -- -- #初始化文件头信息 -- echo $ABI_COMPAT_PKG_LINE >> $EXP_DIR/$ABI_COMPAT_PKG -- echo $ABI_INCOMPAT_PKG_LINE1 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- echo $ABI_INCOMPAT_PKG_LINE2 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- -- for abi_diff_file in `ls *.diff` -- do -- TOTAL_NUM=`expr $TOTAL_NUM + 1` -- NAME=${abi_diff_file%.*} -- FILE_SIZE=`ls -l $abi_diff_file | awk '{print $5}'` -- if [ $FILE_SIZE -eq 0 ];then -- #abi兼容性对比结果文件大小为 0 ,该软件包兼容 -- echo $NAME >> $EXP_DIR/$ABI_COMPAT_PKG -- TOTAL_COMP_NUM=`expr $TOTAL_COMP_NUM + 1` -- else -- #将差错报告按以下条件重定向到文件,并分析 -- grep "^================ changes" --after-context=4 $abi_diff_file > $abi_diff_file.tmp -- if [ $? -ne 0 ];then -- grep_rest_tmp="$abi_diff_file|================ changes|grep non-existent!" -- echo $grep_rest_tmp >> $EXP_DIR/$ABI_DIFF_PKG_ABNO -- else -- sed -i '/^--$/d' $abi_diff_file.tmp -- fi -- NUM1=0 -- #兼容性开关,0-兼容;1-不兼容 -- COMP_FLAG=0 -- while read line -- do -- if [[ $line == *$DATA_LINE_1* ]];then -- NUM2=$(( $NUM1 % 5 )) -- if [ $NUM2 = 0 ];then -- str1=${line%\'*} -- data_line="${str1#*\'}" -- if [[ $data_line =~ $FILE_SO ]] -- then -- COMP_TYPE="库差异" -- elif [[ $data_line =~ $FILE_EXEC ]] -- then -- COMP_TYPE="可执行文件" -- elif [[ $data_line =~ $FILE_MOD ]] -- then -- COMP_TYPE="视频文件" -- else -- COMP_TYPE="二进制差异" -- fi -- else -- #该情况不规范,需要查看 -- echo "$NAME|$COMP_TYPE|$data_line|$line" >> $EXP_DIR/$ABI_DIFF_PKG_ERR -- fi -- elif [[ $line == *$DATA_LINE_2* ]];then -- str2="${line#*: }" -- removed_num=${str2% Removed*} -- change_line=${str2% Changed*} -- change_num=${tmp#*, } -- added_line=${str2% Added*} -- added_num=${tmp1##*,} -- if [[ $removed_num -eq 0 ]] && [[ $change_num -eq 0 ]] && [[ $added_num -eq 0 ]] -- then -- abi_var_comp_2="${abi_diff_file%.*}|$line|兼容" -- else -- abi_var_incomp_2="$NAME|$COMP_TYPE|$data_line|$line" -- echo $abi_var_incomp_2 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- #此时abi编译以来库文件或者二进制包不兼容,那么该rpm包不兼容 -- COMP_FLAG=1 -- fi -- elif [[ $line == *$DATA_LINE_3* ]];then -- str3="${line#*: }" -- removed_num=${str3% Removed*} -- change_line=${str3% Changed*} -- change_num=${tmp#*, } -- added_line=${str3% Added*} -- added_num=${tmp1##*,} -- if [[ $removed_num -eq 0 ]] && [[ $change_num -eq 0 ]] && [[ $added_num -eq 0 ]] -- then -- #abi检查结果中,rpm包以来的库文件或者二进制文件兼容 -- abi_var_comp_3="${abi_diff_file%.*}|$line|兼容" -- else -- abi_var_incomp_3="$NAME|$COMP_TYPE|$data_line|$line|" -- echo $abi_var_incomp_3 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- #此时abi编译以来库文件或者二进制包不兼容,那么该rpm包不兼容 -- COMP_FLAG=1 -- fi -- elif [[ $line == *$DATA_LINE_4* ]];then -- str4=${line#*: } -- removed_num=${str4% Removed*} -- if [ $removed_num -ne 0 ] -- then -- #abi检查结果中,rpm包依赖的库文件或者二进制文件不兼容 -- abi_var_incomp_4="$NAME|$COMP_TYPE|$data_line|$str4" -- echo $abi_var_incomp_4 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- COMP_FLAG=1 -- else -- #此时abi编译依赖库文件或者二进制包兼容 -- abi_var_comp_4="${abi_diff_file%.*}|$line|兼容" -- fi -- elif [[ $line == *$DATA_LINE_5* ]];then -- str5=${line#*: } -- removed_num=${str5% Removed*} -- if [ $removed_num -ne 0 ] -- then -- #abi检查结果中,rpm包依赖的库文件或者二进制文件不兼容 -- abi_var_incomp_5="$NAME|$COMP_TYPE|$data_line|$str5" -- echo $abi_var_incomp_5 >> $EXP_DIR/$ABI_INCOMPAT_PKG -- COMP_FLAG=1 -- else -- #此时abi编译依赖库文件或者二进制包兼容 -- abi_var_comp_5="${abi_diff_file%.*}|$line|兼容" -- fi -- else -- ohter_err_info="$NAME|$COMP_TYPE|$data_line|$line|" -- echo $other_err_info >> $EXP_DIR/$ABI_INCOMPAT_PKG_ERR -- fi -- NUM1=`expr $NUM1 + 1` -- done < ./$abi_diff_file.tmp -- #根据兼容性开发COMP_FLAG判断该rpm包是否兼容 -- if [ $COMP_FLAG -eq 0 ] -- then -- echo $NAME >> $EXP_DIR/$ABI_COMPAT_PKG -- else -- NUM10=`expr $NUM1 + 1` -- fi -- -- fi -- done -- rm -f *.diff.tmp -- -- ABI_INCOMP_NUM_TMP=`cat $EXP_DIR/$ABI_INCOMPAT_PKG | awk -F "|" '{print $1}' | sort | uniq | wc -l` -- ABI_INCOMP_NUM=`expr $ABI_INCOMP_NUM_TMP - 2` -- sed -i 's/INCOMP_PKG_NUM/'$ABI_INCOMP_NUM'/g' $EXP_DIR/$ABI_INCOMPAT_PKG -- echo "兼容包列表:$EXP_DIR/$ABI_COMPAT_PKG" -- echo "非兼容包列表:$EXP_DIR/$ABI_INCOMPAT_PKG" -- echo "------------------------- 获取abi兼容、非兼容包列表结束 -------------------------" --} -- --#4. 获取系统基本信息 --get_system_info() --{ -- #数据清理 -- rm -f $EXP_DIR/$SYSTEM_INFO -- -- #SYSTEM_INFO_1_LINE1="|当前系统|迁移系统" -- SYSTEM_INFO_1_LINE1="|当前系统" -- #SYSTEM_INFO_2_LINE2="系统版本|CUR_VERSION|TRA_VERSION" -- SYSTEM_INFO_2_LINE2="系统版本|CUR_VERSION" -- #SYSTEM_INFO_3_LINE3="内核版本|CUR_KERNEL_VERSION|TRA_KERNEL_VERSION" -- SYSTEM_INFO_3_LINE3="内核版本|CUR_KERNEL_VERSION" -- -- SYSTEM_INFO_5_LINE5="/var/cache可用空间|CUR_USE_SPACE" -- SYSTEM_INFO_6_LINE6="架构|CUR_ARCH" -- -- #SYSTEM_INFO_8_LINE8="软件包|被替换的软件包|安装的软件包" -- SYSTEM_INFO_8_LINE8="软件包|被替换的软件包" -- #SYSTEM_INFO_9_LINE9="软件包数量|REPLACE_PKG_NUM|INSTALL_PKG_NUM" -- SYSTEM_INFO_9_LINE9="软件包数量|REPLACE_PKG_NUM" -- -- SYSTEM_INFO_11_LINE11="ABI" -- SYSTEM_INFO_12_LINE12="兼容数量|COMP_NUM" -- SYSTEM_INFO_13_LINE13="不兼容数量|INCOMP_NUM" -- SYSTEM_INFO_14_LINE14="总数|SUM_NUM" -- -- echo $SYSTEM_INFO_1_LINE1 >> $EXP_DIR/$SYSTEM_INFO -- -- #获取系统版本 -- cur_sysinfo_1=`cat /etc/os-release | grep PRETTY_NAME` -- cur_sysinfo_2=${cur_sysinfo_1#*=} -- cur_sysinfo_len_1=`echo ${cur_sysinfo_1#*=} | wc -L` -- cur_sysinfo_len=`expr $cur_sysinfo_len_1 - 2` -- -- cur_sysinfo=${cur_sysinfo_2:1:$cur_sysinfo_len} -- -- system_info_2_line2=${SYSTEM_INFO_2_LINE2//CUR_VERSION/$cur_sysinfo} -- echo $system_info_2_line2 >> $EXP_DIR/$SYSTEM_INFO -- -- #获取内核版本 -- cur_kernel_info=`uname -r` -- -- system_info_3_line3=${SYSTEM_INFO_3_LINE3//CUR_KERNEL_VERSION/$cur_kernel_info} -- echo $system_info_3_line3 >> $EXP_DIR/$SYSTEM_INFO -- echo " " >> $EXP_DIR/$SYSTEM_INFO -- -- #cache空间及架构 -- cur_cache_space_tmp=`head -1 $CACHE_SPACE` -- cur_cache_space=${cur_cache_space_tmp#*为} -- cur_system_arch=`uname -m` -- -- system_info_5_line5=${SYSTEM_INFO_5_LINE5//CUR_USE_SPACE/$cur_cache_space} -- echo $system_info_5_line5 >> $EXP_DIR/$SYSTEM_INFO -- -- system_info_6_line6=${SYSTEM_INFO_6_LINE6//CUR_ARCH/$cur_system_arch} -- echo $system_info_6_line6 >> $EXP_DIR/$SYSTEM_INFO -- echo " " >> $EXP_DIR/$SYSTEM_INFO -- -- echo $SYSTEM_INFO_8_LINE8 >> $EXP_DIR/$SYSTEM_INFO -- -- abi_comp_pkg_num_tmp=`cat $EXP_DIR/$ABI_COMPAT_PKG | wc -l` -- cur_pkg_num=`expr $abi_comp_pkg_num_tmp - 1` -- -- system_info_9_line9=${SYSTEM_INFO_9_LINE9//REPLACE_PKG_NUM/$cur_pkg_num} -- echo $system_info_9_line9 >> $EXP_DIR/$SYSTEM_INFO -- echo " " >> $EXP_DIR/$SYSTEM_INFO -- -- echo $SYSTEM_INFO_11_LINE11 >> $EXP_DIR/$SYSTEM_INFO -- system_info_12_line12=${SYSTEM_INFO_12_LINE12//COMP_NUM/$cur_pkg_num} -- echo $system_info_12_line12 >> $EXP_DIR/$SYSTEM_INFO -- -- abi_incomp_pkg_num_tmp=`cat $EXP_DIR/$ABI_INCOMPAT_PKG | awk -F "|" '{print $1}'| sort | uniq |wc -l` -- abi_incomp_pkg_num=`expr $abi_incomp_pkg_num_tmp - 2` -- system_info_13_line13=${SYSTEM_INFO_13_LINE13//INCOMP_NUM/$abi_incomp_pkg_num} -- echo $system_info_13_line13 >> $EXP_DIR/$SYSTEM_INFO -- -- abi_pkg_num=`expr $abi_comp_pkg_num + $abi_incomp_pkg_num` -- system_info_14_line14=${SYSTEM_INFO_14_LINE14//SUM_NUM/$abi_pkg_num} -- echo $system_info_14_line14 >> $EXP_DIR/$SYSTEM_INFO -- -- #echo "====================End enter get_system_info==============" --} -- --#5. 软件包对比 --pkg_comp_rst() --{ -- #软件包对比文件头定义 -- PKGINFO_1_LINE1="待替换/安装的软件包共SUM1个,新安装的软件包共SUM2个" -- PKGINFO_2_LINE2="当前系统持有(不替换)|迁移系统软件包总表" -- PKGINFO_3_LINE3="OTH_VERSION|UOS_VERSION" -- -- #echo "==============Start enter pkg_comp_rst=========" -- #清理数据 -- rm -f $EXP_DIR/$PKG_COMP_LIST_01 -- -- pkg_sum_num=`cat $EXP_DIR/$UOS_PKG_RPMS_LIST | wc -l` -- pkg_num_inst_tmp=`cat $EXP_DIR/$ABI_COMPAT_PKG | wc -l` -- pkg_num_inst=`expr $pkg_num_inst_tmp - 1` -- -- -- pkginfo_1_line1_tmp=${PKGINFO_1_LINE1//SUM1/$pkg_sum_num} -- pkginfo_1_line1=${pkginfo_1_line1_tmp//SUM2/$pkg_num_inst} -- -- echo $pkginfo_1_line1 >> $EXP_DIR/$PKG_COMP_LIST_01 -- -- echo $PKGINFO_2_LINE2 >> $EXP_DIR/$PKG_COMP_LIST_01 -- -- #获取系统版本 -- cur_sysinfo_1=`cat /etc/os-release | grep PRETTY_NAME` -- cur_sysinfo_2=${cur_sysinfo_1#*=} -- cur_sysinfo_len_1=`echo ${cur_sysinfo_1#*=} | wc -L` -- cur_sysinfo_len=`expr $cur_sysinfo_len_1 - 2` -- -- cur_sysinfo=${cur_sysinfo_2:1:$cur_sysinfo_len} -- -- trans_sysinfo_1="UOS Server Enterprise " -- -- pkginfo_3_line3_tmp=${PKGINFO_3_LINE3//OTH_VERSION/$cur_sysinfo} -- pkginfo_3_line3=${pkginfo_3_line3_tmp//UOS_VERSION/$trans_sysinfo_1} -- echo $pkginfo_3_line3 >> $EXP_DIR/$PKG_COMP_LIST_01 -- --} -- --create_file_path --get_rpm_list --get_abi_comp_rest --get_system_info --pkg_comp_rst -\ No newline at end of file -diff --git a/sysmig_agent/Abitranrept.sh b/sysmig_agent/Abitranrept.sh -deleted file mode 100755 -index 891e6f2..0000000 ---- a/sysmig_agent/Abitranrept.sh -+++ /dev/null -@@ -1,153 +0,0 @@ --#!/bin/bash -- --#系统迁移后调用该脚本获取迁移后系统信息,为迁移后生成报告准备 -- --LOCAL_DIR=/var/tmp/uos-migration/data --#LOCAL_DIR=/var/data -- --#输出结果目录 --EXP_DIR=$LOCAL_DIR/exp-rst -- --#系统基本信息文件 --SYSTEM_INFO=systeminfo.txt --TRAND_END_SYSINFO=trans-end-sysinfo.txt -- --#软件包对比文件 --PKG_COMP_LIST_01=pkginfo_1.txt --PKG_COMP_LIST_01_TRANS=pkginfo_1_trans.txt --PKG_COMP_LIST_03=pkginfo_3.txt -- --#1. 获取迁移后系统基本信息 --get_system_info() --{ -- #数据清理 -- rm -f $EXP_DIR/$TRAND_END_SYSINFO -- -- line_num=1 -- while read line -- do -- if [ $line_num -eq 1 ];then -- SYSTEM_INFO_1_LINE1="$line|迁移系统" -- echo $SYSTEM_INFO_1_LINE1 >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 2 ];then -- #获取系统版本 -- cur_sysinfo_1=`cat /etc/os-release | grep PRETTY_NAME` -- cur_sysinfo_2=${cur_sysinfo_1#*=} -- cur_sysinfo_len_1=`echo ${cur_sysinfo_1#*=} | wc -L` -- cur_sysinfo_len=`expr $cur_sysinfo_len_1 - 2` -- -- cur_sysinfo=${cur_sysinfo_2:1:$cur_sysinfo_len} -- -- SYSTEM_INFO_2_LINE2="$line|$cur_sysinfo" -- echo $SYSTEM_INFO_2_LINE2 >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 3 ];then -- #当前系统版本 -- cur_kernel_info=`uname -r` -- SYSTEM_INFO_3_LINE3="$line|$cur_kernel_info" -- echo $SYSTEM_INFO_3_LINE3 >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 4 ];then -- echo "" >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 5 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 6 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 7 ];then -- echo "" >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 8 ];then -- SYSTEM_INFO_8_LINE8="$line|安装的软件包" -- echo $SYSTEM_INFO_8_LINE8 >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 9 ];then -- install_num=`rpm -qa | grep uelc20 | wc -l` -- SYSTEM_INFO_9_LINE9="$line|$install_num" -- echo $SYSTEM_INFO_9_LINE9 >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 10 ];then -- echo "" >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 11 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 12 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 13 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- if [ $line_num -eq 14 ];then -- echo $line >> $EXP_DIR/$TRAND_END_SYSINFO -- fi -- -- line_num=`expr $line_num + 1` -- -- done < $EXP_DIR/$SYSTEM_INFO --} -- --#5. 软件包对比 --pkg_comp_rst() --{ -- VAR_LINE="迁移系统特有(新安装)" -- -- #清理数据 -- rm -f $EXP_DIR/$PKG_COMP_LIST_01_TRANS -- -- line_num=1 -- -- while read line -- do -- -- if [ $line_num -eq 1 ];then -- echo $line >> $EXP_DIR/$PKG_COMP_LIST_01_TRANS -- fi -- -- if [ $line_num -eq 2 ];then -- var_1=${line%|*} -- var_2=${line#*|} -- PKGINFO_2_LINE2="$var_1|$VAR_LINE|$var_2" -- echo $PKGINFO_2_LINE2 >> $EXP_DIR/$PKG_COMP_LIST_01_TRANS -- fi -- -- if [ $line_num -eq 3 ];then -- echo $line >> $EXP_DIR/$PKG_COMP_LIST_01_TRANS -- fi -- -- line_num=`expr $line_num + 1` -- done < $EXP_DIR/$PKG_COMP_LIST_01 -- -- #获取已安装包列表 -- for line1 in `rpm -qa | grep uelc20` -- #for line1 in `rpm -qa | grep el8` -- do -- var1=${line1%-*} -- echo ${var1%-*} >> $EXP_DIR/$PKG_COMP_LIST_03 -- done -- -- #迁移完成后uelc20包列表不为空,如果为空创建空文件以便统计汇总xls -- if [ ! -f $EXP_DIR/$PKG_COMP_LIST_03 ];then -- touch $EXP_DIR/$PKG_COMP_LIST_03 -- fi --} -- --get_system_info --pkg_comp_rst -- --- -2.20.1 - diff --git a/0055-add-envirnment-detection-interface-before-migration.patch b/0055-add-envirnment-detection-interface-before-migration.patch deleted file mode 100644 index 0f4155fa74befa1793c08ac39aad9b6fe91c3fe0..0000000000000000000000000000000000000000 --- a/0055-add-envirnment-detection-interface-before-migration.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 25a688b1ada05e7bf2a713cbdac2df127dbf7104 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 09:44:30 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E5=89=8D=E7=8E=AF=E5=A2=83?= - =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) - -diff --git a/index.py b/index.py -index d76404e..2faae57 100644 ---- a/index.py -+++ b/index.py -@@ -12,7 +12,6 @@ from flask import Flask, render_template, url_for, request, redirect, make_respo - app = Flask(__name__) - - mods = { -- 'check_environment': migration.check_environment, - 'check_storage': migration.check_storage, - 'check_os': migration.check_os, - 'check_os_kernel': migration.check_os_kernel, -@@ -33,6 +32,7 @@ mods = { - 'get_kernel_data': server.get_kernel_data, - 'check_repo': migration.check_repo, - 'get_repo_data': server.get_repo_data, -+ 'check_environment':migration.check_environment, - } - - -@@ -145,6 +145,17 @@ def get_repo_data(): - return Response(mod, content_type='application/json') - - -+@app.route('/check_environment', methods=['GET', 'POST']) -+def check_environment(): -+ """ -+ agent迁移前环境检查任务 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0056-modify-detection-envirnment-interface.patch b/0056-modify-detection-envirnment-interface.patch deleted file mode 100644 index 9776dd3c7f481fd8d9e86e584c45afeaa99863c2..0000000000000000000000000000000000000000 --- a/0056-modify-detection-envirnment-interface.patch +++ /dev/null @@ -1,45 +0,0 @@ -From f4604d225a9db3e9c18c3eb8de5cde28cd7c2c55 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 09:52:09 +0800 -Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=8E=AF=E5=A2=83=E6=A3=80?= - =?UTF-8?q?=E6=9F=A5=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/migration.py | 18 +++++++++++++++--- - 1 file changed, 15 insertions(+), 3 deletions(-) - -diff --git a/views/migration.py b/views/migration.py -index a628694..b7eaefa 100644 ---- a/views/migration.py -+++ b/views/migration.py -@@ -88,9 +88,21 @@ def check_services(data, url): - - - def check_environment(data): -- services = check_services(data, '/check_environment') -- if services: -- return services -+ """ -+ agent迁移前环境检查任务 -+ :param data: -+ :return: -+ """ -+ agent_ip_list = json.loads(data).get('agent_ip') -+ data = json.loads(data) -+ url = '/check_environment' -+ for i in agent_ip_list: -+ get_task_id_sql = "select task_id from cur_task where agent_ip='%s'" % i -+ task_id = DBHelper().execute(get_task_id_sql).fetchall() -+ data['task_id'] = task_id[0][0] -+ json_data = json.dumps(data) -+ send_task_to_agent(json_data, url, i) -+ return 'success' - - - def check_os(data): --- -2.20.1 - diff --git a/0057-abi-basic-data-for-report.patch b/0057-abi-basic-data-for-report.patch deleted file mode 100644 index 94d50aad5b65d21ed500917bf91fae4afc59c449..0000000000000000000000000000000000000000 --- a/0057-abi-basic-data-for-report.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 9031ccf7e657286dfb18fe181fe97080ce5228dc Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 09:58:36 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E6=A3=80=E6=B5=8B=E6=8A=A5=E5=91=8A?= - =?UTF-8?q?=E5=9F=BA=E7=A1=80=E6=95=B0=E6=8D=AE?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 116 ++++++++++++++++++++++++++++++++ - 1 file changed, 116 insertions(+) - create mode 100644 sysmig_agent/Abisystmcompchk.py - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -new file mode 100644 -index 0000000..abe6083 ---- /dev/null -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -0,0 +1,116 @@ -+# SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. -+# SPDX-License-Identifier: MulanPubL-2.0-or-later -+ -+ -+import queue,os,string -+import threading,codecs -+import time,rpm,stat,re -+import datetime -+import platform -+import json,xlrd,xlwt -+import socket -+from xlutils.copy import copy -+from shutil import copyfile -+#from sysmig_agent.share import * -+from multiprocessing import Process -+from multiprocessing import cpu_count -+ -+from logger import * -+#from connect_sql import DBHelper -+ -+workQueue = queue.Queue() -+queueLock = threading.Lock() -+ -+#为便于测试将变量、接口从share.py中拷贝到当前文件,待联调通过后删除即可 -+######################## add for test start ######################## -+local_dir = '/var/tmp/uos-migration/data/' -+exp_rst_dir = local_dir+'exp-rst/' -+ -+current_system_unique = exp_rst_dir + 'current-system-unique.csv' -+migration_system_install = exp_rst_dir + 'migration-system-install.csv' -+migration_system_total = exp_rst_dir + 'migration-system-total.csv' -+abi_comp_chk = exp_rst_dir + 'abi-comp-chk.csv' -+abi_incomp_chk = exp_rst_dir + 'abi-incomp-chk.csv' -+exitFlag = 0 -+total_rpm_nums = 0 -+percentage = '' -+deal_rpm_num = 0 -+agent_abi_check_result = exp_rst_dir + 'agent_ABI_check_result.csv' -+suffix_list = ['.mo', '.gz', '.xml', '.conf', '.png', '.page', '.woff', '.ttf', '.pyc', '.typelib', '.pdf', '.ppt', '.txt', '.ico', '.icc', '.tcc', '.gif', '.oga', '.rom', '.jpg', '.dict', '.webm', '.pyc', '.wav', '.ucode', '.ttc', '.gresource', '.otf', '.t1', '.db', '.elc', '.cache', '.fd', '.iso', '.efi', '.mmdb', '.bz2', '.img', '.bin', '.fw', '.cis', '.itb', '.inp', '.sbcf', '.ddc', '.sfi', '.bseq', '.mfa2', '.chk', '.mgc', '.stub', '.dfu', '.dat', '.sys', '.bts', '.dlmem', '.brd', '.hwm', '.pwd', '.pwi', '.exe', '.der', '.p12', '.ogg', '.signed', '.dafsa', '.gpg', '.tri', '.x86_64'] -+ -+#Queue = queue.Queue() -+ -+def os_storage(): -+ """ -+ 判断系统剩余空间大小 -+ :return: GB -+ """ -+ path = '/var/cache' -+ stat = os.statvfs(path) -+ CACHE_SPACE = 10.0 -+ state = 1 -+ ava_cache = format(stat.f_bavail * stat.f_frsize / 1024 // 1024 / 1024, '.1f') -+ if stat: -+ # with open(PRE_MIG,'a+') as pf: -+ # pf.write('/var/cache可用空间为'+ava_cache+'GB') -+ # pf.close() -+ if float(ava_cache) >= CACHE_SPACE: -+ state = 0 -+ return ava_cache -+ # data = '可用空间为'+ava_cache+'GB' -+ else: -+ return ava_cache -+ # data = '可用空间为' + ava_cache + 'GB,请清理/var/cache的空间后重试。' -+ else: -+ return ava_cache -+ # data = '可用空间为'+ava_cache+'GB,请清理/var/cache的空间后重试。' -+ # return list_to_json(keylist,valuelist) -+ -+def get_local_ip(): -+ try: -+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) -+ s.connect(('8.8.8.8', 80)) -+ ip = s.getsockname()[0] -+ return ip -+ finally: -+ s.close() -+ -+def abi_check_sys_type(): -+ path = '/etc/os-version' -+ if os.path.exists(path): -+ with open(path,'r') as v: -+ ret = v.readlines() -+ localos=ostype='' -+ for i in range(len(ret)): -+ if not ret[i]: -+ continue -+ if 'MinorVersion' in ret[i]: -+ strminor = str(ret[i]) -+ _, localos = strminor.split('=',1) -+ if 'EditionName[zh_CN]' in ret[i]: -+ strminor = str(ret[i]) -+ _, ostype = strminor.split('=',1) -+ ostype = re.sub('[^a-zA-Z]+','',ostype) -+ localos = localos.strip().strip('\n') + ostype.strip().strip('\n') -+ #localos = new_os.format(localos.strip().strip('\n')) -+ return localos -+ -+def abi_check_sys(): -+ c8 = ['1020a', '1021a', '1050a'] -+ c7 = ['1000c', '1001c', '1002a'] -+ system_type = abi_check_sys_type() -+ if not system_type: -+ os_version_ret = platform.dist() -+ osname = os_version_ret[1].strip() -+ osn = osname.split('.',-1)[0] -+ return osn.strip('\n') -+ for i in range(len(c8)): -+ if c8[i] in system_type: -+ return 8 -+ for i in range(len(c7)): -+ if c7[i] in system_type: -+ return 7 -+ return None -+ -+######################## add for test end ######################## -+######################## add for test end ######################## -\ No newline at end of file --- -2.20.1 - diff --git a/0058-get-detection-envirnment-process-interface.patch b/0058-get-detection-envirnment-process-interface.patch deleted file mode 100644 index 0db93f8548f1f80bc276f2c0fca0f7fc74def22b..0000000000000000000000000000000000000000 --- a/0058-get-detection-envirnment-process-interface.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 2d5291afc5a6edfe9f2359e808eb4dab35834d6f Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 10:00:20 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=8E=AF=E5=A2=83=E6=A3=80?= - =?UTF-8?q?=E6=9F=A5=E8=BF=9B=E5=BA=A6=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 33 ++++++++++++--------------------- - 1 file changed, 12 insertions(+), 21 deletions(-) - -diff --git a/index.py b/index.py -index 2faae57..4ca7b38 100644 ---- a/index.py -+++ b/index.py -@@ -33,6 +33,7 @@ mods = { - 'check_repo': migration.check_repo, - 'get_repo_data': server.get_repo_data, - 'check_environment':migration.check_environment, -+ 'get_environment_data': server.get_environment_data, - } - - -@@ -156,6 +157,17 @@ def check_environment(): - return Response(mod, content_type='application/json') - - -+@app.route('/get_environment_data', methods=['GET', 'POST']) -+def get_environment_data(): -+ """ -+ 获取环境检查进度本 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ -@@ -297,27 +309,6 @@ def MT_repo_kernel(): - return render_template('MT_kernel.html') - - --@app.route('/Mt_environment', methods=['GET', 'POST']) --def Mt_environment(): -- """ -- 跳转迁移前环境检测界面 -- :return: -- """ -- return render_template('MT_check_environment.html') -- -- --@app.route('/MT_check_environment', methods=['GET', 'POST']) --def MT_check_environment(): -- """ -- 迁移前系统环境检查 -- :return: -- """ -- mod = check_methods() -- if mod: -- return Response(mod, content_type='application/json') -- return render_template('MT_check_environment.html') -- -- - @app.route('/MT_check_progress', methods=['GET', 'POST']) - def MT_check_progress(): - """ --- -2.20.1 - diff --git a/0059-add-kernel-detection-result-to-abi-report.patch b/0059-add-kernel-detection-result-to-abi-report.patch deleted file mode 100644 index 68b2418bfbe36459284e901dc77030d0a734e947..0000000000000000000000000000000000000000 --- a/0059-add-kernel-detection-result-to-abi-report.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 2be33254274159375af1783396ee30b4c696d7c1 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:06:58 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E6=8A=A5=E5=91=8A=E5=A2=9E=E5=8A=A0?= - =?UTF-8?q?=E5=86=85=E6=A0=B8=E6=A3=80=E6=B5=8B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 20 +++++++++++++++++++- - 1 file changed, 19 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index abe6083..fdbe2e2 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -113,4 +113,22 @@ def abi_check_sys(): - return None - - ######################## add for test end ######################## --######################## add for test end ######################## -\ No newline at end of file -+######################## add for test end ######################## -+ -+#20220107 add by lihp -+#20220112 modify by lihp: add deal kernel migration fail -+def platform_release(Flag): -+ if Flag == '0': -+ cmd = "rpm -qa | grep kernel | grep -E 'an7|an8|el7|el8'" -+ else: -+ cmd = "rpm -qa | grep kernel | grep -E 'el7|el8|an7|an8|uelc'" -+ kernel_version='' -+ for line in os.popen(cmd): -+ pattern = re.compile(r'^[-+]?[-0-9]\d*\.\d*|[-+]?\.?[0-9]\d*$') -+ if pattern.match(line[7]): -+ kernel_version = line.split('-',1)[1] -+ if 'uelc' in line: -+ break -+ elif 'oe1' in line: -+ break -+ return kernel_version.rsplit('.', 1)[0] --- -2.20.1 - diff --git a/0060-add-four-detection-item-to-abi-report.patch b/0060-add-four-detection-item-to-abi-report.patch deleted file mode 100644 index 8e98d0010ee769d774c026897114988035f04c28..0000000000000000000000000000000000000000 --- a/0060-add-four-detection-item-to-abi-report.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 7fe482e8fe8438cfb0c714c4861a578e6749b2f8 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:10:47 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E6=A3=80=E6=B5=8B=E5=A2=9E=E5=8A=A0?= - =?UTF-8?q?=E5=9B=9B=E7=A7=8D=E6=A3=80=E6=B5=8B=E5=88=86=E7=B1=BB=E9=A1=B9?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index fdbe2e2..cc48f45 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -132,3 +132,32 @@ def platform_release(Flag): - elif 'oe1' in line: - break - return kernel_version.rsplit('.', 1)[0] -+ -+ -+#Create agent ABI check result file -+def agent_ABI_check_result(): -+ string = ',,,Y,,\n' -+ -+ #mycopyfile(abi_incomp_chk, agent_abi_check_result, abi_log) -+ facp = open(agent_abi_check_result, 'w') -+ for line in open(abi_incomp_chk): -+ -+ tmp01 = line.split(',', 5) -+ tmp = tmp01[4] -+ -+ if tmp == '库差异': -+ str_01 = tmp01[0]+','+tmp01[1]+','+tmp01[2]+','+tmp01[3]+',1,'+tmp01[5] -+ elif tmp == '二进制差异': -+ str_01 = tmp01[0]+','+tmp01[1]+','+tmp01[2]+','+tmp01[3]+',2,'+tmp01[5] -+ elif tmp == '可执行文件差异': -+ str_01 = tmp01[0]+','+tmp01[1]+','+tmp01[2]+','+tmp01[3]+',3,'+tmp01[5] -+ elif tmp == '视频文件差异': -+ str_01 = tmp01[0]+','+tmp01[1]+','+tmp01[2]+','+tmp01[3]+',4,'+tmp01[5] -+ -+ facp.write(str_01) -+ facp.close() -+ -+ fp = open(agent_abi_check_result, 'a') -+ for rpm_name in open(abi_comp_chk): -+ fp.write(rpm_name.split(',')[0] + string) -+ fp.close() -\ No newline at end of file --- -2.20.1 - diff --git a/0061-detection-abi-log.patch b/0061-detection-abi-log.patch deleted file mode 100644 index 579d684df6191e1348bb9460cfb2938524c65e5f..0000000000000000000000000000000000000000 --- a/0061-detection-abi-log.patch +++ /dev/null @@ -1,46 +0,0 @@ -From d8be08a9ea07b3500a3b6460e9325014ffcf379b Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:16:10 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E6=A3=80=E6=B5=8B=E8=AE=B0=E5=BD=95?= - =?UTF-8?q?=E6=97=A5=E5=BF=97?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 21 ++++++++++++++++++++- - 1 file changed, 20 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index cc48f45..e442cb5 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -160,4 +160,23 @@ def agent_ABI_check_result(): - fp = open(agent_abi_check_result, 'a') - for rpm_name in open(abi_comp_chk): - fp.write(rpm_name.split(',')[0] + string) -- fp.close() -\ No newline at end of file -+ fp.close() -+ -+ -+def logger_init(): -+ log_file = 'Abisystmcompchk.log' + '.' + datetime.datetime.now().strftime('%Y%m%d%H%M') -+ log_path = '/var/tmp/uos-migration/UOS_migration_log/' -+ if not os.path.exists(log_path): -+ os.makedirs(log_path) -+ -+ logger = logging.getLogger() -+ logger.setLevel(logging.INFO) -+ log_name = log_path + log_file -+ logfile = log_name -+ fh = logging.FileHandler(logfile, mode='w') -+ fh.setLevel(logging.DEBUG) -+ formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s") -+ fh.setFormatter(formatter) -+ logger.addHandler(fh) -+ -+ return logger --- -2.20.1 - diff --git a/0062-add-detection-ELF-content-in-abi-file.patch b/0062-add-detection-ELF-content-in-abi-file.patch deleted file mode 100644 index 8adf05d89cff0e7ee8a3a34db07faf56eeb4379b..0000000000000000000000000000000000000000 --- a/0062-add-detection-ELF-content-in-abi-file.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 0827581dc9f64cfa96601fa36ae1fdc6d8e14dac Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:19:04 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E5=A2=9E=E5=8A=A0ELF=E6=96=87=E4=BB=B6?= - =?UTF-8?q?=E6=A3=80=E6=B5=8B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index e442cb5..541e9a8 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -180,3 +180,25 @@ def logger_init(): - logger.addHandler(fh) - - return logger -+ -+ -+# Check whether it is an ELF file -+def is_ELFfile(filepath, logger): -+ if not os.path.exists(filepath): -+ logger.info('file not exit:' + filepath) -+ return False -+ try: -+ FileStates = os.stat(filepath) -+ FileMode = FileStates[stat.ST_MODE] -+ if not stat.S_ISREG(FileMode) or stat.S_ISLNK(FileMode): -+ return False -+ with open(filepath, 'rb') as f: -+ header = (bytearray(f.read(4)[1:4])).decode(encoding="utf-8") -+ # logger.info("header is {}".format(header)) -+ if header in ["ELF"]: -+ return True -+ except UnicodeDecodeError as e: -+ # logger.info("is_ELFfile UnicodeDecodeError {}".format(filepath)) -+ # logger.info(str(e)) -+ pass -+ return False --- -2.20.1 - diff --git a/0063-add-compare-with-package-result-in-abi-report.patch b/0063-add-compare-with-package-result-in-abi-report.patch deleted file mode 100644 index b89ffafd2a2c021156fae60d288e1e16e87bb7fc..0000000000000000000000000000000000000000 --- a/0063-add-compare-with-package-result-in-abi-report.patch +++ /dev/null @@ -1,53 +0,0 @@ -From b21342f766124ff7fbb737fa882329ae7873d970 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:30:03 +0800 -Subject: [PATCH] =?UTF-8?q?ABI=E6=8A=A5=E5=91=8A=E5=A2=9E=E5=8A=A0?= - =?UTF-8?q?=E8=BD=AF=E4=BB=B6=E5=8C=85=E5=AF=B9=E6=AF=94?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 541e9a8..7a810f9 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -202,3 +202,32 @@ def is_ELFfile(filepath, logger): - # logger.info(str(e)) - pass - return False -+ -+ -+#Get migration behind rpm list, filter dist of '.uelc20' -+def get_migrate_behind_rpm_pkg(): -+ dist='.uelc20' -+ migration_before_uelc20_rpm = exp_rst_dir + 'migration-before-uelc20-rpm.csv' -+ migration_behind_uelc20_rpm = exp_rst_dir + 'migration-behind-uelc20-rpm.csv' -+ -+ rpm_pkg_list=[] -+ -+ ts = rpm.TransactionSet() -+ mi = ts.dbMatch() -+ -+ fhu = open(migration_behind_uelc20_rpm, 'w') -+ if system_version_id() == '7': -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release'].decode(): -+ fhu.write(rpm_pkg['name'].decode()+'\n') -+ rpm_pkg_list.append(rpm_pkg['name'].decode()) -+ else: -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release']: -+ fhu.write(rpm_pkg['name']+'\n') -+ rpm_pkg_list.append(rpm_pkg['name']) -+ fcw.close() -+ -+ return rpm_pkg_list -+ -+ --- -2.20.1 - diff --git a/0064-get-system-package-information-in-rpm-database.patch b/0064-get-system-package-information-in-rpm-database.patch deleted file mode 100644 index fba43ad95d51d5a3bb7e191df58fe6c68acc2a48..0000000000000000000000000000000000000000 --- a/0064-get-system-package-information-in-rpm-database.patch +++ /dev/null @@ -1,114 +0,0 @@ -From c741aa97826c80c5a26387f3c2fe7c78942be679 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:32:52 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=9C=A8rpm=E6=95=B0=E6=8D=AE=E5=BA=93?= - =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=B3=BB=E7=BB=9F=E8=BD=AF=E4=BB=B6=E5=8C=85?= - =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=BF=A1=E6=81=AF?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 89 +++++++++++++++++++++++++++++++++ - 1 file changed, 89 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 7a810f9..3ebee71 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -231,3 +231,92 @@ def get_migrate_behind_rpm_pkg(): - return rpm_pkg_list - - -+# Get the current system package -+def get_system_pkg_name(flag, mig_logger): -+ dist = '.uelc20' -+ rpm_pkg_list = '' -+ rpm_pkg_oth = [] -+ -+ if not os.path.exists(exp_rst_dir): -+ os.makedirs(exp_rst_dir) -+ -+ migration_before_uelc20_rpm = exp_rst_dir + 'migration-before-uelc20-rpm.csv' -+ migration_before_eln_rpm = exp_rst_dir + 'migration-before-eln-rpm.csv' -+ -+ ts = rpm.TransactionSet() -+ mi = ts.dbMatch() -+ -+ # migration before filter dist of '.uelc20' -+ if flag == '0': -+ if os.path.exists(migration_before_uelc20_rpm): -+ os.remove(migration_before_uelc20_rpm) -+ if os.path.exists(migration_before_eln_rpm): -+ os.remove(migration_before_eln_rpm) -+ -+ fbfu = open(migration_before_uelc20_rpm, 'w') -+ fbfe = open(migration_before_eln_rpm, 'w') -+ if system_version_id() == '7': -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release'].decode(): -+ fbfu.write(rpm_pkg['name'].decode() + '\n') -+ else: -+ fbfe.write(rpm_pkg['name'].decode() + '\n') -+ rpm_pkg_list = rpm_pkg_list + ' ' + rpm_pkg['name'].decode() -+ else: -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release']: -+ fbfu.write(rpm_pkg['name'] + '\n') -+ else: -+ fbfe.write(rpm_pkg['name'] + '\n') -+ rpm_pkg_list = rpm_pkg_list + ' ' + rpm_pkg['name'] -+ fbfu.close() -+ fbfe.close() -+ return rpm_pkg_list -+ -+ # migration behind filter dist of '.uelc20' -+ elif flag == '1': -+ if os.path.exists(migration_before_uelc20_rpm): -+ with open(migration_before_uelc20_rpm, 'r') as fbfu: -+ fbfu_list = fbfu.readlines() -+ -+ if os.path.exists(migration_system_install): -+ os.remove(migration_system_install) -+ -+ fbhe = open(migration_system_install, 'w') -+ rst = str(abi_check_sys()) -+ if rst == '7': -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release'].decode(): -+ if rpm_pkg['name'].decode() not in fbfu_list: -+ fbhe.write(rpm_pkg['name'].decode() + '\n') -+ elif rst == '8': -+ for rpm_pkg in mi: -+ if dist in rpm_pkg['release']: -+ if rpm_pkg['name'] not in fbfu_list: -+ fbhe.write(rpm_pkg['name'] + '\n') -+ else: -+ mig_logger.info('migrate behind not exit verison id !!!') -+ fbhe.close() -+ else: -+ mig_logger.info('file not exit:' + migration_before_uelc20_rpm) -+ mig_logger.info('Please do migration before system compation check !!!') -+ return False -+ return True -+ -+ elif flag == '2': -+ if system_version_id() == '7': -+ for rpm_name in mi: -+ if dist not in rpm_name['release'].decode(): -+ rpm_pkg_oth.append(rpm_name['name'].decode()) -+ dist_flag = '1' -+ else: -+ for rpm_name in mi: -+ if dist not in rpm_name['release']: -+ rpm_pkg_oth.append(rpm_name['name']) -+ dist_flag = '1' -+ -+ if dist_flag == '1': -+ return rpm_pkg_oth -+ else: -+ mig_logger.info('The current system is UOS, not support migration, please check !!!') -+ return False --- -2.20.1 - diff --git a/0065-get-checking-envirnmnet-process.patch b/0065-get-checking-envirnmnet-process.patch deleted file mode 100644 index bf024ca3a5dd6c15c68545dd045a60ee9f345070..0000000000000000000000000000000000000000 --- a/0065-get-checking-envirnmnet-process.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 738918f6c6a3fe1e6ae6c8b7f125feb132936c21 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 10:36:32 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=8E=AF=E5=A2=83=E6=A3=80?= - =?UTF-8?q?=E6=B5=8B=E8=BF=9B=E5=BA=A6?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - views/server.py | 30 +++++++++++++++++++++++++++++- - 1 file changed, 29 insertions(+), 1 deletion(-) - -diff --git a/views/server.py b/views/server.py -index b13d908..c959c2a 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -264,4 +264,32 @@ def get_repo_data(data): - data['centos8_aarch64'] = 'faild' - - json_data = json.dumps(data) -- return json_data -\ No newline at end of file -+ return json_data -+ -+ -+def get_environment_data(data): -+ """ -+ 获取环境检查进度 -+ :return: -+ """ -+ get_environment_pro_sql = "select agent_ip,task_progress,task_status from agent_task;" -+ progress = DBHelper().execute(get_environment_pro_sql).fetchall() -+ res = {} -+ info_list = [] -+ finall_progress = [] -+ for i in progress: -+ sql = "select agent_id from agent_info where agent_ip='%s' and agent_online_status=0 and repo_status=0 " \ -+ "and agent_storage>=10 and agent_migration_os is null;" % i[0] -+ get_sql = DBHelper().execute(sql).fetchall() -+ if get_sql: -+ finall_progress.append(list(i)) -+ -+ info_dict_keys_list = ['agent_ip', 'task_progress', 'task_status'] -+ for i in finall_progress: -+ info_list.append(dict(zip(info_dict_keys_list, list(i)))) -+ -+ res['info'] = info_list -+ res['num'] = len(finall_progress) -+ -+ json_res = json.dumps(res) -+ return json_res -\ No newline at end of file --- -2.20.1 - diff --git a/0066-check-if-file-is-binary.patch b/0066-check-if-file-is-binary.patch deleted file mode 100644 index ee6c9140a071d3e998d817d1c13607fb3867e219..0000000000000000000000000000000000000000 --- a/0066-check-if-file-is-binary.patch +++ /dev/null @@ -1,56 +0,0 @@ -From f5106e3a71de94278d5ea337014038a3c607285e Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:39:36 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=96=87=E4=BB=B6=E6=98=AF?= - =?UTF-8?q?=E5=90=A6=E4=B8=BA=E4=BA=8C=E8=BF=9B=E5=88=B6?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 32 ++++++++++++++++++++++++++++++++ - 1 file changed, 32 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 3ebee71..14cad1d 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -320,3 +320,35 @@ def get_system_pkg_name(flag, mig_logger): - else: - mig_logger.info('The current system is UOS, not support migration, please check !!!') - return False -+ -+ -+class myThread (threading.Thread): -+ def __init__(self, threadID, name, q, lock, fpw, fpr, q_query, log): -+ threading.Thread.__init__(self) -+ self.threadID = threadID -+ self.name = name -+ self.q = q -+ self.lock = lock -+ self.fpw = fpw -+ self.fpr = fpr -+ self.q_query = q_query -+ self.log = log -+ def run(self): -+ self.log.info ("Open the thread" + self.name) -+ process_data(self.name, self.q, self.lock, self.fpw, self.fpr, self.q_query, self.log) -+ self.log.info ("Exit the thread" + self.name) -+ -+ -+def is_binwary_file(filename): -+ TEXT_BOMS = { -+ codecs.BOM_UTF16_BE, -+ codecs.BOM_UTF16_LE, -+ codecs.BOM_UTF32_BE, -+ codecs.BOM_UTF32_LE, -+ codecs.BOM_UTF8, -+ } -+ with open(filename, 'rb') as file: -+ CHUNKSIZE = 8192 -+ initial_bytes = file.read(CHUNKSIZE) -+ file.close -+ return not any(initial_bytes.startswith(bom) for bom in TEXT_BOMS) and b'\0' in initial_bytes --- -2.20.1 - diff --git a/0067-add-an-abi-comparation-function.patch b/0067-add-an-abi-comparation-function.patch deleted file mode 100644 index 19ebe132d2e3afbc0cd7e8d109184d00ff3fb5b6..0000000000000000000000000000000000000000 --- a/0067-add-an-abi-comparation-function.patch +++ /dev/null @@ -1,146 +0,0 @@ -From 5b38d0362e73afd8a3cd16fdd1e32dfd7cde00ba Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:45:29 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0ELF=E5=AF=B9=E6=AF=94?= - =?UTF-8?q?=E5=87=BD=E6=95=B0?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 107 +++++++++++++++++++++++++++++++- - 1 file changed, 106 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 14cad1d..d3c09e6 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -322,6 +322,7 @@ def get_system_pkg_name(flag, mig_logger): - return False - - -+ - class myThread (threading.Thread): - def __init__(self, threadID, name, q, lock, fpw, fpr, q_query, log): - threading.Thread.__init__(self) -@@ -338,7 +339,6 @@ class myThread (threading.Thread): - process_data(self.name, self.q, self.lock, self.fpw, self.fpr, self.q_query, self.log) - self.log.info ("Exit the thread" + self.name) - -- - def is_binwary_file(filename): - TEXT_BOMS = { - codecs.BOM_UTF16_BE, -@@ -352,3 +352,108 @@ def is_binwary_file(filename): - initial_bytes = file.read(CHUNKSIZE) - file.close - return not any(initial_bytes.startswith(bom) for bom in TEXT_BOMS) and b'\0' in initial_bytes -+ -+def incomp_binwary_desc(binwary_file): -+ if binwary_file.endswith('.so'): -+ incomp_info_desc = '库差异' -+ elif binwary_file.endswith('.exec'): -+ incomp_info_desc = '可执行文件' -+ elif binwary_file.endswith('.mod'): -+ incomp_info_desc = '视频文件' -+ else: -+ incomp_info_desc = '二进制差异' -+ return incomp_info_desc -+ -+def deal_files_list(fwincomp, fwcomp, cur_file_list, trn_file_list, rpm_full_pkg_name, list_log): -+ #compatiable -+ comp_flag=1 -+ link_flag = '0' -+ cur_file_deal = '' -+ -+ rpm_pkg_dir = local_dir + 'uos/rpms' -+ rpm_pkg_name = rpm_full_pkg_name.rsplit('-',2)[0] -+ pkg_version = rpm_full_pkg_name.rsplit('-',2)[1] -+ -+ for cur_file_name in cur_file_list: -+ -+ cur_file_binwary = cur_file_name.strip('\n') -+ -+ if not os.path.exists(cur_file_binwary): -+ continue -+ -+ if os.path.isdir(cur_file_binwary): -+ continue -+ -+ if '.' in cur_file_binwary.rsplit('/',1)[1]: -+ if '.'+cur_file_binwary.rsplit('.',1)[1] in suffix_list: -+ continue -+ -+ if not is_ELFfile(cur_file_binwary, list_log): -+ continue -+ -+ if is_binwary_file(cur_file_binwary): -+ trn_file_deal = rpm_pkg_dir + cur_file_binwary -+ if not os.path.exists(trn_file_deal): -+ continue -+ -+ #link file realpath -+ if os.path.islink(cur_file_binwary): -+ cur_file_deal = os.path.realpath(cur_file_binwary) -+ if cur_file_name in trn_file_list: -+ trn_file_deal_tmp = rpm_pkg_dir + cur_file_binwary -+ trn_file_deal = os.path.realpath(trn_file_deal_tmp) -+ link_flag = '1' -+ else: -+ continue -+ else: -+ if link_flag: -+ link_flag = '0' -+ continue -+ if cur_file_name in trn_file_list: -+ trn_file_deal = rpm_pkg_dir + cur_file_binwary -+ cur_file_deal = cur_file_binwary -+ else: -+ continue -+ -+ abidiff_rst_list = list(os.popen('abidiff %s %s' %(trn_file_deal, cur_file_binwary))) -+ if len(abidiff_rst_list): -+ i = 0 -+ if cur_file_binwary.endswith('.exec'): -+ while i < 2: -+ for line in abidiff_rst_list[i].split(':',1)[1].split(','): -+ if line.split(' ', 2)[1] != '0': -+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1] -+ compatiablity='N' -+ incomp_reason = incomp_binwary_desc(bin_name) -+ diff_detail = abidiff_rst_list[i].split(':', 1)[1] -+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail) -+ comp_flag = 0 -+ i = i + 1 -+ #20220112 lihp: add if branch -+ elif abidiff_rst_list[0].startswith('ELF SONAME'): -+ i = i + 1 -+ while i < 2: -+ for line in abidiff_rst_list[i].split(':',1)[1].split(','): -+ if line.split(' ', 2)[1] != '0': -+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1] -+ compatiablity='N' -+ incomp_reason = incomp_binwary_desc(bin_name) -+ diff_detail = abidiff_rst_list[i].split(':', 1)[1] -+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail) -+ comp_flag = 0 -+ i = i + 1 -+ else: -+ while i < 4: -+ for line in abidiff_rst_list[i].split(':',1)[1].split(','): -+ if line.split(' ', 2)[1] != '0': -+ bin_name = cur_file_name.strip('\n').rsplit('/', 1)[1] -+ compatiablity='N' -+ incomp_reason = incomp_binwary_desc(bin_name) -+ diff_detail = abidiff_rst_list[i].split(':', 1)[1] -+ fwincomp.write(rpm_pkg_name+','+bin_name+','+pkg_version+','+compatiablity+','+incomp_reason+','+diff_detail) -+ comp_flag = 0 -+ i = i + 1 -+ else: -+ continue -+ if comp_flag: -+ fwcomp.write(rpm_pkg_name + ',' + ',' + ',' + 'Y,' + ',' + '\n') -\ No newline at end of file --- -2.20.1 - diff --git a/0068-get-file-list-and-provide-file-path-to-compare.patch b/0068-get-file-list-and-provide-file-path-to-compare.patch deleted file mode 100644 index 48ffcc9c593538fc81be2b0393fbab335150003e..0000000000000000000000000000000000000000 --- a/0068-get-file-list-and-provide-file-path-to-compare.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 2277378be0320a9ae296e6a02137497d53151bd3 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:51:30 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6=E5=88=97?= - =?UTF-8?q?=E8=A1=A8=EF=BC=8C=E6=8F=90=E4=BE=9B=E6=96=87=E4=BB=B6=E5=AF=B9?= - =?UTF-8?q?=E6=AF=94=E8=B7=AF=E5=BE=84?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 37 ++++++++++++++++++++++++++++++++- - 1 file changed, 36 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index d3c09e6..438fc2d 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -456,4 +456,39 @@ def deal_files_list(fwincomp, fwcomp, cur_file_list, trn_file_list, rpm_full_pkg - else: - continue - if comp_flag: -- fwcomp.write(rpm_pkg_name + ',' + ',' + ',' + 'Y,' + ',' + '\n') -\ No newline at end of file -+ fwcomp.write(rpm_pkg_name + ',' + ',' + ',' + 'Y,' + ',' + '\n') -+ -+ -+def process_data(threadName, q, queueLock, incompfw, compfw, Queue, pro_log): -+ global exitFlag -+ global total_rpm_nums -+ global percentage -+ global deal_rpm_num -+ status = '1' -+ -+ rpm_pkg_path = local_dir + 'uos/rpms/' -+ -+ abisys =str(abi_check_sys()) -+ while not exitFlag: -+ queueLock.acquire() -+ if not workQueue.empty(): -+ rpm_full_name=q.get() -+ rpm_pkg_name=rpm_full_name.rsplit('-',2)[0] -+ rpm_path_name=rpm_pkg_path + rpm_full_name -+ if '7' == abisys: -+ print('----------7-0---------') -+ list_file_cur=list(os.popen('rpm -ql %s ' %(rpm_pkg_name))) -+ list_file_trn=list(os.popen('rpm -qpl %s ' %(rpm_path_name))) -+ else: -+ list_file_cur=list(os.popen('rpm -ql --noartifact %s ' %(rpm_pkg_name))) -+ list_file_trn=list(os.popen('rpm -qpl --noartifact %s ' %(rpm_path_name))) -+ os.system('rpm2cpio %s | cpio -idmv' %(rpm_full_name)) -+ deal_files_list(incompfw, compfw, list_file_cur, list_file_trn, rpm_full_name, pro_log) -+ deal_rpm_num = deal_rpm_num + 1 -+ percentage = ("%d" % (deal_rpm_num/total_rpm_nums*100)) -+ msg_tup = (percentage, status) -+ Queue.put(msg_tup) -+ pro_log.info('message tup queue:' + str(msg_tup)) -+ queueLock.release() -+ else: -+ queueLock.release() -\ No newline at end of file --- -2.20.1 - diff --git a/0069-get-package-list-downloaded-locally-from-the-software-repository.patch b/0069-get-package-list-downloaded-locally-from-the-software-repository.patch deleted file mode 100644 index 0ee91dd86d1d0718c2a9d1b1820e784f91571c34..0000000000000000000000000000000000000000 --- a/0069-get-package-list-downloaded-locally-from-the-software-repository.patch +++ /dev/null @@ -1,52 +0,0 @@ -From e87ba07ce71ff048e6a7acb51230b09db4f5fd3b Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 10:55:30 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BD=AF=E4=BB=B6=E6=BA=90?= - =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E5=88=B0=E6=9C=AC=E5=9C=B0=E7=9A=84=E8=BD=AF?= - =?UTF-8?q?=E4=BB=B6=E5=8C=85=E5=88=97=E8=A1=A8?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 26 +++++++++++++++++++++++++- - 1 file changed, 25 insertions(+), 1 deletion(-) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 438fc2d..bac4205 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -491,4 +491,28 @@ def process_data(threadName, q, queueLock, incompfw, compfw, Queue, pro_log): - pro_log.info('message tup queue:' + str(msg_tup)) - queueLock.release() - else: -- queueLock.release() -\ No newline at end of file -+ queueLock.release() -+ -+ -+def get_system_pkg_list(migbeflist): -+ download_rpm_nums = 0 -+ migration_rpm_pkg_path = local_dir + 'uos/rpms' -+ -+ #clean history data -+ if os.path.exists(migration_system_total): -+ os.remove(migration_system_total) -+ -+ ftw = open(migration_system_total, 'w') -+ items = os.listdir(migration_rpm_pkg_path) -+ newlist = [] -+ for names in items: -+ if names.endswith(".rpm"): -+ ftw.write(names.rsplit('-',1)[0].rsplit('-',1)[0] + '\n') -+ migbeflist.append(names.rsplit('-',1)[0].rsplit('-',1)[0]) -+ newlist.append(names) -+ download_rpm_nums = download_rpm_nums + 1 -+ ftw.close() -+ if download_rpm_nums: -+ return newlist -+ else: -+ return False --- -2.20.1 - diff --git a/0070-interface-for-obtaining-repo-interface.patch b/0070-interface-for-obtaining-repo-interface.patch deleted file mode 100644 index 4605ab1528eb6e36e707341379e3c301bb6e8801..0000000000000000000000000000000000000000 --- a/0070-interface-for-obtaining-repo-interface.patch +++ /dev/null @@ -1,38 +0,0 @@ -From bdf226b949fd997e71d9375ecc5f71553d3bf005 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 10:55:37 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96repo=E4=BF=A1=E6=81=AF?= - =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/index.py b/index.py -index 4ca7b38..8629ae3 100644 ---- a/index.py -+++ b/index.py -@@ -168,6 +168,17 @@ def get_environment_data(): - return Response(mod, content_type='application/json') - - -+@app.route('/get_repo_arch_info', methods=['GET', 'POST']) -+def get_repo_arch_info(): -+ """ -+ 获取软件仓库架构和系统信息 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0071-get-package-list-from-repository.patch b/0071-get-package-list-from-repository.patch deleted file mode 100644 index f4fadd0f6b840960b3fdb84c374a93f740834936..0000000000000000000000000000000000000000 --- a/0071-get-package-list-from-repository.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 10648fa7ce12f1e01c97d91429c11f0b6fae907b Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 11:00:36 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BD=AF=E4=BB=B6=E4=BB=93?= - =?UTF-8?q?=E5=BA=93=E4=BF=A1=E6=81=AF?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 1 + - views/server.py | 30 ++++++++++++++++++++++++++++++ - 2 files changed, 31 insertions(+) - -diff --git a/index.py b/index.py -index 8629ae3..d9a564b 100644 ---- a/index.py -+++ b/index.py -@@ -34,6 +34,7 @@ mods = { - 'get_repo_data': server.get_repo_data, - 'check_environment':migration.check_environment, - 'get_environment_data': server.get_environment_data, -+ 'get_repo_arch_info': server.get_repo_arch_info, - } - - -diff --git a/views/server.py b/views/server.py -index c959c2a..0a8eeed 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -291,5 +291,35 @@ def get_environment_data(data): - res['info'] = info_list - res['num'] = len(finall_progress) - -+ json_res = json.dumps(res) -+ return json_res -+ -+ -+def get_repo_arch_info(data): -+ """ -+ 获取软件仓库架构和系统信息 -+ :param data: -+ :return: -+ """ -+ sql = "select agent_os,agent_arch from agent_info where agent_online_status='0' and agent_storage>='10' " \ -+ "and agent_migration_os is null;" -+ get_info = DBHelper().execute(sql).fetchall() -+ get_info_list = [] -+ for i in get_info: -+ get_info_list.append(list(i)) -+ -+ for i in get_info_list : -+ if i[0] == 'redhat7': -+ i[0] = 'centos7' -+ if i[0] == 'redhat8': -+ i[0] = 'centos8' -+ -+ info_list = [] -+ info_dict_keys_list = ['agent_os', 'agent_arch'] -+ for i in get_info_list: -+ info_list.append(dict(zip(info_dict_keys_list, i))) -+ -+ res = {} -+ res['info'] = info_list - json_res = json.dumps(res) - return json_res -\ No newline at end of file --- -2.20.1 - diff --git a/0072-count-the-total-number-of-abi-compatible-lists.patch b/0072-count-the-total-number-of-abi-compatible-lists.patch deleted file mode 100644 index 307edcf6e937ab7e9900833ac7459ab128320f27..0000000000000000000000000000000000000000 --- a/0072-count-the-total-number-of-abi-compatible-lists.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 749ace03d1a3a0a47f68a558a1a6fb4f63b4bd81 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 13:42:21 +0800 -Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1abi=E5=85=BC=E5=AE=B9?= - =?UTF-8?q?=E7=9A=84=E5=88=97=E8=A1=A8=E6=80=BB=E6=95=B0=E9=87=8F?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index bac4205..f402a74 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -516,3 +516,15 @@ def get_system_pkg_list(migbeflist): - return newlist - else: - return False -+ -+ -+def incomp_pkg_num(): -+ tmp='' -+ num=0 -+ for line in open(abi_incomp_chk, 'r').readlines(): -+ tmp_01 = line.split(',')[0] -+ if tmp!=tmp_01: -+ num = num + 1 -+ tmp = line.split(',')[0] -+ return num -+ --- -2.20.1 - diff --git a/0073-get-os-version-and-os-id.patch b/0073-get-os-version-and-os-id.patch deleted file mode 100644 index 73de0321a0c6f6b11ae480e8b8ef9e6c3fd75fea..0000000000000000000000000000000000000000 --- a/0073-get-os-version-and-os-id.patch +++ /dev/null @@ -1,42 +0,0 @@ -From e5178a05c2a6a2032e1db5a5d2329b8b63862dcc Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 13:57:59 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E7=B3=BB=E7=BB=9F=E7=89=88?= - =?UTF-8?q?=E6=9C=AC=E5=92=8C=E7=B3=BB=E7=BB=9FID?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index f402a74..913fef1 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -528,3 +528,21 @@ def incomp_pkg_num(): - tmp = line.split(',')[0] - return num - -+ -+def system_version_id(): -+ fp = open('/etc/os-release', 'r') -+ for line in fp: -+ if 'VERSION_ID' in line: -+ break -+ fp.close() -+ return line.split('=', 1)[1].replace('"', '').replace('\n', '') -+ -+ -+def get_cur_sys_version(): -+ fp = open('/etc/os-release', 'r') -+ for line in fp: -+ if 'PRETTY_NAME' in line: -+ break -+ fp.close() -+ return line.split('=', 1)[1].replace('"', '').replace('\n', '') -+ --- -2.20.1 - diff --git a/0074-detection-basic-system-information.patch b/0074-detection-basic-system-information.patch deleted file mode 100644 index 39c8da1a9eca40e1b4ad28ee6eb47783f09dde3c..0000000000000000000000000000000000000000 --- a/0074-detection-basic-system-information.patch +++ /dev/null @@ -1,45 +0,0 @@ -From be2eee80486e06dc4cfe097fa10d2254df5800c4 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:00:33 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=A3=80=E6=B5=8B=E7=9A=84?= - =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 21 +++++++++++++++++++++ - 1 file changed, 21 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 913fef1..43a4594 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -546,3 +546,24 @@ def get_cur_sys_version(): - fp.close() - return line.split('=', 1)[1].replace('"', '').replace('\n', '') - -+ -+def get_migration_sys_info(): -+ -+ behind_sys_info = exp_rst_dir + 'before-system-info.txt' -+ with open(behind_sys_info, 'r') as file_object: -+ behind_list_info = file_object.readlines() -+ -+ migration_sys_info = '1|2|' + get_cur_sys_version() -+ behind_list_info.append(migration_sys_info) -+ -+ #20220107 modify lihp: get kernel version -+ #migration_kernel_verison = '2|2|' + platform.release() -+ migration_kernel_verison = '2|2|' + platform_release('1') -+ behind_list_info.append(migration_kernel_verison) -+ -+ with open(migration_system_install, 'r') as frm: -+ install_pkgs_num = str(len(frm.readlines())) -+ behind_list_info.append('8|2|' + install_pkgs_num) -+ -+ return behind_list_info -+ --- -2.20.1 - diff --git a/0075-detection-basic-information-and-format-abi-compatibility-information-to-report.patch b/0075-detection-basic-information-and-format-abi-compatibility-information-to-report.patch deleted file mode 100644 index 6aaccee87f18daaacfb3a23a78cf73640b480039..0000000000000000000000000000000000000000 --- a/0075-detection-basic-information-and-format-abi-compatibility-information-to-report.patch +++ /dev/null @@ -1,87 +0,0 @@ -From ce89ad8b486b2151243c4ba03f6a5778f353ac1f Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:02:56 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E5=90=88=E5=9F=BA=E7=A1=80=E4=BF=A1?= - =?UTF-8?q?=E6=81=AF=E5=92=8CABI=E5=85=BC=E5=AE=B9=E4=BF=A1=E6=81=AF?= - =?UTF-8?q?=E5=88=B0=E6=8A=A5=E5=91=8A=E5=B9=B6=E8=B0=83=E6=95=B4=E6=A0=BC?= - =?UTF-8?q?=E5=BC=8F?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 61 +++++++++++++++++++++++++++++++++ - 1 file changed, 61 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 43a4594..d14581b 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -567,3 +567,64 @@ def get_migration_sys_info(): - - return behind_list_info - -+ -+#Create data list for write to .xls of sheet[0] -+#ge:['1|1|CentOS Linux 8 (Core)', '2|1|4.18.0-147.el8.x86_64', '4|1|26.4GB', '5|1|x86_64', '8|1|1278', '11|1|1', '12|1|2', '13|1|2'] -+def get_cur_sys_info_list(): -+ list_info = [] -+ before_sys_info = exp_rst_dir + 'before-system-info.txt' -+ sys_version_tmp = exp_rst_dir + 'sys-version-tmp' -+ -+ #Used after system migration -+ with open(sys_version_tmp, 'w') as file_object: -+ file_object.write(get_cur_sys_version()) -+ -+ #current system version, write sheet[0]:1-row,1-column -+ cur_sys_info = '1|1|' + get_cur_sys_version() -+ list_info.append(cur_sys_info) -+ -+ #current kernel version, write sheet[0]:2-row,1-column -+ #20220107 modify lihp: get kernel version of migrate before -+ #cur_kernel_verison = '2|1|' + platform.release() -+ cur_kernel_verison = '2|1|' + platform_release('0') -+ list_info.append(cur_kernel_verison) -+ -+ #/var/cache available space,write sheet[0]:4-row,1-column -+ cur_var_cache = '4|1|' + os_storage() + 'GB' -+ list_info.append(cur_var_cache) -+ -+ #system architecture, write sheet[0]:5-row,1-line -+ cur_arch = '5|1|' + platform.processor() -+ list_info.append(cur_arch) -+ -+ #Be replaced rpm packages number,write sheet[0]:8-row,1-column -+ with open(migration_system_total, 'r') as fr: -+ replace_pkgs_num = str(len(fr.readlines())) -+ list_info.append('8|1|' + replace_pkgs_num) -+ -+ #Compatible with the number, write sheet[0]:11-row,1-column -+ with open(abi_comp_chk, 'r') as fc: -+ comp_num_int = len(fc.readlines()) -+ comp_num = '11|1|' + str(comp_num_int) -+ list_info.append(comp_num) -+ -+ #Icompatible with the number,write sheet[0]:12-row,1-column -+ incomp_num = '12|1|' + str(incomp_pkg_num()) -+ list_info.append(incomp_num) -+ -+ #The total number of packages,write sheet[0]:13-row,1-column -+ sum_num = comp_num_int + incomp_pkg_num() -+ list_info.append('13|1|' + str(sum_num)) -+ -+ #write to file,report generation after migration -+ with open(before_sys_info, 'w') as fpbsi: -+ fpbsi.write(cur_sys_info + '\n') -+ fpbsi.write(cur_kernel_verison + '\n') -+ fpbsi.write(cur_var_cache + '\n') -+ fpbsi.write(cur_arch + '\n') -+ fpbsi.write('8|1|' + replace_pkgs_num + '\n') -+ fpbsi.write(comp_num + '\n') -+ fpbsi.write(incomp_num + '\n') -+ fpbsi.write('13|1|' + str(sum_num) + '\n') -+ -+ return list_info --- -2.20.1 - diff --git a/0076-detection-storage-interface.patch b/0076-detection-storage-interface.patch deleted file mode 100644 index 0c627adfd0fe66e739a134fa6b4850368aa39f72..0000000000000000000000000000000000000000 --- a/0076-detection-storage-interface.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 6b30dd600fa78f0ee91762b8ca450a96e1ede0b0 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 14:06:04 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=AD=98=E5=82=A8=E7=A9=BA=E9=97=B4=E6=A3=80?= - =?UTF-8?q?=E6=B5=8B=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/index.py b/index.py -index d9a564b..6b3b3d7 100644 ---- a/index.py -+++ b/index.py -@@ -180,6 +180,17 @@ def get_repo_arch_info(): - return Response(mod, content_type='application/json') - - -+@app.route('/get_storage_num', methods=['GET', 'POST']) -+def get_storage_num(): -+ """ -+ 获取可用空间足够和不足数量 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0077-copy-from-unzip-rpm-diractory-and-system-file-to-compatility-diractory.patch b/0077-copy-from-unzip-rpm-diractory-and-system-file-to-compatility-diractory.patch deleted file mode 100644 index 6d0be598caf478dca82fb8f56f509722b058985a..0000000000000000000000000000000000000000 --- a/0077-copy-from-unzip-rpm-diractory-and-system-file-to-compatility-diractory.patch +++ /dev/null @@ -1,39 +0,0 @@ -From e4bfbc6e0d5ecf6768a24e8ae173c0bd39b667b1 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:11:10 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E5=88=B6=E8=A7=A3=E5=8E=8B=E7=9A=84rp?= - =?UTF-8?q?m=E6=96=87=E4=BB=B6=E5=88=B0=E5=92=8C=E7=B3=BB=E7=BB=9F?= - =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=88=B0=E5=AF=B9=E6=AF=94=E7=9B=AE=E5=BD=95?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index d14581b..cf34c87 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -628,3 +628,17 @@ def get_cur_sys_info_list(): - fpbsi.write('13|1|' + str(sum_num) + '\n') - - return list_info -+ -+ -+def mycopyfile(srcfile, dstfile, logger): -+ if not os.path.exists(srcfile): -+ logger.info("Please check!!!! src file not exit:" + srcfile) -+ return False -+ else: -+ fpath,fname=os.path.split(dstfile) -+ if not os.path.exists(fpath): -+ os.makedirs(fpath) -+ copyfile(srcfile,dstfile) -+ -+ return dstfile -+ --- -2.20.1 - diff --git a/0078-fill-in-the-data-in-the-checked-templace.patch b/0078-fill-in-the-data-in-the-checked-templace.patch deleted file mode 100644 index bc1980de5d2895c8138573a31ea86248934d7b69..0000000000000000000000000000000000000000 --- a/0078-fill-in-the-data-in-the-checked-templace.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 02efd99c88ae7ff70f757ed975a75aa4210f380f Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:23:24 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E6=A3=80=E6=B5=8B=E6=A8=A1=E6=9D=BF?= - =?UTF-8?q?=E5=A1=AB=E5=85=85=E5=BD=93=E5=89=8D=E5=B7=B2=E6=9C=89=E7=9A=84?= - =?UTF-8?q?=E6=95=B0=E6=8D=AE?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 34 +++++++++++++++++++++++++++++++++ - 1 file changed, 34 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index cf34c87..bf32e49 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -642,3 +642,37 @@ def mycopyfile(srcfile, dstfile, logger): - - return dstfile - -+ -+#Generate report name -+def create_migrate_report_name(flag, logg): -+ -+ migrate_before_report_path = '/var/tmp/uos-migration/UOS_analysis_report/' -+ migrate_behind_report_path = '/var/tmp/uos-migration/UOS_migration_completed_report/' -+ -+ migrate_report_before_sample_name = 'UOS_migration_report_HOSTIP_HOSTNAME_YYYYMMDDHHMM-BEFORE.xls' -+ migrate_report_behind_sample_name = 'UOS_migration_report_HOSTIP_HOSTNAME_YYYYMMDDHHMM-BEHIND.xls' -+ -+ hostip = get_local_ip() -+ hostname = socket.gethostname() -+ hosttime = datetime.datetime.now().strftime('%Y%m%d%H%M') -+ abs_path = os.path.abspath('sysmig_agent/txts/') -+ -+ if not os.path.exists(migrate_behind_report_path): -+ os.makedirs(migrate_behind_report_path) -+ -+ #migration before -+ if flag=='0': -+ migrate_name_01 = migrate_report_before_sample_name.replace('HOSTIP', hostip) -+ migrate_name_02 = migrate_name_01.replace('HOSTNAME', hostname) -+ migrate_name = migrate_before_report_path + migrate_name_02.replace('YYYYMMDDHHMM-BEFORE', hosttime) -+ migrate_path_name_sample = abs_path + '/' + migrate_report_before_sample_name -+ -+ #migration behind -+ elif flag=='1': -+ migrate_name_01 = migrate_report_behind_sample_name.replace('HOSTIP', hostip) -+ migrate_name_02 = migrate_name_01.replace('HOSTNAME', hostname) -+ migrate_name = migrate_behind_report_path + migrate_name_02.replace('YYYYMMDDHHMM-BEHIND', hosttime) -+ migrate_path_name_sample = abs_path + '/' + migrate_report_behind_sample_name -+ -+ #Rename the real report name -+ return mycopyfile(migrate_path_name_sample, migrate_name, logg) --- -2.20.1 - diff --git a/0079-get-agent-storage-information.patch b/0079-get-agent-storage-information.patch deleted file mode 100644 index 27ab59b4740c57de813b3d71e1a5edd4cd13cd39..0000000000000000000000000000000000000000 --- a/0079-get-agent-storage-information.patch +++ /dev/null @@ -1,62 +0,0 @@ -From 353746455579de2e782f180b70d66a666c3572e0 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 14:31:05 +0800 -Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96agent=E5=AD=98=E5=82=A8?= - =?UTF-8?q?=E7=A9=BA=E9=97=B4?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 1 + - views/server.py | 23 ++++++++++++++++++++++- - 2 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/index.py b/index.py -index 6b3b3d7..2f5c946 100644 ---- a/index.py -+++ b/index.py -@@ -35,6 +35,7 @@ mods = { - 'check_environment':migration.check_environment, - 'get_environment_data': server.get_environment_data, - 'get_repo_arch_info': server.get_repo_arch_info, -+ 'get_storage_num': server.get_storage_num, - } - - -diff --git a/views/server.py b/views/server.py -index 0a8eeed..369a750 100644 ---- a/views/server.py -+++ b/views/server.py -@@ -322,4 +322,25 @@ def get_repo_arch_info(data): - res = {} - res['info'] = info_list - json_res = json.dumps(res) -- return json_res -\ No newline at end of file -+ return json_res -+ -+ -+def get_storage_num(data): -+ """ -+ 获取可用空间足够和不足数量 -+ :param data: -+ :return: -+ """ -+ success_num_sql = "select agent_ip from agent_info where agent_online_status='0' and agent_storage>='10' " \ -+ "and agent_migration_os is null;" -+ get_success_num = DBHelper().execute(success_num_sql).fetchall() -+ -+ faild_num_sql = "select agent_ip from agent_info where agent_online_status='0' and agent_storage<'10' " \ -+ "and agent_migration_os is null;" -+ get_faild_num = DBHelper().execute(faild_num_sql).fetchall() -+ -+ success = len(get_success_num) -+ faild = len(get_faild_num) -+ data = {'success': success, 'faild': faild} -+ json_data = json.dumps(data) -+ return json_data -\ No newline at end of file --- -2.20.1 - diff --git a/0080-write-the-data-of-each-row-into-report.patch b/0080-write-the-data-of-each-row-into-report.patch deleted file mode 100644 index 9f94ed9b0196cd030b921d4c6b6df2c46325d85d..0000000000000000000000000000000000000000 --- a/0080-write-the-data-of-each-row-into-report.patch +++ /dev/null @@ -1,36 +0,0 @@ -From ea5231b768fbbb8d23d1d5b45eb94d01d05bcbae Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:37:41 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=85=A5=E6=AF=8F=E4=B8=80=E8=A1=8C?= - =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E5=88=B0=E6=8A=A5=E5=91=8A=E5=86=85?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index bf32e49..7b77d95 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -676,3 +676,15 @@ def create_migrate_report_name(flag, logg): - - #Rename the real report name - return mycopyfile(migrate_path_name_sample, migrate_name, logg) -+ -+ -+def write_row_and_column(report_name_rc, value_list, index): -+ -+ row_column_rb = xlrd.open_workbook(report_name_rc, formatting_info=True) -+ r_sheet = row_column_rb.sheet_by_index(index) -+ row_column_wb = copy(row_column_rb) -+ row_column_sheet = row_column_wb.get_sheet(index) -+ -+ for data in value_list: -+ row_column_sheet.write(int(data.split('|')[0]),int(data.split('|')[1]),data.split('|')[2]) -+ row_column_wb.save(report_name_rc) --- -2.20.1 - diff --git a/0081-add-interface-to-export-migration-check-report.patch b/0081-add-interface-to-export-migration-check-report.patch deleted file mode 100644 index cd0fe7eba64f1a715c16c3820cc29c258769e53f..0000000000000000000000000000000000000000 --- a/0081-add-interface-to-export-migration-check-report.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 70b692876cec1e7615fe157fdab44293b0cbb697 Mon Sep 17 00:00:00 2001 -From: lixin -Date: Mon, 13 Nov 2023 14:39:14 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E8=BF=81=E7=A7=BB=E6=A3=80?= - =?UTF-8?q?=E6=B5=8B=E6=8A=A5=E5=91=8A=E6=8E=A5=E5=8F=A3?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - index.py | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -diff --git a/index.py b/index.py -index 2f5c946..505e91f 100644 ---- a/index.py -+++ b/index.py -@@ -192,6 +192,17 @@ def get_storage_num(): - return Response(mod, content_type='application/json') - - -+@app.route('/export_reports', methods=['GET', 'POST']) -+def export_reports(): -+ """ -+ 导出迁移检测报告 -+ :return: -+ """ -+ mod = check_methods() -+ if mod: -+ return Response(mod, content_type='application/json') -+ -+ - @app.route('/', methods=['GET', 'POST']) - def MT_index(): - """ --- -2.20.1 - diff --git a/0082-write-the-data-of-each-row-and-column-into-report.patch b/0082-write-the-data-of-each-row-and-column-into-report.patch deleted file mode 100644 index 6bb70cf4cba1b80f302d5022bf6aea547fc8f7a0..0000000000000000000000000000000000000000 --- a/0082-write-the-data-of-each-row-and-column-into-report.patch +++ /dev/null @@ -1,69 +0,0 @@ -From a609740d7ec3993c33db7179715abb9d624239ae Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:40:54 +0800 -Subject: [PATCH] =?UTF-8?q?=E5=86=99=E5=85=A5=E5=A4=9A=E8=A1=8C=E5=92=8C?= - =?UTF-8?q?=E5=A4=9A=E5=88=97=E7=9A=84=E6=95=B0=E6=8D=AE=E5=88=B0=E6=8A=A5?= - =?UTF-8?q?=E5=91=8A=E5=86=85?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 44 +++++++++++++++++++++++++++++++++ - 1 file changed, 44 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 7b77d95..4484fef 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -688,3 +688,47 @@ def write_row_and_column(report_name_rc, value_list, index): - for data in value_list: - row_column_sheet.write(int(data.split('|')[0]),int(data.split('|')[1]),data.split('|')[2]) - row_column_wb.save(report_name_rc) -+ -+ -+def write_column_by_column(report_name_cc, column_value_list, row, column, index): -+ -+ column_column_rb = xlrd.open_workbook(report_name_cc, formatting_info=True) -+ r_sheet = column_column_rb.sheet_by_index(index) -+ column_column_wb = copy(column_column_rb) -+ column_column_sheet = column_column_wb.get_sheet(index) -+ -+ row_cc = row -+ for column_data in column_value_list: -+ column_column_sheet.write(row_cc, column, column_data.replace('\n','').split(',')[0]) -+ row_cc = row_cc + 1 -+ -+ column_column_wb.save(report_name_cc) -+ -+def write_row_by_row(report_name_rr, row_value_list, row, column, index): -+ -+ row_row_rb = xlrd.open_workbook(report_name_rr, formatting_info=True) -+ r_sheet = row_row_rb.sheet_by_index(index) -+ row_row_wb = copy(row_row_rb) -+ row_row_sheet = row_row_wb.get_sheet(index) -+ -+ before_summary_info = r_sheet.row_values(0)[0].replace('INCOMP_NUM', str(incomp_pkg_num())) -+ row_row_sheet.write(0, 0, before_summary_info) -+ -+ row_rr = row -+ column_rr = column -+ for row_data in row_value_list: -+ row_list = row_data.replace('\n','').split(',') -+ i = column -+ column_rr = column -+ while i < (len(row_list) - 1): -+ if i==2 or i==3: -+ i = i + 1 -+ continue -+ elif i==5: -+ row_row_sheet.write(row_rr, column_rr, row_list[i]+','+row_list[i+1]) -+ else: -+ row_row_sheet.write(row_rr, column_rr, row_list[i]) -+ i = i + 1 -+ column_rr = column_rr + 1 -+ row_rr = row_rr + 1 -+ row_row_wb.save(report_name_rr) --- -2.20.1 - diff --git a/0083-add-basic-summary-information-to-the-report.patch b/0083-add-basic-summary-information-to-the-report.patch deleted file mode 100644 index f908bc64d34bce93acf788890d0cc4ff56e2e009..0000000000000000000000000000000000000000 --- a/0083-add-basic-summary-information-to-the-report.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 5afe6e02fd325701cf308e0e4ad3297ac509adb3 Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:46:44 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=80=BB=E7=BB=93=E7=9A=84?= - =?UTF-8?q?=E5=9F=BA=E7=A1=80=E4=BF=A1=E6=81=AF=E5=88=B0=E6=8A=A5=E5=91=8A?= - =?UTF-8?q?=E5=86=85?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 40 +++++++++++++++++++++++++++++++++ - 1 file changed, 40 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 4484fef..50bd201 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -732,3 +732,43 @@ def write_row_by_row(report_name_rr, row_value_list, row, column, index): - column_rr = column_rr + 1 - row_rr = row_rr + 1 - row_row_wb.save(report_name_rr) -+ -+ -+def write_summary_data(report_name_summary, index, flag): -+ summary_rb = xlrd.open_workbook(report_name_summary, formatting_info=True) -+ r_sheet = summary_rb.sheet_by_index(index) -+ summary_wb = copy(summary_rb) -+ summary_sheet = summary_wb.get_sheet(index) -+ -+ if flag == '0': -+ with open(abi_comp_chk, 'r') as fs: -+ comp_num = len(fs.readlines()) -+ before_summary_num = comp_num + incomp_pkg_num() -+ -+ before_summary_info = r_sheet.row_values(0)[0].replace('REPLACE_NUM', str(before_summary_num)) -+ summary_sheet.write(0, 0, before_summary_info) -+ summary_sheet.write(2, 0, get_cur_sys_version()) -+ -+ elif flag == '1': -+ migrbef_sysver = exp_rst_dir + 'sys-version-tmp' -+ -+ with open(abi_comp_chk, 'r') as fsp: -+ comp_num = len(fsp.readlines()) -+ -+ with open(migration_system_install, 'r') as fsmp: -+ install_comp_num = str(len(fsmp.readlines())) -+ behind_summary_num = comp_num + incomp_pkg_num() -+ -+ with open(migrbef_sysver, 'r') as file_object: -+ sys_version = file_object.read() -+ -+ # 20220107 modify lihp: keep the history data -+ # os.remove(migrbef_sysver) -+ -+ behind_summary_info_tmp = r_sheet.row_values(0)[0].replace('REPLACE_NUM', str(behind_summary_num)) -+ behind_summary_info = behind_summary_info_tmp.replace('INSTALL_NUM', install_comp_num) -+ summary_sheet.write(0, 0, behind_summary_info) -+ summary_sheet.write(2, 0, sys_version) -+ summary_sheet.write(2, 2, get_cur_sys_version()) -+ -+ summary_wb.save(report_name_summary) --- -2.20.1 - diff --git a/0084-divide-detection-report-into-mutiple-sheet-pages.patch b/0084-divide-detection-report-into-mutiple-sheet-pages.patch deleted file mode 100644 index c010a2b6d3555230f5ed8c7a707e380a26b86edd..0000000000000000000000000000000000000000 --- a/0084-divide-detection-report-into-mutiple-sheet-pages.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 7decf366a655e8c7c93d165ce007cc37231a3fcc Mon Sep 17 00:00:00 2001 -From: xuezhixin -Date: Mon, 13 Nov 2023 14:49:44 +0800 -Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=B5=8B=E6=8A=A5=E5=91=8A=E7=9A=84?= - =?UTF-8?q?=E5=88=86=E4=B8=BA=E5=A4=9A=E4=B8=AAsheet=E9=A1=B5?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - ---- - sysmig_agent/Abisystmcompchk.py | 46 +++++++++++++++++++++++++++++++++ - 1 file changed, 46 insertions(+) - -diff --git a/sysmig_agent/Abisystmcompchk.py b/sysmig_agent/Abisystmcompchk.py -index 50bd201..0b5c519 100644 ---- a/sysmig_agent/Abisystmcompchk.py -+++ b/sysmig_agent/Abisystmcompchk.py -@@ -772,3 +772,49 @@ def write_summary_data(report_name_summary, index, flag): - summary_sheet.write(2, 2, get_cur_sys_version()) - - summary_wb.save(report_name_summary) -+ -+ -+# Deal report of sheet by num value -+def switch_write_migrate_report(report_name, num, flag): -+ # sheet[0]-system info: write data:row|column|value -+ if num == 0: -+ if flag == '0': -+ migration_value_list = get_cur_sys_info_list() -+ elif flag == '1': -+ migration_value_list = get_migration_sys_info() -+ write_row_and_column(report_name, migration_value_list, num) -+ # sheet[1]-rpm package -+ elif num == 1: -+ with open(current_system_unique, 'r') as fr_cur: -+ column_cur_list = fr_cur.readlines() -+ write_column_by_column(report_name, column_cur_list, 3, 0, num) -+ -+ if flag == '0': -+ # sheet[1]:2-column -+ with open(migration_system_total, 'r') as fr_migr: -+ column_migr_list = fr_migr.readlines() -+ write_column_by_column(report_name, column_migr_list, 3, 1, num) -+ elif flag == '1': -+ # sheet[1]:2-column -+ with open(migration_system_install, 'r') as fr_migr: -+ column_migr_list = fr_migr.readlines() -+ write_column_by_column(report_name, column_migr_list, 3, 1, num) -+ -+ # sheet[1]:3-row -+ with open(migration_system_total, 'r') as fr_migr: -+ column_migr_list = fr_migr.readlines() -+ write_column_by_column(report_name, column_migr_list, 3, 2, num) -+ -+ # summary data write to sheet[1] -+ write_summary_data(report_name, num, flag) -+ -+ # sheet[2]-ABI compartion -+ elif num == 2: -+ with open(abi_comp_chk, 'r') as fr_comp: -+ column_comp_list = fr_comp.readlines() -+ write_column_by_column(report_name, column_comp_list, 1, 0, num) -+ # sheet[3]-ABI Incompartion -+ elif num == 3: -+ with open(abi_incomp_chk, 'r') as fr_incomp: -+ column_incomp_list = fr_incomp.readlines() -+ write_row_by_row(report_name, column_incomp_list, 2, 0, num) --- -2.20.1 - diff --git a/migration-tools-1.0.3.tar.gz b/migration-tools-1.0.3.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0329ae881b0edd4e89c5064a0a554ab2ce1d343e Binary files /dev/null and b/migration-tools-1.0.3.tar.gz differ diff --git a/migration-tools.spec b/migration-tools.spec index 2b56451eaaf83bbf8aa086ee98e2ba83cada6405..89e8246bb9ea0272be6e8e44c8d30fe08ee32dda 100644 --- a/migration-tools.spec +++ b/migration-tools.spec @@ -1,96 +1,12 @@ Name: migration-tools -Version: 1.0.2 -Release: 84 +Version: 1.0.3 +Release: 0 License: MulanPSL-2.0 Summary: A tool to help users migrate the Centos system to the UOS system and openEuler system Source0: %{name}-%{version}.tar.gz Source1: requires.tar.gz Source2: xlwt-1.3.0-py2.py3-none-any.whl # patches -Patch0: 0001-format-code.patch -Patch1: 0002-modify-excel-report-content.patch -Patch2: 0003-delete-redundant-code.patch -Patch3: 0004-connect-sql-function.patch -Patch4: 0005-execution-sql-function.patch -Patch5: 0006-add-loger-interface-function.patch -Patch6: 0007-add-function-to-import-machine.patch -Patch7: 0008-add-agent_info-table-in-database.patch -Patch8: 0009-add-task_stream-table-in-database.patch -Patch10: 0010-create-task-stream-interface.patch -Patch11: 0011-replace-agent-with-func-diractory.patch -Patch12: 0012-add-agent_task-in-database.patch -Patch13: 0013-display-agent-host-information.patch -Patch14: 0014-modify-task-stream-interface.patch -Patch15: 0015-delete-host-information-interface.patch -Patch16: 0016-get-local-ip-on-the-agent.patch -Patch17: 0017-add-process-data-in-database.patch -Patch18: 0018-detection-of-imported-host-information-interface.patch -Patch19: 0019-update-abi-result-to-database.patch -Patch20: 0020-get-task-process-and-migration-stage-information.patch -Patch21: 0021-get-agent-ip-interface.patch -Patch22: 0022-udpate-agent-host-status-online.patch -Patch23: 0023-update-the-status-of-the-migration-phase.patch -Patch24: 0024-add-url-processing-function.patch -Patch25: 0025-update-migration-status-to-database.patch -Patch26: 0026-create-repository-and-disable-local-repofile.patch -Patch27: 0027-fix-grub-file-for-system-option.patch -Patch28: 0028-send-agent-task.patch -Patch29: 0029-json-and-list-format-interchange.patch -Patch30: 0030-system-information-import-info-the-database-after-migration.patch -Patch31: 0031-migration-check-and-extract-macros.patch -Patch32: 0032-add-migration.py-to-migration-function.patch -Patch33: 0033-check-system-kernrel.patch -Patch34: 0034-add-centos7-and-centos8-migration-interface.patch -Patch35: 0035-the-migration-process-can-choose-not-to-migrate-the-kernel.patch -Patch36: 0036-add-an-interface-to-obtain-kernel-information.patch -Patch37: 0037-add-subprocess-function-and-loggin.patch -Patch38: 0038-obtain-kernel-data.patch -Patch39: 0039-repository-file-choose-kernel-version-to-migration.patch -Patch40: 0040-intial-logfile-and-tmpfile.patch -Patch41: 0041-get-migration-status-from-database.patch -Patch42: 0042-get-initial-os-version-from-agent_info-interface.patch -Patch43: 0043-process-os-version-and-os-name.patch -Patch44: 0044-migrate-in-myutiple-steps.patch -Patch45: 0045-modify-repository-file.patch -Patch46: 0046-agent-sends-task-update-requrst-to-the-server.patch -Patch47: 0047-check-kernel-version-in-repository.patch -Patch48: 0048-server-send-kernel-detection-task.patch -Patch49: 0049-add-interface-to-check-repository-result.patch -Patch50: 0050-check-free-space-in-system-disk.patch -Patch51: 0051-add-basic-system-detection-information-and-upload-the-database.patch -Patch52: 0052-increase-the-weight-of-abi-detection-result.patch -Patch53: 0053-get-repository-detection-result.patch -Patch54: 0054-removed-detection-abi-script.patch -Patch55: 0055-add-envirnment-detection-interface-before-migration.patch -Patch56: 0056-modify-detection-envirnment-interface.patch -Patch57: 0057-abi-basic-data-for-report.patch -Patch58: 0058-get-detection-envirnment-process-interface.patch -Patch59: 0059-add-kernel-detection-result-to-abi-report.patch -Patch60: 0060-add-four-detection-item-to-abi-report.patch -Patch61: 0061-detection-abi-log.patch -Patch62: 0062-add-detection-ELF-content-in-abi-file.patch -Patch63: 0063-add-compare-with-package-result-in-abi-report.patch -Patch64: 0064-get-system-package-information-in-rpm-database.patch -Patch65: 0065-get-checking-envirnmnet-process.patch -Patch66: 0066-check-if-file-is-binary.patch -Patch67: 0067-add-an-abi-comparation-function.patch -Patch68: 0068-get-file-list-and-provide-file-path-to-compare.patch -Patch69: 0069-get-package-list-downloaded-locally-from-the-software-repository.patch -Patch70: 0070-interface-for-obtaining-repo-interface.patch -Patch71: 0071-get-package-list-from-repository.patch -Patch72: 0072-count-the-total-number-of-abi-compatible-lists.patch -Patch73: 0073-get-os-version-and-os-id.patch -Patch74: 0074-detection-basic-system-information.patch -Patch75: 0075-detection-basic-information-and-format-abi-compatibility-information-to-report.patch -Patch76: 0076-detection-storage-interface.patch -Patch77: 0077-copy-from-unzip-rpm-diractory-and-system-file-to-compatility-diractory.patch -Patch78: 0078-fill-in-the-data-in-the-checked-templace.patch -Patch79: 0079-get-agent-storage-information.patch -Patch80: 0080-write-the-data-of-each-row-into-report.patch -Patch81: 0081-add-interface-to-export-migration-check-report.patch -Patch82: 0082-write-the-data-of-each-row-and-column-into-report.patch -Patch83: 0083-add-basic-summary-information-to-the-report.patch -Patch84: 0084-divide-detection-report-into-mutiple-sheet-pages.patch BuildArch: noarch BuildRequires: systemd @@ -189,6 +105,9 @@ rm -rf /usr/bin/migration-tools %endif %changelog +* Mon Nov 11 2024 xuezhixin - 1.0.3-0 +- update to 1.0.3 + * Tue Nov 5 2024 xuezhixin - 1.0.2-84 - 0084-divide-detection-report-into-mutiple-sheet-pages.patch