From 6b5ce215b10c7df2a622bedd3f799aafe1cd5d2d Mon Sep 17 00:00:00 2001 From: Andrew Lukoshko Date: Mon, 27 Mar 2023 14:33:31 +0200 Subject: [PATCH] Update ELevate patch --- SOURCES/leapp-repository-0.16.0-elevate.patch | 116 ++++++++++++++++-- SPECS/leapp-repository.spec | 2 +- 2 files changed, 106 insertions(+), 12 deletions(-) diff --git a/SOURCES/leapp-repository-0.16.0-elevate.patch b/SOURCES/leapp-repository-0.16.0-elevate.patch index 8cd9eea..92e71ed 100644 --- a/SOURCES/leapp-repository-0.16.0-elevate.patch +++ b/SOURCES/leapp-repository-0.16.0-elevate.patch @@ -823,10 +823,10 @@ index c9c2741..911d11d 100644 diff --git a/commands/upgrade/util.py b/commands/upgrade/util.py -index 75ffa6a..27970b4 100644 +index 75ffa6a..de021a5 100644 --- a/commands/upgrade/util.py +++ b/commands/upgrade/util.py -@@ -2,18 +2,24 @@ import functools +@@ -2,18 +2,25 @@ import functools import itertools import json import os @@ -836,6 +836,7 @@ index 75ffa6a..27970b4 100644 +import six.moves from datetime import datetime +from contextlib import contextmanager ++import six from leapp.cli.commands import command_utils from leapp.cli.commands.config import get_config @@ -853,7 +854,7 @@ index 75ffa6a..27970b4 100644 def disable_database_sync(): -@@ -167,6 +173,44 @@ def warn_if_unsupported(configuration): +@@ -167,6 +174,44 @@ def warn_if_unsupported(configuration): report_unsupported(devel_vars, configuration["whitelist_experimental"]) @@ -898,7 +899,7 @@ index 75ffa6a..27970b4 100644 def handle_output_level(args): """ Set environment variables following command line arguments. -@@ -236,3 +280,61 @@ def process_report_schema(args, configuration): +@@ -236,3 +281,65 @@ def process_report_schema(args, configuration): raise CommandError('--report-schema version can not be greater that the ' 'actual {} one.'.format(default_report_schema)) return args.report_schema or default_report_schema @@ -938,9 +939,13 @@ index 75ffa6a..27970b4 100644 + + for error in errors: + model = ErrorModel.create(json.loads(error['message']['data'])) ++ error_message = model.message ++ if six.PY2: ++ error_message = model.message.encode('utf-8', 'xmlcharrefreplace') ++ + logger.error("{time} [{severity}] Actor: {actor}\nMessage: {message}\n".format( + severity=model.severity.upper(), -+ message=model.message, time=model.time, actor=model.actor)) ++ message=error_message, time=model.time, actor=model.actor)) + if model.details: + print('Summary:') + details = json.loads(model.details) @@ -2195,6 +2200,58 @@ index 0000000..8e27d99 + reporting.Tags([reporting.Tags.UPGRADE_PROCESS]), + ] + ) +diff --git a/repos/system_upgrade/cloudlinux/actors/restorerepositoryconfigurations/actor.py b/repos/system_upgrade/cloudlinux/actors/restorerepositoryconfigurations/actor.py +new file mode 100644 +index 0000000..5b90c59 +--- /dev/null ++++ b/repos/system_upgrade/cloudlinux/actors/restorerepositoryconfigurations/actor.py +@@ -0,0 +1,46 @@ ++from leapp.actors import Actor ++from leapp.libraries.stdlib import api ++from leapp.libraries.common import dnfconfig, mounting, repofileutils ++from leapp.libraries.common.cllaunch import run_on_cloudlinux ++from leapp.models import ( ++ RepositoriesFacts, ++) ++from leapp.tags import ApplicationsPhaseTag, IPUWorkflowTag ++ ++ ++class RestoreRepositoryConfigurations(Actor): ++ """ ++ Go over the list of repositories that were present on the pre-upgrade system and compare them to the ++ current list (after the main upgrade transaction). ++ If any of the repositories with same repoIDs have changed their enabled state, due to changes coming ++ from RPM package updates or something else, restore their enabled settings to the pre-upgrade state. ++ """ ++ ++ name = 'restore_repository_configurations' ++ consumes = (RepositoriesFacts) ++ produces = () ++ tags = (ApplicationsPhaseTag.After, IPUWorkflowTag) ++ ++ @run_on_cloudlinux ++ def process(self): ++ current_repofiles = repofileutils.get_parsed_repofiles() ++ current_repository_list = [] ++ for repofile in current_repofiles: ++ current_repository_list.extend(repofile.data) ++ current_repodict = dict((repo.repoid, repo) for repo in current_repository_list) ++ ++ current_repoids_string = ", ".join(current_repodict.keys()) ++ self.log.debug("Repositories currently present on the system: {}".format(current_repoids_string)) ++ ++ cmd_context = mounting.NotIsolatedActions(base_dir='/') ++ ++ for repos_facts in api.consume(RepositoriesFacts): ++ for repo_file in repos_facts.repositories: ++ for repo_data in repo_file.data: ++ if repo_data.repoid in current_repodict: ++ if repo_data.enabled and not current_repodict[repo_data.repoid].enabled: ++ self.log.debug("Repository {} was enabled pre-upgrade, restoring".format(repo_data.repoid)) ++ dnfconfig.enable_repository(cmd_context, repo_data.repoid) ++ elif not repo_data.enabled and current_repodict[repo_data.repoid].enabled: ++ self.log.debug("Repository {} was disabled pre-upgrade, restoring".format(repo_data.repoid)) ++ dnfconfig.disable_repository(cmd_context, repo_data.repoid) diff --git a/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py b/repos/system_upgrade/cloudlinux/actors/scancontrolpanel/actor.py new file mode 100644 index 0000000..96524ed @@ -3402,10 +3459,10 @@ index f4b02e9..c22165e 100644 def test_pes_data_not_found(monkeypatch): def read_or_fetch_mocked(filename, directory="/etc/leapp/files", service=None, allow_empty=False): diff --git a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py -index 01f6df3..9a4990e 100644 +index 01f6df3..8464970 100644 --- a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py +++ b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py -@@ -1,27 +1,67 @@ +@@ -1,27 +1,69 @@ from leapp.actors import Actor from leapp.libraries.common import rhui -from leapp.models import InstalledRedHatSignedRPM, InstalledRPM, InstalledUnsignedRPM @@ -3422,7 +3479,9 @@ index 01f6df3..9a4990e 100644 + '45689c882fa658e0'], + 'centos': ['24c6a8a7f4a80eb5', + '05b555b38483c65d', -+ '4eb84e71f2ee9d55'], ++ '4eb84e71f2ee9d55', ++ 'a963bbdbf533f4fa', ++ '6c7cb6ef305d49d6'], + 'cloudlinux': ['8c55a6628608cb71'], + 'almalinux': ['51d6647ec21ad6ea', + 'd36cb86cb86b3716'], @@ -3483,7 +3542,7 @@ index 01f6df3..9a4990e 100644 signed_pkgs = InstalledRedHatSignedRPM() unsigned_pkgs = InstalledUnsignedRPM() -@@ -32,11 +72,11 @@ class RedHatSignedRpmScanner(Actor): +@@ -32,11 +74,11 @@ class RedHatSignedRpmScanner(Actor): all_signed = [ env for env in env_vars @@ -3498,7 +3557,7 @@ index 01f6df3..9a4990e 100644 def is_gpg_pubkey(pkg): """Check if gpg-pubkey pkg exists or LEAPP_DEVEL_RPMS_ALL_SIGNED=1 -@@ -44,15 +84,30 @@ class RedHatSignedRpmScanner(Actor): +@@ -44,15 +86,30 @@ class RedHatSignedRpmScanner(Actor): gpg-pubkey is not signed as it would require another package to verify its signature """ @@ -3534,7 +3593,7 @@ index 01f6df3..9a4990e 100644 def is_azure_pkg(pkg): """Whitelist Azure config package.""" -@@ -68,16 +123,25 @@ class RedHatSignedRpmScanner(Actor): +@@ -68,16 +125,25 @@ class RedHatSignedRpmScanner(Actor): for pkg in rpm_pkgs.items: if any( [ @@ -4766,6 +4825,41 @@ index 03f3cd4..2ab78ea 100644 } +diff --git a/repos/system_upgrade/common/libraries/dnfconfig.py b/repos/system_upgrade/common/libraries/dnfconfig.py +index 2125f6d..f1dbf70 100644 +--- a/repos/system_upgrade/common/libraries/dnfconfig.py ++++ b/repos/system_upgrade/common/libraries/dnfconfig.py +@@ -114,3 +114,30 @@ def exclude_leapp_rpms(context): + """ + to_exclude = list(set(_get_excluded_pkgs(context) + get_leapp_packages())) + _set_excluded_pkgs(context, to_exclude) ++ ++ ++def enable_repository(context, reponame): ++ _set_repository_state(context, reponame, "enabled") ++ ++ ++def disable_repository(context, reponame): ++ _set_repository_state(context, reponame, "disabled") ++ ++ ++def _set_repository_state(context, repo_id, new_state): ++ """ ++ Set the Yum repository with the provided ID as enabled or disabled. ++ """ ++ if new_state == "enabled": ++ cmd_flag = '--set-enabled' ++ elif new_state == "disabled": ++ cmd_flag = '--set-disabled' ++ ++ cmd = ['dnf', 'config-manager', cmd_flag, repo_id] ++ ++ try: ++ context.call(cmd) ++ except CalledProcessError: ++ api.current_logger().error('Cannot set the dnf configuration') ++ raise ++ api.current_logger().debug('Repository {} has been {}'.format(repo_id, new_state)) diff --git a/repos/system_upgrade/common/libraries/dnfplugin.py b/repos/system_upgrade/common/libraries/dnfplugin.py index 4010e9f..f095575 100644 --- a/repos/system_upgrade/common/libraries/dnfplugin.py diff --git a/SPECS/leapp-repository.spec b/SPECS/leapp-repository.spec index 0f4ae91..4eaa4c3 100644 --- a/SPECS/leapp-repository.spec +++ b/SPECS/leapp-repository.spec @@ -43,7 +43,7 @@ py2_byte_compile "%1" "%2"} Epoch: 1 Name: leapp-repository Version: 0.16.0 -Release: 6%{?dist}.elevate.10 +Release: 6%{?dist}.elevate.11 Summary: Repositories for leapp License: ASL 2.0