273 lines
9.9 KiB
Diff
273 lines
9.9 KiB
Diff
From 0e6f8d8f1bb7dba15a206b7a02c9dc70ad9b1aba Mon Sep 17 00:00:00 2001
|
||
From: xuezhixin <xuezhixin@uniontech.com>
|
||
Date: Mon, 13 Nov 2023 16:39:51 +0800
|
||
Subject: [PATCH] =?UTF-8?q?agent=E6=A3=80=E6=B5=8Brepo=E4=BB=BB=E5=8A=A1?=
|
||
MIME-Version: 1.0
|
||
Content-Type: text/plain; charset=UTF-8
|
||
Content-Transfer-Encoding: 8bit
|
||
|
||
---
|
||
sysmig_agent/check.py | 93 ------------------------
|
||
sysmig_agent/short_task.py | 144 +++++++++++++++++++++++++++++++++++++
|
||
2 files changed, 144 insertions(+), 93 deletions(-)
|
||
|
||
diff --git a/sysmig_agent/check.py b/sysmig_agent/check.py
|
||
index 141a734..1a21c52 100644
|
||
--- a/sysmig_agent/check.py
|
||
+++ b/sysmig_agent/check.py
|
||
@@ -178,99 +178,6 @@ def check_user(data):
|
||
return re_data
|
||
|
||
|
||
-def init_remove_oldrepo():
|
||
- backup_comment = '#This is a yum repository file that was disabled . <Migration to UiniontechOS> \
|
||
- \n'
|
||
- path = '/etc/yum.repos.d/'
|
||
- repos = os.listdir(path)
|
||
- for repo in repos:
|
||
- path_file = path+'/'+repo
|
||
- if not os.path.isfile(path_file):
|
||
- continue
|
||
- if not re.search('repo$',repo):
|
||
- continue
|
||
- with open(path_file, 'r') as fsrc:
|
||
- content = fsrc.read()
|
||
- with open(path_file+'.disabled','w') as fdst:
|
||
- fdst.write(repo+'\n'+backup_comment+content)
|
||
- fdst.close()
|
||
- fsrc.close()
|
||
- os.remove(path_file)
|
||
-
|
||
-
|
||
-#初始化repo文件
|
||
-def initRepoFile(baseurl):
|
||
- os_version_ret = platform.dist()
|
||
- version = os_version_ret[1].split('.',-1)
|
||
- reposdir = '/etc/yum.repos.d/'
|
||
- h = 0
|
||
- if re.match('file:',baseurl):
|
||
- str0, path = baseurl.split('://',1)
|
||
- path = '/' + path.strip('/') + '/'
|
||
- else:
|
||
- h = 1
|
||
- if re.fullmatch('8',version[0]):
|
||
- path_appstream = baseurl+'/AppStream'
|
||
- path_baseos = baseurl+'/BaseOS'
|
||
- path_310 = baseurl+'/kernel-3.10'
|
||
- path_419 = baseurl+'/kernel419'
|
||
- path_510 = baseurl+'/kernel510'
|
||
-
|
||
- repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+path_appstream.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-BaseOS]\nname = UniontechOS BaseOS\nbaseurl = '''+path_baseos.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-4.19.0]\nname = UniontechOS Kernel-4.19.0\nbaseurl = '''+path_419.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n[UniontechOS-kernel-5.10.0]\nname = UniontechOS Kernel-5.10.0\nbaseurl = '''+path_510.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n
|
||
-'''
|
||
- else:
|
||
- path_310 = baseurl+'/kernel-3.10'
|
||
- repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+baseurl.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-3.10.0]\nname = UniontechOS Kernel-3.10.0\nbaseurl = '''+path_310.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n
|
||
- '''
|
||
- repofile = os.path.join(reposdir, 'switch-to-uos.repo')
|
||
- with open(repofile,'w') as f_repo:
|
||
- f_repo.write(repostr_uos)
|
||
- f_repo.close()
|
||
-
|
||
-
|
||
-#检测repo文件创建缓存
|
||
-def checkRepoMakeCache():
|
||
- os.system('yum clean all')
|
||
- os.system('yum makecache')
|
||
- os_version_ret = platform.dist()
|
||
- os_arch = platform.machine()
|
||
- version = os_version_ret[1].split('.',-1)
|
||
- ret = os.path.exists('/var/cache/dnf/UniontechOS-AppStream.solv')
|
||
- if ret:
|
||
- ret = os.path.exists('/var/cache/dnf/UniontechOS-BaseOS.solv')
|
||
- if ret or re.fullmatch('7',version[0]):
|
||
- return 0
|
||
- else:
|
||
- return 1
|
||
- else:
|
||
- if re.fullmatch('7',version[0]):
|
||
- ret = os.path.exists('/var/cache/yum/%s/7/UniontechOS-AppStream/repomd.xml' % os_arch)
|
||
- if ret:
|
||
- return 0
|
||
- return 1
|
||
-
|
||
-
|
||
-#检测repo
|
||
-def check_repo(data_j):
|
||
- uos_sysmig_conf = json.loads(getSysMigConf())
|
||
- AGENT_IP = json.loads(uos_sysmig_conf).get('agentip').strip()[1:-1]
|
||
- baseurl = json.loads(data_j).get('repo_pwd')
|
||
- keylist = None
|
||
- valuelist = None
|
||
- data = None
|
||
- init_remove_oldrepo()
|
||
- initRepoFile(baseurl)
|
||
- state = checkRepoMakeCache()
|
||
-
|
||
- if state == 0:
|
||
- keylist = ['ip','res','data']
|
||
- valuelist = [AGENT_IP,state,'连接成功']
|
||
- else:
|
||
- data = '下载失败,请检查您的软件源'
|
||
- keylist = ['ip','res','error']
|
||
- valuelist = [AGENT_IP,state,data]
|
||
- return list_to_json(keylist,valuelist)
|
||
-
|
||
|
||
def check_os_kernel(data):
|
||
uos_sysmig_conf = json.loads(getSysMigConf())
|
||
diff --git a/sysmig_agent/short_task.py b/sysmig_agent/short_task.py
|
||
index 11dd9ef..4e4dae3 100644
|
||
--- a/sysmig_agent/short_task.py
|
||
+++ b/sysmig_agent/short_task.py
|
||
@@ -138,3 +138,147 @@ def get_agent_os():
|
||
AGENT_OS = os_version_ret[0] + version[0]
|
||
return AGENT_OS
|
||
|
||
+
|
||
+
|
||
+def init_remove_oldrepo():
|
||
+ backup_comment = '#This is a yum repository file that was disabled . <Migration to UiniontechOS> \
|
||
+ \n'
|
||
+ path = '/etc/yum.repos.d/'
|
||
+ repos = os.listdir(path)
|
||
+ for repo in repos:
|
||
+ path_file = path+'/'+repo
|
||
+ if not os.path.isfile(path_file):
|
||
+ continue
|
||
+ if not re.search('repo$',repo):
|
||
+ continue
|
||
+ with open(path_file, 'r') as fsrc:
|
||
+ content = fsrc.read()
|
||
+ with open(path_file+'.disabled','w') as fdst:
|
||
+ fdst.write(repo+'\n'+backup_comment+content)
|
||
+ fdst.close()
|
||
+ fsrc.close()
|
||
+ os.remove(path_file)
|
||
+
|
||
+
|
||
+#初始化repo文件
|
||
+def initRepoFile(baseurl):
|
||
+ os_version_ret = platform.dist()
|
||
+ version = os_version_ret[1].split('.',-1)
|
||
+ reposdir = '/etc/yum.repos.d/'
|
||
+ h = 0
|
||
+ if re.match('file:',baseurl):
|
||
+ str0, path = baseurl.split('://',1)
|
||
+ path = '/' + path.strip('/') + '/'
|
||
+ else:
|
||
+ h = 1
|
||
+ if re.fullmatch('8',version[0]):
|
||
+ path_appstream = baseurl+'/AppStream'
|
||
+ path_baseos = baseurl+'/BaseOS'
|
||
+ path_310 = baseurl+'/kernel-3.10'
|
||
+ path_419 = baseurl+'/kernel419'
|
||
+ path_510 = baseurl+'/kernel510'
|
||
+
|
||
+ repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+path_appstream.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-BaseOS]\nname = UniontechOS BaseOS\nbaseurl = '''+path_baseos.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-4.19.0]\nname = UniontechOS Kernel-4.19.0\nbaseurl = '''+path_419.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n[UniontechOS-kernel-5.10.0]\nname = UniontechOS Kernel-5.10.0\nbaseurl = '''+path_510.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n\n
|
||
+'''
|
||
+ else:
|
||
+ path_310 = baseurl+'/kernel-3.10'
|
||
+ repostr_uos = '''[UniontechOS-AppStream]\nname = UniontechOS AppStream\nbaseurl = '''+baseurl.strip('\n')+'''\nenabled = 1\ngpgcheck = 0\n\n[UniontechOS-kernel-3.10.0]\nname = UniontechOS Kernel-3.10.0\nbaseurl = '''+path_310.strip('\n')+'''\nenabled = 0\ngpgcheck = 0\nskip_if_unavailable = 1\n
|
||
+ '''
|
||
+ repofile = os.path.join(reposdir, 'switch-to-uos.repo')
|
||
+ with open(repofile,'w') as f_repo:
|
||
+ f_repo.write(repostr_uos)
|
||
+ f_repo.close()
|
||
+
|
||
+
|
||
+#检测repo文件创建缓存
|
||
+def checkRepoMakeCache():
|
||
+ os.system('yum clean all')
|
||
+ os.system('yum makecache')
|
||
+ os_version_ret = platform.dist()
|
||
+ os_arch = platform.machine()
|
||
+ version = os_version_ret[1].split('.',-1)
|
||
+ ret = os.path.exists('/var/cache/dnf/UniontechOS-AppStream.solv')
|
||
+ if ret:
|
||
+ ret = os.path.exists('/var/cache/dnf/UniontechOS-BaseOS.solv')
|
||
+ if ret or re.fullmatch('7',version[0]):
|
||
+ return 0
|
||
+ else:
|
||
+ return 1
|
||
+ else:
|
||
+ if re.fullmatch('7',version[0]):
|
||
+ ret = os.path.exists('/var/cache/yum/%s/7/UniontechOS-AppStream/repomd.xml' % os_arch)
|
||
+ if ret:
|
||
+ return 0
|
||
+ return 1
|
||
+
|
||
+
|
||
+# 检测centos 8 系统上的 repo文件联通
|
||
+def checkRepoFileHttp(baseurl):
|
||
+ try:
|
||
+ with request.urlopen(baseurl) as file:
|
||
+ # print(file.status)
|
||
+ # print(file.reason)
|
||
+ if re.match('OK', file.reason):
|
||
+ return 0
|
||
+ except Exception as e:
|
||
+ if re.match('HTTP Error 404|[Errno 2]', str(e)):
|
||
+ return 1
|
||
+ elif re.match('[Errno 21]', str(e)):
|
||
+ return 0
|
||
+ else:
|
||
+ return 1
|
||
+
|
||
+
|
||
+def repoFileCheck(baseurl):
|
||
+ if re.match('file\:\/\/', baseurl):
|
||
+ path = re.sub('file://', '', baseurl)
|
||
+ if os.path.exists(path):
|
||
+ return 0
|
||
+ else:
|
||
+ return 1
|
||
+ try:
|
||
+ dst_status = urllib.request.urlopen(baseurl, timeout=5).code
|
||
+ return 0
|
||
+ except Exception as err:
|
||
+ return 1
|
||
+ pass
|
||
+
|
||
+def check_repo(data):
|
||
+ agent_os = get_agent_os()
|
||
+ if '7' in agent_os:
|
||
+ agent_os = 'centos7'
|
||
+ elif '8' in agent_os:
|
||
+ agent_os = 'centos8'
|
||
+ os_type = agent_os + '_' + platform.machine().strip('')
|
||
+ baseurl = json.loads(data).get(os_type)
|
||
+ if not baseurl:
|
||
+ baseurl = '1'
|
||
+ task_id = json.loads(data).get('task_id')
|
||
+ # 更新SQL任务状态
|
||
+ statue = 1
|
||
+ sql_task_statue(statue, task_id)
|
||
+ # 发送消息给Server更新任务流状态
|
||
+ post_server('task_start', task_id)
|
||
+ # 初始化去除旧的repo文件
|
||
+ init_remove_oldrepo()
|
||
+ # 传递baseurl,配置repo文件
|
||
+ initRepoFile(baseurl)
|
||
+ # 建立软件源缓存,判断软件源是否可用
|
||
+ state = checkRepoMakeCache()
|
||
+ sql = ''
|
||
+ repo_state = -1
|
||
+ if state == 0:
|
||
+ repo_state = repoFileCheck(baseurl)
|
||
+ else:
|
||
+ repo_state = 1
|
||
+
|
||
+ sql = "UPDATE agent_info SET repo_status = {} WHERE agent_ip = '{}';".format(repo_state, get_local_ip())
|
||
+ try:
|
||
+ ret = DBHelper().execute(sql)
|
||
+ statue = 2
|
||
+ except:
|
||
+ statue = 2
|
||
+ sql_task_statue(statue, task_id)
|
||
+ sql_task_statue(statue, task_id)
|
||
+ post_server('task_close', task_id)
|
||
+ return 'success'
|
||
--
|
||
2.20.1
|
||
|