Compare commits

..

2 Commits
c8 ... c9

Author SHA1 Message Date
84b451f8e1 Import from CS git 2025-05-15 07:48:22 +00:00
51e0b13f69 Import from CS git 2024-11-25 09:13:55 +00:00
29 changed files with 35 additions and 14960 deletions

View File

@ -1,91 +0,0 @@
From 397975d6b63ff70755ea41b8ec8fc413966218e4 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 30 May 2025 14:13:35 +0200
Subject: [PATCH 38/43] Makefile: Non-zero exit code on failed tests in
container
Previously all exit codes from execution of tests inside
container have been ignored and make command ended with zero always.
Also drop testing of el7toel8 repository for Python 3.6 on RHEL 8.
The test started to fail for unknown reason (changes in pytest or
another nonstandard python module?). As we are in the middle of
dropping all el7toel8 and python2 related content, let's just drop
it. Keeping the full removal of Py2 and el7toel8 content on separate
PR.
---
Makefile | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/Makefile b/Makefile
index ceb013ab..6769b2f3 100644
--- a/Makefile
+++ b/Makefile
@@ -164,9 +164,9 @@ help:
@echo " PR=7 SUFFIX='my_additional_suffix' make <target>"
@echo " MR=6 COPR_CONFIG='path/to/the/config/copr/file' make <target>"
@echo " ACTOR=<actor> TEST_LIBS=y make test"
- @echo " BUILD_CONTAINER=el7 make build_container"
+ @echo " BUILD_CONTAINER=rhel8 make build_container"
@echo " TEST_CONTAINER=f34 make test_container"
- @echo " CONTAINER_TOOL=docker TEST_CONTAINER=rhel7 make test_container_no_lint"
+ @echo " CONTAINER_TOOL=docker TEST_CONTAINER=rhel8 make test_container_no_lint"
@echo ""
clean:
@@ -459,30 +459,33 @@ test_container:
$(_CONTAINER_TOOL) ps -q -f name=$$_CONT_NAME && { $(_CONTAINER_TOOL) kill $$_CONT_NAME; $(_CONTAINER_TOOL) rm $$_CONT_NAME; }; \
$(_CONTAINER_TOOL) run -di --name $$_CONT_NAME -v "$$PWD":/repo:Z -e PYTHON_VENV=$$_VENV $$TEST_IMAGE && \
$(_CONTAINER_TOOL) exec $$_CONT_NAME rsync -aur --delete --exclude "tut*" /repo/ /repocopy && \
+ export res=0; \
case $$_VENV in \
python2.7) \
- TEST_CONT_IPU=el7toel8 $(MAKE) _test_container_ipu; \
+ TEST_CONT_IPU=el7toel8 $(MAKE) _test_container_ipu || res=1; \
;;\
python3.6) \
- TEST_CONT_IPU=el7toel8 $(MAKE) _test_container_ipu; \
- TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu; \
+ echo "INFO: Skipping testing of el7toel8 repository. Obsoleted"; \
+ TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu || res=1; \
;; \
python3.9) \
- TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu; \
- TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu; \
+ TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu || res=1; \
+ TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu || res=1; \
;; \
python3.12) \
- TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu; \
+ TEST_CONT_IPU=el9toel10 $(MAKE) _test_container_ipu || res=1; \
;; \
*) \
- TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu; \
- ;;\
+ TEST_CONT_IPU=el8toel9 $(MAKE) _test_container_ipu || res=1; \
+ ;; \
esac; \
$(_CONTAINER_TOOL) kill $$_CONT_NAME; \
- $(_CONTAINER_TOOL) rm $$_CONT_NAME
+ $(_CONTAINER_TOOL) rm $$_CONT_NAME; \
+ [ $$res -ne 0 ] && echo "TIP: If you do not see an error in the end of logs, scroll up. Multiple tests could be executed." ; \
+ exit $$res
test_container_all:
- @for container in "f34" "rhel7" "rhel8"; do \
+ @for container in "f34" "rhel7" "rhel8" "rhel9"; do \
TEST_CONTAINER=$$container $(MAKE) test_container || exit 1; \
done
@@ -490,7 +493,7 @@ test_container_no_lint:
@_TEST_CONT_TARGET="test_no_lint" $(MAKE) test_container
test_container_all_no_lint:
- @for container in "f34" "rhel7" "rhel8"; do \
+ @for container in "f34" "rhel7" "rhel8" "rhel9"; do \
TEST_CONTAINER=$$container $(MAKE) test_container_no_lint || exit 1; \
done
--
2.49.0

View File

@ -1,82 +0,0 @@
From 4e87908b2e17d87b69bcec29ba1e9b777439a0fe Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 30 May 2025 15:02:53 +0200
Subject: [PATCH 39/43] CI: Unit-tests: Rename tasks & tests executions
Previous name have been very long, repeating, and it has been
problem to read the whole informatino about what tests are performed
as the description has been shortened in WebUI, e.g.:
Unit Tests / Run unit tests in containers (Run python linters for el8toel9 and common repositories on p...
Let's change the name so it's shortened and easier read what test
has been actually performed. Also, no need to mention that tests are
running in container anymore, as we are not running unit-tests outside
of the container in upstream. Example of new style names:
Unit Tests / Run: Linters (python:3.9; repos:el9toel10,common) (pull_request)
Unit Tests / Run: Unit Tests (python:3.9; repos:el9toel10,common) (pull_request)
---
.github/workflows/unit-tests.yml | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml
index 37748396..ed82e0e5 100644
--- a/.github/workflows/unit-tests.yml
+++ b/.github/workflows/unit-tests.yml
@@ -9,43 +9,43 @@ on:
jobs:
test:
- name: Run unit tests in containers
+ name: 'Run: ${{ matrix.scenarios.name }}'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
scenarios:
# 9to10
- - name: Run unit tests for el9toel10 and common repositories on python 3.12
+ - name: 'Unit tests (python:3.12; repos:el9toel10,common)'
python: python3.12
repos: 'el9toel10,common'
container: ubi9
- - name: Run python linters for el9toel10 and common repositories on python 3.12
+ - name: 'Linters (python:3.12; repos:el9toel10,common)'
python: python3.12
repos: 'el9toel10,common'
container: ubi9-lint
- - name: Run unit tests for el9toel10 and common repositories on python 3.9
+ - name: 'Unit tests (python:3.9; repos:el9toel10,common)'
python: python3.9
repos: 'el9toel10,common'
container: ubi9
- - name: Run python linters for el9toel10 and common repositories on python 3.9
+ - name: 'Linters (python:3.9; repos:el9toel10,common)'
python: python3.9
repos: 'el9toel10,common'
container: ubi9-lint
# 8to9
- - name: Run unit tests for el8toel9 and common repositories on python 3.9
+ - name: 'Unit tests (python:3.9; repos:el8toel9,common)'
python: python3.9
repos: 'el8toel9,common'
container: ubi9
- - name: Run python linters for el8toel9 and common repositories on python 3.9
+ - name: 'Linters (python:3.9; repos:el8toel9,common)'
python: python3.9
repos: 'el8toel9,common'
container: ubi9-lint
- - name: Run unit tests for el8toel9 and common repositories on python 3.6
+ - name: 'Unit tests (python:3.6; repos:el8toel9,common)'
python: python3.6
repos: 'el8toel9,common'
container: ubi8
- - name: Run python linters for el8toel9 and common repositories on python 3.6
+ - name: 'Linters (python:3.6; repos:el8toel9,common)'
python: python3.6
repos: 'el8toel9,common'
container: ubi8-lint
--
2.49.0

View File

@ -1,166 +0,0 @@
From 2646484407bef15688fb4838c2f61d06f2098f81 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Wed, 30 Apr 2025 12:54:22 +0200
Subject: [PATCH 40/43] Fix parsing of the kernel cmdline
Original parsing has been splitting string tokens by "=" without a
limit, means that e.g.
root=UUID=some-id
has been split to
(root, UUID, some-id)
and and stored just "root" and "UUID" strings in the parsed msg,
instead of "root" and "UUID=some-id".
So split the key=value just based on the first occurence of "="
instead.
JIRA: RHELMISC-12490
Co-Authored-By: Karolina Kula <kkula@redhat.com>
---
.../common/actors/scankernelcmdline/actor.py | 16 ++---
.../libraries/scankernelcmdline.py | 23 +++++++
.../tests/test_scankernelcmdline.py | 67 +++++++++++++++++++
3 files changed, 94 insertions(+), 12 deletions(-)
create mode 100644 repos/system_upgrade/common/actors/scankernelcmdline/libraries/scankernelcmdline.py
create mode 100644 repos/system_upgrade/common/actors/scankernelcmdline/tests/test_scankernelcmdline.py
diff --git a/repos/system_upgrade/common/actors/scankernelcmdline/actor.py b/repos/system_upgrade/common/actors/scankernelcmdline/actor.py
index 9f8fef30..2f1a5ae2 100644
--- a/repos/system_upgrade/common/actors/scankernelcmdline/actor.py
+++ b/repos/system_upgrade/common/actors/scankernelcmdline/actor.py
@@ -1,12 +1,12 @@
from leapp.actors import Actor
-from leapp.libraries.stdlib import run
-from leapp.models import KernelCmdline, KernelCmdlineArg
+from leapp.libraries.actor import scankernelcmdline
+from leapp.models import KernelCmdline
from leapp.tags import FactsPhaseTag, IPUWorkflowTag
class ScanKernelCmdline(Actor):
"""
- No documentation has been provided for the scan_kernel_cmdline actor.
+ Scan the kernel command line of the booted system.
"""
name = 'scan_kernel_cmdline'
@@ -15,12 +15,4 @@ class ScanKernelCmdline(Actor):
tags = (FactsPhaseTag, IPUWorkflowTag)
def process(self):
- cmdline = run(['cat', '/proc/cmdline'])['stdout'].strip()
- parameters = []
- for parameter in cmdline.split(' '):
- if '=' in parameter:
- kv = parameter.split('=')
- parameters.append(KernelCmdlineArg(key=kv[0], value=kv[1]))
- else:
- parameters.append(KernelCmdlineArg(key=parameter))
- self.produce(KernelCmdline(parameters=parameters))
+ scankernelcmdline.parse_cmdline_input()
diff --git a/repos/system_upgrade/common/actors/scankernelcmdline/libraries/scankernelcmdline.py b/repos/system_upgrade/common/actors/scankernelcmdline/libraries/scankernelcmdline.py
new file mode 100644
index 00000000..9cffa70e
--- /dev/null
+++ b/repos/system_upgrade/common/actors/scankernelcmdline/libraries/scankernelcmdline.py
@@ -0,0 +1,23 @@
+from leapp.libraries.stdlib import api, CalledProcessError, run
+from leapp.models import KernelCmdline, KernelCmdlineArg
+
+
+def get_cmdline_input():
+ try:
+ cmdline_input = run(['cat', '/proc/cmdline'])['stdout'].strip()
+ return cmdline_input
+ except (OSError, CalledProcessError):
+ api.current_logger().debug('Executing `cat /proc/cmdline` failed', exc_info=True)
+ return ''
+
+
+def parse_cmdline_input():
+ cmdline = get_cmdline_input()
+ parameters = []
+ for parameter in cmdline.split(' '):
+ if '=' in parameter:
+ kv = parameter.split('=', 1)
+ parameters.append(KernelCmdlineArg(key=kv[0], value=kv[1]))
+ else:
+ parameters.append(KernelCmdlineArg(key=parameter))
+ api.produce(KernelCmdline(parameters=parameters))
diff --git a/repos/system_upgrade/common/actors/scankernelcmdline/tests/test_scankernelcmdline.py b/repos/system_upgrade/common/actors/scankernelcmdline/tests/test_scankernelcmdline.py
new file mode 100644
index 00000000..ff79054f
--- /dev/null
+++ b/repos/system_upgrade/common/actors/scankernelcmdline/tests/test_scankernelcmdline.py
@@ -0,0 +1,67 @@
+import pytest
+
+from leapp.libraries.actor import scankernelcmdline
+from leapp.libraries.common.testutils import CurrentActorMocked, produce_mocked
+from leapp.libraries.stdlib import api, CalledProcessError
+from leapp.models import KernelCmdline, KernelCmdlineArg
+
+
+def mock_cmd_output():
+ expected_cmd_output = (
+ 'BOOT_IMAGE=(hd0,msdos1)/vmlinuz-xxx root=UUID=some_uid ro console=tty0'
+ ' console=ttyS0,115200 rd_NO_PLYMOUTH biosdevname=0 net.ifnames=0 crashkernel=auto'
+ )
+ return expected_cmd_output
+
+
+def test_cmdline_output(monkeypatch):
+
+ monkeypatch.setattr(scankernelcmdline, 'get_cmdline_input', mock_cmd_output)
+ current_actor = CurrentActorMocked(src_ver='8.10', dst_ver='9.6')
+ monkeypatch.setattr(api, 'current_actor', current_actor)
+ monkeypatch.setattr(api, 'produce', produce_mocked())
+
+ scankernelcmdline.parse_cmdline_input()
+
+ expected_params = [KernelCmdlineArg(key=k, value=v) for k, v in [
+ ('BOOT_IMAGE', '(hd0,msdos1)/vmlinuz-xxx'),
+ ('root', 'UUID=some_uid'),
+ ('ro', None),
+ ('console', 'tty0'),
+ ('console', 'ttyS0,115200'),
+ ('rd_NO_PLYMOUTH', None),
+ ('biosdevname', '0'),
+ ('net.ifnames', '0'),
+ ('crashkernel', 'auto')]]
+
+ expected_output_msg = KernelCmdline(parameters=expected_params)
+ assert api.produce.model_instances
+ assert expected_output_msg == api.produce.model_instances[0]
+
+
+def test_cmdline_content(monkeypatch):
+
+ def run_mocked(cmd, **kwargs):
+ assert cmd == ['cat', '/proc/cmdline']
+ output = mock_cmd_output()
+ return {'stdout': output}
+
+ monkeypatch.setattr(scankernelcmdline, 'run', run_mocked)
+ cmd_output = scankernelcmdline.get_cmdline_input()
+ expected_cmd_output = mock_cmd_output()
+
+ assert cmd_output == expected_cmd_output
+
+
+@pytest.mark.parametrize('is_os_error', [True, False])
+def test_cmdline_run_failed(monkeypatch, is_os_error):
+
+ def run_mocked_error(cmd, **kwargs):
+ assert cmd == ['cat', '/proc/cmdline']
+ if is_os_error:
+ raise OSError('OSError raised')
+ raise CalledProcessError("CalledProcessError raised", cmd, "result")
+
+ monkeypatch.setattr(scankernelcmdline, 'run', run_mocked_error)
+ cmd_output = scankernelcmdline.get_cmdline_input()
+ assert cmd_output == ''
--
2.49.0

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +0,0 @@
From 6c205281850c28068edc7fc5ab453c65398b7054 Mon Sep 17 00:00:00 2001
From: Petr Stodulka <pstodulk@redhat.com>
Date: Fri, 30 May 2025 18:28:25 +0200
Subject: [PATCH 43/43] unit-tests: suppress deprecation warning for
is_rhel_alt()
The deprecation warning is not wanted in unit-tests. Supress it.
Signed-off-by: Petr Stodulka <pstodulk@redhat.com>
---
.../system_upgrade/common/libraries/config/tests/test_version.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/repos/system_upgrade/common/libraries/config/tests/test_version.py b/repos/system_upgrade/common/libraries/config/tests/test_version.py
index 420571c0..d51f8098 100644
--- a/repos/system_upgrade/common/libraries/config/tests/test_version.py
+++ b/repos/system_upgrade/common/libraries/config/tests/test_version.py
@@ -108,6 +108,7 @@ def test_matches_target_version(monkeypatch, result, version_list):
(False, '4.14.0-100.8.2.el8.x86_64', 'rhel', '8.1'),
(False, '4.14.0-100.8.2.el9.x86_64', 'rhel', '9.1'),
])
+@suppress_deprecation(version.is_rhel_alt)
def test_is_rhel_alt(monkeypatch, result, kernel, release_id, src_ver):
monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(src_ver=src_ver, kernel=kernel,
release_id=release_id))
--
2.49.0

View File

@ -1,267 +0,0 @@
From c7ea9fc29989a37071bf6355828328910b6b5e1d Mon Sep 17 00:00:00 2001
From: Daniel Diblik <ddiblik@redhat.com>
Date: Tue, 17 Jun 2025 15:21:15 +0200
Subject: [PATCH 44/66] Remove obsolete workflows
* tmt-tests.yml and reuse-copr-build.yml were replaced by the Packit
workflows ages ago
* removed the obsolete workflows
Signed-off-by: Daniel Diblik <ddiblik@redhat.com>
---
.github/workflows/reuse-copr-build.yml | 163 -------------------------
.github/workflows/tmt-tests.yml | 72 -----------
2 files changed, 235 deletions(-)
delete mode 100644 .github/workflows/reuse-copr-build.yml
delete mode 100644 .github/workflows/tmt-tests.yml
diff --git a/.github/workflows/reuse-copr-build.yml b/.github/workflows/reuse-copr-build.yml
deleted file mode 100644
index a772fb64..00000000
--- a/.github/workflows/reuse-copr-build.yml
+++ /dev/null
@@ -1,163 +0,0 @@
-name: reuse-copr-build@TF
-
-on:
- workflow_call:
- secrets:
- FEDORA_COPR_LOGIN:
- required: true
- FEDORA_COPR_TOKEN:
- required: true
- outputs:
- artifacts:
- description: "A string with test artifacts to install in tft test env"
- value: ${{ jobs.reusable_workflow_copr_build_job.outputs.artifacts }}
-
-jobs:
- reusable_workflow_copr_build_job:
- # This job only runs for '/rerun' pull request comments by owner, member, or collaborator of the repo/organization.
- name: Build copr builds for tft tests
- runs-on: ubuntu-24.04
- outputs:
- artifacts: ${{ steps.gen_artifacts.outputs.artifacts }}
- if: |
- github.event.issue.pull_request
- && startsWith(github.event.comment.body, '/rerun')
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
- steps:
- - name: Update repository
- id: repo_update
- run: sudo apt-get update
-
- - name: Install necessary deps
- id: deps_install
- run: sudo apt-get install -y libkrb5-dev
-
- - name: Get pull request number
- id: pr_nr
- run: |
- PR_URL="${{ github.event.comment.issue_url }}"
- echo "::set-output name=pr_nr::${PR_URL##*/}"
-
- - name: Checkout
- # TODO: The correct way to checkout would be to use similar approach as in get_commit_by_timestamp function of
- # the github gluetool module (i.e. do not use HEAD but the last commit before comment).
- id: checkout
- uses: actions/checkout@v4
- with:
- ref: "refs/pull/${{ steps.pr_nr.outputs.pr_nr }}/head"
-
- - name: Get ref and sha
- id: ref_sha
- run: |
- echo "::set-output name=sha::$(git rev-parse --short HEAD)"
- echo "::set-output name=ref::refs/pull/${{ steps.pr_nr.outputs.pr_nr }}/head"
-
- - name: Trigger copr build
- id: copr_build
- env:
- COPR_CONFIG: "copr_fedora.conf"
- COPR_CHROOT: "epel-8-x86_64"
- COPR_REPO: "@oamg/leapp"
- run: |
- cat << EOF > $COPR_CONFIG
- [copr-cli]
- login = ${{ secrets.FEDORA_COPR_LOGIN }}
- username = oamgbot
- token = ${{ secrets.FEDORA_COPR_TOKEN }}
- copr_url = https://copr.fedorainfracloud.org
- # expiration date: 2030-07-04
- EOF
-
- pip install copr-cli
- PR=${{ steps.pr_nr.outputs.pr_nr }} COPR_CONFIG=$COPR_CONFIG COPR_REPO="$COPR_REPO" COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
-
- COPR_URL=$(grep -Po 'https://copr.fedorainfracloud.org/coprs/build/\d+' copr.log)
- echo "::set-output name=copr_url::${COPR_URL}"
- echo "::set-output name=copr_id::${COPR_URL##*/}"
-
- - name: Add comment with copr build url
- # TODO: Create comment when copr build fails.
- id: link_copr
- uses: actions/github-script@v7
- with:
- script: |
- github.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: 'Copr build succeeded: ${{ steps.copr_build.outputs.copr_url }}'
- })
-
- - name: Get dependent leapp pr number from rerun comment
- uses: actions-ecosystem/action-regex-match@v2
- id: leapp_pr_regex_match
- with:
- text: ${{ github.event.comment.body }}
- regex: '^/(rerun|rerun-sst)\s+([0-9]+)\s*$'
-
- - name: If leapp_pr was specified in the comment - trigger copr build
- # TODO: XXX FIXME This should schedule copr build for leapp but for now it will be just setting an env var
- id: leapp_pr
- if: ${{ steps.leapp_pr_regex_match.outputs.match != '' }}
- run: |
- echo "::set-output name=leapp_pr::${{ steps.leapp_pr_regex_match.outputs.group2 }}"
-
- - name: Checkout leapp
- id: checkout_leapp
- if: ${{ steps.leapp_pr_regex_match.outputs.match != '' }}
- uses: actions/checkout@v4
- with:
- repository: "oamg/leapp"
- ref: "refs/pull/${{ steps.leapp_pr.outputs.leapp_pr }}/head"
-
- - name: Get ref and sha for leapp
- id: ref_sha_leapp
- if: ${{ steps.leapp_pr_regex_match.outputs.match != '' }}
- run: |
- echo "::set-output name=sha::$(git rev-parse --short HEAD)"
- echo "::set-output name=ref::refs/pull/${{ steps.leapp_pr.outputs.leapp_pr }}/head"
-
- - name: Trigger copr build for leapp
- id: copr_build_leapp
- if: ${{ steps.leapp_pr_regex_match.outputs.match != '' }}
- env:
- COPR_CONFIG: "copr_fedora.conf"
- COPR_CHROOT: "epel-8-x86_64"
- COPR_REPO: "@oamg/leapp"
- run: |
- cat << EOF > $COPR_CONFIG
- [copr-cli]
- login = ${{ secrets.FEDORA_COPR_LOGIN }}
- username = oamgbot
- token = ${{ secrets.FEDORA_COPR_TOKEN }}
- copr_url = https://copr.fedorainfracloud.org
- # expiration date: 2030-07-04
- EOF
-
- pip install copr-cli
- PR=${{ steps.leapp_pr.outputs.leapp_pr }} COPR_CONFIG=$COPR_CONFIG COPR_REPO="$COPR_REPO" COPR_CHROOT=$COPR_CHROOT make copr_build | tee copr.log
-
- COPR_URL=$(grep -Po 'https://copr.fedorainfracloud.org/coprs/build/\d+' copr.log)
- echo "::set-output name=copr_url::${COPR_URL}"
- echo "::set-output name=copr_id::${COPR_URL##*/}"
-
- - name: Add comment with copr build url for leapp
- # TODO: Create comment when copr build fails.
- id: link_copr_leapp
- if: ${{ steps.leapp_pr_regex_match.outputs.match != '' }}
- uses: actions/github-script@v7
- with:
- script: |
- github.issues.createComment({
- issue_number: context.issue.number,
- owner: context.repo.owner,
- repo: context.repo.repo,
- body: 'Copr build succeeded: ${{ steps.copr_build_leapp.outputs.copr_url }}'
- })
-
- - name: Generate artifacts output
- id: gen_artifacts
- env:
- ARTIFACTS: ${{ steps.leapp_pr_regex_match.outputs.match != '' && format('{0};{1}', steps.copr_build_leapp.outputs.copr_id, steps.copr_build.outputs.copr_id) || steps.copr_build.outputs.copr_id }}
- run: |
- echo "::set-output name=artifacts::${{ env.ARTIFACTS }}"
diff --git a/.github/workflows/tmt-tests.yml b/.github/workflows/tmt-tests.yml
deleted file mode 100644
index c9f76ef7..00000000
--- a/.github/workflows/tmt-tests.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: tmt@TF
-
-on:
- issue_comment:
- types:
- - created
-
-jobs:
- call_workflow_copr_build:
- uses: ./.github/workflows/reuse-copr-build.yml
- secrets: inherit
-
- call_workflow_tests_86to90_integration:
- needs: call_workflow_copr_build
- uses: oamg/leapp/.github/workflows/reuse-tests-8to9.yml@main
- secrets: inherit
- with:
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
- tmt_plan_regex: "^(?!.*max_sst)(.*tier1)"
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;TARGET_KERNEL=el9;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
- pull_request_status_name: "8.6to9.0"
- if: |
- github.event.issue.pull_request
- && ! startsWith(github.event.comment.body, '/rerun-sst')
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
-
- call_workflow_tests_88to92_integration:
- needs: call_workflow_copr_build
- uses: oamg/leapp/.github/workflows/reuse-tests-8to9.yml@main
- secrets: inherit
- with:
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
- tmt_plan_regex: "^(?!.*max_sst)(.*tier1)"
- variables: 'SOURCE_RELEASE=8.8;TARGET_RELEASE=9.2;TARGET_KERNEL=el9;RHSM_REPOS=rhel-8-for-x86_64-appstream-rpms,rhel-8-for-x86_64-baseos-rpms;LEAPPDATA_BRANCH=upstream'
- compose: "RHEL-8.8.0-Nightly"
- pull_request_status_name: "8.8to9.2"
- tmt_context: "distro=rhel-8.8"
- if: |
- github.event.issue.pull_request
- && ! startsWith(github.event.comment.body, '/rerun-sst')
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
-
- call_workflow_tests_86to90_sst:
- needs: call_workflow_copr_build
- uses: oamg/leapp/.github/workflows/reuse-tests-8to9.yml@main
- secrets: inherit
- with:
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
- tmt_plan_regex: "^(?!.*tier[2-3].*)(.*max_sst.*)"
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;TARGET_KERNEL=el9;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;LEAPPDATA_BRANCH=upstream'
- pull_request_status_name: "8to9-sst"
- update_pull_request_status: 'false'
- if: |
- github.event.issue.pull_request
- && startsWith(github.event.comment.body, '/rerun-sst')
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
-
- call_workflow_tests_86to90_aws:
- needs: call_workflow_copr_build
- uses: oamg/leapp/.github/workflows/reuse-tests-8to9.yml@main
- secrets: inherit
- with:
- copr_artifacts: ${{ needs.call_workflow_copr_build.outputs.artifacts }}
- tmt_plan_regex: "^(?!.*upgrade_plugin)(?!.*tier[2-3].*)(?!.*rhsm)(?!.*c2r)(?!.*sap)(?!.*7to8)(.*e2e)"
- compose: "RHEL-8.6-rhui"
- environment_settings: '{"provisioning": {"post_install_script": "#!/bin/sh\nsudo sed -i s/.*ssh-rsa/ssh-rsa/ /root/.ssh/authorized_keys"}}'
- pull_request_status_name: "8to9-aws-e2e"
- variables: 'SOURCE_RELEASE=8.6;TARGET_RELEASE=9.0;TARGET_KERNEL=el9;RHSM_REPOS=rhel-8-for-x86_64-appstream-eus-rpms,rhel-8-for-x86_64-baseos-eus-rpms;RHUI=aws;LEAPPDATA_BRANCH=upstream'
- if: |
- github.event.issue.pull_request
- && ! startsWith(github.event.comment.body, '/rerun-sst')
- && contains(fromJson('["OWNER", "MEMBER", "COLLABORATOR"]'), github.event.comment.author_association)
--
2.50.1

View File

@ -1,24 +0,0 @@
From 7c6bb64e550ccfefe4001e79fef44b7d69446c36 Mon Sep 17 00:00:00 2001
From: Michal Bocek <mbocek@redhat.com>
Date: Thu, 19 Jun 2025 12:46:50 +0200
Subject: [PATCH 45/66] README: IRC -> GitHub discussions
The Leapp team is not available on IRC anymore. We advise the public to
talk to us on GitHub instead.
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 5ec5f723..6b45b4b7 100644
--- a/README.md
+++ b/README.md
@@ -29,4 +29,4 @@ Then you may attach only the `leapp-logs.tgz` file.
Well gladly answer your questions and lead you to through any troubles with the
actor development.
-You can reach us at IRC: `#leapp` on Libera.Chat.
+You can reach us in the [discussions sections of our GitHub repository](https://github.com/oamg/leapp-repository/discussions).
--
2.50.1

View File

@ -1,538 +0,0 @@
From 9966eb19daca97c18d798080c62af5638c1e0eab Mon Sep 17 00:00:00 2001
From: David Kubek <dkubek@redhat.com>
Date: Tue, 20 Aug 2024 12:57:42 +0200
Subject: [PATCH 46/66] Resolve boot issues in hybrid azure during upgrades
from RHEL 7 > 8 > 9.
This commit addresses the issue where the `/boot/grub2/grub.cfg` file is
overwritten during the upgrade process by an old RHEL7 configuration
leftover on the system, causing the system to fail to boot.
The problem occurs on hybrid Azure images, which support both UEFI and
Legacy systems and have both `grub-pc` and `grub-efi` packages installed.
It is caused by one of the scriplets in `grub-efi` which overwrites the old
configuration.
If old configuration is detected, this actor regenerates the grub
configuration using `grub2-mkconfig -o /boot/grub2/grub.cfg` after
installing rpms to ensure the correct boot configuration is in place.
The fix is applied specifically to Azure hybrid cloud systems.
JIRA: RHEL-38255
---
.../cloud/ensurevalidgrubcfghybrid/actor.py | 34 +++
.../libraries/ensurevalidgrubcfghybrid.py | 66 ++++++
.../tests/files/invalid_grub.cfg | 51 +++++
.../tests/files/valid_grub.cfg | 195 ++++++++++++++++++
.../tests/test_ensurevalidgrubcfghybrid.py | 124 +++++++++++
5 files changed, 470 insertions(+)
create mode 100644 repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/actor.py
create mode 100644 repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/libraries/ensurevalidgrubcfghybrid.py
create mode 100644 repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/invalid_grub.cfg
create mode 100644 repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/valid_grub.cfg
create mode 100644 repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/test_ensurevalidgrubcfghybrid.py
diff --git a/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/actor.py b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/actor.py
new file mode 100644
index 00000000..68de0433
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/actor.py
@@ -0,0 +1,34 @@
+from leapp.actors import Actor
+from leapp.libraries.actor import ensurevalidgrubcfghybrid
+from leapp.models import HybridImage
+from leapp.tags import ApplicationsPhaseTag, IPUWorkflowTag
+
+
+class EnsureValidGrubcfgHybrid(Actor):
+ """
+ Resolve boot failures in Azure Gen1 VMs during upgrades from RHEL 7 to RHEL 8 to RHEL 9.
+
+ This actor addresses the issue where the `/boot/grub2/grub.cfg` file is
+ overwritten during the upgrade process by an old RHEL7 configuration
+ leftover on the system, causing the system to fail to boot.
+
+ The problem occurs on hybrid Azure images, which support both UEFI and
+ Legacy systems and have both `grub-pc` and `grub-efi` packages installed.
+ It is caused by one of the scriplets in `grub-efi` which overwrites the old
+ configuration.
+
+ If old configuration is detected, this actor regenerates the grub
+ configuration using `grub2-mkconfig -o /boot/grub2/grub.cfg` after
+ installing rpms to ensure the correct boot configuration is in place.
+
+ The fix is applied specifically to Azure hybrid cloud systems.
+
+ """
+
+ name = 'ensure_valid_grubcfg_hybrid'
+ consumes = (HybridImage,)
+ produces = ()
+ tags = (ApplicationsPhaseTag, IPUWorkflowTag)
+
+ def process(self):
+ ensurevalidgrubcfghybrid.process()
diff --git a/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/libraries/ensurevalidgrubcfghybrid.py b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/libraries/ensurevalidgrubcfghybrid.py
new file mode 100644
index 00000000..127eccfc
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/libraries/ensurevalidgrubcfghybrid.py
@@ -0,0 +1,66 @@
+import re
+
+from leapp.exceptions import StopActorExecutionError
+from leapp.libraries.common.config.architecture import ARCH_ACCEPTED
+from leapp.libraries.stdlib import api, CalledProcessError, run
+from leapp.models import HybridImage
+
+GRUB_CFG_PATH = '/boot/grub2/grub.cfg'
+
+MATCH_ARCH = r'({})'.format('|'.join(ARCH_ACCEPTED))
+MATCH_RHEL7_KERNEL_VERSION = r"\d+\.\d+\.\d+-\d+(\.\d+)*\.el7\.{}".format(MATCH_ARCH)
+MATCH_RHEL7_KERNEL_DEFINITION = r"vmlinuz-{}".format(MATCH_RHEL7_KERNEL_VERSION)
+
+
+def process():
+ if not _is_hybrid_image():
+ api.current_logger().info('System is not a hybrid image. Skipping.')
+ return
+
+ grubcfg = _read_grubcfg()
+ if _is_grubcfg_invalid(grubcfg):
+ _run_grub2_mkconfig()
+
+
+def _is_hybrid_image():
+ return next(api.consume(HybridImage), None) is not None
+
+
+def _read_grubcfg():
+ api.current_logger().debug('Reading {}:'.format(GRUB_CFG_PATH))
+ with open(GRUB_CFG_PATH, 'r') as fin:
+ grubcfg = fin.read()
+
+ api.current_logger().debug(grubcfg)
+ return grubcfg
+
+
+def _is_grubcfg_invalid(grubcfg):
+ return _contains_rhel7_kernel_definition(grubcfg)
+
+
+def _contains_rhel7_kernel_definition(grubcfg):
+ api.current_logger().debug("Looking for RHEL7 kernel version ...")
+
+ match = re.search(MATCH_RHEL7_KERNEL_DEFINITION, grubcfg)
+
+ api.current_logger().debug(
+ "Matched: {}".format(match.group() if match else "[NO MATCH]")
+ )
+
+ return match is not None
+
+
+def _run_grub2_mkconfig():
+ api.current_logger().info("Regenerating {}".format(GRUB_CFG_PATH))
+
+ try:
+ run([
+ 'grub2-mkconfig',
+ '-o',
+ GRUB_CFG_PATH
+ ])
+ except CalledProcessError as err:
+ msg = 'Could not regenerate {}: {}'.format(GRUB_CFG_PATH, str(err))
+ api.current_logger().error(msg)
+ raise StopActorExecutionError(msg)
diff --git a/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/invalid_grub.cfg b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/invalid_grub.cfg
new file mode 100644
index 00000000..58f55c53
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/invalid_grub.cfg
@@ -0,0 +1,51 @@
+
+# Created by osbuild
+
+set timeout=10
+
+# load the grubenv file
+load_env
+
+# selection of the next boot entry
+if [ "${next_entry}" ] ; then
+ set default="${next_entry}"
+ set next_entry=
+ save_env next_entry
+ set boot_once=true
+else
+ set default="${saved_entry}"
+fi
+
+if [ "${prev_saved_entry}" ]; then
+ set saved_entry="${prev_saved_entry}"
+ save_env saved_entry
+ set prev_saved_entry=
+ save_env prev_saved_entry
+ set boot_once=true
+fi
+
+function savedefault {
+ if [ -z "${boot_once}" ]; then
+ saved_entry="${chosen}"
+ save_env saved_entry
+ fi
+}
+
+serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
+terminal_input serial console
+terminal_output serial console
+
+menuentry 'Red Hat Enterprise Linux Server (3.10.0-1160.119.1.el7.x86_64) 7.9 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted --id 'gnulinux-3.10.0-1160.99.1.el7.x86_64-advanced-76a22bf4-f153-4541-b6c7-0332c0dfaeac' {
+ insmod all_video
+ set gfxpayload=keep
+ search --no-floppy --set=root --fs-uuid 61779359-8d11-49ba-bc9d-8d038ee4b108
+ linuxefi /vmlinuz-3.10.0-1160.119.1.el7.x86_64 root=UUID=d3c9a2bd-7ffb-4113-9b8f-234c13b18274 ro crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 scsi_mod.use_blk_mq=y LANG=en_US.UTF-8
+ initrdefi /initramfs-3.10.0-1160.119.1.el7.x86_64.img
+}
+menuentry 'Red Hat Enterprise Linux (3.10.0-1160.99.1.el7.x86_64) 7.9 (Maipo)' --class red --class gnu-linux --class gnu --class os --unrestricted --id 'gnulinux-3.10.0-1160.99.1.el7.x86_64-advanced-76a22bf4-f153-4541-b6c7-0332c0dfaeac' {
+ insmod all_video
+ set gfxpayload=keep
+ search --no-floppy --set=root --fs-uuid 61779359-8d11-49ba-bc9d-8d038ee4b108
+ linuxefi /vmlinuz-3.10.0-1160.99.1.el7.x86_64 root=UUID=d3c9a2bd-7ffb-4113-9b8f-234c13b18274 ro crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 scsi_mod.use_blk_mq=y
+ initrdefi /initramfs-3.10.0-1160.99.1.el7.x86_64.img
+}
diff --git a/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/valid_grub.cfg b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/valid_grub.cfg
new file mode 100644
index 00000000..8192665e
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/files/valid_grub.cfg
@@ -0,0 +1,195 @@
+#
+# DO NOT EDIT THIS FILE
+#
+# It is automatically generated by grub2-mkconfig using templates
+# from /etc/grub.d and settings from /etc/default/grub
+#
+
+### BEGIN /etc/grub.d/00_header ###
+set pager=1
+
+if [ -f ${config_directory}/grubenv ]; then
+ load_env -f ${config_directory}/grubenv
+elif [ -s $prefix/grubenv ]; then
+ load_env
+fi
+if [ "${next_entry}" ] ; then
+ set default="${next_entry}"
+ set next_entry=
+ save_env next_entry
+ set boot_once=true
+else
+ set default="${saved_entry}"
+fi
+
+if [ x"${feature_menuentry_id}" = xy ]; then
+ menuentry_id_option="--id"
+else
+ menuentry_id_option=""
+fi
+
+export menuentry_id_option
+
+if [ "${prev_saved_entry}" ]; then
+ set saved_entry="${prev_saved_entry}"
+ save_env saved_entry
+ set prev_saved_entry=
+ save_env prev_saved_entry
+ set boot_once=true
+fi
+
+function savedefault {
+ if [ -z "${boot_once}" ]; then
+ saved_entry="${chosen}"
+ save_env saved_entry
+ fi
+}
+
+function load_video {
+ if [ x$feature_all_video_module = xy ]; then
+ insmod all_video
+ else
+ insmod efi_gop
+ insmod efi_uga
+ insmod ieee1275_fb
+ insmod vbe
+ insmod vga
+ insmod video_bochs
+ insmod video_cirrus
+ fi
+}
+
+serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1
+terminal_input serial console
+terminal_output serial console
+if [ x$feature_timeout_style = xy ] ; then
+ set timeout_style=countdown
+ set timeout=10
+# Fallback hidden-timeout code in case the timeout_style feature is
+# unavailable.
+elif sleep --interruptible 10 ; then
+ set timeout=0
+fi
+### END /etc/grub.d/00_header ###
+
+### BEGIN /etc/grub.d/00_tuned ###
+set tuned_params=""
+set tuned_initrd=""
+### END /etc/grub.d/00_tuned ###
+
+### BEGIN /etc/grub.d/01_users ###
+if [ -f ${prefix}/user.cfg ]; then
+ source ${prefix}/user.cfg
+ if [ -n "${GRUB2_PASSWORD}" ]; then
+ set superusers="root"
+ export superusers
+ password_pbkdf2 root ${GRUB2_PASSWORD}
+ fi
+fi
+### END /etc/grub.d/01_users ###
+
+### BEGIN /etc/grub.d/08_fallback_counting ###
+insmod increment
+# Check if boot_counter exists and boot_success=0 to activate this behaviour.
+if [ -n "${boot_counter}" -a "${boot_success}" = "0" ]; then
+ # if countdown has ended, choose to boot rollback deployment,
+ # i.e. default=1 on OSTree-based systems.
+ if [ "${boot_counter}" = "0" -o "${boot_counter}" = "-1" ]; then
+ set default=1
+ set boot_counter=-1
+ # otherwise decrement boot_counter
+ else
+ decrement boot_counter
+ fi
+ save_env boot_counter
+fi
+### END /etc/grub.d/08_fallback_counting ###
+
+### BEGIN /etc/grub.d/10_linux ###
+insmod part_gpt
+insmod xfs
+set root='hd0,gpt2'
+if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 61779359-8d11-49ba-bc9d-8d038ee4b108
+else
+ search --no-floppy --fs-uuid --set=root 61779359-8d11-49ba-bc9d-8d038ee4b108
+fi
+insmod part_gpt
+insmod xfs
+set boot='hd0,gpt2'
+if [ x$feature_platform_search_hint = xy ]; then
+ search --no-floppy --fs-uuid --set=boot --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 61779359-8d11-49ba-bc9d-8d038ee4b108
+else
+ search --no-floppy --fs-uuid --set=boot 61779359-8d11-49ba-bc9d-8d038ee4b108
+fi
+
+# This section was generated by a script. Do not modify the generated file - all changes
+# will be lost the next time file is regenerated. Instead edit the BootLoaderSpec files.
+#
+# The blscfg command parses the BootLoaderSpec files stored in /boot/loader/entries and
+# populates the boot menu. Please refer to the Boot Loader Specification documentation
+# for the files format: https://www.freedesktop.org/wiki/Specifications/BootLoaderSpec/.
+
+# The kernelopts variable should be defined in the grubenv file. But to ensure that menu
+# entries populated from BootLoaderSpec files that use this variable work correctly even
+# without a grubenv file, define a fallback kernelopts variable if this has not been set.
+#
+# The kernelopts variable in the grubenv file can be modified using the grubby tool or by
+# executing the grub2-mkconfig tool. For the latter, the values of the GRUB_CMDLINE_LINUX
+# and GRUB_CMDLINE_LINUX_DEFAULT options from /etc/default/grub file are used to set both
+# the kernelopts variable in the grubenv file and the fallback kernelopts variable.
+if [ -z "${kernelopts}" ]; then
+ set kernelopts="root=/dev/mapper/rootvg-rootlv ro ro crashkernel=auto console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300 scsi_mod.use_blk_mq=y "
+fi
+
+insmod blscfg
+blscfg
+### END /etc/grub.d/10_linux ###
+
+### BEGIN /etc/grub.d/10_reset_boot_success ###
+# Hiding the menu is ok if last boot was ok or if this is a first boot attempt to boot the entry
+if [ "${boot_success}" = "1" -o "${boot_indeterminate}" = "1" ]; then
+ set menu_hide_ok=1
+else
+ set menu_hide_ok=0
+fi
+# Reset boot_indeterminate after a successful boot
+if [ "${boot_success}" = "1" ] ; then
+ set boot_indeterminate=0
+# Avoid boot_indeterminate causing the menu to be hidden more then once
+elif [ "${boot_indeterminate}" = "1" ]; then
+ set boot_indeterminate=2
+fi
+# Reset boot_success for current boot
+set boot_success=0
+save_env boot_success boot_indeterminate
+### END /etc/grub.d/10_reset_boot_success ###
+
+### BEGIN /etc/grub.d/12_menu_auto_hide ###
+### END /etc/grub.d/12_menu_auto_hide ###
+
+### BEGIN /etc/grub.d/20_linux_xen ###
+### END /etc/grub.d/20_linux_xen ###
+
+### BEGIN /etc/grub.d/20_ppc_terminfo ###
+### END /etc/grub.d/20_ppc_terminfo ###
+
+### BEGIN /etc/grub.d/30_os-prober ###
+### END /etc/grub.d/30_os-prober ###
+
+### BEGIN /etc/grub.d/30_uefi-firmware ###
+### END /etc/grub.d/30_uefi-firmware ###
+
+### BEGIN /etc/grub.d/40_custom ###
+# This file provides an easy way to add custom menu entries. Simply type the
+# menu entries you want to add after this comment. Be careful not to change
+# the 'exec tail' line above.
+### END /etc/grub.d/40_custom ###
+
+### BEGIN /etc/grub.d/41_custom ###
+if [ -f ${config_directory}/custom.cfg ]; then
+ source ${config_directory}/custom.cfg
+elif [ -z "${config_directory}" -a -f $prefix/custom.cfg ]; then
+ source $prefix/custom.cfg;
+fi
+### END /etc/grub.d/41_custom ###
diff --git a/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/test_ensurevalidgrubcfghybrid.py b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/test_ensurevalidgrubcfghybrid.py
new file mode 100644
index 00000000..c0fb0a0d
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/cloud/ensurevalidgrubcfghybrid/tests/test_ensurevalidgrubcfghybrid.py
@@ -0,0 +1,124 @@
+import os
+
+import pytest
+
+from leapp.exceptions import StopActorExecutionError
+from leapp.libraries.actor import ensurevalidgrubcfghybrid
+from leapp.libraries.common.testutils import CurrentActorMocked, logger_mocked
+from leapp.libraries.stdlib import api, CalledProcessError
+from leapp.models import HybridImage
+
+CUR_DIR = os.path.dirname(os.path.abspath(__file__))
+
+
+def raise_call_error(args=None):
+ raise CalledProcessError(
+ message='A Leapp Command Error occurred.',
+ command=args,
+ result={'signal': None, 'exit_code': 1, 'pid': 0, 'stdout': 'fake', 'stderr': 'fake'}
+ )
+
+
+class run_mocked(object):
+ def __init__(self, raise_err=False):
+ self.called = 0
+ self.args = []
+ self.raise_err = raise_err
+
+ def __call__(self, *args):
+ self.called += 1
+ self.args.append(args)
+ if self.raise_err:
+ raise_call_error(args)
+
+
+def test_not_hybrid_image(monkeypatch):
+ """
+ Skip when system is not a hybrid.
+ """
+
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[]))
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, 'run', run_mocked(raise_err=False))
+
+ ensurevalidgrubcfghybrid.process()
+
+ assert api.current_logger.infomsg[0].startswith('System is not a hybrid image')
+ assert ensurevalidgrubcfghybrid.run.called == 0
+
+
+@pytest.mark.parametrize("is_invalid", [True, False])
+def test_is_grubcfg_valid(monkeypatch, is_invalid):
+
+ grubcfg_filename = ('invalid' if is_invalid else 'valid') + '_grub.cfg'
+ grubcfg_filepath = os.path.join(CUR_DIR, 'files', grubcfg_filename)
+ with open(grubcfg_filepath, 'r') as fin:
+ grubcfg = fin.read()
+
+ assert ensurevalidgrubcfghybrid._is_grubcfg_invalid(grubcfg) == is_invalid
+
+
+def test_valid_grubcfg(monkeypatch):
+ """
+ Test valid configuration does not trigger grub2-mkconfig
+ """
+
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[HybridImage()]))
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, 'run', run_mocked(raise_err=False))
+
+ grubcfg_filepath = os.path.join(CUR_DIR, 'files', 'valid_grub.cfg')
+ with open(grubcfg_filepath, 'r') as fin:
+ grubcfg = fin.read()
+
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, '_read_grubcfg', lambda: grubcfg)
+
+ ensurevalidgrubcfghybrid.process()
+
+ assert ensurevalidgrubcfghybrid.run.called == 0
+
+
+def test_invalid_grubcfg(monkeypatch):
+ """
+ Test invalid configuration triggers grub2-mkconfig
+ """
+
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[HybridImage()]))
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, 'run', run_mocked(raise_err=False))
+
+ grubcfg_filepath = os.path.join(CUR_DIR, 'files', 'invalid_grub.cfg')
+ with open(grubcfg_filepath, 'r') as fin:
+ grubcfg = fin.read()
+
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, '_read_grubcfg', lambda: grubcfg)
+
+ ensurevalidgrubcfghybrid.process()
+
+ assert ensurevalidgrubcfghybrid.run.called == 1
+ assert any(msg.startswith('Regenerating') for msg in api.current_logger.infomsg)
+
+
+def test_run_error(monkeypatch):
+ """
+ Test invalid configuration triggers grub2-mkconfig
+ """
+
+ monkeypatch.setattr(api, 'current_actor', CurrentActorMocked(msgs=[HybridImage()]))
+ monkeypatch.setattr(api, 'current_logger', logger_mocked())
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, 'run', run_mocked(raise_err=True))
+
+ grubcfg_filepath = os.path.join(CUR_DIR, 'files', 'invalid_grub.cfg')
+ with open(grubcfg_filepath, 'r') as fin:
+ grubcfg = fin.read()
+
+ monkeypatch.setattr(ensurevalidgrubcfghybrid, '_read_grubcfg', lambda: grubcfg)
+
+ with pytest.raises(StopActorExecutionError):
+ ensurevalidgrubcfghybrid.process()
+
+ assert ensurevalidgrubcfghybrid.run.called == 1
+ assert any(
+ msg.startswith('Could not regenerate')
+ for msg in api.current_logger.err
+ )
--
2.50.1

File diff suppressed because it is too large Load Diff

View File

@ -1,61 +0,0 @@
From ba074a40e4297c90cbb8e5e522ec2a154fa2b9b0 Mon Sep 17 00:00:00 2001
From: Michal Bocek <mbocek@redhat.com>
Date: Tue, 1 Jul 2025 20:38:20 +0200
Subject: [PATCH 48/66] Point to leapp-repository contribution guidelines
Instead of the leapp framework contribution guidelines.
Also update the leapp-repository contribution guidelines to point to the
new place of the leapp framework Python coding guidelines (moved under
https://github.com/oamg/leapp/commit/123f2700dc0a354d4357ce325ff61fcb2f53e33b).
---
CONTRIBUTING.md | 2 +-
README.md | 6 +++---
docs/source/contrib-and-devel-guidelines.md | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d4cb2046..7315b693 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1 +1 @@
-See the [Contribution guidelines](https://leapp.readthedocs.io/en/latest/contributing.html)
+See the [contribution guidelines](https://leapp-repository.readthedocs.io/latest/contrib-and-devel-guidelines.html).
diff --git a/README.md b/README.md
index 6b45b4b7..43da589e 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-**Before doing anything, please read the upstream [documentation](https://leapp-repository.readthedocs.io/).**
+**Before doing anything, please read the [leapp-repository documentation](https://leapp-repository.readthedocs.io/).**
-Also, you could find useufl to read [Leapp framework documentation](https://leapp.readthedocs.io/).
+Also, you could find the [Leapp framework documentation](https://leapp.readthedocs.io/) useful to read.
---
@@ -17,7 +17,7 @@ Also, you could find useufl to read [Leapp framework documentation](https://leap
- *All files in /var/log/leapp*
- */var/lib/leapp/leapp.db*
- *journalctl*
- - If you want, you can optionally send anything else would you like to provide (e.g. storage info)
+ - If you want, you can optionally send any other relevant information (e.g. storage, network)
**For your convenience you can pack all logs with this command:**
diff --git a/docs/source/contrib-and-devel-guidelines.md b/docs/source/contrib-and-devel-guidelines.md
index 66bef9b1..f2edf8b7 100644
--- a/docs/source/contrib-and-devel-guidelines.md
+++ b/docs/source/contrib-and-devel-guidelines.md
@@ -1,7 +1,7 @@
# Contribution and development guidelines
## Code guidelines
-Your code should follow the [Python Coding Guidelines](https://leapp.readthedocs.io/en/latest/python-coding-guidelines.html) used for the leapp project. On top of these rules follow instructions
+Your code should follow the [Python Coding Guidelines](https://leapp.readthedocs.io/en/latest/contributing.html#follow-python-coding-guidelines) used for the leapp project. On top of these rules follow instructions
below.
### Retrieving information about the source system should be separated from its use
--
2.50.1

View File

@ -1,46 +0,0 @@
From be6d23241e6fbe0c42a4f6a2df48efd6f999ed71 Mon Sep 17 00:00:00 2001
From: karolinku <kkula@redhat.com>
Date: Thu, 3 Jul 2025 13:12:32 +0200
Subject: [PATCH 49/66] Read the DNF config by module.py library
The DNF configuration has not been loaded when trying to get
information about available module streams (library module.py).
This causes a traceback e.g. on systems which must access DNF
repositories via a proxy.
This patch introduces loading the DNF configuration before trying
to access remote resources.
Jira: RHEL-39095
---
.../common/actors/rpmscanner/libraries/rpmscanner.py | 2 ++
repos/system_upgrade/common/libraries/module.py | 1 +
2 files changed, 3 insertions(+)
diff --git a/repos/system_upgrade/common/actors/rpmscanner/libraries/rpmscanner.py b/repos/system_upgrade/common/actors/rpmscanner/libraries/rpmscanner.py
index dbe56191..74c4b101 100644
--- a/repos/system_upgrade/common/actors/rpmscanner/libraries/rpmscanner.py
+++ b/repos/system_upgrade/common/actors/rpmscanner/libraries/rpmscanner.py
@@ -25,6 +25,8 @@ except ImportError:
def _get_package_repository_data_yum():
yum_base = yum.YumBase()
+ # DNF configuration is not loaded here, since no impact for operations
+ # done by the actor is observed here
pkg_repos = {}
try:
diff --git a/repos/system_upgrade/common/libraries/module.py b/repos/system_upgrade/common/libraries/module.py
index 7d4e8aa4..db725e71 100644
--- a/repos/system_upgrade/common/libraries/module.py
+++ b/repos/system_upgrade/common/libraries/module.py
@@ -38,6 +38,7 @@ def _create_or_get_dnf_base(base=None):
conf.substitutions.update_from_etc('/')
base = dnf.Base(conf=conf)
+ base.conf.read()
base.init_plugins()
base.read_all_repos()
# configure plugins after the repositories are loaded
--
2.50.1

View File

@ -1,34 +0,0 @@
From a4d10adb2f432ef09898228c0e2d00288bbcc412 Mon Sep 17 00:00:00 2001
From: karolinku <kkula@redhat.com>
Date: Mon, 7 Jul 2025 14:52:34 +0200
Subject: [PATCH 50/66] Disable localpkg_gpgcheck parameter from plugin data
This commit is setting the localpkg_gpgcheck DNF option within the
rhel-upgrade plugin to 0 (disabled).
The upgrade process has been blocked with "Error: GPG check FAILED"
when dnf has been configured to apply gpg check also on local packages
(localpkg_gpgcheck=1). That's because the bundled leapp*-deps meta
packages, which are managing Leapp and leapp-repository dependencies
during the transition to the new system, are not signed by the Red
Hat key. Therefore, this option needs to be disabled.
Jira: RHEL-47472
---
repos/system_upgrade/common/files/rhel_upgrade.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/repos/system_upgrade/common/files/rhel_upgrade.py b/repos/system_upgrade/common/files/rhel_upgrade.py
index 34f7b8f9..4f76a61d 100644
--- a/repos/system_upgrade/common/files/rhel_upgrade.py
+++ b/repos/system_upgrade/common/files/rhel_upgrade.py
@@ -116,6 +116,7 @@ class RhelUpgradeCommand(dnf.cli.Command):
self.base.conf.best = self.plugin_data['dnf_conf']['best']
self.base.conf.assumeyes = True
self.base.conf.gpgcheck = self.plugin_data['dnf_conf']['gpgcheck']
+ self.base.conf.localpkg_gpgcheck = False
self.base.conf.debug_solver = self.plugin_data['dnf_conf']['debugsolver']
self.base.conf.module_platform_id = self.plugin_data['dnf_conf']['platform_id']
installroot = self.plugin_data['dnf_conf'].get('installroot')
--
2.50.1

View File

@ -1,37 +0,0 @@
From c3bef4d9e89d109aee226f64e54e2eed088e591b Mon Sep 17 00:00:00 2001
From: Michal Bocek <mbocek@redhat.com>
Date: Tue, 8 Jul 2025 14:09:30 +0200
Subject: [PATCH 51/66] PR welcome msg: update link to contrib guidelines
(#1399)
Following the https://github.com/oamg/leapp-repository/pull/1394 where
the README was updated to point to the leapp-repository guidelines, this
change updates the link to the guidelines in the PR welcome message.
---
.github/workflows/pr-welcome-msg.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/pr-welcome-msg.yml b/.github/workflows/pr-welcome-msg.yml
index 0102c41f..f056fb79 100644
--- a/.github/workflows/pr-welcome-msg.yml
+++ b/.github/workflows/pr-welcome-msg.yml
@@ -19,7 +19,7 @@ jobs:
issue-number: ${{ github.event.pull_request.number }}
body: |
## **Thank you for contributing to the Leapp project!**
- Please note that every PR needs to comply with the [Leapp Guidelines](https://leapp.readthedocs.io/en/latest/contributing.html#) and must pass all tests in order to be mergeable.
+ Please note that every PR needs to comply with the [leapp-repository contribution and development guidelines](https://leapp-repository.readthedocs.io/latest/contrib-and-devel-guidelines.html) and must pass all tests in order to be mergeable.
If you want to request a review or rebuild a package in copr, you can use following commands as a comment:
- **`review please @oamg/developers`** to notify leapp developers of the review request
- **`/packit copr-build`** to submit a public copr build using packit
@@ -39,6 +39,6 @@ jobs:
See other labels for particular jobs defined in the `.packit.yaml` file.
- Please [open ticket](https://url.corp.redhat.com/oamg-ci-issue) in case you experience technical problem with the CI. (RH internal only)
+ Please [open ticket](https://red.ht/rhel-upgrades-ci-issue) in case you experience technical problem with the CI. (RH internal only)
**Note:** In case there are problems with tests not being triggered automatically on new PR/commit or pending for a long time, please contact leapp-infra.
--
2.50.1

View File

@ -1,30 +0,0 @@
From 55c885ce7fbf5fd237047d4f1d8e66a043e3a1b3 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Fri, 11 Jul 2025 14:32:57 +0200
Subject: [PATCH 52/66] Fix: skip checking ownership of files in
.../directory-hash/ dir
This check has been reintroduced in 87013d25b5aa3, however the "root"
directory during traversal is:
/var/lib/leapp/el10userspace/etc/pki/ca-trust/extracted/pem/directory-hash.
The skip condition looks for '/directory-hash/' which is false.
---
.../actors/targetuserspacecreator/libraries/userspacegen.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
index 9fc96a52..cbad91fe 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
@@ -311,7 +311,7 @@ def _get_files_owned_by_rpms(context, dirpath, pkgs=None, recursive=False):
searchdir = context.full_path(dirpath)
if recursive:
for root, _, files in os.walk(searchdir):
- if '/directory-hash/' in root:
+ if '/directory-hash' in root:
# tl;dr; for the performance improvement
# The directory has been relatively recently added to ca-certificates
# rpm on EL 9+ systems and the content does not seem to be important
--
2.50.1

View File

@ -1,35 +0,0 @@
From acaed7edcea66f2cef9aabc148a431825f91479e Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Fri, 11 Jul 2025 18:17:51 +0200
Subject: [PATCH 53/66] fixup! Fix: skip checking ownership of files in
.../directory-hash/ dir
---
.../actors/targetuserspacecreator/libraries/userspacegen.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
index cbad91fe..699f1517 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
@@ -294,6 +294,8 @@ def _get_files_owned_by_rpms(context, dirpath, pkgs=None, recursive=False):
"""
Return the list of file names inside dirpath owned by RPMs.
+ The returned paths are relative to the dirpath.
+
This is important e.g. in case of RHUI which installs specific repo files
in the yum.repos.d directory.
@@ -334,7 +336,7 @@ def _get_files_owned_by_rpms(context, dirpath, pkgs=None, recursive=False):
api.current_logger().debug('SKIP the {} file: not owned by any rpm'.format(fname))
continue
if pkgs and not [pkg for pkg in pkgs if pkg in result['stdout']]:
- api.current_logger().debug('SKIP the {} file: not owned by any searched rpm:'.format(fname))
+ api.current_logger().debug('SKIP the {} file: not owned by any searched rpm'.format(fname))
continue
api.current_logger().debug('Found the file owned by an rpm: {}.'.format(fname))
files_owned_by_rpms.append(fname)
--
2.50.1

View File

@ -1,100 +0,0 @@
From 6df858daa7c678d3e951bef3fdf077a0a5b49d36 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Fri, 11 Jul 2025 18:18:07 +0200
Subject: [PATCH 54/66] Add test
---
.../tests/unit_test_targetuserspacecreator.py | 73 +++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
index 69ed7040..219cb7c3 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
@@ -13,6 +13,7 @@ from leapp.libraries.actor import userspacegen
from leapp.libraries.common import overlaygen, repofileutils, rhsm
from leapp.libraries.common.config import architecture
from leapp.libraries.common.testutils import CurrentActorMocked, logger_mocked, produce_mocked
+from leapp.libraries.stdlib import api, CalledProcessError
from leapp.utils.deprecation import suppress_deprecation
if sys.version_info < (2, 8):
@@ -1225,3 +1226,75 @@ def test_perform_ok(monkeypatch):
assert userspacegen.api.produce.model_instances[1] == msg_target_repos
# this one is full of constants, so it's safe to check just the instance
assert isinstance(userspacegen.api.produce.model_instances[2], models.TargetUserSpaceInfo)
+
+
+def test__get_files_owned_by_rpms(monkeypatch):
+ # this is not necessarily accurate, but close enoguh
+ fake_walk = [
+ ("/base/dir/etc/pki", ["ca-trust", "tls", "rpm-gpg"], []),
+ ("/base/dir/etc/pki/ca-trust", ["extracted", "source"], []),
+ ("/base/dir/etc/pki/ca-trust/extracted", ["openssl", "java"], []),
+ ("/base/dir/etc/pki/ca-trust/extracted/openssl", [], ["ca-bundle.trust.crt"]),
+ ("/base/dir/etc/pki/ca-trust/extracted/java", [], ["cacerts"]),
+
+ ("/base/dir/etc/pki/ca-trust/source", ["anchors", "directory-hash"], []),
+ ("/base/dir/etc/pki/ca-trust/source/anchors", [], ["my-ca.crt"]),
+ ("/base/dir/etc/pki/ca-trust/extracted/pem/directory-hash", [], [
+ "5931b5bc.0", "a94d09e5.0"
+ ]),
+ ("/base/dir/etc/pki/tls", ["certs", "private"], []),
+ ("/base/dir/etc/pki/tls/certs", [], ["server.crt", "ca-bundle.crt"]),
+ ("/base/dir/etc/pki/tls/private", [], ["server.key"]),
+ ("/base/dir/etc/pki/rpm-gpg", [], [
+ "RPM-GPG-KEY-1",
+ "RPM-GPG-KEY-2",
+ ]),
+ ]
+ monkeypatch.setattr(os, 'walk', lambda _: fake_walk)
+ logger = logger_mocked()
+ monkeypatch.setattr(api, 'current_logger', logger)
+
+ class _MockContext():
+
+ def __init__(self, owned):
+ self.base_dir = '/base/dir'
+ # list of files owned, no base_dir prefixed
+ self.owned = owned
+
+ def full_path(self, path):
+ return os.path.join(self.base_dir, os.path.abspath(path).lstrip('/'))
+
+ def call(self, cmd):
+ assert len(cmd) == 3 and cmd[0] == 'rpm' and cmd[1] == '-qf'
+ if cmd[2] in self.owned:
+ return {'exit_code': 0}
+ raise CalledProcessError("Command failed with exit code 1", cmd, 1)
+
+ search_dir = '/etc/pki'
+ owned = [
+ 'tls/certs/ca-bundle.crt',
+ 'ca-trust/extracted/openssl/ca-bundle.trust.crt',
+ 'rpm-gpg/RPM-GPG-KEY-1',
+ 'rpm-gpg/RPM-GPG-KEY-2',
+ 'ca-trust/extracted/pem/directory-hash/a94d09e5.0',
+ 'ca-trust/extracted/pem/directory-hash/a94d09e5.0',
+ ]
+ # the rpm -qf call happens with the full path
+ owned_fullpath = [os.path.join(search_dir, f) for f in owned]
+ context = _MockContext(owned_fullpath)
+
+ out = userspacegen._get_files_owned_by_rpms(context, '/etc/pki', recursive=True)
+
+ # any directory-hash directory should be skipped
+ assert sorted(owned[0:4]) == sorted(out)
+
+ def has_dbgmsg(substr):
+ return any([substr in log for log in logger.dbgmsg])
+
+ # test a few
+ assert has_dbgmsg(
+ "SKIP files in the /base/dir/etc/pki/ca-trust/extracted/pem/directory-hash directory:"
+ " Not important for the IPU.",
+ )
+ assert has_dbgmsg('SKIP the tls/certs/server.crt file: not owned by any rpm')
+ assert has_dbgmsg('Found the file owned by an rpm: rpm-gpg/RPM-GPG-KEY-2.')
--
2.50.1

View File

@ -1,25 +0,0 @@
From b9d7e965ee1e45f93e8250c0eda1e5b4968ecc34 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Fri, 11 Jul 2025 18:25:50 +0200
Subject: [PATCH 55/66] fixup! Add test
---
.../tests/unit_test_targetuserspacecreator.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
index 219cb7c3..15db2570 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
@@ -1229,7 +1229,7 @@ def test_perform_ok(monkeypatch):
def test__get_files_owned_by_rpms(monkeypatch):
- # this is not necessarily accurate, but close enoguh
+ # this is not necessarily accurate, but close enough
fake_walk = [
("/base/dir/etc/pki", ["ca-trust", "tls", "rpm-gpg"], []),
("/base/dir/etc/pki/ca-trust", ["extracted", "source"], []),
--
2.50.1

View File

@ -1,110 +0,0 @@
From 803aebd0edffb088181f99d0a4024231a7be942c Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Mon, 14 Jul 2025 11:15:15 +0200
Subject: [PATCH 56/66] Add test for non-recursive
---
.../tests/unit_test_targetuserspacecreator.py | 67 +++++++++++++------
1 file changed, 47 insertions(+), 20 deletions(-)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
index 15db2570..267c064e 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/tests/unit_test_targetuserspacecreator.py
@@ -1228,7 +1228,45 @@ def test_perform_ok(monkeypatch):
assert isinstance(userspacegen.api.produce.model_instances[2], models.TargetUserSpaceInfo)
+class _MockContext():
+
+ def __init__(self, base_dir, owned_by_rpms):
+ self.base_dir = base_dir
+ # list of files owned, no base_dir prefixed
+ self.owned_by_rpms = owned_by_rpms
+
+ def full_path(self, path):
+ return os.path.join(self.base_dir, os.path.abspath(path).lstrip('/'))
+
+ def call(self, cmd):
+ assert len(cmd) == 3 and cmd[0] == 'rpm' and cmd[1] == '-qf'
+ if cmd[2] in self.owned_by_rpms:
+ return {'exit_code': 0}
+ raise CalledProcessError("Command failed with exit code 1", cmd, 1)
+
+
def test__get_files_owned_by_rpms(monkeypatch):
+
+ def listdir_mocked(path):
+ assert path == '/base/dir/some/path'
+ return ['fileA', 'fileB.txt', 'test.log', 'script.sh']
+
+ monkeypatch.setattr(os, 'listdir', listdir_mocked)
+ logger = logger_mocked()
+ monkeypatch.setattr(api, 'current_logger', logger)
+
+ search_dir = '/some/path'
+ # output doesn't include full paths
+ owned = ['fileA', 'script.sh']
+ # but the rpm -qf call happens with the full path
+ owned_fullpath = [os.path.join(search_dir, f) for f in owned]
+ context = _MockContext('/base/dir', owned_fullpath)
+
+ out = userspacegen._get_files_owned_by_rpms(context, '/some/path', recursive=False)
+ assert sorted(owned) == sorted(out)
+
+
+def test__get_files_owned_by_rpms_recursive(monkeypatch):
# this is not necessarily accurate, but close enough
fake_walk = [
("/base/dir/etc/pki", ["ca-trust", "tls", "rpm-gpg"], []),
@@ -1250,27 +1288,17 @@ def test__get_files_owned_by_rpms(monkeypatch):
"RPM-GPG-KEY-2",
]),
]
- monkeypatch.setattr(os, 'walk', lambda _: fake_walk)
- logger = logger_mocked()
- monkeypatch.setattr(api, 'current_logger', logger)
- class _MockContext():
+ def walk_mocked(path):
+ assert path == '/base/dir/etc/pki'
+ return fake_walk
- def __init__(self, owned):
- self.base_dir = '/base/dir'
- # list of files owned, no base_dir prefixed
- self.owned = owned
-
- def full_path(self, path):
- return os.path.join(self.base_dir, os.path.abspath(path).lstrip('/'))
-
- def call(self, cmd):
- assert len(cmd) == 3 and cmd[0] == 'rpm' and cmd[1] == '-qf'
- if cmd[2] in self.owned:
- return {'exit_code': 0}
- raise CalledProcessError("Command failed with exit code 1", cmd, 1)
+ monkeypatch.setattr(os, 'walk', walk_mocked)
+ logger = logger_mocked()
+ monkeypatch.setattr(api, 'current_logger', logger)
search_dir = '/etc/pki'
+ # output doesn't include full paths
owned = [
'tls/certs/ca-bundle.crt',
'ca-trust/extracted/openssl/ca-bundle.trust.crt',
@@ -1281,10 +1309,9 @@ def test__get_files_owned_by_rpms(monkeypatch):
]
# the rpm -qf call happens with the full path
owned_fullpath = [os.path.join(search_dir, f) for f in owned]
- context = _MockContext(owned_fullpath)
-
- out = userspacegen._get_files_owned_by_rpms(context, '/etc/pki', recursive=True)
+ context = _MockContext('/base/dir', owned_fullpath)
+ out = userspacegen._get_files_owned_by_rpms(context, search_dir, recursive=True)
# any directory-hash directory should be skipped
assert sorted(owned[0:4]) == sorted(out)
--
2.50.1

View File

@ -1,176 +0,0 @@
From 7c5d7f711d92fffac5567fd4b31bd6df4d24f1f9 Mon Sep 17 00:00:00 2001
From: Ales Nezbeda <anezbeda@redhat.com>
Date: Wed, 16 Jul 2025 11:58:47 +0200
Subject: [PATCH 57/66] el8to9: actors: mysql: Add MySQL actor with
recommendations (#1335)
Introduce a new mysql_check actor which checks for presence of the
mysql_server package and reports related recommendations for upgrade.
Jira: RHEL-5459
---
.../el8toel9/actors/mysqlcheck/actor.py | 20 ++++++
.../actors/mysqlcheck/libraries/mysqlcheck.py | 51 +++++++++++++++
.../mysqlcheck/tests/test_mysqlcheck.py | 65 +++++++++++++++++++
3 files changed, 136 insertions(+)
create mode 100644 repos/system_upgrade/el8toel9/actors/mysqlcheck/actor.py
create mode 100644 repos/system_upgrade/el8toel9/actors/mysqlcheck/libraries/mysqlcheck.py
create mode 100644 repos/system_upgrade/el8toel9/actors/mysqlcheck/tests/test_mysqlcheck.py
diff --git a/repos/system_upgrade/el8toel9/actors/mysqlcheck/actor.py b/repos/system_upgrade/el8toel9/actors/mysqlcheck/actor.py
new file mode 100644
index 00000000..d675d75c
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/mysqlcheck/actor.py
@@ -0,0 +1,20 @@
+from leapp.actors import Actor
+from leapp.libraries.actor.mysqlcheck import process
+from leapp.models import DistributionSignedRPM, Report
+from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
+
+
+class MySQLCheck(Actor):
+ """
+ Actor checking for presence of MySQL installation.
+
+ Provides user with information related to upgrading systems
+ with MySQL installed.
+ """
+ name = 'mysql_check'
+ consumes = (DistributionSignedRPM,)
+ produces = (Report,)
+ tags = (ChecksPhaseTag, IPUWorkflowTag)
+
+ def process(self):
+ process()
diff --git a/repos/system_upgrade/el8toel9/actors/mysqlcheck/libraries/mysqlcheck.py b/repos/system_upgrade/el8toel9/actors/mysqlcheck/libraries/mysqlcheck.py
new file mode 100644
index 00000000..b446d9c4
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/mysqlcheck/libraries/mysqlcheck.py
@@ -0,0 +1,51 @@
+from leapp import reporting
+from leapp.libraries.common.rpms import has_package
+from leapp.models import DistributionSignedRPM
+
+
+def _report_server_installed():
+ """
+ Create report on mysql-server package installation detection.
+
+ Should remind user about present MySQL server package
+ installation, warn them about necessary additional steps, and
+ redirect them to online documentation for the upgrade process.
+ """
+ reporting.create_report([
+ reporting.Title('Further action to upgrade MySQL might be needed'),
+ reporting.Summary(
+ 'The MySQL server component will be reinstalled during the upgrade with a RHEL 9'
+ ' version. Since RHEL 9 includes the same MySQL version 8.0 by default, no action'
+ ' should be required and there should not be any compatibility issues. However,'
+ ' it is still advisable to follow the documentation on this topic for up to date'
+ ' recommendations.'
+ ' Keep in mind that MySQL 8.0, which is the default in RHEL 9, will reach the end'
+ ' of \'Extended Support\' in April 2026. As such it is advisable to upgrade to'
+ ' MySQL version 8.4, which is provided via a module. MySQL 8.4 is also the'
+ ' default version for RHEL 10, therefore having MySQL 8.4 on the RHEL 9 system'
+ ' will make a future upgrade process to RHEL 10 smoother.'
+ ),
+ reporting.Severity(reporting.Severity.MEDIUM),
+ reporting.Groups([reporting.Groups.SERVICES]),
+ reporting.ExternalLink(title='Migrating MySQL databases from RHEL 8 to RHEL 9',
+ url='https://access.redhat.com/articles/7099753'),
+ reporting.RelatedResource('package', 'mysql-server'),
+ reporting.Remediation(hint=(
+ 'Dump or backup your data before proceeding with the upgrade '
+ 'and consult attached article '
+ '\'Migrating MySQL databases from RHEL 8 to RHEL 9\' '
+ 'with up to date recommended steps before and after the upgrade.'
+ )),
+ ])
+
+
+def process():
+ """
+ Create reports according to detected MySQL packages.
+
+ Create the report if the mysql-server rpm (RH signed) is installed.
+ """
+ has_server = has_package(DistributionSignedRPM, 'mysql-server')
+
+ if has_server:
+ _report_server_installed()
diff --git a/repos/system_upgrade/el8toel9/actors/mysqlcheck/tests/test_mysqlcheck.py b/repos/system_upgrade/el8toel9/actors/mysqlcheck/tests/test_mysqlcheck.py
new file mode 100644
index 00000000..385f4dfd
--- /dev/null
+++ b/repos/system_upgrade/el8toel9/actors/mysqlcheck/tests/test_mysqlcheck.py
@@ -0,0 +1,65 @@
+import pytest
+
+from leapp import reporting
+from leapp.libraries.actor.mysqlcheck import process
+from leapp.libraries.common.testutils import create_report_mocked, CurrentActorMocked
+from leapp.libraries.stdlib import api
+from leapp.models import DistributionSignedRPM, RPM
+
+
+def _generate_rpm_with_name(name):
+ """
+ Generate new RPM model item with given name.
+
+ Parameters:
+ name (str): rpm name
+
+ Returns:
+ rpm (RPM): new RPM object with name parameter set
+ """
+ return RPM(name=name,
+ version='0.1',
+ release='1.sm01',
+ epoch='1',
+ pgpsig='RSA/SHA256, Mon 01 Jan 1970 00:00:00 AM -03, Key ID 199e2f91fd431d51',
+ packager='Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>',
+ arch='noarch')
+
+
+@pytest.mark.parametrize('has_server', [
+ (True), # with server
+ (False), # without server
+])
+def test_actor_execution(monkeypatch, has_server):
+ """
+ Parametrized helper function for test_actor_* functions.
+
+ First generate list of RPM models based on set arguments. Then, run
+ the actor fed with our RPM list. Finally, assert Reports
+ according to set arguments.
+
+ Parameters:
+ has_server (bool): mysql-server installed
+ """
+
+ # Couple of random packages
+ rpms = [_generate_rpm_with_name('sed'),
+ _generate_rpm_with_name('htop')]
+
+ if has_server:
+ # Add mysql-server
+ rpms += [_generate_rpm_with_name('mysql-server')]
+
+ curr_actor_mocked = CurrentActorMocked(msgs=[DistributionSignedRPM(items=rpms)])
+ monkeypatch.setattr(api, 'current_actor', curr_actor_mocked)
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+
+ # Executed actor fed with fake RPMs
+ process()
+
+ if has_server:
+ # Assert for mysql-server package installed
+ assert reporting.create_report.called == 1
+ else:
+ # Assert for no mysql packages installed
+ assert not reporting.create_report.called
--
2.50.1

View File

@ -1,176 +0,0 @@
From ce71a44ffd1965330813c15056b5e58e50217108 Mon Sep 17 00:00:00 2001
From: Matej Matuska <mmatuska@redhat.com>
Date: Wed, 2 Jul 2025 16:36:55 +0200
Subject: [PATCH 58/66] Fix target version format checks
Currently only the format of a version specified by
LEAPP_DEVEL_TARGET_RELEASE is checked, when specified via --target
cmdline argument it isn't, which is a bug.
This patch fixes the bug, by enabling the check for --target too.
NOTE: these are only format checks, the state of support is already
checked later in the upgrade process by the checktargetversion actor.
Jira: RHEL-96238
---
commands/command_utils.py | 28 +++++++++------
commands/tests/test_upgrade_paths.py | 54 +++++++++++++++++++---------
commands/upgrade/util.py | 4 +--
3 files changed, 57 insertions(+), 29 deletions(-)
diff --git a/commands/command_utils.py b/commands/command_utils.py
index 155bacad..e6ba6ba4 100644
--- a/commands/command_utils.py
+++ b/commands/command_utils.py
@@ -59,7 +59,9 @@ def assert_version_format(version_str, desired_format, version_kind):
:raises: CommandError
"""
if not re.match(desired_format.regex, version_str):
- error_str = 'Unexpected format of target version: {0}. The required format is \'{1}\'.'
+ error_str = (
+ 'Unexpected format of target version: {0}. The required format is \'{1}\'.'
+ )
raise CommandError(error_str.format(version_str, desired_format.human_readable))
@@ -182,26 +184,32 @@ def get_target_version(flavour):
return target_versions[-1] if target_versions else None
-def vet_upgrade_path(args):
+def get_target_release(args):
"""
- Make sure the user requested upgrade_path is a supported one.
- If LEAPP_DEVEL_TARGET_RELEASE is set then it's value is not vetted against upgrade_paths_map but used as is.
+ Return the user selected target release or choose one from config.
+
+ A target release can be specified, ordered by priority, by the
+ LEAPP_DEVEL_TARGET_RELEASE or args.target (--target cmdline arg) or in the
+ config file.
+
+ NOTE: when specified via the env var or cmdline arg, the version isn't
+ checked against supported versions, this is done later by an actor in the
+ upgrade process.
:return: `tuple` (target_release, flavor)
"""
flavor = get_upgrade_flavour()
env_version_override = os.getenv('LEAPP_DEVEL_TARGET_RELEASE')
- if env_version_override:
+ target_ver = env_version_override or args.target
+ if target_ver:
os_release_contents = _retrieve_os_release_contents()
distro_id = os_release_contents.get('ID', '')
expected_version_format = _DISTRO_VERSION_FORMATS.get(distro_id, VersionFormats.MAJOR_MINOR).value
- assert_version_format(env_version_override, expected_version_format, _VersionKind.TARGET)
-
- return (env_version_override, flavor)
+ assert_version_format(target_ver, expected_version_format, _VersionKind.TARGET)
+ return (target_ver, flavor)
- target_release = args.target or get_target_version(flavor)
- return (target_release, flavor)
+ return (get_target_version(flavor), flavor)
def set_resource_limits():
diff --git a/commands/tests/test_upgrade_paths.py b/commands/tests/test_upgrade_paths.py
index c2cb09aa..89b5eb71 100644
--- a/commands/tests/test_upgrade_paths.py
+++ b/commands/tests/test_upgrade_paths.py
@@ -1,3 +1,4 @@
+import os
import resource
import mock
@@ -29,34 +30,53 @@ def test_get_target_version(mock_open, monkeypatch):
assert command_utils.get_target_version('default') == '9.0'
-@mock.patch("leapp.cli.commands.command_utils.get_upgrade_paths_config",
- return_value={"default": {"7.9": ["8.4"], "8.6": ["9.0"], "7": ["8.4"], "8": ["9.0"]}})
-def test_vet_upgrade_path(mock_open, monkeypatch):
+@mock.patch(
+ "leapp.cli.commands.command_utils.get_upgrade_paths_config",
+ return_value={
+ "default": {
+ "7.9": ["8.4"],
+ "8.6": ["9.0", "9.2"],
+ "7": ["8.4"],
+ "8": ["9.0", "9.2"],
+ }
+ },
+)
+def test_get_target_release(mock_open, monkeypatch): # do not remove mock_open
monkeypatch.setattr(command_utils, 'get_os_release_version_id', lambda x: '8.6')
# make sure env var LEAPP_DEVEL_TARGET_RELEASE takes precedence
- # when env var set to a bad version - abort the upgrade
- args = mock.Mock(target='9.0')
- monkeypatch.setenv('LEAPP_DEVEL_TARGET_RELEASE', '1.2badsemver')
- with pytest.raises(CommandError) as err:
- command_utils.vet_upgrade_path(args)
- assert 'Unexpected format of target version' in err
- # MAJOR.MINOR.PATCH is considered as bad version, only MAJOR.MINOR is accepted
args = mock.Mock(target='9.0')
+ monkeypatch.setenv('LEAPP_DEVEL_TARGET_RELEASE', '9.2')
+ print(os.getenv('LEAPP_DEVEL_TARGET_RELEASE'))
+ assert command_utils.get_target_release(args) == ('9.2', 'default')
+
+ # when env var set to a bad version, expect an error
monkeypatch.setenv('LEAPP_DEVEL_TARGET_RELEASE', '9.0.0')
with pytest.raises(CommandError) as err:
- command_utils.vet_upgrade_path(args)
+ command_utils.get_target_release(args)
assert 'Unexpected format of target version' in err
+
# when env var set to a version not in upgrade_paths map - go on and use it
+ # this is checked by an actor in the IPU
monkeypatch.setenv('LEAPP_DEVEL_TARGET_RELEASE', '1.2')
- assert command_utils.vet_upgrade_path(args) == ('1.2', 'default')
- # no env var set, --target is set to proper version
+ assert command_utils.get_target_release(args) == ('1.2', 'default')
+
+ # no env var set, --target is set to proper version - use it
+ args = mock.Mock(target='9.0')
monkeypatch.delenv('LEAPP_DEVEL_TARGET_RELEASE', raising=False)
- assert command_utils.vet_upgrade_path(args) == ('9.0', 'default')
- # env var is set to proper version, --target is set to a bad one - use env var and go on with the upgrade
+ assert command_utils.get_target_release(args) == ('9.0', 'default')
+
+ # --target set with incorrectly formatted version, env var not set, fail
+ args = mock.Mock(target='9.0a')
+ with pytest.raises(CommandError) as err:
+ command_utils.get_target_release(args)
+ assert 'Unexpected format of target version' in err
+
+ # env var is set to proper version, --target set to a bad one:
+ # env var has priority, use it and go on with the upgrade
monkeypatch.setenv('LEAPP_DEVEL_TARGET_RELEASE', '9.0')
- args = mock.Mock(target='1.2')
- assert command_utils.vet_upgrade_path(args) == ('9.0', 'default')
+ args = mock.Mock(target='9.0.0')
+ assert command_utils.get_target_release(args) == ('9.0', 'default')
def _mock_getrlimit_factory(nofile_limits=(1024, 4096), fsize_limits=(1024, 4096)):
diff --git a/commands/upgrade/util.py b/commands/upgrade/util.py
index b54b0b34..7d5b563e 100644
--- a/commands/upgrade/util.py
+++ b/commands/upgrade/util.py
@@ -253,8 +253,8 @@ def prepare_configuration(args):
if args.nogpgcheck:
os.environ['LEAPP_NOGPGCHECK'] = '1'
- # Check upgrade path and fail early if it's unsupported
- target_version, flavor = command_utils.vet_upgrade_path(args)
+ # Check upgrade path and fail early if it's invalid
+ target_version, flavor = command_utils.get_target_release(args)
os.environ['LEAPP_UPGRADE_PATH_TARGET_RELEASE'] = target_version
os.environ['LEAPP_UPGRADE_PATH_FLAVOUR'] = flavor
--
2.50.1

View File

@ -1,67 +0,0 @@
From b8d942afba061255b69fa5c41259d418fb000ad8 Mon Sep 17 00:00:00 2001
From: Michal Hecko <mhecko@redhat.com>
Date: Sun, 15 Jun 2025 17:11:28 +0200
Subject: [PATCH 60/66] libs(rhui): add rhel10 targets for upgrades
---
repos/system_upgrade/common/libraries/rhui.py | 30 +++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py
index 30de0275..e1ab7c67 100644
--- a/repos/system_upgrade/common/libraries/rhui.py
+++ b/repos/system_upgrade/common/libraries/rhui.py
@@ -158,6 +158,17 @@ RHUI_SETUPS = {
('cdn.redhat.com-chain.crt', RHUI_PKI_DIR),
('content-rhel9.crt', RHUI_PKI_PRODUCT_DIR)
], os_version='9'),
+ mk_rhui_setup(clients={'rh-amazon-rhui-client'}, leapp_pkg='leapp-rhui-aws',
+ mandatory_files=[
+ ('rhui-client-config-server-10.crt', RHUI_PKI_PRODUCT_DIR),
+ ('rhui-client-config-server-10.key', RHUI_PKI_DIR),
+ ('leapp-aws.repo', YUM_REPOS_PATH)
+ ],
+ optional_files=[
+ ('content-rhel10.key', RHUI_PKI_DIR),
+ ('cdn.redhat.com-chain.crt', RHUI_PKI_DIR),
+ ('content-rhel10.crt', RHUI_PKI_PRODUCT_DIR)
+ ], os_version='10'),
],
RHUIFamily(RHUIProvider.AWS, arch=arch.ARCH_ARM64, client_files_folder='aws'): [
mk_rhui_setup(clients={'rh-amazon-rhui-client-arm'}, optional_files=[], os_version='7', arch=arch.ARCH_ARM64),
@@ -185,6 +196,17 @@ RHUI_SETUPS = {
('cdn.redhat.com-chain.crt', RHUI_PKI_DIR),
('content-rhel9.crt', RHUI_PKI_PRODUCT_DIR)
], os_version='9', arch=arch.ARCH_ARM64),
+ mk_rhui_setup(clients={'rh-amazon-rhui-client'}, leapp_pkg='leapp-rhui-aws',
+ mandatory_files=[
+ ('rhui-client-config-server-10.crt', RHUI_PKI_PRODUCT_DIR),
+ ('rhui-client-config-server-10.key', RHUI_PKI_DIR),
+ ('leapp-aws.repo', YUM_REPOS_PATH)
+ ],
+ optional_files=[
+ ('content-rhel10.key', RHUI_PKI_DIR),
+ ('cdn.redhat.com-chain.crt', RHUI_PKI_DIR),
+ ('content-rhel10.crt', RHUI_PKI_PRODUCT_DIR)
+ ], os_version='10'),
],
RHUIFamily(RHUIProvider.AWS, variant=RHUIVariant.SAP, client_files_folder='aws-sap-e4s'): [
mk_rhui_setup(clients={'rh-amazon-rhui-client-sap-bundle'}, optional_files=[], os_version='7',
@@ -250,6 +272,14 @@ RHUI_SETUPS = {
],
extra_info={'agent_pkg': 'WALinuxAgent'},
os_version='9'),
+ mk_rhui_setup(clients={'rhui-azure-rhel10'}, leapp_pkg='leapp-rhui-azure',
+ mandatory_files=[('leapp-azure.repo', YUM_REPOS_PATH)],
+ optional_files=[
+ ('key.pem', RHUI_PKI_DIR),
+ ('content.crt', RHUI_PKI_PRODUCT_DIR)
+ ],
+ extra_info={'agent_pkg': 'WALinuxAgent'},
+ os_version='10'),
],
RHUIFamily(RHUIProvider.AZURE, variant=RHUIVariant.SAP_APPS, client_files_folder='azure-sap-apps'): [
mk_rhui_setup(clients={'rhui-azure-rhel7-base-sap-apps'}, os_version='7', content_channel=ContentChannel.EUS),
--
2.50.1

View File

@ -1,35 +0,0 @@
From 7f9df48b0040499c5de3441f56d1f1ed77667526 Mon Sep 17 00:00:00 2001
From: Michal Hecko <mhecko@redhat.com>
Date: Sun, 15 Jun 2025 23:39:17 +0200
Subject: [PATCH 61/66] userspacegen: do not repolist source & debug repos
Ignore source/debug repositories when running dnf repolist to check what
repositories are available for the upgrade. Should prevent needless
crashes when the source/debug repositories are malformed, e.g., when the
maintainer forgot to sync their content.
---
.../targetuserspacecreator/libraries/userspacegen.py | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
index 699f1517..9ec4ecac 100644
--- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
+++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py
@@ -929,7 +929,13 @@ def _get_rh_available_repoids(context, indata):
os.rename(foreign_repofile, '{0}.back'.format(foreign_repofile))
try:
- dnf_cmd = ['dnf', 'repolist', '--releasever', target_ver, '-v', '--enablerepo', '*']
+ dnf_cmd = [
+ 'dnf', 'repolist',
+ '--releasever', target_ver, '-v',
+ '--enablerepo', '*',
+ '--disablerepo', '*-source-*',
+ '--disablerepo', '*-debug-*',
+ ]
repolist_result = context.call(dnf_cmd)['stdout']
repoid_lines = [line for line in repolist_result.split('\n') if line.startswith('Repo-id')]
rhui_repoids = {extract_repoid_from_line(line) for line in repoid_lines}
--
2.50.1

View File

@ -1,46 +0,0 @@
From 24714605538d2e197b0d7a5012528129439b4764 Mon Sep 17 00:00:00 2001
From: Michal Hecko <mhecko@redhat.com>
Date: Tue, 17 Jun 2025 11:18:33 +0200
Subject: [PATCH 62/66] actor(checkrhui): do not boostrap client on AWS 9>10
The current implementation of the checkrhui actor and its modification
of rhui-associated target userspace preparation instructions contains
too coarse conditions on what should happen on specific upgrade paths.
In other words, changes originally intended only for 8>9 are applied
also during 9>10. This patch fixes this issue -- when performing 9>10 on
AWS, we do not bootstrap the RHUI client, as it has too many
dependencies. Instead, the leapp-rhui-aws package contains all
repositories, certs and keys that grant repository access.
Jira-ref: RHEL-64910
---
.../actors/cloud/checkrhui/libraries/checkrhui.py | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py b/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py
index 64e36e08..ea154173 100644
--- a/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py
+++ b/repos/system_upgrade/common/actors/cloud/checkrhui/libraries/checkrhui.py
@@ -254,10 +254,16 @@ def customize_rhui_setup_for_aws(rhui_family, setup_info):
# The leapp-rhui-aws will provide all necessary files to access entire RHEL8 content
setup_info.bootstrap_target_client = False
return
+ if target_version == '9':
+ amazon_plugin_copy_task = CopyFile(src='/usr/lib/python3.9/site-packages/dnf-plugins/amazon-id.py',
+ dst='/usr/lib/python3.6/site-packages/dnf-plugins/')
+ setup_info.postinstall_tasks.files_to_copy.append(amazon_plugin_copy_task)
+ return
- amazon_plugin_copy_task = CopyFile(src='/usr/lib/python3.9/site-packages/dnf-plugins/amazon-id.py',
- dst='/usr/lib/python3.6/site-packages/dnf-plugins/')
- setup_info.postinstall_tasks.files_to_copy.append(amazon_plugin_copy_task)
+ # For 9>10 and higher we give up trying to do client swapping since the client has too many dependencies
+ # from target system's repositories. Our leapp-rhui-aws package will carry all of the repos provided
+ # by the client.
+ setup_info.bootstrap_target_client = False
def produce_rhui_info_to_setup_target(rhui_family, source_setup_desc, target_setup_desc):
--
2.50.1

View File

@ -1,456 +0,0 @@
From d0f6c44acfdd8938c7062deae6a16613af2bb4d1 Mon Sep 17 00:00:00 2001
From: Michal Hecko <mhecko@redhat.com>
Date: Wed, 2 Jul 2025 22:26:23 +0200
Subject: [PATCH 63/66] add azure, aws, alibaba client repositories to
repomapping
Co-Authored-By: jinkangkang.jkk <1547182170@qq.com>
---
etc/leapp/files/repomap.json | 293 ++++++++++++++++++++++++++++++++++-
1 file changed, 292 insertions(+), 1 deletion(-)
diff --git a/etc/leapp/files/repomap.json b/etc/leapp/files/repomap.json
index fc0c42f1..0cd5601a 100644
--- a/etc/leapp/files/repomap.json
+++ b/etc/leapp/files/repomap.json
@@ -1,5 +1,5 @@
{
- "datetime": "202505201636Z",
+ "datetime": "202507171303Z",
"version_format": "1.3.0",
"provided_data_streams": [
"4.0"
@@ -294,6 +294,24 @@
"target": [
"rhel10-HighAvailability"
]
+ },
+ {
+ "source": "rhel9-rhui-client-config-server-9",
+ "target": [
+ "rhel10-rhui-client-config-server-10"
+ ]
+ },
+ {
+ "source": "rhel9-rhui-microsoft-azure-rhel9",
+ "target": [
+ "rhel10-rhui-microsoft-azure-rhel10"
+ ]
+ },
+ {
+ "source": "rhel9-rhui-custom-client-at-alibaba",
+ "target": [
+ "rhel10-rhui-custom-client-at-alibaba"
+ ]
}
]
}
@@ -343,6 +361,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-baseos-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "rhel-10-baseos-rhui-rpms",
@@ -352,6 +379,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-baseos-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-aarch64-baseos-beta-rpms",
@@ -456,6 +492,15 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-x86_64-baseos-e4s-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-x86_64-baseos-e4s-rpms",
@@ -479,6 +524,24 @@
"channel": "ga",
"repo_type": "rpm",
"distro": "rhel"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-aarch64-baseos-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-x86_64-baseos-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
}
]
},
@@ -526,6 +589,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-appstream-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "rhel-10-appstream-rhui-rpms",
@@ -535,6 +607,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-appstream-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-aarch64-appstream-beta-rpms",
@@ -639,6 +720,15 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-x86_64-appstream-e4s-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-x86_64-appstream-e4s-rpms",
@@ -662,6 +752,24 @@
"channel": "ga",
"repo_type": "rpm",
"distro": "rhel"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-aarch64-appstream-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-x86_64-appstream-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
}
]
},
@@ -741,6 +849,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "codeready-builder-for-rhel-10-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "codeready-builder-for-rhel-10-rhui-rpms",
@@ -750,6 +867,15 @@
"distro": "rhel",
"rhui": "aws"
},
+ {
+ "major_version": "10",
+ "repoid": "codeready-builder-for-rhel-10-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
{
"major_version": "10",
"repoid": "codeready-builder-for-rhel-10-s390x-eus-rpms",
@@ -813,6 +939,24 @@
"channel": "ga",
"repo_type": "rpm",
"distro": "centos"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-codeready-builder-for-rhel-10-aarch64-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-codeready-builder-for-rhel-10-x86_64-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
}
]
},
@@ -923,6 +1067,33 @@
"repo_type": "rpm",
"distro": "rhel",
"rhui": "aws"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-supplementary-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-aarch64-supplementary-rhui-rpms",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-x86_64-supplementary-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
}
]
},
@@ -1006,6 +1177,14 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-aarch64-nfv-e4s-rpms",
+ "arch": "aarch64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-aarch64-nfv-rpms",
@@ -1115,6 +1294,15 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-x86_64-sap-netweaver-e4s-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-x86_64-sap-netweaver-e4s-rpms",
@@ -1160,6 +1348,15 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-x86_64-sap-solutions-e4s-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-x86_64-sap-solutions-e4s-rpms",
@@ -1317,6 +1514,15 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "10",
+ "repoid": "rhel-10-for-x86_64-highavailability-e4s-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
{
"major_version": "10",
"repoid": "rhel-10-for-x86_64-highavailability-e4s-rpms",
@@ -1340,6 +1546,75 @@
"channel": "ga",
"repo_type": "rpm",
"distro": "rhel"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-rhel-10-for-x86_64-highavailability-rhui-rpms",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ }
+ ]
+ },
+ {
+ "pesid": "rhel10-rhui-microsoft-azure-rhel10",
+ "entries": [
+ {
+ "major_version": "10",
+ "repoid": "rhui-microsoft-azure-rhel10",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "azure"
+ }
+ ]
+ },
+ {
+ "pesid": "rhel10-rhui-client-config-server-10",
+ "entries": [
+ {
+ "major_version": "10",
+ "repoid": "rhui-client-config-server-10",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-client-config-server-10",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "aws"
+ }
+ ]
+ },
+ {
+ "pesid": "rhel10-rhui-custom-client-at-alibaba",
+ "entries": [
+ {
+ "major_version": "10",
+ "repoid": "rhui-custom-rhui_client_at_alibaba-rhel-10",
+ "arch": "aarch64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
+ },
+ {
+ "major_version": "10",
+ "repoid": "rhui-custom-rhui_client_at_alibaba-rhel-10",
+ "arch": "x86_64",
+ "channel": "ga",
+ "repo_type": "rpm",
+ "distro": "rhel",
+ "rhui": "alibaba"
}
]
},
@@ -5228,6 +5503,14 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "9",
+ "repoid": "rhel-9-for-aarch64-nfv-e4s-rpms",
+ "arch": "aarch64",
+ "channel": "e4s",
+ "repo_type": "rpm",
+ "distro": "rhel"
+ },
{
"major_version": "9",
"repoid": "rhel-9-for-aarch64-nfv-rpms",
@@ -5594,6 +5877,14 @@
"repo_type": "rpm",
"distro": "rhel"
},
+ {
+ "major_version": "9",
+ "repoid": "rhel-9-for-x86_64-highavailability-aus-rpms",
+ "arch": "x86_64",
+ "channel": "aus",
+ "repo_type": "rpm",
+ "distro": "rhel"
+ },
{
"major_version": "9",
"repoid": "rhel-9-for-x86_64-highavailability-beta-rpms",
--
2.50.1

View File

@ -1,36 +0,0 @@
From 08196d4533c51b9f9d7d45d90ca0bad8b0ef697d Mon Sep 17 00:00:00 2001
From: Michal Hecko <mhecko@redhat.com>
Date: Fri, 4 Jul 2025 14:05:48 +0200
Subject: [PATCH 64/66] rhui(azure): add target client's GPG key to mandatory
files
The RHEL10's Azure RHUI client is signed using a different GPG
key than RHEL9 client. Therefore, we need to have the key available
when we try to bootstrap the RHEL10 client during the upgrade.
Jira-ref: RHEL-64911
---
repos/system_upgrade/common/libraries/rhui.py | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py
index e1ab7c67..1e3b5359 100644
--- a/repos/system_upgrade/common/libraries/rhui.py
+++ b/repos/system_upgrade/common/libraries/rhui.py
@@ -273,7 +273,12 @@ RHUI_SETUPS = {
extra_info={'agent_pkg': 'WALinuxAgent'},
os_version='9'),
mk_rhui_setup(clients={'rhui-azure-rhel10'}, leapp_pkg='leapp-rhui-azure',
- mandatory_files=[('leapp-azure.repo', YUM_REPOS_PATH)],
+ mandatory_files=[
+ ('leapp-azure.repo', YUM_REPOS_PATH),
+ # We need to have the new GPG key ready when we will be bootstrapping
+ # target rhui client.
+ ('RPM-GPG-KEY-microsoft-azure-release-new', '/etc/pki/rpm-gpg/')
+ ],
optional_files=[
('key.pem', RHUI_PKI_DIR),
('content.crt', RHUI_PKI_PRODUCT_DIR)
--
2.50.1

View File

@ -1,77 +0,0 @@
From 7468b10c32367d11a098c4f10390c18ec55720e1 Mon Sep 17 00:00:00 2001
From: "jinkangkang.jkk" <jinkangkang.jkk@alibaba-inc.com>
Date: Mon, 16 Jun 2025 20:26:45 +0800
Subject: [PATCH 65/66] feat(alibaba): support rhel9 upgrade to rhel10 using
rhui on alibaba cloud
---
repos/system_upgrade/common/libraries/rhui.py | 32 +++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)
diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py
index 1e3b5359..b3225d5f 100644
--- a/repos/system_upgrade/common/libraries/rhui.py
+++ b/repos/system_upgrade/common/libraries/rhui.py
@@ -383,6 +383,13 @@ RHUI_SETUPS = {
('content.crt', RHUI_PKI_PRODUCT_DIR)
],
os_version='9'),
+ mk_rhui_setup(clients={'aliyun_rhui_rhel10'}, leapp_pkg='leapp-rhui-alibaba',
+ mandatory_files=[('leapp-alibaba.repo', YUM_REPOS_PATH)],
+ optional_files=[
+ ('key.pem', RHUI_PKI_DIR),
+ ('content.crt', RHUI_PKI_PRODUCT_DIR)
+ ],
+ os_version='10'),
],
RHUIFamily(RHUIProvider.ALIBABA, arch=arch.ARCH_ARM64, client_files_folder='alibaba'): [
mk_rhui_setup(clients={'aliyun_rhui_rhel8'}, leapp_pkg='leapp-rhui-alibaba',
@@ -399,6 +406,13 @@ RHUI_SETUPS = {
('content.crt', RHUI_PKI_PRODUCT_DIR)
],
os_version='9'),
+ mk_rhui_setup(clients={'aliyun_rhui_rhel10'}, leapp_pkg='leapp-rhui-alibaba',
+ mandatory_files=[('leapp-alibaba.repo', YUM_REPOS_PATH)],
+ optional_files=[
+ ('key.pem', RHUI_PKI_DIR),
+ ('content.crt', RHUI_PKI_PRODUCT_DIR)
+ ],
+ os_version='10'),
]
}
@@ -601,15 +615,29 @@ RHUI_CLOUD_MAP = {
],
},
},
+ '9to10': {
+ 'alibaba': {
+ 'src_pkg': 'aliyun_rhui_rhel9',
+ 'target_pkg': 'aliyun_rhui_rhel10',
+ 'leapp_pkg': 'leapp-rhui-alibaba',
+ 'leapp_pkg_repo': 'leapp-alibaba.repo',
+ 'files_map': [
+ ('content.crt', RHUI_PKI_PRODUCT_DIR),
+ ('key.pem', RHUI_PKI_DIR),
+ ('leapp-alibaba.repo', YUM_REPOS_PATH)
+ ],
+ },
+ }
}
-# TODO(mmatuska) deprecate or adjust for 9to10?
def get_upg_path():
"""
Get upgrade path in specific string format
"""
- return '7to8' if get_target_major_version() == '8' else '8to9'
+ source_major_version = get_source_major_version()
+ target_major_version = get_target_major_version()
+ return '{0}to{1}'.format(source_major_version, target_major_version)
@deprecated(since='2023-07-27', message='This functionality has been replaced with the RHUIInfo message.')
--
2.50.1

View File

@ -1,203 +0,0 @@
From 3356c045fe2982f3a26b26b46258398b490a6d67 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Matej=20Matu=C5=A1ka?= <mmatuska@redhat.com>
Date: Thu, 17 Jul 2025 14:33:55 +0200
Subject: [PATCH 66/66] Inhibit upgrade on systems with cgroupsv1 on 9to10
(#1392)
* Inhibit upgrade on systems with cgroupsv1 on 9to10
cgroups-v1 were deprecated in RHEL 9 and are unsupported in RHEL 10. The
option to switch to cgroups-v1 is ignored. Users have to migrate to
cgroups-v2 in order to upgrade.
Both legacy and hybrid modes are unsupported. Only unified hierarchy
(cgroups-v2) is supported. More info on how the modes are switched is
at:
https://www.freedesktop.org/software/systemd/man/247/systemd.html#systemd.unified_cgroup_hierarchy
and
https://www.freedesktop.org/software/systemd/man/247/systemd.html#systemd.legacy_systemd_cgroup_controller.
Jira: RHEL-81212
---
.../actors/inhibitcgroupsv1/actor.py | 23 ++++++
.../libraries/inhibitcgroupsv1.py | 56 ++++++++++++++
.../tests/test_inhibitcgroupsv1.py | 74 +++++++++++++++++++
3 files changed, 153 insertions(+)
create mode 100644 repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/actor.py
create mode 100644 repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/libraries/inhibitcgroupsv1.py
create mode 100644 repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/tests/test_inhibitcgroupsv1.py
diff --git a/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/actor.py b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/actor.py
new file mode 100644
index 00000000..7a3e4be4
--- /dev/null
+++ b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/actor.py
@@ -0,0 +1,23 @@
+from leapp.actors import Actor
+from leapp.libraries.actor import inhibitcgroupsv1
+from leapp.models import KernelCmdline
+from leapp.reporting import Report
+from leapp.tags import ChecksPhaseTag, IPUWorkflowTag
+
+
+class InhibitCgroupsv1(Actor):
+ """
+ Inhibit upgrade if cgroups-v1 are enabled
+
+ Support for cgroups-v1 was deprecated in RHEL 9 and removed in RHEL 10.
+ Both legacy and hybrid modes are unsupported, only the unified cgroup
+ hierarchy (cgroups-v2) is supported.
+ """
+
+ name = "inhibit_cgroupsv1"
+ consumes = (KernelCmdline,)
+ produces = (Report,)
+ tags = (ChecksPhaseTag, IPUWorkflowTag)
+
+ def process(self):
+ inhibitcgroupsv1.process()
diff --git a/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/libraries/inhibitcgroupsv1.py b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/libraries/inhibitcgroupsv1.py
new file mode 100644
index 00000000..6c891f22
--- /dev/null
+++ b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/libraries/inhibitcgroupsv1.py
@@ -0,0 +1,56 @@
+from leapp import reporting
+from leapp.exceptions import StopActorExecutionError
+from leapp.libraries.stdlib import api
+from leapp.models import KernelCmdline
+
+
+def process():
+ kernel_cmdline = next(api.consume(KernelCmdline), None)
+ if not kernel_cmdline:
+ # really unlikely
+ raise StopActorExecutionError("Did not receive any KernelCmdline messages.")
+
+ unified_hierarchy = True # default since RHEL 9
+ legacy_controller_present = False
+ for param in kernel_cmdline.parameters:
+ if param.key == "systemd.unified_cgroup_hierarchy":
+ if param.value is not None and param.value.lower() in ("0", "false", "no"):
+ unified_hierarchy = False
+ if param.key == "systemd.legacy_systemd_cgroup_controller":
+ # no matter the value, it should be removed
+ # it has no effect when unified hierarchy is enabled
+ legacy_controller_present = True
+
+ if unified_hierarchy:
+ api.current_logger().debug("cgroups-v2 already in use, nothing to do, skipping.")
+ return
+
+ remediation_cmd_args = ["systemd.unified_cgroup_hierarchy"]
+ if legacy_controller_present:
+ remediation_cmd_args.append('systemd.legacy_systemd_cgroup_controller')
+
+ summary = (
+ "Leapp detected cgroups-v1 is enabled on the system."
+ " The support of cgroups-v1 was deprecated in RHEL 9 and is removed in RHEL 10."
+ " Software requiring cgroups-v1 might not work correctly or at all on RHEL 10."
+ )
+ reporting.create_report(
+ [
+ reporting.Title("cgroups-v1 enabled on the system"),
+ reporting.Summary(summary),
+ reporting.Severity(reporting.Severity.HIGH),
+ reporting.Groups([reporting.Groups.INHIBITOR, reporting.Groups.KERNEL]),
+ reporting.RelatedResource("package", "systemd"),
+ reporting.Remediation(
+ hint="Make sure no third party software requires cgroups-v1 and switch to cgroups-v2.",
+ # remove the args from commandline, the defaults are the desired values
+ commands=[
+ [
+ "grubby",
+ "--update-kernel=ALL",
+ '--remove-args="{}"'.format(",".join(remediation_cmd_args)),
+ ],
+ ],
+ ),
+ ]
+ )
diff --git a/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/tests/test_inhibitcgroupsv1.py b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/tests/test_inhibitcgroupsv1.py
new file mode 100644
index 00000000..9b3ec96f
--- /dev/null
+++ b/repos/system_upgrade/el9toel10/actors/inhibitcgroupsv1/tests/test_inhibitcgroupsv1.py
@@ -0,0 +1,74 @@
+import pytest
+
+from leapp import reporting
+from leapp.libraries.actor import inhibitcgroupsv1
+from leapp.libraries.common.testutils import create_report_mocked, CurrentActorMocked
+from leapp.libraries.stdlib import api
+from leapp.models import KernelCmdline, KernelCmdlineArg
+
+
+@pytest.mark.parametrize(
+ "cmdline_params", (
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="0")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="false")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="False")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="no")]),
+ (
+ [
+ KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="0"),
+ KernelCmdlineArg(key="systemd.legacy_systemd_cgroup_controller", value="0"),
+ ]
+ ), (
+ [
+ KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="0"),
+ KernelCmdlineArg(key="systemd.legacy_systemd_cgroup_controller", value="1"),
+ ]
+ )
+ )
+)
+def test_inhibit_should_inhibit(monkeypatch, cmdline_params):
+ curr_actor_mocked = CurrentActorMocked(msgs=[KernelCmdline(parameters=cmdline_params)])
+ monkeypatch.setattr(api, "current_actor", curr_actor_mocked)
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+
+ inhibitcgroupsv1.process()
+
+ assert reporting.create_report.called == 1
+ report = reporting.create_report.reports[0]
+ assert "cgroups-v1" in report["title"]
+ assert reporting.Groups.INHIBITOR in report["groups"]
+
+ command = [r for r in report["detail"]["remediations"] if r["type"] == "command"][0]
+ assert "systemd.unified_cgroup_hierarchy" in command['context'][2]
+ if len(cmdline_params) == 2:
+ assert "systemd.legacy_systemd_cgroup_controller" in command['context'][2]
+
+
+@pytest.mark.parametrize(
+ "cmdline_params", (
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="1")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="true")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="True")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="yes")]),
+ ([KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value=None)]),
+ (
+ [
+ KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="1"),
+ KernelCmdlineArg(key="systemd.legacy_systemd_cgroup_controller", value="1"),
+ ]
+ ), (
+ [
+ KernelCmdlineArg(key="systemd.unified_cgroup_hierarchy", value="1"),
+ KernelCmdlineArg(key="systemd.legacy_systemd_cgroup_controller", value="0"),
+ ]
+ ),
+ )
+)
+def test_inhibit_should_not_inhibit(monkeypatch, cmdline_params):
+ curr_actor_mocked = CurrentActorMocked(msgs=[KernelCmdline(parameters=cmdline_params)])
+ monkeypatch.setattr(api, "current_actor", curr_actor_mocked)
+ monkeypatch.setattr(reporting, "create_report", create_report_mocked())
+
+ inhibitcgroupsv1.process()
+
+ assert not reporting.create_report.called
--
2.50.1

View File

@ -52,7 +52,7 @@ py2_byte_compile "%1" "%2"}
Name: leapp-repository Name: leapp-repository
Version: 0.22.0 Version: 0.22.0
Release: 5%{?dist} Release: 2%{?dist}
Summary: Repositories for leapp Summary: Repositories for leapp
License: ASL 2.0 License: ASL 2.0
@ -104,40 +104,6 @@ Patch0035: 0035-Add-official-Centos-Stream-9-and-10-RPM-GPG-keys.patch
Patch0036: 0036-Deprecate-is_rhel_alt-from-share-libraries.patch Patch0036: 0036-Deprecate-is_rhel_alt-from-share-libraries.patch
Patch0037: 0037-data-update-data-files-stream-3.3-1380.patch Patch0037: 0037-data-update-data-files-stream-3.3-1380.patch
# CTC1 Candidate2
Patch0038: 0038-Makefile-Non-zero-exit-code-on-failed-tests-in-conta.patch
Patch0039: 0039-CI-Unit-tests-Rename-tasks-tests-executions.patch
Patch0040: 0040-Fix-parsing-of-the-kernel-cmdline.patch
Patch0041: 0041-repomap-Process-repositories-based-on-distro.patch
Patch0042: 0042-Update-the-upgrade-data-files-stream-4.0.patch
Patch0043: 0043-unit-tests-suppress-deprecation-warning-for-is_rhel_.patch
# CTC2 Candidate1
Patch0044: 0044-Remove-obsolete-workflows.patch
Patch0045: 0045-README-IRC-GitHub-discussions.patch
Patch0046: 0046-Resolve-boot-issues-in-hybrid-azure-during-upgrades-.patch
Patch0047: 0047-Restructure-hybrid-image-detection.patch
Patch0048: 0048-Point-to-leapp-repository-contribution-guidelines.patch
Patch0049: 0049-Read-the-DNF-config-by-module.py-library.patch
Patch0050: 0050-Disable-localpkg_gpgcheck-parameter-from-plugin-data.patch
Patch0051: 0051-PR-welcome-msg-update-link-to-contrib-guidelines-139.patch
Patch0052: 0052-Fix-skip-checking-ownership-of-files-in-.-directory-.patch
Patch0053: 0053-fixup-Fix-skip-checking-ownership-of-files-in-.-dire.patch
Patch0054: 0054-Add-test.patch
Patch0055: 0055-fixup-Add-test.patch
Patch0056: 0056-Add-test-for-non-recursive.patch
Patch0057: 0057-el8to9-actors-mysql-Add-MySQL-actor-with-recommendat.patch
Patch0058: 0058-Fix-target-version-format-checks.patch
# do not apply this patch, due to error in centpkg tool
# it doesn't contain any functional change
#Patch0059: 0059-Drop-el7toel8-leapp-repository.patch
Patch0060: 0060-libs-rhui-add-rhel10-targets-for-upgrades.patch
Patch0061: 0061-userspacegen-do-not-repolist-source-debug-repos.patch
Patch0062: 0062-actor-checkrhui-do-not-boostrap-client-on-AWS-9-10.patch
Patch0063: 0063-add-azure-aws-alibaba-client-repositories-to-repomap.patch
Patch0064: 0064-rhui-azure-add-target-client-s-GPG-key-to-mandatory-.patch
Patch0065: 0065-feat-alibaba-support-rhel9-upgrade-to-rhel10-using-r.patch
Patch0066: 0066-Inhibit-upgrade-on-systems-with-cgroupsv1-on-9to10-1.patch
%description %description
%{summary} %{summary}
@ -342,34 +308,6 @@ Requires: libdb-utils
%patch -P 0035 -p1 %patch -P 0035 -p1
%patch -P 0036 -p1 %patch -P 0036 -p1
%patch -P 0037 -p1 %patch -P 0037 -p1
%patch -P 0038 -p1
%patch -P 0039 -p1
%patch -P 0040 -p1
%patch -P 0041 -p1
%patch -P 0042 -p1
%patch -P 0043 -p1
%patch -P 0044 -p1
%patch -P 0045 -p1
%patch -P 0046 -p1
%patch -P 0047 -p1
%patch -P 0048 -p1
%patch -P 0049 -p1
%patch -P 0050 -p1
%patch -P 0051 -p1
%patch -P 0052 -p1
%patch -P 0053 -p1
%patch -P 0054 -p1
%patch -P 0055 -p1
%patch -P 0056 -p1
%patch -P 0057 -p1
%patch -P 0058 -p1
%patch -P 0060 -p1
%patch -P 0061 -p1
%patch -P 0062 -p1
%patch -P 0063 -p1
%patch -P 0064 -p1
%patch -P 0065 -p1
%patch -P 0066 -p1
%build %build
@ -451,831 +389,71 @@ done;
# no files here # no files here
%changelog %changelog
* Fri Jul 18 2025 Karolina Kula <kkula@redhat.com> - 0.22.0-5 * Wed May 14 2025 Petr Stodulka <pstodulk@redhat.com> - 0.22.0-2
- Fix broken bootloader on Azure hybrid images for systems previously upgraded from RHEL 7
- Load DNF configuration correctly when using DNF libraries
- Disable localpkg_gpgcheck during the upgrade if set to allow installation of bundled leapp and leapp-repository deps packages
- Add actor with recommendations for upgrade of MySQL
- The HybridImage model has been replaced by ConvertGrubenvTask
- Check the input format of the target version properly
- Resolves: RHEL-5459, RHEL-38255, RHEL-39095, RHEL-47472, RHEL-96238
* Thu Jun 05 2025 Karolina Kula <kkula@redhat.com> - 0.22.0-4
- Fix parsing of the kernel cmdline
- Require leapp data with provided_data_streams 4.0+
- Resolves: RHEL-67627
* Wed May 14 2025 Petr Stodulka <pstodulk@redhat.com> - 0.22.0-3
- Rebuild
* Tue May 13 2025 Petr Stodulka <pstodulk@redhat.com> - 0.22.0-2
- Require leapp-framework >= 6.1 - Require leapp-framework >= 6.1
- Simplified use of the LiveMode experimental feature with additional enhancements - Simplified use of the LiveMode experimental feature with additional enhancements
- Ensure the leapp-upgrade-el9toel10 RPM is not touched during the upgrade transaction
- Create proper error message when swap of RHUI clients fails
- Fix the check of deprecated PCI devices and drivers - Fix the check of deprecated PCI devices and drivers
- Add RHEL 9.7 product certificates - Add RHEL 10.1 product certificates
- Gracefully handle CentOS OS versioning style - Gracefully handle CentOS OS versioning style
- Introduced the --enable-experimental-feature to simplify use of experimental features - Introduced the --enable-experimental-feature to simplify use of experimental features
- Manage RPM GPG keys during the upgrade respecting used linux distributions - Manage RPM GPG keys during the upgrade respecting used linux distributions
- Minor fixes in reports
- Prevent a crach during post-upgrade phases when no custom SELinux modules needs to be migrated - Prevent a crach during post-upgrade phases when no custom SELinux modules needs to be migrated
- Update leapp upgrade data files - Update leapp upgrade data files
- Resolves: RHEL-53801, RHEL-77945, RHEL-84978 - Minor fixes in reports
- Resolves: RHEL-49402, RHEL-72544, RHEL-77175, RHEL-80334, RHEL-80335, RHEL-80336, RHEL-80550, RHEL-86689
* Fri Feb 14 2025 Petr Stodulka <pstodulk@redhat.com> - 0.22.0-1 * Fri Feb 14 2025 Petr Stodulka <pstodulk@redhat.com> - 0.22.0-1
- Rebase to new upstream 0.22.0 - Rebase to new upstream 0.22.0
- Minor updates in generated reports - Minor updates in generated reports
- Resolves: RHEL-67621, RHEL-67719, RHEL-16881 - Cover upgrades for MySQL and PostgreSQL databases
- Detect OpenSSL engines configured in /etc/pki/tls/openssl.cnf
- Detect deprecated network-scripts (ifcfg) files
- Detect whether subscribed systems are using SCA
- Inform user about Libdb removal if present
- Check and handle upgrades with custom crypto policies
- Update checks for SAP HANA
- Resolves: RHEL-57043, RHEL-35618, RHEL-36661, RHEL-62689, RHEL-68309, RHEL-69831, RHEL-77169, RHEL-78396
* Wed Jan 29 2025 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-6 * Wed Jan 29 2025 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-6
- Detect XFS file systems with problematic parameters
- Raise an inhibitor if unsupported target version supplied instead of error - Raise an inhibitor if unsupported target version supplied instead of error
- Prevent a possible crash with LiveMode when adding the upgrade boot entry on systems with LVM - Prevent a possible crash with LiveMode when adding the upgrade boot entry on systems with LVM
- Fix the bootloader workaround for upgrades on ARM machines - covering also differences on AWS - Resolves: RHEL-57043, RHEL-52309, RHEL-60034
- Resolves: RHEL-67621, RHEL-51072, RHEL-41193
* Fri Jan 17 2025 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-5 * Fri Jan 17 2025 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-5
- Obsolete RHEL9 GPG key signed with SHA1
- Activate LVM VGs with `--sysinit` option to correct the use in the upgrade initramfs
- Fix output of commands executed inside systemd-nspawn containers
- Fix pes events scanner crashing when there are duplicate packages in the received instructions - Fix pes events scanner crashing when there are duplicate packages in the received instructions
- Fix pes events scanner not respecting users transaction configuration - Fix pes events scanner not respecting users transaction configuration
- Fix remediation instructions for deprecated NM configuration
- Fix storage scanner crashing when command outputs contain colon character - Fix storage scanner crashing when command outputs contain colon character
- Activate LVM VGs with `--sysinit` option to correct the use in the upgrade initramfs
- Minor improvements in preupgrade reports - Minor improvements in preupgrade reports
- Resolves: RHEL-67621, RHEL-34570, RHEL-44596, RHEL-50076 - Resolves: RHEL-57043, RHEL-31428, RHEL-33373, RHEL-69829, RHEL-71517
* Tue Nov 19 2024 Matej Matuska <mmatuska@redhat.com> - 0.21.0-4 * Mon Nov 18 2024 Matej Matuska <mmatuska@redhat.com> - 0.21.0-4
- Use net.naming-scheme by default
- Resolves: RHEL-23473
* Mon Nov 18 2024 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-3
- Introduce upgrade path 8.10 -> 9.6
- Require leapp-framework 6.0+ - Require leapp-framework 6.0+
- Update leapp-deps package to satisfy leapp-framework-dependencies 6 - Update leapp-deps package to satisfy leapp-framework-dependencies 6
- Add possibility to use net.naming-scheme during the upgrade - Add dependency on libdb-utils
- Cap max size of the sparse files to 1TiB for storage with large amount of free space
- Enable upgrade for systems with LUKS bound to Clevis with TPM 2.0 token - Enable upgrade for systems with LUKS bound to Clevis with TPM 2.0 token
- Adjust resource limitations for leapp to be able to perform the upgrade - Adjust resource limitations for leapp to be able to perform the upgrade
- Fix problems with the bootloader when upgrading to RHEL 9.6 on ARM - Cap max size of the sparse files to 1TiB for storage with large amount of free space
- Check that detected Intel CPU microarchitecture is supported on target system
- Fix the report when handling broken parsing of kernel cmdline - Fix the report when handling broken parsing of kernel cmdline
- Generate proper error message instead of ModelViolationError when parsing invalid repository definition - Generate proper error message instead of ModelViolationError when parsing invalid repository definition
- Handle default kernel cmdline when multiple boot entries for the default kernel are defined - Handle default kernel cmdline when multiple boot entries for the default kernel are defined
- Introduce a possibility to configure leapp actors covering RHUI on clouds - Migrate Ruby IRB during the upgrade
- Migrate pam_userdb backend during the upgrade
- Skip checking of (PKI) `directory-hash` dir to speedup the upgrade process and clean logs - Skip checking of (PKI) `directory-hash` dir to speedup the upgrade process and clean logs
- Update leapp upgrade data files - Update leapp upgrade data files
- Resolves: RHEL-67621, RHEL-57064, RHEL-56251, RHEL-50686, RHEL-41193 - Resolves: RHEL-57043
- Resolves: RHEL-34570, RHEL-26459, RHEL-23473, RHEL-16881, RHEL-3294
* Thu Sep 19 2024 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-3
- Rebuild to apply changes for gating
- Resolves: RHEL-57043
* Mon Aug 19 2024 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-2 * Mon Aug 19 2024 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-2
- Updated SPEC file to drop leapp repositories unrelated to IPU 8 -> 9 - Initial build for EL 9
- Resolves: RHEL-27847 - Resolves: RHEL-57043
* Fri Aug 16 2024 Toshio Kuratomi <toshio@fedoraproject.org> - 0.21.0-1
- Rebase to new upstream 0.21.0
- Updated leapp data files.
- Inhibit the upgrade to RHEL 9.5 on ARM architecture due to
incompatibility between the RHEL 8 bootloader and RHEL 9.5 kernel.
- Introduce experimental upgrades in 'live' mode for the testing.
- Resolves: RHEL-27847, RHEL-52993, RHEL-45280, RHEL-49748, RHEL-52186
* Wed Jul 24 2024 Toshio Kuratomi <toshio@fedoraproject.org> - 0.20.0-5
- Improve set_systemd_services_states logging
- [IPU 7 -> 8] Fix detection of bootable device on RAID
- Fix detection of valid sshd config with internal-sftp subsystem in Leapp
- Handle a false positive GPG check error when TargetUserSpaceInfo is missing
- Fix failing "update-ca-trust" command caused by missing util-linux package
- Improve report when a system is unsupported
- Fix handling of versions in RHUI configuration for ELS and SAP upgrades
- Add missing RHUI GCP config info for RHEL for SAP
- Fix upgrade on aarch64 via RHUI on AWS
- Resolves: RHEL-33902, RHEL-38909, RHEL-30573, RHEL-43978, RHEL-39046, RHEL-39047, RHEL-39049
* Thu May 30 2024 Petr Stodulka <pstodulk@redhat.com> - 0.20.0-4
- Enable new upgrade path RHEL 8.10 -> 9.5
- Minor updates in reports
- Add information about leapp invocation to leapp.db
- Resolves: RHEL-27847
* Mon May 13 2024 Toshio Kuratomi <toshio@fedoraproject.org> - 0.20.0-3
- Do not terminate the upgrade dracut module execution if
/sysroot/root/tmp_leapp_py3/.leapp_upgrade_failed exists
- Several minor improvements in messages printed in console output
- Several minor improvements in report and error messages
- Fix the parsing of the lscpu output
- Fix evaluation of PES data
- Target by default always "GA" channel repositories unless a different
channel is specified for the leapp execution
- Fix creation of the post upgrade report about changes in states of systemd
services
- Update the device driver deprecation data, fixing invalid fields for some
AMD CPUs
- Update the default kernel cmdline
- Wait for the storage initialization when /usr is on separate file system -
covering SAN
- Resolves: RHEL-27847, RHEL-35240
* Tue Feb 20 2024 Petr Stodulka <pstodulk@redhat.com> - 0.20.0-2
- Fallback to original RHUI solution on AWS to fix issues caused by changes in RHUI client
- Resolves: RHEL-16729
* Tue Feb 13 2024 Toshio Kuratomi <toshio@fedoraproject.org> - 0.20.0-1
- Rebase to new upstream v0.20.0.
- Fix semanage import issue
- Fix handling of libvirt's systemd services
- Add a dracut breakpoint for the pre-upgrade step.
- Drop obsoleted upgrade paths (obsoleted releases: 8.6, 8.9, 9.0, 9.3)
- Resolves: RHEL-16729
* Tue Jan 23 2024 Toshio Kuratomi <toshio@fedoraproject.org> - 0.19.0-10
- Print nice error msg when device and driver deprecation data is malformed
- Fix another cornercase when preserving symlinks to certificates in /etc/pki
- Update the leapp upgrade data files - fixing upgrades with idm-tomcatjss
- Resolves: RHEL-16729
* Fri Jan 19 2024 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-9
- Do not try to download data files anymore when missing as the service
is obsoleted since the data is part of installed packages
- Update error messages and reports when installed upgrade data files
are malformed or missing to instruct user how to resolve it
- Update the leapp upgrade data files - bump data stream to "3.0"
- Resolves: RHEL-16729
* Fri Jan 12 2024 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-7
- Add detection of possible usage of OpenSSL IBMCA engine on IBM Z machines
- Add detection of modified /etc/pki/tls/openssl.cnf file
- Update the leapp upgrade data files
- Fix handling of symlinks under /etc/pki with relative paths specified
- Report custom actors and modifications of the upgrade tooling
- Requires xfsprogs and e2fsprogs to ensure that Ext4 and XFS tools are installed
- Bump leapp-repository-dependencies to 10
- Resolves: RHEL-1774, RHEL-16729
* Thu Nov 16 2023 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-5
- Enable new upgrade path for RHEL 8.10 -> RHEL 9.4 (including RHEL with SAP HANA)
- Introduce generic transition of systemd services states during the IPU
- Introduce possibility to upgrade with local repositories
- Improve possibilities of upgrade when a proxy is configured in DNF configutation file
- Fix handling of symlinks under /etc/pki when managing certificates
- Fix the upgrade with custom https repositories
- Default to the NO_RHSM mode when subscription-manager is not installed
- Detect customized configuration of dynamic linker
- Drop the invalid `tuv` target channel for the --channel option
- Fix the issue of going out of bounds in the isccfg parser
- Fix traceback when saving the rhsm facts results and the /etc/rhsm/facts directory doesnt exist yet
- Load all rpm repository substitutions that dnf knows about, not just "releasever" only
- Simplify handling of upgrades on systems using RHUI, reducing the maintenance burden for cloud providers
- Detect possible unexpected RPM GPG keys has been installed during RPM transaction
- Resolves: RHEL-16729
* Thu Nov 02 2023 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-4
- Fix the upgrade for systems without subscription-manager package
- Resolves: RHEL-14901
* Tue Oct 31 2023 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-3
- Fix the upgrade when the release is locked by new subscription-manager
- Resolves: RHEL-14901
* Wed Aug 23 2023 Petr Stodulka <pstodulk@redhat.com> - 0.19.0-1
- Rebase to v0.19.0
- Requires leapp-framework 5.0
- Handle correctly the installed certificates to allow upgrades with custom repositories using HTTPs with enabled SSL verification
- Fix failing upgrades with devtmpfs file systems specified in FSTAB
- Do not try to update GRUB core on IBM Z systems
- Minor improvements and fixes of various reports and error messages
- Redesign handling of information about kernel (booted and target) to reflect changes in RHEL 9.3
- Use new leapp CLI API which provides better report summary output
- Resolves: rhbz#2215997, rhbz#2222861, rhbz#2232618
* Tue Jul 18 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-5
- Fix the calculation of the required free space on each partitions/volume for the upgrade transactions
- Create source overlay images with dynamic sizes to optimize disk space consumption
- Update GRUB2 when /boot resides on multiple devices aggregated in RAID
- Use new leapp CLI API which provides better report summary output
- Introduce possibility to add (custom) kernel drivers to initramfs
- Detect and report use of deprecated Xorg drivers
- Fix the generation of the report about hybrid images
- Inhibit the upgrade when unsupported x86-64 microarchitecture is detected
- Minor improvements and fixes of various reports
- Requires leapp-framework 4.0
- Update leapp data files
- Resolves: rhbz#2140011, rhbz#2144304, rhbz#2174095, rhbz#2215997
* Mon Jun 19 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-4
- Introduce new upgrade path RHEL 8.9 -> 9.3
- Update leapp data files to reflect new changes between systems
- Detect and report use of deprecated Xorg drivers
- Minor improvements of generated reports
- Fix false positive report about invalid symlinks
- Inhibit the upgrade when unsupported x86-64 microarchitecture is detected
- Resolves: rhbz#2215997
* Mon Jun 05 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-3
- Update the repomap.json file to address planned changes on RHUI Azure
- Resolves: rhbz#2203800
* Fri May 19 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-2
- Include leap data files in the package
- Introduce in-place upgrades for systems with enabled FIPS mode
- Enable the upgrade path 8.8 -> 9.2 for RHEL with SAP HANA
- Fix the upgrade of ruby-irb package
- Resolves: rhbz#2030627, rhbz#2097003, rhbz#2203800, rhbz#2203803
* Tue Feb 21 2023 Petr Stodulka <pstodulk@redhat.com> - 0.18.0-1
- Rebase to v0.18.0
- Introduce new upgrade path RHEL 8.8 -> 9.2
- Requires cpio
- Requires python3-gobject-base, NetworkManager-libnm
- Bump leapp-repository-dependencies to 9
- Add breadcrumbs results to RHSM facts
- Add leapp RHUI packages to an allowlist to drop confusing reports
- Added checks for RHEL SAP IPU 8.6 -> 9.0
- Check RPM signatures during the upgrade
- Check only mounted XFS partitions
- Check the validity and compatitibility of used leapp data
- Detect CIFS also when upgrading from RHEL8 to RHEL9 (PR1035)
- Detect RoCE on IBM Z machines and check the configuration is safe for the upgrade
- Detect a proxy configuration in YUM/DNF and adjust an error msg on issues caused by the configuration
- Detect and report systemd symlinks that are broken before the upgrade
- Detect the kernel-core RPM instead of kernel to prevent an error during post-upgrade phases
- Disable the amazon-id DNF plugin on AWS during the upgrade stage to omit confusing error messages
- Do not create new *pyc files when running leapp after the DNF upgrade transaction
- Drop obsoleted upgrade paths
- Enable upgrades of RHEL 8 for SAP HANA to RHEL 9 on ppc64le
- Enable upgrades on s390x when /boot is part of rootfs
- Extend the allow list of RHUI clients by azure-sap-apps to omit confusing report
- Filter out PES events unrelated for the used upgrade path and handle overlapping event
(fixes upgrades with quagga installed)
- Fix scan of ceph volumes on systems without ceph-osd or when ceph-osd container is not found
- Fix systemd symlinks that become incorrect during the IPU
- Fix the check of memory (RAM) limits and use human readable values in the report
- Fix the kernel detection during initramfs creation for new kernel on RHEL 9.2+
- Fix the upgrade of IBM Z machines configured with ZFCP
- Fix the upgrade on Azure using RHUI for SAP Apps images
- Ignore external accounts in /etc/passwd
- Improve remediation instructions for packages in unknown repositories
- Improve the error message to guide users when discovered more space is needed
- Improve the handling of blocklisted certificates
- Inhibit the upgrade when entries in /etc/fstab cause overshadowing during the upgrade
- Introduced an option to use an ISO file as a target RHEL version content source
- Introduced possibility to specify what systemd services should be enabled/disabled on the upgraded system
- Introduced the --nogpgcheck option to skip checking of RPM signatures
- Map the target repositories also based on the installed content
- Prevent re-run of leapp in the upgrade initramfs in case of previous failure
- Prevent the upgrade with RHSM when Baseos and Appstream target repositories are not discovered
- Provide common information about systemd services
- RHUI(Azure) Handle correctly various SAP images
- Register subscribed systems automatically to Red Hat Insights unless --no-insights-register is used
- Remove obsoleted GPG keys provided by RH after the upgrade to prevent errors
- Rework the network configuration handling and parse the configuration data properly
- Set the system release lock after the upgrade also for premium channels
- Small improvements in various reports
- Resolves: rhbz#2088492, rhbz#2111691, rhbz#2127920, rhbz#2129716,rhbz#2139907, rhbz#2139907, rhbz#2141393, rhbz#2143372, rhbz#2155661
* Wed Sep 07 2022 Petr Stodulka <pstodulk@redhat.com> - 0.17.0-3
- Adding back instruction to not install rubygem-irb during the in-place upgrade
to prevent conflict between files
- Resolves: rhbz#2090995
* Wed Sep 07 2022 Petr Stodulka <pstodulk@redhat.com> - 0.17.0-2
- Update VDO checks to enable user to decide the system state on check failures
and undetermined block devices
- The VDO dialog and related VDO reports have been properly updated
- Resolves: rhbz#2096159
* Wed Aug 24 2022 Petr Stodulka <pstodulk@redhat.com> - 0.17.0-1
- Rebase to v0.17.0
- Support upgrade path RHEL 8.7 -> 9.0 and RHEL SAP 8.6 -> 9.0
- Provide and require leapp-repository-dependencies 7
- Provide `leapp-command(<CMD>)` for each CLI command provided by leapp-repository
- Require dracut, kmod, procps-ng on RHEL 8+
- Require leapp-framework >= 3.1
- Add actors covering removal of NIS components on RHEL 9
- Add checks for obsolete .NET versions
- Allow specifying the report schema v1.2.0
- Check and handle upgrades with custom crypto policies
- Check and migrate OpenSSH configuration
- Check and migrate multipath configuration
- Check minimum memory requirements
- Do not create the upgrade bootloader entry when the dnf dry-run actor stops the upgrade
- Enable Base and SAP in-place upgrades on Azure
- Enable in-place upgrade in case LUKS volumes are Ceph OSDs
- Enable in-place upgrades in Azure RHEL 8 base images using RHUI
- Enable in-place upgrades on IBM z16 machines
- Enable the CRB repository for the upgrade only if enabled on the source system
- Fix cloud provider detection on AWS
- Fix detection of the latest kernel
- Fix issues caused by leapp artifacts from previous in-place upgrades
- Fix issues with false positive switch to emergency console during the upgrade
- Fix swap page size on aarch64
- Fix the VDO scanner to skip partitions unrelated to VDO and adjust error messages
- Fix the false positive NFS storage detection on NFS servers and improve the report msg
- Fix the issues on systems with the LANGUAGE environment variable
- Fix the root directory scan to deal with non-utf8 filenames
- Handle upgrades of SAP systems on AWS
- Inform about necessary migrations related to bacula-director when installed on the system
- Inhibit the upgrade when /var/lib/leapp being mounted in a non-persistent fashion to prevent failures
- Inhibit the upgrade when /var/lib/leapp mounted with the noexec option to prevent failures
- Inhibit upgrade when NVIDIA driver is detected
- Make the application of custom selinux rules more reliable and do not override changes done by RPM scriptlets
- Migrate the OpenSSL configuration
- PESEventScanner actor has been fully refactored
- Report changes around SCP and SFTP
- Skip comment lines when parsing the GRUB configuration file
- Stop propagating the “debug” and ”enforcing=0” kernel cmdline options into the target kernel cmdline options
- Mass refactoring to be compatible with leapp v0.15.0
- Resolves: rhbz#2090995, rhbz#2040470, rhbz#2092005, rhbz#2093220, rhbz#2095704, rhbz#2096159, rhbz#2100108, rhbz#2100110, rhbz#2103282, rhbz#2106904, rhbz#2110627
* Wed Apr 27 2022 Petr Stodulka <pstodulk@redhat.com> - 0.16.0-6
- Skip comments in /etc/default/grub during the parsing
- Resolves: #1997076
* Tue Apr 26 2022 Petr Stodulka <pstodulk@redhat.com> - 0.16.0-5
- Migrate blacklisted CA certificates during the upgrade
- Resolves: #1997076
* Tue Apr 19 2022 Petr Stodulka <pstodulk@redhat.com> - 0.16.0-4
- Extend the check of deprecated or removed PCI drivers
- Do not instruct DNF to install rubygem-irb during the in-place upgrade
to prevent conflict between files
- Resolves: #1997076
* Fri Mar 18 2022 Petr Stodulka <pstodulk@redhat.com> - 0.16.0-1
- Rebase to v0.16.0
- Improve the performance of the leapp execution for "pre first reboot" phases
- Introduce upgrades for RHEL 8 to RHEL 9
- Enabled upgrade paths:
- RHEL 8.6 -> 9.0
- RHEL with SAP 8.6 -> 9.0
- Requires leapp-framework >= 2.2
- Bump leapp-framework-dependencies to 5
- Add actors for MariaDB and PostgreSQL
- Add detection of enabled DNF plugins
- Add scan & checks for VDO devices
- Bind the /run/lock dir into the container in the upgrade initramfs env
- Check Firewalld configuration
- Check SSSD configuration for changes in RHEL 9
- Check deprecated network settings
- Check ifcfg files for change in RHEL 9
- Check the existence of the custom network-scripts
- Filter out PES data unrelated for the particular IPU path
- Fix generating of instructions/data for the leapp DNF plugin during
- Fix generating the target initramfs when additional files and dracut modules are requested to be added
- Fix getting device attribute through udev on Python 3
- Fix parsing of sysctl output during the scan of the system
- Fix scanning "/etc/default/grub" with empty lines
- Fix scanning information about mounted devices
- Fix the execution order for the dnf dry run actor
- Handle SELinux during the in-place upgrade
- Handle live kernel patching during
- Improve and generalize checking of device drivers
- Inhibit the upgrade when ipa-server is detected
- Introduce DNFWorkarounds to register scripts to be executed before DNF run
- Introduce handling of DNF modularity during the upgrade
- Introduce the --report-schema option to control the version of the generated report format
- Introduce the --target option to specify the version of the target system
- Provide the LEAPP_IPU_IN_PROGRESS environment variable for actors during in-place upgrade
- Resolves: #1997076
* Tue Feb 01 2022 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-12
- Fix handling of PES data for modularity packages
- Resolves: #1997076
* Thu Jan 27 2022 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-11
- Beta version of IPU 8 -> 9
- Resolves: #1997076
* Wed Oct 20 2021 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-10
- Bumping the release for the testing purposes.
- First build for the IPU 8 -> 9
- Resolves: #1997076
* Wed Oct 20 2021 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-3
- Correct the version-release to obsolete previous leapp-repository-deps rpm
- Resolves: #2015192
* Wed Oct 20 2021 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-2
- Correct the version-release to obsolete previous leapp-repository rpm
- Resolves: #2015192
* Tue Oct 19 2021 Petr Stodulka <pstodulk@redhat.com> - 0.15.0-1
- Rebase to v0.15.0
- Changed supported upgrade path for: RHEL with SAP 7.9 -> 8.2
- Enable upgrades for SAP on AWS & Azure using RHUI
- The leapp-repository rpm has been renamed to leapp-upgrade-el7toel8
- Provides the leapp-upgrade capability, so all required packages can be installed
by the `yum install leapp-upgrade` command
- Added a dependency on leapp as the new rpm provides leapp commands
- Bumped leapp-repository-dependencies to 6
- Do not exclude repoids enabled via the --enablerepo option (#623)
- Enforce the `en_US.utf-8` locale when running leapp to prevent various issues
when a different locale is used on the system
- Enhance the check of required free space on disk for the upgrade
- Fix XFS ftype=0 workaround when "non-XFS" rootfs is present
- Fix detection of XFS partitions without ftype
- Fix handling of /etc/yum.repos.d directory for RHUI
- Fix incorrect mapping of RHEL repositories
- Fix the detection of NFS partitions in /etc/fstab (e.g. when nfs3 or nfs4 is specified)
- Fix the report message when multiple NICs with ethX names are present (#640)
- Fix handling of issues when fetching leapp data files
- Introduce the LEAPP_NO_NETWORK_RENAMING environment variable to leave management
of NICs names on user when set to '1'; it's wanted e.g. in case a bonding
is configured on the system
- Add actors to report about PostgresSQL changes
- Make generation of targetuserspace container, upgrade initramfs, and target initramfs more dynamic
- Require the /etc/dasd.conf file only when DASD is used on s390x
- Generate /etc/migration-results upon leapp preupgrade / upgrade execution to inform about status of the upgrade
- Improve the report message when BTRFS is detected
- Inhibit the upgrade if any CIFS entries found in /etc/fstab
- Inhibit the upgrade if any deprecated OpenSSH configuration options / directives are detected
- Inhibit the upgrade when multiple rescue boot entries exist on s390x
- Inhibit the upgrade when x32b and x64b versions of packages are installed
- Introduce hard preservation of leapp packages during the IPU to make the
upgrade process more protected
- Introduce new system of automatic mapping of RHEL repositories for the in-place
upgrade based on the repomap.json data file
- Introduce the --channel CLI option to specify the channel (e.g. eus) supposed
to be used for the upgrade
- Report the problems with target repositories using inhibitors instead of error messages
- Update (or create) the /etc/{yum,dnf}/var/releasever file containing the target
OS release if exists or RHUI is detected
- Introduced the upgrade/common leapp repository: contains fundamental parts
generic for all in-place upgrades
- The upgrade/el7toel8 leapp repository contains only stuff related to in-place
upgrade from RHEL 7 -> RHEL 8
- Resolves: #2015192
* Thu May 13 2021 Petr Stodulka <pstodulk@redhat.com> - 0.14.0-4
- Fix the check of removed non-pci drivers
Relates: #1952886
* Tue May 04 2021 Petr Stodulka <pstodulk@redhat.com> - 0.14.0-3
- Fix handling of errors when fetching leapp data files from server
Relates: #1952886
* Tue Apr 27 2021 Petr Stodulka <pstodulk@redhat.com> - 0.14.0-2
- Improve fetching of leapp data files from server (increase timeouts and
retry multiple times in case of error)
- Relates: #1952886
* Fri Apr 23 2021 Petr Stodulka <pstodulk@redhat.com> - 0.14.0-1
- Rebase to v0.14.0
- Added dependency on python-requests on RHEL 7
- Changed supported upgrade paths:
RHEL-ALT 7.6 -> 8.4
RHEL 7.9 -> 8.4
RHEL with SAP 7.7 -> 8.2 (unchanged)
- Download the leapp data from cloud.redhat.com automatically
when no data are present locally (and system is registered)
- Fix migration of Quagga to FRR on RHEL 8.4
- Inhibit the upgrade if the system uses any drivers dropped
from the RHEL 8 system
- Resolves: #1952886
* Thu Feb 04 2021 Dominik Rehak <drehak@redhat.com> - 0.13.0-2
- Rebuild
- Relates: #1915509
* Thu Feb 04 2021 Dominik Rehak <drehak@redhat.com> - 0.13.0-1
- Rebase to v0.13.0
- Add actors to migrate Quagga to FRR
- Add stable uniq Key id for every dialog
- Add upgrade support for SAP HANA
- Allow upgrade with SCA enabled manifest
- Fix comparison of the newest installed and booted kernel
- Fix crash due to missing network interfaces during upgrade phases
- Fix error with /boot/efi existing on non-EFI systems
- Fix false positive detection of issue in /etc/default/grub that led into GRUB
prompt
- Fix remediation command for ipa-server removal
- Fix syntax error in upgrade script
- Inhibit upgrade if multiple kernel-debug pkgs are installed
- Inhibit upgrade on s390x machines with /boot on a separate partition
- Inhibit upgrade with mount options in fstab that break mounting on RHEL 8
- Remove the *leapp-resume* service after the *FirstBoot* phase to prevent kill
of the leapp process on `systemctl daemon-reload`
- Remove the initial-setup package to avoid it asking for EULA acceptance during
upgrade
- Require the leapp-framework capability 1.4
- Respect the *kernel-rt* package
- Resolves: #1915509 #1872356 #1873312 #1899455 #1901002 #1905247 #1870813
- Relates: #1901440
* Sun Oct 25 2020 Petr Stodulka <pstodulk@redhat.com> - 0.12.0-2
- Add actors to migrate Quagga to FRR
- Fixes issues with interrupted leapp during the FirstBoot phase when reload
of daemons is required
Resolves: #1883218
- Relates: #1887912
* Wed Oct 21 2020 Dominik Rehak <drehak@redhat.com> - 0.12.0-1
- Rebase to v0.12.0
- Enable upgrades on AWS and Azure
- Check usage of removed/deprecated leapp env vars
- Do not inhibit if winbind or wins is used in nsswitch.conf
(as the issue is fixed in RHEL 8.2)
- Do not remove java from the upgrade transaction
- Fix handling of events with same initial releases and input packages
- Fix mkhomedir issues after authselect conversion
- Fix python macro error in spec file
- Fix storing of logs from initramfs
- Handle migration of authselect and PAM
- Improve remediation instructions for HA clusters
- Make sure "default.target.wants" dir exists
- Resolves: #1887912
* Tue Sep 15 2020 Dominik Rehak <drehak@redhat.com> - 0.11.0-4
- Remove java from the upgrade transaction
Relates: #1860375
* Tue Sep 08 2020 Petr Stodulka <pstodulk@redhat.com> - 0.11.0-3
- Set authselect and PAM actors experimental again
Relates: #1860375
* Wed Sep 02 2020 Petr Stodulka <pstodulk@redhat.com> - 0.11.0-2
- Make possible upgrade with the java-11-openjdk-headless package
- Fix check of local repositories when metalink or mirrorlist is specified
- Relates: #1860375
* Tue Aug 18 2020 Michal Bocek <mbocek@redhat.com> - 0.11.0-1
- Rebase to v0.11.0
- Do not crash when the /root/temp_leapp_py3 directory exists (when upgrade is executed multiple times)
Relates: #1858479
- Do not detect grub device on the s390x architecture (ZIPL is used there)
- Consider the katello rpm being signed by Red Hat
- Omit printing grub binary data on terminal which could break terminal output
- Provide just a single remedition command in the pre-upgrade report to be compatible with Satellite and Cockpit
- Search repository files only in directories used by DNF
- Change supported upgrade paths: RHEL-ALT 7.6 -> 8.2; RHEL 7.9 -> 8.2
- Check whether PAM modules, that are not present on RHEL 8, are used
- Inhibit upgrade when local repositories (referred by file://) are detected
- Introduce actors for migration of Authconfig to Authselect
- Support for an in-place upgrade for z15 machines - s390x architecture
- Update list of removed drivers on RHEL 8
- Resolves: #1860375
* Mon Apr 20 2020 Michal Bocek <mbocek@redhat.com> - 0.10.0-2
- Fixed broken cli output due to printing binary data
- Relates: #1821710
* Thu Apr 16 2020 Petr Stodulka <pstodulk@redhat.com> - 0.10.0-1
- Rebase to v0.10.0
- Changed upgrade paths: RHEL-ALT 7.6 -> 8.2; RHEL 7.8 -> 8.2
- Add initial multipath support (it doesn't handle all cases yet)
- Use the new framework mechanism to inhibit the upgrade without reporting errors
- Support the upgrade without the use of subscription-manager
- Add dependency on leapp-framework
- Check if the latest installed kernel is booted before the upgrade
- Check that the system satisfies minimum memory requirements
for the upgrade (#413)
- Do not mount pseudo and unsupposrted FS to overlayfs (e.g. proc)
- Drop leapp sos plugin (it's part of the sos rpm in RHEL 7.7+)
- Evaluate PES events transitively to create correct data for the upgrade
transaction
- Fix checking of kernel drivers (#400)
- Fix failures caused by local rpms added into the upgrade transaction
- Fix getting mount information with mountpoints with spaces in the path
- Fix handling of XFS without ftype for every such mounted FS
- Fix issue with random booting into old RHEL 7 kernel after the upgrade
- Fix issues on systems with statically mapped IPs in /etc/hosts
- Fix issues with device mapper and udev in a container
- Fix issues with failing rpm transaction calculation because of duplicate
instructions for dnf
- Fix various issues related to RHSM (including rhbz rhbz#1702691)
- Fix yum repository scan in case of repositories with invalid URL
- Improved report related to KDE/GNOME
- Inhibit the upgrade for ipa-server (#481)
- Inhibit the upgrade if multiple kernel-devel rpms are installed
- Inhibit the upgrade on FIPS systems
- Inhibit the upgrade when links on root dir '/' are not absolute to save the world
- Inhibit the upgrade when the raised dialogs are missing answers (#589)
- Introduce new ways of using custom repositories during the transaction
- Make report messages more explicit about Dialogs (#600)
- Migrate SpamAssassin
- Migrate cups-filters
- Migrate sane-backend
- Modify vim configuration to keep the original behaviour
- Parse correctly kernel cmdline inside the initrd (#383) (fixes various issues on s390x)
- Print warnings instead of a hard failure when expected rpms cannot be found
(e.g. python3-nss inside an rpm module) (#405)
- Remove java11-openjdk-headless during the upgrade (rhbz#1820172)
- Report changes in wireshark
- The name and baseurl field in the CustomTargetRepository message are optional now
- Throw a nice error when invalid locale is set (#430)
- Various texts are improved based on the feedback
- Resolves: #1821710
* Tue Nov 5 2019 Petr Stodulka <pstodulk@redhat.com> - 0.9.0-5
- Do not use efibootmgr on non-efi systems
Resolves: #1768904
* Mon Nov 4 2019 Petr Stodulka <pstodulk@redhat.com> - 0.9.0-4
- Inhibit upgrade on EFI systems when efibootmgr is not installed
Relates: #1753580
* Fri Nov 1 2019 Petr Stodulka <pstodulk@redhat.com> - 0.9.0-3
- Inhibit upgrade on s390x machines with rd.znet in kernel cmdline to prevent
troubles with networking (temporary)
- Fix issues with failing rpm transaction calculation because of duplicates
- Fix boot order on EFI systems
Relates: #1753580
* Wed Oct 30 2019 Michal Bocek <mbocek@redhat.com> - 0.9.0-2
- Fixed some remediation instructions
- Not trying to make an overlay over /boot/efi
Relates: #1753580
* Thu Oct 24 2019 Petr Stodulka <pstodulk@redhat.com> - 0.9.0-1
- Rebase to v0.9.0
- Added dependency on policycoreutils-python
- Change upgrade path from RHEL(-ALT) 7.6 (EUS) to RHEL 8.1
- Changed the title of the upgrade boot entry to be valid for ZIPL
- Check NSS configuration for use of wins or winbind
- Check SSSD configuration
- Check use of removed PAM modules
- Check whether CPU on s390x is supported on RHEL 8
- Do not remove packages which shall be installed/kept on target system
- Do not waste time by downloading of RPMs if upgrade has been inhibited already
- Enable and make possible upgrades on all architectures
- Enable repositories used for upgrade on the upgraded system
- Fix adding of local rpms into the upgrade transaction
- Fix check of active kernel modules
- Fix handling of XFS filesystems with ftype=0 (rhbz#1746956)
- Fix ntp migration: extract configs into the right directories
- Fix traceback when RHSM is skipped
- Handle possible error when setting release on upgraded system
- Handle systems with EFI boot
- Handle upgrade on systems with multiple partitions
- Improve message on failed subscription-manager and dnf
- Improved the reporting capability
- Migrate SELinux customizations
- No size limit on leapp.db in sosreport
- Process new PES data format + process PES events in order of releases
- Require the biosdevname dracut module on the intel architecture only
- Retry some actions of subscription-manager on failure to reduce number of issues
- Update the list of packages supposed to be removed during the upgrade
- Upgrade only packages signed by Red Hat
Resolves: #1753580
* Thu Jul 25 2019 Petr Stodulka <pstodulk@redhat.com> - 0.8.1-2
- attempt to (un)set rhsm release several times to omit possible problems with
server
Relates: #1723115
* Wed Jul 24 2019 Petr Stodulka <pstodulk@redhat.com> - 0.8.1-1
- Rebase to v0.8.1
Relates: #1723115
- enable installation of RPMs that were previously blacklisted due to problems
with rich dependencies
* Mon Jul 15 2019 Petr Stodulka <pstodulk@redhat.com> - 0.8.0-1
- Rebase to v0.8.0
Relates: #1723115
- improve handling of RPM transaction to be able to process RPMs with
rich dependencies
- add missing dependency on python-udev & python3-udev
- fix processing of last phase during the first boot of the upgraded system
- set RHSM target release after the upgrade to expected version of the system
- enable the CRB repository when the Optional repository is enabled
- check tcp wrappers
- check OpenSSH configuration
- check and handle vftpd configuration
- check kernel drivers
- improve checks related to subscriptions
- improve parsing of /etc/fstab
- ensure the new target kernel is default boot entry
- handle better cases when no target repositories has been found
- migrate NTP to chronyd
- migrate brltty configuration
- migrate sendmail
- avoid removal of /etc/localtime and /etc/resolv.conf during the upgrade
- add informational actors for: acpid, chrony, dosfstools, grep, irssi,
postfix, powertop
* Sun Jun 23 2019 Vojtech Sokol <vsokol@redhat.com> - 0.7.0-6
- Rebuild
Resolves: #1723115
* Fri Apr 26 2019 Petr Stodulka <pstodulk@redhat.com> - 0.7.0-5
- build rhel8 initrd on the fly during the upgrade process
- do not bundle initrd and vmlinuz file in the rpm
Relates: #1636481
* Fri Apr 26 2019 Petr Stodulka <pstodulk@redhat.com> - 0.7.0-4
- add python2-docs and python3-docs to the list of rpms for removal as
currently it causes troubles with RPM transaction
Relates: #1636481
* Fri Apr 26 2019 Petr Stodulka <pstodulk@redhat.com> - 0.7.0-3
- set selinux into the permissive mode on RHEL 8 when enforcing was set
originally
- add python-docs and squid rpms to the list of rpms for removal
Relates: #1636481
* Wed Apr 17 2019 Petr Stodulka <pstodulk@redhat.com> - 0.7.0-2
- fix inhibition when ethX network interface exists and more additional NIC
exist as well
Relates: #1636481
* Wed Apr 17 2019 Petr Stodulka <pstodulk@redhat.com> - 0.7.0-1
- Rebase to v0.7.0
Relates: #1636481
- new dependencies: python3, python*-pyudev
- upgrade process is interrupted after RPMUpgradePhase and resumed with Python3
- upgrade of NetworkManager is fixed
- upgrade of firewalld is handled
- name changes of network interfaces are handled
- HTB repositories used for upgrades are replaced with the ones used for GA
- tpm2-abrmd and all packages that depend on redhat-rpm-config are removed
during upgrade
- handling of the upgrade RPM transaction is improved
- sync command is used in initrd to avoid issues related to cache
- networking naming changes are handled
- disable udev's persistent network interface naming scheme when the only NIC
is eth0
- inhibit upgrade when ethX is detected and more NICs exist
- check whether all target upgrade repositories are available
- output of dnf tool is always showed during the upgrade
- all logs and reports are stored in /var/log/leapp/ directory
* Tue Apr 09 2019 Vojtech Sokol <vsokol@redhat.com> - 0.6.0-4
- Remove wrong license for sos subpackage
Relates: #1636481
* Mon Apr 08 2019 Vojtech Sokol <vsokol@redhat.com> - 0.6.0-3
- Fix patch
Relates: #1636481
* Mon Apr 08 2019 Vojtech Sokol <vsokol@redhat.com> - 0.6.0-2
- Fix specfile
Relates: #1636481
* Mon Apr 08 2019 Vojtech Sokol <vsokol@redhat.com> - 0.6.0-1
- Rebase to v0.6.0
Relates: #1636481
- Change license to Apache 2.0
- leapp-repository-data subpackage is removed (it included data files)
- data files are required to be delivered by user manually now
- udev database is accessible during the upgrade
- downtime of some machines is significantly reduced
- sos plugin is introduced for collecting data needed for debugging
- redhat-rpm-config package is removed during upgrade
- system is checked for NFS filesystems usage and upgrade is inhibited when
detected
- /boot is checked for sufficient free space
- upgrade is not inhibited any more when Logic SCSI Controllers are present
- repositories used to upgrade the system are based on provided data files
- specific syntax errors in grub configuration are handled when detected
- SCTP is handled during the upgrade
- migration of yum is handled (yum is available after the upgrade)
- upgrade of NetworkManager is handled
- upgrades with XFS filesystems without ftype is handled better
- new reporting functionality is introduced and used
- new dependencies: python2-jinja2, pciutils, sos
- new directory /etc/leapp/files for data files is introduced
- python files are precompiled to avoid left over pyc files
* Thu Jan 24 2019 Petr Stodulka <pstodulk@redhat.com> - 0.5.0-1
- Rebase to v0.5.0
Relates: #1636481
- Require DNF v4+ and Leapp framework v0.5.0
- Improved handling of RPM transaction using own DNF plugin and PES
data
- Models have been refactored to use new format supported by framework
- Handle transaction preparation when release is set through RHSM
- Fix failing overlayfs unmounting
- Reduce the IPUWorkflo workflow
- Include all required directories inside RPMs
- Handle repositories using metalink and mirrorlist
- Handle better installation of local RPMs
- Move system dependencies into the RPM metapackage
- Satisfy leapp and leapp-repository RPM dependencies during the
upgrade
* Thu Jan 03 2019 Petr Stodulka <pstodulk@redhat.com> - 0.4.0-4
- Activate LVM LVs during upgrade
- Resolve file conflict of python-inotify during the RPM transaction
Relates: #1636481
* Thu Nov 29 2018 Petr Stodulka <pstodulk@redhat.com> - 0.4.0-3
- Add empty empty events for leapp-repository-data.
- Requiring now DNF 2.7.5-19 or higher
Relates: #1636481
* Wed Nov 21 2018 Petr Stodulka <pstodulk@redhat.com> - 0.4.0-2
- update leapp-repository-data source
Relates: #1636481
* Wed Nov 21 2018 Petr Stodulka <pstodulk@redhat.com> - 0.4.0-1
- Rebase to 0.4.0
- change hierarchy of repositories
- scan RHEL system for custom and 3rd-party packages
- improve error messages
Relates: #1636481
* Fri Nov 09 2018 Petr Stodulka <pstodulk@redhat.com> - 0.3.1-1
- Rebase to 0.3.1
- move data to separate subpackage
Relates: #1636481
* Wed Nov 07 2018 Petr Stodulka <pstodulk@redhat.com> - 0.3-1
- Initial RPM
Resolves: #1636481