From 7aec4074d41636d2096faedf8c2b153df81b8130 Mon Sep 17 00:00:00 2001 From: Liwei Ge Date: Thu, 1 Sep 2022 15:41:28 +0800 Subject: [PATCH 01/18] upgrade: write efi vars for ecs firmware Signed-off-by: Liwei Ge --- ...rade-write-efi-vars-for-ecs-firmware.patch | 70 +++++++++++++++++++ leapp-repository.spec | 6 +- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 0027-upgrade-write-efi-vars-for-ecs-firmware.patch diff --git a/0027-upgrade-write-efi-vars-for-ecs-firmware.patch b/0027-upgrade-write-efi-vars-for-ecs-firmware.patch new file mode 100644 index 0000000..1e27eb6 --- /dev/null +++ b/0027-upgrade-write-efi-vars-for-ecs-firmware.patch @@ -0,0 +1,70 @@ +From ce93e314a66020399c22d6aa574be2b92281b9f3 Mon Sep 17 00:00:00 2001 +From: Liwei Ge +Date: Thu, 1 Sep 2022 15:28:14 +0800 +Subject: [PATCH] upgrade: write efi vars for ecs firmware + +also rebrand grub title for upgrade boot +--- + .../libraries/addupgradebootentry.py | 2 +- + .../tests/unit_test_addupgradebootentry.py | 2 +- + .../dracut/85sys-upgrade-redhat/do-upgrade.sh | 18 ++++++++++++++++++ + 3 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/addupgradebootentry/libraries/addupgradebootentry.py b/repos/system_upgrade/el7toel8/actors/addupgradebootentry/libraries/addupgradebootentry.py +index c15dd52..4270bd8 100644 +--- a/repos/system_upgrade/el7toel8/actors/addupgradebootentry/libraries/addupgradebootentry.py ++++ b/repos/system_upgrade/el7toel8/actors/addupgradebootentry/libraries/addupgradebootentry.py +@@ -17,7 +17,7 @@ def add_boot_entry(configs=None): + '/usr/sbin/grubby', + '--add-kernel', '{0}'.format(kernel_dst_path), + '--initrd', '{0}'.format(initram_dst_path), +- '--title', 'RHEL-Upgrade-Initramfs', ++ '--title', 'Anolis-Upgrade-Initramfs', + '--copy-default', + '--make-default', + '--args', '{DEBUG} enforcing=0 rd.plymouth=0 plymouth.enable=0'.format(DEBUG=debug) +diff --git a/repos/system_upgrade/el7toel8/actors/addupgradebootentry/tests/unit_test_addupgradebootentry.py b/repos/system_upgrade/el7toel8/actors/addupgradebootentry/tests/unit_test_addupgradebootentry.py +index bb89c9f..ccc53ae 100644 +--- a/repos/system_upgrade/el7toel8/actors/addupgradebootentry/tests/unit_test_addupgradebootentry.py ++++ b/repos/system_upgrade/el7toel8/actors/addupgradebootentry/tests/unit_test_addupgradebootentry.py +@@ -42,7 +42,7 @@ run_args_add = [ + '/usr/sbin/grubby', + '--add-kernel', '/abc', + '--initrd', '/def', +- '--title', 'RHEL-Upgrade-Initramfs', ++ '--title', 'Anolis-Upgrade-Initramfs', + '--copy-default', + '--make-default', + '--args', +diff --git a/repos/system_upgrade/el7toel8/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh b/repos/system_upgrade/el7toel8/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh +index 8729a5d..0b87498 100755 +--- a/repos/system_upgrade/el7toel8/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh ++++ b/repos/system_upgrade/el7toel8/actors/commonleappdracutmodules/files/dracut/85sys-upgrade-redhat/do-upgrade.sh +@@ -70,6 +70,24 @@ do_upgrade() { + ## install new product id certificates + #chroot $NEWROOT /bin/sh -c 'mv -f /system-upgrade/*.pem /etc/pki/product/' + ++ if [ -d "/sys/firmware/efi/efivars/" ]; then ++ cp $NEWROOT/lib64/libefi* /lib64/ ++ cp $NEWROOT/lib64/libfdisk* /lib64/ ++ if ! $NEWROOT/usr/sbin/efibootmgr | grep -i "Anolis OS"; then ++ efi_device=$($NEWROOT/usr/sbin/fdisk -l -o Device,Type | grep EFI\ System | sed 's/ .*//') ++ if [ "${efi_device}" ]; then ++ efi_part=${efi_device:8} ++ efi_device=${efi_device::8} ++ if [ "$(uname -m)" == "aarch64" ]; then ++ efi_arch="aa64" ++ elif [ "$(uname -m)" == "x86_64" ]; then ++ efi_arch="x64" ++ fi ++ $NEWROOT/usr/sbin/efibootmgr -c -d ${efi_device} -p ${efi_part} -l "/EFI/anolis/shim${efi_arch}.efi" -L "Anolis OS" ++ fi ++ fi ++ fi ++ + # restore things twiddled by workarounds above. TODO: remove! + if [ -f /sys/fs/selinux/enforce ]; then + echo $enforce > /sys/fs/selinux/enforce +-- +2.27.0 + diff --git a/leapp-repository.spec b/leapp-repository.spec index 45428dd..f2f2fe1 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 2 +%define anolis_release 3 Name: leapp-repository Version: 0.13.0 @@ -52,6 +52,7 @@ Patch23: 0023-fix-kernel-version-check-of-anolis-kernel.patch Patch24: 0024-remove-unofficial-url.patch Patch25: 0025-add-check-openssl11-libs.patch Patch26: 0026-Add-checkbaota-actor.patch +Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch BuildArch: noarch BuildRequires: python-devel @@ -174,6 +175,9 @@ done; # no files here %changelog +* Thu Sep 1 2022 Liwei Ge - 0.13.0-2.3 +- Write efi vars for ecs firmware + * Tue Jun 14 2022 Weitao Zhou - 0.13.0-2.2 - Add checkbaota actor -- Gitee From 52663e3202ed27c0bd65ce3c07705ba350ec6af9 Mon Sep 17 00:00:00 2001 From: ZhouWeitao Date: Tue, 6 Sep 2022 14:27:54 +0800 Subject: [PATCH 02/18] change yum repo baseurl to https://mirrors.openanolis.cn Signed-off-by: ZhouWeitao --- leapp_upgrade_repositories.repo | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index 818fcc9..83e1622 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -1,19 +1,19 @@ [anolis_baseos] name=anolis baseos -baseurl=http://mirrors.openanolis.org/anolis/8/BaseOS/$basearch/os +baseurl=https://mirrors.openanolis.cn/anolis/8/BaseOS/$basearch/os gpgcheck=0 [anolis_appstream] name=anolis appstream -baseurl=http://mirrors.openanolis.org/anolis/8/AppStream/$basearch/os +baseurl=https://mirrors.openanolis.cn/anolis/8/AppStream/$basearch/os gpgcheck=0 [anolis_powertools] name=anolis powertools -baseurl=http://mirrors.openanolis.org/anolis/8/PowerTools/$basearch/os +baseurl=https://mirrors.openanolis.cn/anolis/8/PowerTools/$basearch/os gpgcheck=0 [anolis_highavailability] name=anolis highavailability -baseurl=http://mirrors.openanolis.org/anolis/8/HighAvailability/$basearch/os +baseurl=https://mirrors.openanolis.cn/anolis/8/HighAvailability/$basearch/os gpgcheck=0 -- Gitee From 583b1763e3a716e6076028adeac3baf7edd5b144 Mon Sep 17 00:00:00 2001 From: mgb01105731 Date: Tue, 6 Sep 2022 15:43:36 +0800 Subject: [PATCH 03/18] support upgrade kernel to ANCK --- 0028-support-upgrade-kernel-to-ANCK.patch | 41 +++++++++++++++++++++++ leapp-repository.spec | 6 +++- leapp_upgrade_repositories.repo | 6 ++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 0028-support-upgrade-kernel-to-ANCK.patch diff --git a/0028-support-upgrade-kernel-to-ANCK.patch b/0028-support-upgrade-kernel-to-ANCK.patch new file mode 100644 index 0000000..9b51d04 --- /dev/null +++ b/0028-support-upgrade-kernel-to-ANCK.patch @@ -0,0 +1,41 @@ +From f1c989736cd5d056a46bfde66326499b3b70b5bf Mon Sep 17 00:00:00 2001 +From: mgb01105731 +Date: Tue, 12 Jul 2022 16:19:13 +0800 +Subject: [PATCH] =?UTF-8?q?#42781502=20;=20Report=20is=20https://yuque.ant?= + =?UTF-8?q?fin.com/docs/share/1e95ae1f-7cb3-4e77-b172-e5123ab24bbb=3F#=20?= + =?UTF-8?q?=E3=80=8Acentos=E8=BF=81=E7=A7=BBanolis=EF=BC=88leapp=E5=B7=A5?= + =?UTF-8?q?=E5=85=B7=EF=BC=89=E5=A2=9E=E5=8A=A0=E6=8C=87=E5=AE=9A=E5=86=85?= + =?UTF-8?q?=E6=A0=B8=E7=89=88=E6=9C=AC=E5=8A=9F=E8=83=BD=E9=AA=8C=E8=AF=81?= + =?UTF-8?q?=EF=BC=89=E3=80=8B?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +--- + .../libraries/scancustomrepofile.py | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py b/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py +index c294193..137b07a 100644 +--- a/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py ++++ b/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py +@@ -27,9 +27,10 @@ def process(): + return + api.produce(CustomTargetRepositoryFile(file=CUSTOM_REPO_PATH)) + for repo in repofile.data: +- api.produce(CustomTargetRepository( +- repoid=repo.repoid, +- name=repo.name, +- baseurl=repo.baseurl, +- enabled=repo.enabled, +- )) ++ if repo.enabled: ++ api.produce(CustomTargetRepository( ++ repoid=repo.repoid, ++ name=repo.name, ++ baseurl=repo.baseurl, ++ enabled=repo.enabled, ++ )) +-- +2.19.1.6.gb485710b + diff --git a/leapp-repository.spec b/leapp-repository.spec index f2f2fe1..b3a8459 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 3 +%define anolis_release 4 Name: leapp-repository Version: 0.13.0 @@ -53,6 +53,7 @@ Patch24: 0024-remove-unofficial-url.patch Patch25: 0025-add-check-openssl11-libs.patch Patch26: 0026-Add-checkbaota-actor.patch Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch +Patch28: 0028-support-upgrade-kernel-to-ANCK.patch BuildArch: noarch BuildRequires: python-devel @@ -175,6 +176,9 @@ done; # no files here %changelog +* Tue Sep 6 2022 mgb01105731 - 0.13.0-2.4 +- support upgrade kernel to ANCK + * Thu Sep 1 2022 Liwei Ge - 0.13.0-2.3 - Write efi vars for ecs firmware diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index 83e1622..7f8bdfa 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -17,3 +17,9 @@ gpgcheck=0 name=anolis highavailability baseurl=https://mirrors.openanolis.cn/anolis/8/HighAvailability/$basearch/os gpgcheck=0 + +[anolis_plus] +name=anolis plus +baseurl=https://mirrors.openanolis.cn/anolis/8/Plus/$basearch/os +gpgcheck=0 +enabled=0 -- Gitee From afcc2bc973bf823a4a271629447cc8669473a9a5 Mon Sep 17 00:00:00 2001 From: Weisson Date: Tue, 6 Sep 2022 16:52:15 +0800 Subject: [PATCH 04/18] Service configuration remains after migration Signed-off-by: Weisson --- ...onfiguration-remains-after-migration.patch | 255 ++++++++++++++++++ leapp-repository.spec | 6 +- 2 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 0029-Service-configuration-remains-after-migration.patch diff --git a/0029-Service-configuration-remains-after-migration.patch b/0029-Service-configuration-remains-after-migration.patch new file mode 100644 index 0000000..8ff3ed8 --- /dev/null +++ b/0029-Service-configuration-remains-after-migration.patch @@ -0,0 +1,255 @@ +From 26581abc7eac1dae5bd07380d26703d4f1e0439a Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Thu, 1 Sep 2022 13:16:55 +0800 +Subject: [PATCH] Service configuration should remain the same after migration. + +--- + .../serviceconfigurationcollector/actor.py | 27 +++++ + .../serviceconfigurationsynchronizer/actor.py | 102 ++++++++++++++++++ + .../models/configurationsynchronization.py | 7 ++ + .../tags/configurationcollectionphase.py | 5 + + .../tags/configurationsynchronizationphase.py | 5 + + .../topics/configurationsynchronization.py | 5 + + .../el7toel8/workflows/inplace_upgrade.py | 26 +++++ + 7 files changed, 177 insertions(+) + create mode 100644 repos/system_upgrade/el7toel8/actors/serviceconfigurationcollector/actor.py + create mode 100644 repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py + create mode 100644 repos/system_upgrade/el7toel8/models/configurationsynchronization.py + create mode 100644 repos/system_upgrade/el7toel8/tags/configurationcollectionphase.py + create mode 100644 repos/system_upgrade/el7toel8/tags/configurationsynchronizationphase.py + create mode 100644 repos/system_upgrade/el7toel8/topics/configurationsynchronization.py + +diff --git a/repos/system_upgrade/el7toel8/actors/serviceconfigurationcollector/actor.py b/repos/system_upgrade/el7toel8/actors/serviceconfigurationcollector/actor.py +new file mode 100644 +index 0000000..fbee732 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/serviceconfigurationcollector/actor.py +@@ -0,0 +1,27 @@ ++import subprocess ++import json ++ ++from leapp.actors import Actor ++from leapp.tags import ConfigurationCollectionPhaseTag, IPUWorkflowTag ++from leapp.models import ConfigurationSynchronization ++ ++ ++class ServiceConfigurationCollector(Actor): ++ """ ++ No documentation has been provided for the service_configuration_collector actor. ++ """ ++ ++ name = 'service_configuration_collector' ++ consumes = () ++ produces = (ConfigurationSynchronization, ) ++ tags = (ConfigurationCollectionPhaseTag, IPUWorkflowTag, ) ++ ++ def process(self): ++ self.log.info("Starting to backup service configurations.") ++ services_config_raw = subprocess.check_output("systemctl list-unit-files | egrep 'enabled|disabled'", shell=True).decode("utf-8").strip() ++ services_config = { ++ line.strip().split()[0]: line.strip().split()[1][:-1] ++ for line in services_config_raw.split('\n') ++ } ++ self.produce(ConfigurationSynchronization(services_configuration=json.dumps(services_config))) ++ +diff --git a/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +new file mode 100644 +index 0000000..7856bea +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +@@ -0,0 +1,102 @@ ++import json ++import subprocess ++ ++from leapp.actors import Actor ++from leapp.tags import ConfigurationSynchronizationPhaseTag, IPUWorkflowTag ++from leapp.models import ConfigurationSynchronization ++ ++ ++class ServiceConfigurationSynchronizer(Actor): ++ """ ++ No documentation has been provided for the service_configuration_synchronizer actor. ++ """ ++ ++ name = 'service_configuration_synchronizer' ++ consumes = (ConfigurationSynchronization, ) ++ produces = () ++ tags = (IPUWorkflowTag, ConfigurationSynchronizationPhaseTag, ) ++ ++ def service_configuration_backup(self): ++ try: ++ self.log.info("backing up service configurations after migration.") ++ services_config_raw = str(subprocess.check_output("systemctl list-unit-files | egrep 'enabled |disabled ' | awk '{print $1,$2}'")).strip() ++ services_config = { ++ line.strip().split()[0]: line.strip().split()[1][:-1] ++ for line in services_config_raw.split('\n') ++ } ++ ++ return services_config ++ except Exception as e: ++ self.log.warning(" fail to backup service, ignore it. " + str(e)) ++ ++ return {} ++ ++ def do_config_services(self, config): ++ config_report = [] ++ for service, status in config.items(): ++ self.log.info("".join((service, " -> ", status))) ++ report = { ++ "service": service, ++ "old status": status, ++ "current status": status, ++ } ++ ++ try: ++ print("systemctl %s %s" % (status, service)) ++ output = str(subprocess.check_call("systemctl %s %s" % (status, service), shell=True)).strip() ++ report.update({ ++ "information": output, ++ "result": "succeed" ++ }) ++ ++ except Exception as e: ++ self.log.warning("fail to %s %s" % (status, service)) ++ ++ report.update({ ++ "information": str(e), ++ "result": "fail", ++ }) ++ ++ config_report += [report] ++ ++ return config_report ++ ++ def config_services(self, config, backup): ++ _config_report = self.do_config_services(config) ++ ++ config_report = [] ++ for line in _config_report: ++ if line["result"] == "fail": ++ line["current status"] = backup.get(line["service"] , "does not exist") ++ ++ config_report += [line] ++ ++ return config_report ++ ++ def service_configuration_restore(self, backup_configuration): ++ try: ++ self.log.info("Starting to roll back services configurations.") ++ self.do_config_services(backup_configuration) ++ ++ except Exception as e: ++ self.log.warning("fail to roll back services configurations: " + str(e)) ++ self.log.warning("default service configuration : " + str(backup_configuration)) ++ with open("/var/log/leapp/service-default.log", "w") as f: ++ json.dump(str(backup_configuration), f, indent=4) ++ ++ def process(self): ++ backup_configuratuon = self.service_configuration_backup() ++ ++ try: ++ self.log.info("Starting to synchronize services configurations.") ++ for configuration in self.consume(ConfigurationSynchronization): ++ services_configuration = json.loads(configuration.services_configuration) ++ config_report = self.config_services(services_configuration, backup_configuratuon) ++ ++ with open("/var/log/leapp/service-configuration-report.json", "w") as f: ++ json.dump(config_report, f, indent=4) ++ print("Service configuration output: /var/log/leapp/service-configuration-report.json") ++ ++ except Exception as e: ++ self.log.warning("fail to synchronize services configurations, rolling back. " + str(e)) ++ +diff --git a/repos/system_upgrade/el7toel8/models/configurationsynchronization.py b/repos/system_upgrade/el7toel8/models/configurationsynchronization.py +new file mode 100644 +index 0000000..349ac3d +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/models/configurationsynchronization.py +@@ -0,0 +1,7 @@ ++from leapp.models import Model, fields ++from leapp.topics import ConfigurationSynchronizationTopic ++ ++class ConfigurationSynchronization(Model): ++ topic = ConfigurationSynchronizationTopic ++ services_configuration = fields.Nullable(fields.String()) ++ +diff --git a/repos/system_upgrade/el7toel8/tags/configurationcollectionphase.py b/repos/system_upgrade/el7toel8/tags/configurationcollectionphase.py +new file mode 100644 +index 0000000..a24ec82 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/tags/configurationcollectionphase.py +@@ -0,0 +1,5 @@ ++from leapp.tags import Tag ++ ++ ++class ConfigurationCollectionPhaseTag(Tag): ++ name = 'configuration_collection_phase' +diff --git a/repos/system_upgrade/el7toel8/tags/configurationsynchronizationphase.py b/repos/system_upgrade/el7toel8/tags/configurationsynchronizationphase.py +new file mode 100644 +index 0000000..81610a8 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/tags/configurationsynchronizationphase.py +@@ -0,0 +1,5 @@ ++from leapp.tags import Tag ++ ++ ++class ConfigurationSynchronizationPhaseTag(Tag): ++ name = 'configuration_synchronization_phase' +diff --git a/repos/system_upgrade/el7toel8/topics/configurationsynchronization.py b/repos/system_upgrade/el7toel8/topics/configurationsynchronization.py +new file mode 100644 +index 0000000..8d01b38 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/topics/configurationsynchronization.py +@@ -0,0 +1,5 @@ ++from leapp.topics import Topic ++ ++ ++class ConfigurationSynchronizationTopic(Topic): ++ name = 'configuration_synchronization' +diff --git a/repos/system_upgrade/el7toel8/workflows/inplace_upgrade.py b/repos/system_upgrade/el7toel8/workflows/inplace_upgrade.py +index 8e48d8c..c0dd27e 100644 +--- a/repos/system_upgrade/el7toel8/workflows/inplace_upgrade.py ++++ b/repos/system_upgrade/el7toel8/workflows/inplace_upgrade.py +@@ -16,6 +16,19 @@ class IPUWorkflow(Workflow): + configuration = IPUConfig + description = """The IPU workflow takes care of an in-place upgrade (IPU) of RHEL 7 to Anolis 8.""" + ++ class ConfigurationCollectionPhase(Phase): ++ """ ++ This phase and ConfigurationSynchronizationPhase must appear in pairs to ensure the configuration ++ before and after migration remains as similar as possible. ++ ++ This part is configuration collection phase. ++ """ ++ name = "ConfigurationCollection" ++ filter = TagFilter(tags.ConfigurationCollectionPhaseTag) ++ policies = Policies(Policies.Errors.FailPhase, ++ Policies.Retry.Phase) ++ flags = Flags() ++ + class FactsCollectionPhase(Phase): + """ + Get information (facts) about the system (e.g. installed packages, configuration, ...). +@@ -210,6 +223,19 @@ class IPUWorkflow(Workflow): + Policies.Retry.Phase) + flags = Flags(restart_after_phase=True) + ++ class ConfigurationSynchronizationPhase(Phase): ++ """ ++ This phase and ConfigurationCollectionPhase must appear in pairs to ensure the configuration ++ before and after migration remains as similar as possible. ++ ++ This part is configuration Synchronization phase. ++ """ ++ name = "ConfigurationSynchronization" ++ filter = TagFilter(tags.ConfigurationSynchronizationPhaseTag) ++ policies = Policies(Policies.Errors.FailPhase, ++ Policies.Retry.Phase) ++ flags = Flags() ++ + class FirstBootPhase(Phase): + """Actions to be done right after booting into the upgraded system.""" + +-- +2.31.1 + diff --git a/leapp-repository.spec b/leapp-repository.spec index b3a8459..9b3bbf4 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 4 +%define anolis_release 5 Name: leapp-repository Version: 0.13.0 @@ -54,6 +54,7 @@ Patch25: 0025-add-check-openssl11-libs.patch Patch26: 0026-Add-checkbaota-actor.patch Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch Patch28: 0028-support-upgrade-kernel-to-ANCK.patch +Patch29: 0029-Service-configuration-remains-after-migration.patch BuildArch: noarch BuildRequires: python-devel @@ -176,6 +177,9 @@ done; # no files here %changelog +* Tue Sep 6 2022 Weisson - 0.13.0-2.5 +- Service configuration remains after migration + * Tue Sep 6 2022 mgb01105731 - 0.13.0-2.4 - support upgrade kernel to ANCK -- Gitee From 292d3444f23070c5a64ec2a5cf9f9ba392994f76 Mon Sep 17 00:00:00 2001 From: mgb01105731 Date: Tue, 13 Sep 2022 14:05:04 +0800 Subject: [PATCH 05/18] add --disablerepo option to upgrade kernel to RHCK --- ...epo-option-to-upgrade-kernel-to-RHCK.patch | 39 +++++++++++-------- leapp-repository.spec | 7 +++- leapp_upgrade_repositories.repo | 2 +- 3 files changed, 28 insertions(+), 20 deletions(-) rename 0028-support-upgrade-kernel-to-ANCK.patch => 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch (50%) diff --git a/0028-support-upgrade-kernel-to-ANCK.patch b/0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch similarity index 50% rename from 0028-support-upgrade-kernel-to-ANCK.patch rename to 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch index 9b51d04..4a5672d 100644 --- a/0028-support-upgrade-kernel-to-ANCK.patch +++ b/0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch @@ -1,27 +1,32 @@ -From f1c989736cd5d056a46bfde66326499b3b70b5bf Mon Sep 17 00:00:00 2001 +From ad08c0a1c09acdaa5d4999f1f0ae51da4f82e54f Mon Sep 17 00:00:00 2001 From: mgb01105731 -Date: Tue, 12 Jul 2022 16:19:13 +0800 -Subject: [PATCH] =?UTF-8?q?#42781502=20;=20Report=20is=20https://yuque.ant?= - =?UTF-8?q?fin.com/docs/share/1e95ae1f-7cb3-4e77-b172-e5123ab24bbb=3F#=20?= - =?UTF-8?q?=E3=80=8Acentos=E8=BF=81=E7=A7=BBanolis=EF=BC=88leapp=E5=B7=A5?= - =?UTF-8?q?=E5=85=B7=EF=BC=89=E5=A2=9E=E5=8A=A0=E6=8C=87=E5=AE=9A=E5=86=85?= - =?UTF-8?q?=E6=A0=B8=E7=89=88=E6=9C=AC=E5=8A=9F=E8=83=BD=E9=AA=8C=E8=AF=81?= - =?UTF-8?q?=EF=BC=89=E3=80=8B?= -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit +Date: Fri, 9 Sep 2022 17:52:19 +0800 +Subject: [PATCH] add --disablerepo option to upgrade kernel to RHCK --- - .../libraries/scancustomrepofile.py | 13 +++++++------ - 1 file changed, 7 insertions(+), 6 deletions(-) + .../libraries/scancustomrepofile.py | 18 +++++++++++------- + 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py b/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py -index c294193..137b07a 100644 +index c294193..a5a30bd 100644 --- a/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py +++ b/repos/system_upgrade/el7toel8/actors/scancustomrepofile/libraries/scancustomrepofile.py -@@ -27,9 +27,10 @@ def process(): +@@ -3,7 +3,7 @@ import os + from leapp.libraries.common import repofileutils + from leapp.libraries.stdlib import api + from leapp.models import CustomTargetRepository, CustomTargetRepositoryFile +- ++from leapp.libraries.common import config + + CUSTOM_REPO_PATH = "/etc/leapp/files/leapp_upgrade_repositories.repo" + +@@ -26,10 +26,14 @@ def process(): + if not repofile.data: return api.produce(CustomTargetRepositoryFile(file=CUSTOM_REPO_PATH)) ++ disablelist=[] ++ if config.get_env('LEAPP_DISABLE_REPOS'): ++ disablelist = [repoid for repoid in config.get_env('LEAPP_DISABLE_REPOS').split(',')] for repo in repofile.data: - api.produce(CustomTargetRepository( - repoid=repo.repoid, @@ -29,7 +34,7 @@ index c294193..137b07a 100644 - baseurl=repo.baseurl, - enabled=repo.enabled, - )) -+ if repo.enabled: ++ if repo.enabled and repo.repoid not in disablelist: + api.produce(CustomTargetRepository( + repoid=repo.repoid, + name=repo.name, @@ -37,5 +42,5 @@ index c294193..137b07a 100644 + enabled=repo.enabled, + )) -- -2.19.1.6.gb485710b +2.19.2 diff --git a/leapp-repository.spec b/leapp-repository.spec index 9b3bbf4..a1cbe4b 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 5 +%define anolis_release 6 Name: leapp-repository Version: 0.13.0 @@ -53,7 +53,7 @@ Patch24: 0024-remove-unofficial-url.patch Patch25: 0025-add-check-openssl11-libs.patch Patch26: 0026-Add-checkbaota-actor.patch Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch -Patch28: 0028-support-upgrade-kernel-to-ANCK.patch +Patch28: 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch Patch29: 0029-Service-configuration-remains-after-migration.patch BuildArch: noarch @@ -177,6 +177,9 @@ done; # no files here %changelog +* Tue Sep 13 2022 mgb01105731 - 0.13.0-2.6 +- add disablerepo option to upgrade kernel to RHCK + * Tue Sep 6 2022 Weisson - 0.13.0-2.5 - Service configuration remains after migration diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index 7f8bdfa..5c24268 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -22,4 +22,4 @@ gpgcheck=0 name=anolis plus baseurl=https://mirrors.openanolis.cn/anolis/8/Plus/$basearch/os gpgcheck=0 -enabled=0 +enabled=1 -- Gitee From bd3fb71dfc359267677c639972dc839444a33f21 Mon Sep 17 00:00:00 2001 From: wangcichen Date: Tue, 11 Oct 2022 19:58:17 +0800 Subject: [PATCH 06/18] fix subprocess.check_output method for backup service configuration --- ...hod-for-backup-service-configuration.patch | 27 +++++++++++++++++++ leapp-repository.spec | 1 + 2 files changed, 28 insertions(+) create mode 100644 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch diff --git a/0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch b/0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch new file mode 100644 index 0000000..4e15031 --- /dev/null +++ b/0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch @@ -0,0 +1,27 @@ +From 719baceb14cb08659fee61249b0be6b9f96f4b65 Mon Sep 17 00:00:00 2001 +From: wangcichen +Date: Tue, 11 Oct 2022 08:34:37 +0800 +Subject: [PATCH] + 0030-fix-subprocess-check_output-method-for-backup-service-configuration + +Signed-off-by: wangcichen +--- + .../el7toel8/actors/serviceconfigurationsynchronizer/actor.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +index 7856bea..9b45d31 100644 +--- a/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +@@ -19,7 +19,7 @@ class ServiceConfigurationSynchronizer(Actor): + def service_configuration_backup(self): + try: + self.log.info("backing up service configurations after migration.") +- services_config_raw = str(subprocess.check_output("systemctl list-unit-files | egrep 'enabled |disabled ' | awk '{print $1,$2}'")).strip() ++ services_config_raw = str(subprocess.check_output("systemctl list-unit-files | egrep 'enabled |disabled ' | awk '{print $1,$2}'", shell=True)).strip() + services_config = { + line.strip().split()[0]: line.strip().split()[1][:-1] + for line in services_config_raw.split('\n') +-- +2.22.0 + diff --git a/leapp-repository.spec b/leapp-repository.spec index a1cbe4b..b0e5898 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -55,6 +55,7 @@ Patch26: 0026-Add-checkbaota-actor.patch Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch Patch28: 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch Patch29: 0029-Service-configuration-remains-after-migration.patch +Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch BuildArch: noarch BuildRequires: python-devel -- Gitee From 117c594bb7875200c5cf79c82a4f4b6ea3ec6498 Mon Sep 17 00:00:00 2001 From: Weisson Date: Sun, 16 Oct 2022 21:47:23 +0800 Subject: [PATCH 07/18] Deal with EPEL repositories create by user mannally. Signed-off-by: Weisson --- ...repositories-create-by-user-mannally.patch | 103 ++++++++++++++++++ leapp-repository.spec | 6 +- leapp_upgrade_repositories.repo | 6 + 3 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch diff --git a/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch b/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch new file mode 100644 index 0000000..a18f345 --- /dev/null +++ b/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch @@ -0,0 +1,103 @@ +From 37ab9cda0fa62dd1526f5fd4f4b1c7f81cbb9dab Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Sun, 16 Oct 2022 18:31:15 +0800 +Subject: [PATCH] Deal with EPEL repositories create by user mannally. + +Signed-off-by: Weisson +--- + .../el7toel8/actors/rpmscanner/actor.py | 67 +++++++++++++++++++ + 1 file changed, 67 insertions(+) + +diff --git a/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py b/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py +index 27fe4b3..589e8a6 100644 +--- a/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py +@@ -4,6 +4,9 @@ from leapp.libraries.common.rpms import get_installed_rpms + from leapp.models import InstalledRPM, RPM + from leapp.tags import IPUWorkflowTag, FactsPhaseTag + ++import os ++from leapp.libraries import stdlib ++ + + class RpmScanner(Actor): + """ +@@ -17,6 +20,14 @@ class RpmScanner(Actor): + produces = (InstalledRPM,) + tags = (IPUWorkflowTag, FactsPhaseTag) + ++ epel_package_name = "epel-release" ++ ++ def epel_but_not_in_source(self): ++ epel_not_from_source = os.system("rpm -q %s" % self.epel_package_name) ++ epel_exists = not os.system("yum repolist | grep -q '^epel'") ++ ++ return epel_not_from_source and epel_exists ++ + def process(self): + output = get_installed_rpms() + pkg_repos = get_package_repository_data() +@@ -37,4 +48,60 @@ class RpmScanner(Actor): + release=release, + pgpsig=pgpsig, + repository=repository)) ++ ++ import subprocess ++ import re ++ ++ if self.epel_but_not_in_source(): ++ # disable epel repository ++ subprocess.check_output("yum install -y yum-utils", shell=True) ++ ++ repos = str(subprocess.check_output("yum repolist | grep -v '^repolist: ' | grep -v '^repo id ' | grep -v '^ * ' |" \ ++ "grep -v '^Loaded plugins: ' | grep -v '^Loading ' | awk '{ print $1 }' | xargs", shell=True)).strip() ++ ++ disable_repo_command = "yum-config-manager --disable " ++ ++ # repos = [ repo.split('/')[0] for repo in repos.split() ] ++ for repo_raw in repos.split(): ++ repo = repo_raw.split('/')[0].replace('!', '').replace('*', '') ++ if re.match(r"^epel", repo): ++ subprocess.check_output(disable_repo_command + repo, shell=True) ++ ++ # epel-release repository file backup ++ repo_paths = str(subprocess.check_output("repoquery -l %s | egrep '\.repo$'" % self.epel_package_name, shell=True)).strip().split() ++ for repo_path in repo_paths: ++ if os.path.exists(repo_path): ++ os.rename(repo_path, repo_path + ".bak") ++ ++ # replace epel repo with yum source to ensure that epel stabe during migration ++ subprocess.check_output("yum install -y %s" % self.epel_package_name, shell=True) ++ ++ rpm_cmd = [ ++ '/bin/rpm', ++ '-q', ++ self.epel_package_name, ++ '--queryformat', ++ r'%{NAME}|%{VERSION}|%{RELEASE}|%|EPOCH?{%{EPOCH}}:{(none)}||%|PACKAGER?{%{PACKAGER}}:{(none)}||%|' ++ r'ARCH?{%{ARCH}}:{}||%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{(none)}|}|\n' ++ ] ++ try: ++ entries = stdlib.run(rpm_cmd, split=True)['stdout'] ++ ++ # append epel-release entry to RPMs ++ for entry in entries: ++ name, version, release, epoch, packager, arch, pgpsig = entry.split('|') ++ result.items.append(RPM( ++ name=name, ++ version=version, ++ epoch=epoch, ++ packager=packager, ++ arch=arch, ++ release=release, ++ pgpsig=pgpsig, ++ repository='', ++ )) ++ ++ except stdlib.CalledProcessError as err: ++ error = 'Execution of {CMD} returned {RC}. Unable to find installed packages.'.format(CMD=err.command, RC=err.exit_code) ++ stdlib.api.current_logger().error(error) + self.produce(result) +-- +2.31.1 + diff --git a/leapp-repository.spec b/leapp-repository.spec index b0e5898..f7d217f 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 6 +%define anolis_release 7 Name: leapp-repository Version: 0.13.0 @@ -56,6 +56,7 @@ Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch Patch28: 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch Patch29: 0029-Service-configuration-remains-after-migration.patch Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch +Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch BuildArch: noarch BuildRequires: python-devel @@ -178,6 +179,9 @@ done; # no files here %changelog +* Thu Sep 29 2022 Weisson - 0.13.0-2.7 +- deal with user create EPEL repository file + * Tue Sep 13 2022 mgb01105731 - 0.13.0-2.6 - add disablerepo option to upgrade kernel to RHCK diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index 5c24268..aca4db5 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -23,3 +23,9 @@ name=anolis plus baseurl=https://mirrors.openanolis.cn/anolis/8/Plus/$basearch/os gpgcheck=0 enabled=1 + +[anolis_extras] +name=anolis extras +baseurl=http://mirrors.openanolis.cn/anolis/$releasever/Extras/$basearch/os +enabled=1 +gpgcheck=0 -- Gitee From be455227d52b07f8ab109c75eaf2c8b5c63d83ca Mon Sep 17 00:00:00 2001 From: Weisson Date: Sun, 13 Nov 2022 21:57:48 +0800 Subject: [PATCH 08/18] Keep PermitRootLogin authentication behavior after migration. Signed-off-by: Weisson Signed-off-by: Zhao Mingyue --- ...ogin-authentication-behavior-after-m.patch | 117 ++++++++++++++++++ leapp-repository.spec | 6 +- 2 files changed, 122 insertions(+), 1 deletion(-) create mode 100644 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch diff --git a/0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch b/0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch new file mode 100644 index 0000000..c02f5b1 --- /dev/null +++ b/0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch @@ -0,0 +1,117 @@ +0032-Keep-PermitRootLogin-authentication-behavior-after-m.patchFrom 64f00d273e2141b58230cce1bb4a68010da4c457 Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Wed, 9 Nov 2022 15:21:29 +0800 +Subject: [PATCH] Keep PermitRootLogin authentication behavior after migration. + +Signed-off-by: Weisson +Signed-off-by: Zhao Mingyue +--- + .../actor.py | 25 +++++++++++++ + .../actor.py | 37 +++++++++++++++++++ + .../serviceconfigurationsynchronizer/actor.py | 3 ++ + .../models/configurationsynchronization.py | 1 + + 4 files changed, 66 insertions(+) + create mode 100644 repos/system_upgrade/el7toel8/actors/authenticationconfigurationcollector/actor.py + create mode 100644 repos/system_upgrade/el7toel8/actors/authenticationconfigurationsynchronizer/actor.py + +diff --git a/repos/system_upgrade/el7toel8/actors/authenticationconfigurationcollector/actor.py b/repos/system_upgrade/el7toel8/actors/authenticationconfigurationcollector/actor.py +new file mode 100644 +index 0000000..ddbdeba +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/authenticationconfigurationcollector/actor.py +@@ -0,0 +1,25 @@ ++from leapp.actors import Actor ++from leapp.tags import IPUWorkflowTag, ConfigurationCollectionPhaseTag ++from leapp.models import ConfigurationSynchronization ++ ++import subprocess ++import json ++ ++ ++class AuthenticationConfigurationCollector(Actor): ++ """ ++ Keep authentication configuration the same after migration. This is collection phase. ++ """ ++ ++ name = 'authentication_configuration_collector' ++ consumes = () ++ produces = (ConfigurationSynchronization, ) ++ tags = (IPUWorkflowTag, ConfigurationCollectionPhaseTag, ) ++ ++ def process(self): ++ PermitRootLogin = subprocess.check_output('cat /etc/ssh/sshd_config | grep "^PermitRootLogin" || echo "DefaultValue"', shell=True) ++ PasswordAuthentication = subprocess.check_output('cat /etc/ssh/sshd_config | egrep "^PasswordAuthentication" || echo "DefaultValue"', shell=True) ++ PermitRootLogin = str(PermitRootLogin).strip() ++ PasswordAuthentication = str(PasswordAuthentication).strip() ++ ++ self.produce(ConfigurationSynchronization(sshd_auth_configuration=json.dumps({"PermitRootLogin": PermitRootLogin, "PasswordAuthentication": PasswordAuthentication, }))) +diff --git a/repos/system_upgrade/el7toel8/actors/authenticationconfigurationsynchronizer/actor.py b/repos/system_upgrade/el7toel8/actors/authenticationconfigurationsynchronizer/actor.py +new file mode 100644 +index 0000000..0c10a0b +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/authenticationconfigurationsynchronizer/actor.py +@@ -0,0 +1,37 @@ ++from leapp.actors import Actor ++from leapp.tags import IPUWorkflowTag, ConfigurationSynchronizationPhaseTag ++from leapp.models import ConfigurationSynchronization ++ ++import subprocess ++import json ++ ++ ++class AuthenticationConfigurationSynchronizer(Actor): ++ """ ++ Keep authentication configuration the same after migration. This is synchronization phase. ++ """ ++ ++ name = 'authentication_configuration_synchronizer' ++ consumes = (ConfigurationSynchronization, ) ++ produces = () ++ tags = (IPUWorkflowTag, ConfigurationSynchronizationPhaseTag, ) ++ ++ def process(self): ++ for configuration in self.consume(ConfigurationSynchronization): ++ if configuration.sshd_auth_configuration is None: ++ continue ++ ++ sshd_auth_configuration = json.loads(configuration.sshd_auth_configuration) ++ PermitRootLogin = sshd_auth_configuration["PermitRootLogin"] ++ PasswordAuthentication = sshd_auth_configuration["PasswordAuthentication"] ++ ++ if PermitRootLogin == "DefaultValue": ++ PermitRootLogin = "PermitRootLogin yes" ++ if PasswordAuthentication == "DefaultValue": ++ PasswordAuthentication = "# PasswordAuthentication yes" ++ ++ subprocess.run("sed -i '/PasswordAuthentication/d' /etc/ssh/sshd_config", shell=True) ++ subprocess.run("sed -i '/PermitRootLogin/d' /etc/ssh/sshd_config", shell=True) ++ subprocess.run("sed -i '$a\%s' /etc/ssh/sshd_config" % PasswordAuthentication, shell=True) ++ subprocess.run("sed -i '$a\%s' /etc/ssh/sshd_config" % PermitRootLogin, shell=True) ++ subprocess.run("systemctl restart sshd", shell=True) +diff --git a/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +index 9b45d31..5f57b4b 100644 +--- a/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/serviceconfigurationsynchronizer/actor.py +@@ -90,6 +90,9 @@ class ServiceConfigurationSynchronizer(Actor): + try: + self.log.info("Starting to synchronize services configurations.") + for configuration in self.consume(ConfigurationSynchronization): ++ if configuration.services_configuration is None: ++ continue ++ + services_configuration = json.loads(configuration.services_configuration) + config_report = self.config_services(services_configuration, backup_configuratuon) + +diff --git a/repos/system_upgrade/el7toel8/models/configurationsynchronization.py b/repos/system_upgrade/el7toel8/models/configurationsynchronization.py +index 349ac3d..1133674 100644 +--- a/repos/system_upgrade/el7toel8/models/configurationsynchronization.py ++++ b/repos/system_upgrade/el7toel8/models/configurationsynchronization.py +@@ -4,4 +4,5 @@ from leapp.topics import ConfigurationSynchronizationTopic + class ConfigurationSynchronization(Model): + topic = ConfigurationSynchronizationTopic + services_configuration = fields.Nullable(fields.String()) ++ sshd_auth_configuration = fields.Nullable(fields.String()) + +-- +2.30.1 (Apple Git-130) + diff --git a/leapp-repository.spec b/leapp-repository.spec index f7d217f..d03a12b 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 7 +%define anolis_release 8 Name: leapp-repository Version: 0.13.0 @@ -57,6 +57,7 @@ Patch28: 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch Patch29: 0029-Service-configuration-remains-after-migration.patch Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch +Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch BuildArch: noarch BuildRequires: python-devel @@ -179,6 +180,9 @@ done; # no files here %changelog +* Sun Nov 13 2022 Weisson - 0.13.0-2.8 +- Keep PermitRootLogin authentication behavior after migration. + * Thu Sep 29 2022 Weisson - 0.13.0-2.7 - deal with user create EPEL repository file -- Gitee From 044e10295d33112d2978f1d01eeb944d0a28ac47 Mon Sep 17 00:00:00 2001 From: Bitao Hu Date: Tue, 15 Nov 2022 20:09:19 +0800 Subject: [PATCH 09/18] Read the driver list supported by ANCK to determine driver compatibility problem, when migrating to Anolis8 with ANCK. Signed-off-by: Bitao Hu --- ...ad-the-driver-list-supported-by-ANCK.patch | 134 ++++++++++++++++++ leapp-repository.spec | 6 +- 2 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 0033-Read-the-driver-list-supported-by-ANCK.patch diff --git a/0033-Read-the-driver-list-supported-by-ANCK.patch b/0033-Read-the-driver-list-supported-by-ANCK.patch new file mode 100644 index 0000000..0746346 --- /dev/null +++ b/0033-Read-the-driver-list-supported-by-ANCK.patch @@ -0,0 +1,134 @@ +From 16314396e430511f4afafba0aff83c54e3220689 Mon Sep 17 00:00:00 2001 +From: Bitao Hu +Date: Tue, 15 Nov 2022 15:28:58 +0800 +Subject: [Patch] Read the driver list supported by ANCK to determine driver compatibility problem, when migrating to Anolis8 with ANCK. + +Signed-off-by: Bitao Hu +--- + .../actors/kernel/checkkerneldrivers/actor.py | 16 ++++- + .../files/removed_drivers_anck.txt | 69 +++++++++++++++++++ + ...d_drivers.txt => removed_drivers_rhck.txt} | 0 + 3 files changed, 82 insertions(+), 3 deletions(-) + create mode 100644 repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_anck.txt + rename repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/{removed_drivers.txt => removed_drivers_rhck.txt} (100%) + +diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/actor.py b/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/actor.py +index 19fefc3..6c4b042 100644 +--- a/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/actor.py +@@ -4,7 +4,7 @@ from leapp.libraries.actor.checkkerneldrivers import ( + get_present_drivers, + get_removed_drivers, + ) +-from leapp.models import PCIDevices ++from leapp.models import (PCIDevices, CustomTargetRepository) + from leapp.reporting import Report, create_report + from leapp import reporting + from leapp.tags import ChecksPhaseTag, IPUWorkflowTag +@@ -23,12 +23,22 @@ class CheckKernelDrivers(Actor): + files/removed_drivers.txt file. + """ + name = 'check_kernel_drivers' +- consumes = (PCIDevices,) ++ consumes = (PCIDevices, CustomTargetRepository) + produces = (Report,) + tags = (ChecksPhaseTag, IPUWorkflowTag) + + def process(self): +- removed_file = 'files/removed_drivers.txt' ++ toANCK = False ++ removed_file = '' ++ for repo in self.consume(CustomTargetRepository): ++ if repo.repoid == 'anolis_plus': ++ toANCK = True ++ break ++ if toANCK == True: ++ removed_file = 'files/removed_drivers_anck.txt' ++ else: ++ removed_file = 'files/removed_drivers_rhck.txt' ++ + conflicting = check_drivers(get_removed_drivers(removed_file), get_present_drivers()) + + if conflicting: +diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_anck.txt b/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_anck.txt +new file mode 100644 +index 0000000..1ab9e3e +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_anck.txt +@@ -0,0 +1,69 @@ ++# Support for the following device drivers has been removed in Anolis 8. ++ ++at91_ether ++osdblk ++ebt_ulog ++ablk_helper ++pcompress ++salsa20-x86_64 ++zlib ++gve ++hid-lenovo-tpkbd ++hid-ps3remote ++hmcdrv ++iavf ++idma64 ++igc ++ib_ipath ++ipg ++gpio-ir-recv ++ir-lirc-codec ++ir-rc5-sz-decoder ++dell-led ++rtsx_pci ++rtsx_usb ++nft_meta_bridge ++nft_exthdr ++nft_meta ++nft_rbtree ++pata_arasan_cf ++pata_cs5536 ++pch_dma ++pch_gbe ++pch_phub ++ptp_pch ++rtw88 ++rtwpci ++libsrp ++scsi_tgt ++snd-firewire-speakers ++snd-scs1x ++snd-tea575x-tuner ++wacom ++uio_pdrv_genirq ++vringh ++videobuf-dvb ++btcx-risc ++mt9v011 ++output ++stk1160 ++poseidon ++tvp5150 ++w83697hf_wdt ++w83697ug_wdt ++xen-acpi-processor ++dvb-usb-friio ++dvb-usb-it913x ++ipt_ULOG ++xgmac ++sctp_probe ++nf_conntrack_ipv4 ++nf_conntrack_ipv6 ++nfnetlink_cthelper ++libore ++objlayoutdriver ++snd-soc-sst-baytrail-pcm ++stm_p_basic ++stm_p_sys-t ++i7300_idle ++it913x-fe +diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers.txt b/repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_rhck.txt +similarity index 100% +rename from repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers.txt +rename to repos/system_upgrade/el7toel8/actors/kernel/checkkerneldrivers/files/removed_drivers_rhck.txt +-- +2.27.0 + diff --git a/leapp-repository.spec b/leapp-repository.spec index d03a12b..1f1360b 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 8 +%define anolis_release 9 Name: leapp-repository Version: 0.13.0 @@ -58,6 +58,7 @@ Patch29: 0029-Service-configuration-remains-after-migration.patch Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch +Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch BuildArch: noarch BuildRequires: python-devel @@ -180,6 +181,9 @@ done; # no files here %changelog +* Thu Nov 15 2022 Bitao Hu - 0.13.0-2.9 +- Read the driver list supported by ANCK to determine driver compatibility problem, when migrating to Anolis8 with ANCK. + * Sun Nov 13 2022 Weisson - 0.13.0-2.8 - Keep PermitRootLogin authentication behavior after migration. -- Gitee From f2ded88a07ad88f793919a3143e87661fb92c813 Mon Sep 17 00:00:00 2001 From: Bitao Hu Date: Fri, 9 Dec 2022 14:51:17 +0800 Subject: [PATCH 10/18] Add debug repo into leapp_upgrade_repositories.repo. Signed-off-by: Bitao Hu --- leapp-repository.spec | 5 ++++- leapp_upgrade_repositories.repo | 37 +++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/leapp-repository.spec b/leapp-repository.spec index 1f1360b..31defa4 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 9 +%define anolis_release 10 Name: leapp-repository Version: 0.13.0 @@ -181,6 +181,9 @@ done; # no files here %changelog +* FRI Dec 9 2022 Bitao Hu - 0.13.0-2.10 +- Add debug repo into leapp_upgrade_repositories.repo. + * Thu Nov 15 2022 Bitao Hu - 0.13.0-2.9 - Read the driver list supported by ANCK to determine driver compatibility problem, when migrating to Anolis8 with ANCK. diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index aca4db5..8d928b2 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -29,3 +29,40 @@ name=anolis extras baseurl=http://mirrors.openanolis.cn/anolis/$releasever/Extras/$basearch/os enabled=1 gpgcheck=0 + +[anolis_baseos-debug] +name=anolis baseos debug +baseurl=https://mirrors.openanolis.cn/anolis/8/BaseOS/$basearch/debug +gpgcheck=0 +enabled=0 + +[anolis_appstream-debug] +name=anolis appstream debug +baseurl=https://mirrors.openanolis.cn/anolis/8/AppStream/$basearch/debug +gpgcheck=0 +enabled=0 + +[anolis_powertools-debug] +name=anolis powertools debug +baseurl=https://mirrors.openanolis.cn/anolis/8/PowerTools/$basearch/debug +gpgcheck=0 +enabled=0 + +[anolis_highavailability-debug] +name=anolis highavailability debug +baseurl=https://mirrors.openanolis.cn/anolis/8/HighAvailability/$basearch/debug +gpgcheck=0 +enabled=0 + +[anolis_plus-debug] +name=anolis plus debug +baseurl=https://mirrors.openanolis.cn/anolis/8/Plus/$basearch/debug +gpgcheck=0 +enabled=0 + +[anolis_extras-debug] +name=anolis extras debug +baseurl=http://mirrors.openanolis.cn/anolis/$releasever/Extras/$basearch/debug +enabled=0 +gpgcheck=0 + -- Gitee From f8bf51c8c5206a6e22272849871f0ea8d2e2e2bb Mon Sep 17 00:00:00 2001 From: Weisson Date: Mon, 12 Dec 2022 22:38:59 +0800 Subject: [PATCH 11/18] Migrear grub2 entry recovery. Signed-off-by: Weisson --- 0034-migrear-grub2-entry-recovery.patch | 63 +++++++++++++++++++++++++ leapp-repository.spec | 8 +++- 2 files changed, 69 insertions(+), 2 deletions(-) create mode 100644 0034-migrear-grub2-entry-recovery.patch diff --git a/0034-migrear-grub2-entry-recovery.patch b/0034-migrear-grub2-entry-recovery.patch new file mode 100644 index 0000000..50e1671 --- /dev/null +++ b/0034-migrear-grub2-entry-recovery.patch @@ -0,0 +1,63 @@ +From 186971e9c4e849d88db23447a22658f516ca2a40 Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Thu, 8 Dec 2022 15:47:19 +0800 +Subject: [PATCH] migrear grub2 entry recovery. + +Signed-off-by: Weisson +--- + .../actors/dnfupgradetransaction/actor.py | 21 +++++++++++++++++++ + 1 file changed, 21 insertions(+) + +diff --git a/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py b/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py +index 73e5a83..289fac2 100644 +--- a/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py +@@ -13,6 +13,8 @@ from leapp.models import ( + UsedTargetRepositories, + ) + from leapp.tags import IPUWorkflowTag, RPMUpgradePhaseTag ++import subprocess ++import re + + + class DnfUpgradeTransaction(Actor): +@@ -35,6 +37,8 @@ class DnfUpgradeTransaction(Actor): + produces = (TransactionCompleted,) + tags = (RPMUpgradePhaseTag, IPUWorkflowTag) + ++ grub2_migrear_prefix = 'title=MigReaR-' ++ + def process(self): + src_rhsm_info = next(self.consume(RHSMInfo), None) + if src_rhsm_info: +@@ -47,10 +51,27 @@ class DnfUpgradeTransaction(Actor): + tasks = next(self.consume(FilteredRpmTransactionTasks), FilteredRpmTransactionTasks()) + target_userspace_info = next(self.consume(TargetUserSpaceInfo), None) + ++ output = subprocess.check_output("grubby --info=ALL", shell=True).strip() ++ grub_entries = output.split('index=') ++ ++ migrear_entries = [] ++ for entry in grub_entries: ++ if self.grub2_migrear_prefix in entry: ++ items = re.findall(r"kernel=(.*)\nargs=(.*)\ninitrd=(.*)\ntitle=(.*)\n", entry) ++ if len(items) == 1: ++ migrear_entries += [dict(zip(("kernel", "args", "initrd", "title"), items[0]))] ++ + dnfplugin.perform_transaction_install( + tasks=tasks, used_repos=used_repos, storage_info=storage_info, target_userspace_info=target_userspace_info, + plugin_info=plugin_info + ) ++ ++ for entry in migrear_entries: ++ try: ++ subprocess.check_call("grubby --add-kernel %s --initrd %s --args=%s --title=%s" % (entry['kernel'], entry['initrd'], entry['args'], entry['title']), shell=True) ++ except Exception as e: ++ self.log.info(" ".join(["Failed restore migrear entry", str(entry), "Exception:", str(e)]), exc_info=True) ++ + self.produce(TransactionCompleted()) + userspace = next(self.consume(TargetUserSpaceInfo), None) + if userspace: +-- +2.30.1 (Apple Git-130) + diff --git a/leapp-repository.spec b/leapp-repository.spec index 31defa4..7b74666 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 10 +%define anolis_release 11 Name: leapp-repository Version: 0.13.0 @@ -59,6 +59,7 @@ Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-confi Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch +Patch34: 0034-migrear-grub2-entry-recovery.patch BuildArch: noarch BuildRequires: python-devel @@ -181,7 +182,10 @@ done; # no files here %changelog -* FRI Dec 9 2022 Bitao Hu - 0.13.0-2.10 +* Mon Dec 12 2022 Weisson - 0.13.0-2.11 +- Migrear grub2 entry recovery is supported. + +* Fri Dec 9 2022 Bitao Hu - 0.13.0-2.10 - Add debug repo into leapp_upgrade_repositories.repo. * Thu Nov 15 2022 Bitao Hu - 0.13.0-2.9 -- Gitee From f4f8b8afca599def15a09eef737f7dc41bc050a6 Mon Sep 17 00:00:00 2001 From: Weisson Date: Tue, 10 Jan 2023 11:15:31 +0800 Subject: [PATCH 12/18] GRUB2-EFI support. Signed-off-by: Weisson --- 0035-GRUB2-EFI-support.patch | 47 ++++++++++++++++++++++++++++++++++++ leapp-repository.spec | 6 ++++- 2 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 0035-GRUB2-EFI-support.patch diff --git a/0035-GRUB2-EFI-support.patch b/0035-GRUB2-EFI-support.patch new file mode 100644 index 0000000..5c8789a --- /dev/null +++ b/0035-GRUB2-EFI-support.patch @@ -0,0 +1,47 @@ +From cbd47a0e35aaa7b31866f50465629b465f860964 Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Sun, 8 Jan 2023 23:06:51 +0800 +Subject: [PATCH] GRUB2-EFI support. + +Signed-off-by: Weisson +--- + .../actors/dnfupgradetransaction/actor.py | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py b/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py +index 289fac2..64bd3a3 100644 +--- a/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/dnfupgradetransaction/actor.py +@@ -57,9 +57,17 @@ class DnfUpgradeTransaction(Actor): + migrear_entries = [] + for entry in grub_entries: + if self.grub2_migrear_prefix in entry: +- items = re.findall(r"kernel=(.*)\nargs=(.*)\ninitrd=(.*)\ntitle=(.*)\n", entry) +- if len(items) == 1: +- migrear_entries += [dict(zip(("kernel", "args", "initrd", "title"), items[0]))] ++ kernel = re.findall(r"kernel=(/.*)\n", entry) ++ nargs = re.findall(r"args=(.*)\n", entry) ++ initrd = re.findall(r"initrd=(.*)\n", entry) ++ title = re.findall(r"title=(.*)\n", entry) ++ if len(kernel) == 1 and len(initrd) == 1 and len(title) == 1: ++ migrear_entries += [{ ++ "kernel": kernel[0], ++ "args": nargs[0] if len(nargs) == 1 else "", ++ "initrd": initrd[0], ++ "title": title[0], ++ }] + + dnfplugin.perform_transaction_install( + tasks=tasks, used_repos=used_repos, storage_info=storage_info, target_userspace_info=target_userspace_info, +@@ -68,7 +76,7 @@ class DnfUpgradeTransaction(Actor): + + for entry in migrear_entries: + try: +- subprocess.check_call("grubby --add-kernel %s --initrd %s --args=%s --title=%s" % (entry['kernel'], entry['initrd'], entry['args'], entry['title']), shell=True) ++ subprocess.check_call("grubby --copy-default --add-kernel %s --initrd %s --args=%s --title=%s" % (entry['kernel'], entry['initrd'], entry['args'], entry['title']), shell=True) + except Exception as e: + self.log.info(" ".join(["Failed restore migrear entry", str(entry), "Exception:", str(e)]), exc_info=True) + +-- +2.30.1 (Apple Git-130) + diff --git a/leapp-repository.spec b/leapp-repository.spec index 7b74666..5902fa9 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 11 +%define anolis_release 12 Name: leapp-repository Version: 0.13.0 @@ -60,6 +60,7 @@ Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch Patch34: 0034-migrear-grub2-entry-recovery.patch +Patch35: 0035-GRUB2-EFI-support.patch BuildArch: noarch BuildRequires: python-devel @@ -182,6 +183,9 @@ done; # no files here %changelog +* Tue Jan 10 2023 - 0.13.0-2.12 +- GRUB2-EFI support. + * Mon Dec 12 2022 Weisson - 0.13.0-2.11 - Migrear grub2 entry recovery is supported. -- Gitee From fdf5ab1ab926c1fc0c7649e835fea85c47b8339a Mon Sep 17 00:00:00 2001 From: Weisson Date: Wed, 18 Jan 2023 16:22:44 +0800 Subject: [PATCH 13/18] Perform system requirements check to ensure migration. Signed-off-by: Weisson --- ...equirements-check-to-ensure-migratio.patch | 83 +++++++++++++++++++ leapp-repository.spec | 8 +- 2 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 0036-Perform-system-requirements-check-to-ensure-migratio.patch diff --git a/0036-Perform-system-requirements-check-to-ensure-migratio.patch b/0036-Perform-system-requirements-check-to-ensure-migratio.patch new file mode 100644 index 0000000..3d56682 --- /dev/null +++ b/0036-Perform-system-requirements-check-to-ensure-migratio.patch @@ -0,0 +1,83 @@ +From 9dd7ac2917bf6b6f78b745593f1cd0127c2dc3fd Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Thu, 29 Dec 2022 22:31:26 +0800 +Subject: [PATCH] Perform system requirements check to ensure migration. + +Signed-off-by: Weisson +--- + .../actors/systemrequirementschecker/actor.py | 22 +++++++++++++ + .../libraries/systemchecker.py | 33 +++++++++++++++++++ + 2 files changed, 55 insertions(+) + create mode 100644 repos/system_upgrade/el7toel8/actors/systemrequirementschecker/actor.py + create mode 100644 repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py + +diff --git a/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/actor.py b/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/actor.py +new file mode 100644 +index 0000000..59af805 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/actor.py +@@ -0,0 +1,22 @@ ++from leapp.actors import Actor ++from leapp import tags ++from leapp.libraries.actor import systemchecker ++ ++ ++class SystemRequirementsChecker(Actor): ++ """ ++ No documentation has been provided for the system_requirements_checker actor. ++ """ ++ ++ name = 'system_requirements_checker' ++ consumes = () ++ produces = () ++ tags = (tags.FactsPhaseTag, tags.IPUWorkflowTag, ) ++ ++ def process(self): ++ sc = systemchecker.SystemChecker() ++ vm_info = sc.virtual_memory() ++ partition = sc.partition_size_from_directory("/var/lib/leapp/") ++ ++ assert partition['free'] >= 4 * 1024 * 1024 * 1024 and vm_info['free'] >= 2 * 1024 * 1024 * 1024, "To ensure the migration, this machine must have 4G free space on disk and 2G RAM available." ++ assert sc.initd_is_symlink(), "It is crucial that /etc/init.d be a symlink to rc.d/init.d by default." +diff --git a/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py b/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py +new file mode 100644 +index 0000000..f77dde8 +--- /dev/null ++++ b/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py +@@ -0,0 +1,33 @@ ++import subprocess ++import os ++import sys ++import psutil ++ ++ ++class SystemChecker(object): ++ def partition_size_from_directory(self, directory): ++ statvfs = os.statvfs(directory) ++ return { ++ "free": statvfs.f_frsize * statvfs.f_bfree, ++ "total": statvfs.f_frsize * statvfs.f_blocks, ++ "blocks": statvfs.f_blocks, ++ "freeblocks": statvfs.f_bfree, ++ "blocksize": statvfs.f_frsize, ++ } ++ ++ def virtual_memory(self): ++ mem_info = psutil.virtual_memory() ++ return { ++ "free": mem_info.available, ++ "total": mem_info.total, ++ } ++ ++ def is_symlink(self, directory): ++ return os.path.islink(directory) ++ ++ def initd_is_symlink(self, initd_directory="/etc/init.d"): ++ is_symlink = self.is_symlink(initd_directory) ++ if not is_symlink: ++ return False ++ link_path = os.readlink(initd_directory) ++ return link_path == "rc.d/init.d" or link_path == "/etc/rc.d/init.d" +-- +2.30.1 (Apple Git-130) + diff --git a/leapp-repository.spec b/leapp-repository.spec index 5902fa9..0893a3c 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 12 +%define anolis_release 13 Name: leapp-repository Version: 0.13.0 @@ -61,6 +61,7 @@ Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch Patch34: 0034-migrear-grub2-entry-recovery.patch Patch35: 0035-GRUB2-EFI-support.patch +Patch36: 0036-Perform-system-requirements-check-to-ensure-migratio.patch BuildArch: noarch BuildRequires: python-devel @@ -73,6 +74,8 @@ Requires: leapp-repository-dependencies = 5 # IMPORTANT: this is capability provided by the python2-leapp rpm. Requires: leapp-framework >= 1.4 +Requires: python2-psutil +Requires: python3-psutil # That's temporary to ensure the obsoleted subpackage is not installed # and will be removed when the current version of leapp-repository is installed @@ -183,6 +186,9 @@ done; # no files here %changelog +* Wed Jan 18 2023 Weisson - 0.13.0-2.13 +- Perform system requirements check to ensure migration. + * Tue Jan 10 2023 - 0.13.0-2.12 - GRUB2-EFI support. -- Gitee From 3ac2045e0382d00e8c2d114ca13a464be2a0d1ab Mon Sep 17 00:00:00 2001 From: ZhouWeitao Date: Thu, 16 Feb 2023 20:27:47 +0800 Subject: [PATCH 14/18] use same format in leapp_upgrade_repositories.repo Signed-off-by: ZhouWeitao --- leapp_upgrade_repositories.repo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/leapp_upgrade_repositories.repo b/leapp_upgrade_repositories.repo index 8d928b2..c2ebbc0 100644 --- a/leapp_upgrade_repositories.repo +++ b/leapp_upgrade_repositories.repo @@ -26,7 +26,7 @@ enabled=1 [anolis_extras] name=anolis extras -baseurl=http://mirrors.openanolis.cn/anolis/$releasever/Extras/$basearch/os +baseurl=http://mirrors.openanolis.cn/anolis/8/Extras/$basearch/os enabled=1 gpgcheck=0 @@ -62,7 +62,7 @@ enabled=0 [anolis_extras-debug] name=anolis extras debug -baseurl=http://mirrors.openanolis.cn/anolis/$releasever/Extras/$basearch/debug +baseurl=http://mirrors.openanolis.cn/anolis/8/Extras/$basearch/debug enabled=0 gpgcheck=0 -- Gitee From 4c9d02573b28131efa1c986be562077a8e951dd4 Mon Sep 17 00:00:00 2001 From: Weisson Date: Thu, 16 Feb 2023 15:16:06 +0800 Subject: [PATCH 15/18] Add RPMDownloadOrInstallError and its exit code. Signed-off-by: Weisson --- ...loadOrInstallError-and-its-exit-code.patch | 43 +++++++++++++++++++ leapp-repository.spec | 6 ++- 2 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 0037-Add-RPMDownloadOrInstallError-and-its-exit-code.patch diff --git a/0037-Add-RPMDownloadOrInstallError-and-its-exit-code.patch b/0037-Add-RPMDownloadOrInstallError-and-its-exit-code.patch new file mode 100644 index 0000000..7dc4e6e --- /dev/null +++ b/0037-Add-RPMDownloadOrInstallError-and-its-exit-code.patch @@ -0,0 +1,43 @@ +From 56293fcde7534e42dccfae39d5db26f47d5b1f79 Mon Sep 17 00:00:00 2001 +From: Weisson +Date: Thu, 16 Feb 2023 15:12:08 +0800 +Subject: [PATCH] Add RPMDownloadOrInstallError and its exit code. + +Signed-off-by: Weisson +--- + .../el7toel8/actors/dnfpackagedownload/actor.py | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/repos/system_upgrade/el7toel8/actors/dnfpackagedownload/actor.py b/repos/system_upgrade/el7toel8/actors/dnfpackagedownload/actor.py +index 8e29faa..95c8865 100644 +--- a/repos/system_upgrade/el7toel8/actors/dnfpackagedownload/actor.py ++++ b/repos/system_upgrade/el7toel8/actors/dnfpackagedownload/actor.py +@@ -10,6 +10,10 @@ from leapp.models import ( + XFSPresence, + ) + from leapp.tags import DownloadPhaseTag, IPUWorkflowTag ++from leapp.exceptions import RPMDownloadOrInstallError ++ ++import sys ++import traceback + + + class DnfPackageDownload(Actor): +@@ -43,7 +47,10 @@ class DnfPackageDownload(Actor): + rhui_info = next(self.consume(RHUIInfo), None) + on_aws = bool(rhui_info and rhui_info.provider == 'aws') + +- dnfplugin.perform_rpm_download( +- tasks=tasks, used_repos=used_repos, target_userspace_info=target_userspace_info, +- xfs_info=xfs_info, storage_info=storage_info, plugin_info=plugin_info, on_aws=on_aws +- ) ++ try: ++ dnfplugin.perform_rpm_download( ++ tasks=tasks, used_repos=used_repos, target_userspace_info=target_userspace_info, ++ xfs_info=xfs_info, storage_info=storage_info, plugin_info=plugin_info, on_aws=on_aws ++ ) ++ except Exception as e: ++ raise RPMDownloadOrInstallError(message="fail to download rpm packages.", traceback=''.join(traceback.format_exception(*sys.exc_info()))) +-- +2.30.1 (Apple Git-130) + diff --git a/leapp-repository.spec b/leapp-repository.spec index 0893a3c..be5bca4 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 13 +%define anolis_release 14 Name: leapp-repository Version: 0.13.0 @@ -62,6 +62,7 @@ Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch Patch34: 0034-migrear-grub2-entry-recovery.patch Patch35: 0035-GRUB2-EFI-support.patch Patch36: 0036-Perform-system-requirements-check-to-ensure-migratio.patch +Patch37: 0037-Add-RPMDownloadOrInstallError-and-its-exit-code.patch BuildArch: noarch BuildRequires: python-devel @@ -186,6 +187,9 @@ done; # no files here %changelog +* Thu Feb 16 2023 Weisson - 0.13.0-2.14 +- Add RPMDownloadOrInstallError and its exit code. + * Wed Jan 18 2023 Weisson - 0.13.0-2.13 - Perform system requirements check to ensure migration. -- Gitee From 9d85c056f41a54e2fc0f9f39d2fe54016a372d93 Mon Sep 17 00:00:00 2001 From: ZhouWeitao Date: Fri, 17 Feb 2023 16:50:46 +0800 Subject: [PATCH 16/18] comment patch 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch out Signed-off-by: ZhouWeitao --- ...repositories-create-by-user-mannally.patch | 103 ------------------ leapp-repository.spec | 3 +- 2 files changed, 2 insertions(+), 104 deletions(-) delete mode 100644 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch diff --git a/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch b/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch deleted file mode 100644 index a18f345..0000000 --- a/0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 37ab9cda0fa62dd1526f5fd4f4b1c7f81cbb9dab Mon Sep 17 00:00:00 2001 -From: Weisson -Date: Sun, 16 Oct 2022 18:31:15 +0800 -Subject: [PATCH] Deal with EPEL repositories create by user mannally. - -Signed-off-by: Weisson ---- - .../el7toel8/actors/rpmscanner/actor.py | 67 +++++++++++++++++++ - 1 file changed, 67 insertions(+) - -diff --git a/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py b/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py -index 27fe4b3..589e8a6 100644 ---- a/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py -+++ b/repos/system_upgrade/el7toel8/actors/rpmscanner/actor.py -@@ -4,6 +4,9 @@ from leapp.libraries.common.rpms import get_installed_rpms - from leapp.models import InstalledRPM, RPM - from leapp.tags import IPUWorkflowTag, FactsPhaseTag - -+import os -+from leapp.libraries import stdlib -+ - - class RpmScanner(Actor): - """ -@@ -17,6 +20,14 @@ class RpmScanner(Actor): - produces = (InstalledRPM,) - tags = (IPUWorkflowTag, FactsPhaseTag) - -+ epel_package_name = "epel-release" -+ -+ def epel_but_not_in_source(self): -+ epel_not_from_source = os.system("rpm -q %s" % self.epel_package_name) -+ epel_exists = not os.system("yum repolist | grep -q '^epel'") -+ -+ return epel_not_from_source and epel_exists -+ - def process(self): - output = get_installed_rpms() - pkg_repos = get_package_repository_data() -@@ -37,4 +48,60 @@ class RpmScanner(Actor): - release=release, - pgpsig=pgpsig, - repository=repository)) -+ -+ import subprocess -+ import re -+ -+ if self.epel_but_not_in_source(): -+ # disable epel repository -+ subprocess.check_output("yum install -y yum-utils", shell=True) -+ -+ repos = str(subprocess.check_output("yum repolist | grep -v '^repolist: ' | grep -v '^repo id ' | grep -v '^ * ' |" \ -+ "grep -v '^Loaded plugins: ' | grep -v '^Loading ' | awk '{ print $1 }' | xargs", shell=True)).strip() -+ -+ disable_repo_command = "yum-config-manager --disable " -+ -+ # repos = [ repo.split('/')[0] for repo in repos.split() ] -+ for repo_raw in repos.split(): -+ repo = repo_raw.split('/')[0].replace('!', '').replace('*', '') -+ if re.match(r"^epel", repo): -+ subprocess.check_output(disable_repo_command + repo, shell=True) -+ -+ # epel-release repository file backup -+ repo_paths = str(subprocess.check_output("repoquery -l %s | egrep '\.repo$'" % self.epel_package_name, shell=True)).strip().split() -+ for repo_path in repo_paths: -+ if os.path.exists(repo_path): -+ os.rename(repo_path, repo_path + ".bak") -+ -+ # replace epel repo with yum source to ensure that epel stabe during migration -+ subprocess.check_output("yum install -y %s" % self.epel_package_name, shell=True) -+ -+ rpm_cmd = [ -+ '/bin/rpm', -+ '-q', -+ self.epel_package_name, -+ '--queryformat', -+ r'%{NAME}|%{VERSION}|%{RELEASE}|%|EPOCH?{%{EPOCH}}:{(none)}||%|PACKAGER?{%{PACKAGER}}:{(none)}||%|' -+ r'ARCH?{%{ARCH}}:{}||%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{(none)}|}|\n' -+ ] -+ try: -+ entries = stdlib.run(rpm_cmd, split=True)['stdout'] -+ -+ # append epel-release entry to RPMs -+ for entry in entries: -+ name, version, release, epoch, packager, arch, pgpsig = entry.split('|') -+ result.items.append(RPM( -+ name=name, -+ version=version, -+ epoch=epoch, -+ packager=packager, -+ arch=arch, -+ release=release, -+ pgpsig=pgpsig, -+ repository='', -+ )) -+ -+ except stdlib.CalledProcessError as err: -+ error = 'Execution of {CMD} returned {RC}. Unable to find installed packages.'.format(CMD=err.command, RC=err.exit_code) -+ stdlib.api.current_logger().error(error) - self.produce(result) --- -2.31.1 - diff --git a/leapp-repository.spec b/leapp-repository.spec index be5bca4..46fed18 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -56,7 +56,7 @@ Patch27: 0027-upgrade-write-efi-vars-for-ecs-firmware.patch Patch28: 0028-add-disablerepo-option-to-upgrade-kernel-to-RHCK.patch Patch29: 0029-Service-configuration-remains-after-migration.patch Patch30: 0030-fix-subprocess-check_output-method-for-backup-service-configuration.patch -Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch +#Patch31: 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch Patch32: 0032-Keep-PermitRootLogin-authentication-behavior-after-m.patch Patch33: 0033-Read-the-driver-list-supported-by-ANCK.patch Patch34: 0034-migrear-grub2-entry-recovery.patch @@ -189,6 +189,7 @@ done; %changelog * Thu Feb 16 2023 Weisson - 0.13.0-2.14 - Add RPMDownloadOrInstallError and its exit code. +- comment patch 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch * Wed Jan 18 2023 Weisson - 0.13.0-2.13 - Perform system requirements check to ensure migration. -- Gitee From 85bf847191f7c250599bd12d6b4f58ff1f778072 Mon Sep 17 00:00:00 2001 From: ZhouWeitao Date: Sat, 18 Feb 2023 20:12:42 +0800 Subject: [PATCH 17/18] set a reasonable 600M mem in system requirements check Signed-off-by: ZhouWeitao --- ...erform-system-requirements-check-to-ensure-migratio.patch | 2 +- leapp-repository.spec | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/0036-Perform-system-requirements-check-to-ensure-migratio.patch b/0036-Perform-system-requirements-check-to-ensure-migratio.patch index 3d56682..96e81ab 100644 --- a/0036-Perform-system-requirements-check-to-ensure-migratio.patch +++ b/0036-Perform-system-requirements-check-to-ensure-migratio.patch @@ -37,7 +37,7 @@ index 0000000..59af805 + vm_info = sc.virtual_memory() + partition = sc.partition_size_from_directory("/var/lib/leapp/") + -+ assert partition['free'] >= 4 * 1024 * 1024 * 1024 and vm_info['free'] >= 2 * 1024 * 1024 * 1024, "To ensure the migration, this machine must have 4G free space on disk and 2G RAM available." ++ assert partition['free'] >= 4 * 1024 * 1024 * 1024 and vm_info['free'] >= 600 * 1024 * 1024, "To ensure the migration, this machine must have 4G free space on disk and 600M RAM available." + assert sc.initd_is_symlink(), "It is crucial that /etc/init.d be a symlink to rc.d/init.d by default." diff --git a/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py b/repos/system_upgrade/el7toel8/actors/systemrequirementschecker/libraries/systemchecker.py new file mode 100644 diff --git a/leapp-repository.spec b/leapp-repository.spec index 46fed18..6d7a49f 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 14 +%define anolis_release 15 Name: leapp-repository Version: 0.13.0 @@ -187,6 +187,9 @@ done; # no files here %changelog +* Sat Feb 18 2023 Weitao Zhou - 0.13.0-2.15 +- set a reasonable 600M mem in system requirements check + * Thu Feb 16 2023 Weisson - 0.13.0-2.14 - Add RPMDownloadOrInstallError and its exit code. - comment patch 0031-Deal-with-EPEL-repositories-create-by-user-mannally.patch -- Gitee From 764af1423b6fa540e8cea2ba76490dbf982f7cda Mon Sep 17 00:00:00 2001 From: Weisson Date: Fri, 24 Feb 2023 11:32:45 +0800 Subject: [PATCH 18/18] Correct python3-psutil requirement branch make migration ARM-EPEL-compatible. Signed-off-by: Weisson --- leapp-repository.spec | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/leapp-repository.spec b/leapp-repository.spec index 6d7a49f..3197560 100644 --- a/leapp-repository.spec +++ b/leapp-repository.spec @@ -11,7 +11,7 @@ }\ py2_byte_compile "%1" "%2"} -%define anolis_release 15 +%define anolis_release 16 Name: leapp-repository Version: 0.13.0 @@ -76,7 +76,11 @@ Requires: leapp-repository-dependencies = 5 # IMPORTANT: this is capability provided by the python2-leapp rpm. Requires: leapp-framework >= 1.4 Requires: python2-psutil +%if 0%{rhel} == 7 +Requires: python36-psutil +%else Requires: python3-psutil +%endif # That's temporary to ensure the obsoleted subpackage is not installed # and will be removed when the current version of leapp-repository is installed @@ -187,6 +191,9 @@ done; # no files here %changelog +* Fri Feb 24 2023 Weisson - 0.13.0-2.16 +- Correct python3-psutil requirement branch make migration ARM-EPEL-compatible. + * Sat Feb 18 2023 Weitao Zhou - 0.13.0-2.15 - set a reasonable 600M mem in system requirements check -- Gitee