From f330866e40ecbc6f0b4d5d5ced12854958db40f1 Mon Sep 17 00:00:00 2001 From: wangzhe Date: Fri, 24 Mar 2023 20:49:38 +0800 Subject: [PATCH] Add rollback function, we can try to migrate again after rollback --- centos2anolis.py | 48 +++++++++++++++++++++++++++++++++++++++++++++- centos2anolis.spec | 5 ++++- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/centos2anolis.py b/centos2anolis.py index dbc304d..fabe390 100644 --- a/centos2anolis.py +++ b/centos2anolis.py @@ -141,6 +141,46 @@ repo_status = {} global_errCode=0 global_errMsg="" +def rollback_pre(): + log_it(logging.INFO, "try to backup centos release info") + try: + centos_release_pkg = str(subprocess.check_output("rpm -qf /etc/centos-release", shell=True), 'utf-8').split("release")[0] + "release" + print(centos_release_pkg) + if centosversion == 7: + subprocess.run("repotrack --download_path=/root/centos_bak " + centos_release_pkg, shell=True) + if centosversion == 8: + subprocess.run("repotrack --destdir=/root/centos_bak " + centos_release_pkg, shell=True) + + subprocess.run("cp -a /etc/yum.repos.d/*.repo /root/centos_bak", shell=True) + except: + log_it(logging.INFO, "backup centos release error") + +def rollback_post(): + log_it(logging.INFO, "try to go back to centos release") + try: + subprocess.run("rpm -i --force --nodeps /root/centos_bak/*.rpm", shell=True) + subprocess.run("rm -rf /etc/yum.repos.d/*.repo*", shell=True) + subprocess.run("cp -a /root/centos_bak/*.repo /etc/yum.repos.d/", shell=True) + except: + log_it(logging.INFO, "go back to centos release error") + +def rollback_clean(): + log_it(logging.INFO, "try to remove rollback backup") + if os.path.exists("/root/centos_bak"): + subprocess.run("rm -rf /root/centos_bak ", shell=True) + + release_pkg1 = subprocess.run("rpm -qa | grep anolis-release-aliyuncs", shell=True) + if not release_pkg1.returncode: + subprocess.run("rpm -e --nodeps anolis-release-aliyuncs", shell=True) + release_pkg2 = subprocess.run("rpm -qa | grep anolis-release", shell=True) + if not release_pkg2.returncode: + subprocess.run("rpm -e --nodeps anolis-release", shell=True) + + try: + subprocess.run("rpm -i --force --nodeps anolis-release*.rpm", shell=True) + except: + log_it(logging.INFO, "rollback_clean: anolis-release error") + class SystemChecker(object): def partition_size_from_directory(self, directory): statvfs = os.statvfs(directory) @@ -838,7 +878,7 @@ def process_third_repos(): subprocess.run("sed -i \'s/\$contentdir/centos/g\' /etc/yum.repos.d/*.repo", shell=True) log_it(logging.INFO, "Backing up and removing 3rd-part repository files...") - subprocess.run("mkdir /etc/yum.repos.d/migration-bak", shell=True) + subprocess.run("mkdir -p /etc/yum.repos.d/migration-bak", shell=True) if repository_excludes: cmd = "mv $(find /etc/yum.repos.d/*.repo \( " @@ -1329,6 +1369,7 @@ def main(verify_all_rpms=False, accelerate=False, version=False, continue_after_ check_yumdownloader() check_mysql(version) check_repodir() + rollback_pre() backup_repofiles() if not local_repo: process_third_repos() @@ -1354,6 +1395,7 @@ def main(verify_all_rpms=False, accelerate=False, version=False, continue_after_ verify_after(verify_all_rpms) update_grub_cfg() reset_yum_cache() + rollback_clean() summaries(os.path.dirname(os.path.abspath(log_dir))) except Exception as e: @@ -1373,6 +1415,7 @@ if __name__ == "__main__": parser.add_argument('-l', action='store_true', help='Select the local repo file') parser.add_argument('--tool_version', action='store_true', help='Check the version of centos2anolis.py') parser.add_argument('--rhck', action='store_true', help='Upgrade kernel to RHCK') + parser.add_argument('--rollback',action='store_true', help='rollback to centos version') subparsers = parser.add_subparsers() cmd_check = subparsers.add_parser('check', help='Call the built-in check function') cmd_check.set_defaults(func=check_env) @@ -1380,6 +1423,9 @@ if __name__ == "__main__": args = parser.parse_args() if hasattr(args, 'func'): sys.exit(args.func(args)) + elif args.rollback: + print("rollback_post") + sys.exit(rollback_post()) else: sys.exit(main(args.V, args.s, args.v, args.c, args.log_dir, args.progress_file, args.l, args.tool_version, args.rhck)) diff --git a/centos2anolis.spec b/centos2anolis.spec index 2ffda08..4775ea0 100644 --- a/centos2anolis.spec +++ b/centos2anolis.spec @@ -1,4 +1,4 @@ -%define anolis_release 20 +%define anolis_release 21 Name: centos2anolis Version: 0.2 @@ -45,6 +45,9 @@ install -m 755 %{SOURCE0} %{buildroot}/%{_sbindir} %changelog +* Fri Mar 24 2023 wangzhe - 0.2-21 +- Add rollback function, we can try to migrate again after rollback + * Thu Mar 22 2023 Weitao Zhou - 0.2-20 - append dist info to Release -- Gitee