diff --git a/repos/system_upgrade/el7toel8/actors/checkremovedpammodules/actor.py b/repos/system_upgrade/el7toel8/actors/checkremovedpammodules/actor.py index 58d49bbe05d3e9c7b4a97daba940e63e397129a7..43e1abde06b51acb240bb32d315bfa57436d082b 100644 --- a/repos/system_upgrade/el7toel8/actors/checkremovedpammodules/actor.py +++ b/repos/system_upgrade/el7toel8/actors/checkremovedpammodules/actor.py @@ -5,6 +5,9 @@ from leapp.tags import ChecksPhaseTag, IPUWorkflowTag from leapp.libraries.stdlib import api from leapp.reporting import create_report from leapp import reporting +from leapp.dialogs import Dialog +from leapp.dialogs.components import BooleanComponent +import subprocess, os class CheckRemovedPamModules(Actor): @@ -20,6 +23,21 @@ class CheckRemovedPamModules(Actor): produces = (Report, ) tags = (ChecksPhaseTag, IPUWorkflowTag, ) + dialogs = (Dialog( + scope='comment_pam_tally2_out', + reason='Confirmation', + components=( + BooleanComponent( + key='confirm', + label='Comment pam_tally2 out?' + 'If not, the upgrade process will be interrupted.', + description='Comment out the pam_tally2 configured in /etc/pam.d/', + default=False, + reason ='pam_tally2 is no longer available, recommend to migrate to pam_faillock' + ), + ) + ),) + def process(self): messages = self.consume(PamConfiguration) config = next(messages, None) @@ -47,6 +65,20 @@ class CheckRemovedPamModules(Actor): replacements.add(replacement) if found_modules: + answer = self.get_answers(self.dialogs[0]) + if answer.get('confirm'): + p = "/etc/pam.d/" + files = [os.path.join(p, f) for f in os.listdir(p) if os.path.isfile(os.path.join(p, f))] + command = ["sed", "-i", '/pam_tally2/s/^/#/'] + files + p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = p.communicate() + exit_code = p.returncode + if exit_code: + api.current_logger().error(stdout+stderr) + raise StopActorExecutionError( + "Could not sed -i '/pam_tally2/s/^/#/' /etc/pam.d/*", details={'details': stderr} + ) + return create_report([ reporting.Title('The {} pam module(s) no longer available'.format(', '.join(found_modules))), reporting.Summary('The services {} using PAM are configured to ' diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/actor.py b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/actor.py index 2dccf4bd52da49044fb03eab31b566c636f36f0f..93004d01ed78afb85e4f29222ea2ff555dfc1037 100644 --- a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/actor.py +++ b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/actor.py @@ -3,6 +3,8 @@ from leapp.models import InstalledRedHatSignedRPM from leapp.tags import IPUWorkflowTag, ChecksPhaseTag from leapp.reporting import Report from leapp.libraries.actor import checkinstalleddebugkernels +from leapp.dialogs import Dialog +from leapp.dialogs.components import BooleanComponent class CheckInstalledDebugKernels(Actor): @@ -19,5 +21,27 @@ class CheckInstalledDebugKernels(Actor): produces = (Report,) tags = (IPUWorkflowTag, ChecksPhaseTag) + dialogs = ( + Dialog( + scope='keep_only_one_kernel-debug', + reason='Confirmation', + components=( + BooleanComponent( + key='confirm', + label='Keep Only one kernel-debug ? ' + 'If not, the upgrade process will be interrupted.', + description='Remove all but one kernel-debug packages before running Leapp', + default=False, + reason ='DNF cannot produce a valid upgrade transaction when' + ' multiple kernel-debug packages are installed.' + ), + ) + ), + ) + + def is_confirm(self): + answer = self.get_answers(self.dialogs[0]) + return answer.get('confirm', False) + def process(self): - checkinstalleddebugkernels.process() + checkinstalleddebugkernels.process(self.is_confirm) diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/libraries/checkinstalleddebugkernels.py b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/libraries/checkinstalleddebugkernels.py index 00c245b211ec5327a98337368b85dcc45f81bd6c..543af20fafe28a8e6c3f112b6ff35426de8b2674 100644 --- a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/libraries/checkinstalleddebugkernels.py +++ b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddebugkernels/libraries/checkinstalleddebugkernels.py @@ -1,6 +1,7 @@ from leapp import reporting from leapp.libraries.stdlib import api from leapp.models import InstalledRedHatSignedRPM +import subprocess def get_kernel_rpm_release(rpm): @@ -20,16 +21,19 @@ def get_kernel_debug_rpms(): return sorted([pkg for pkg in rpms.items if pkg.name == 'kernel-debug'], key=get_kernel_rpm_release) -def process(): +def process(is_confirm): pkgs = get_kernel_debug_rpms() if len(pkgs) > 1: + all_but_latest_kernel_debug = pkgs[:-1] + packages = ['{n}-{v}-{r}'.format(n=pkg.name, v=pkg.version, r=pkg.release) + for pkg in all_but_latest_kernel_debug] + if is_confirm(): + subprocess.call(['yum', 'remove', '-y'] + packages) + return title = 'Multiple debug kernels installed' summary = ('DNF cannot produce a valid upgrade transaction when' ' multiple kernel-debug packages are installed.') hint = ('Remove all but one kernel-debug packages before running Leapp again.') - all_but_latest_kernel_debug = pkgs[:-1] - packages = ['{n}-{v}-{r}'.format(n=pkg.name, v=pkg.version, r=pkg.release) - for pkg in all_but_latest_kernel_debug] commands = [['yum', '-y', 'remove'] + packages] reporting.create_report([ reporting.Title(title), diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/actor.py b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/actor.py index 8676340b9a670b875bd5dec2b6a910bfdf242fc0..75a427bec94330257bed7594d3dcafc0d769f187 100644 --- a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/actor.py +++ b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/actor.py @@ -3,6 +3,8 @@ from leapp.models import InstalledRedHatSignedRPM from leapp.tags import IPUWorkflowTag, ChecksPhaseTag from leapp.reporting import Report from leapp.libraries.actor import checkinstalleddevelkernels +from leapp.dialogs import Dialog +from leapp.dialogs.components import BooleanComponent class CheckInstalledDevelKernels(Actor): @@ -19,5 +21,27 @@ class CheckInstalledDevelKernels(Actor): produces = (Report,) tags = (IPUWorkflowTag, ChecksPhaseTag) + dialogs = ( + Dialog( + scope='keep_only_one_kernel-devel', + reason='Confirmation', + components=( + BooleanComponent( + key='confirm', + label='Keep Only one kernel-devel ? ' + 'If not, the upgrade process will be interrupted.', + description='Remove all but one kernel-devel packages before running Leapp', + default=False, + reason ='DNF cannot produce a valid upgrade transaction when' + ' multiple kernel-devel packages are installed.' + ), + ) + ), + ) + + def is_confirm(self): + answer = self.get_answers(self.dialogs[0]) + return answer.get('confirm', False) + def process(self): - checkinstalleddevelkernels.process() + checkinstalleddevelkernels.process(self.is_confirm) diff --git a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/libraries/checkinstalleddevelkernels.py b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/libraries/checkinstalleddevelkernels.py index 35d6a6705d64bef436a1b54b40824c1fa7c233cc..67e5830db55c67463bf804c914c92873ada43e37 100644 --- a/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/libraries/checkinstalleddevelkernels.py +++ b/repos/system_upgrade/el7toel8/actors/kernel/checkinstalleddevelkernels/libraries/checkinstalleddevelkernels.py @@ -1,6 +1,7 @@ from leapp import reporting from leapp.libraries.stdlib import api from leapp.models import InstalledRedHatSignedRPM +import subprocess def get_kernel_rpm_release(rpm): @@ -20,16 +21,19 @@ def get_kernel_devel_rpms(): return sorted([pkg for pkg in rpms.items if pkg.name == 'kernel-devel'], key=get_kernel_rpm_release) -def process(): +def process(is_confirm): pkgs = get_kernel_devel_rpms() if len(pkgs) > 1: + all_but_latest_kernel_devel = pkgs[:-1] + packages = ['{n}-{v}-{r}'.format(n=pkg.name, v=pkg.version, r=pkg.release) + for pkg in all_but_latest_kernel_devel] + if is_confirm(): + subprocess.call(['yum', 'remove', '-y'] + packages) + return title = 'Multiple devel kernels installed' summary = ('DNF cannot produce a valid upgrade transaction when' ' multiple kernel-devel packages are installed.') hint = ('Remove all but one kernel-devel packages before running Leapp again.') - all_but_latest_kernel_devel = pkgs[:-1] - packages = ['{n}-{v}-{r}'.format(n=pkg.name, v=pkg.version, r=pkg.release) - for pkg in all_but_latest_kernel_devel] commands = [['yum', '-y', 'remove'] + packages] reporting.create_report([ reporting.Title(title),