Skip to content

Rebase on upstream most recent version 0.23.0-3 (78640b665ca1c94c51b397cb35f9aac2f3cbb5c4)#151

Merged
andrewlukoshko merged 75 commits into
AlmaLinux:almalinux-ng-0.23.0from
yuravk:almalinux-ng-0.23.0
Feb 20, 2026
Merged

Rebase on upstream most recent version 0.23.0-3 (78640b665ca1c94c51b397cb35f9aac2f3cbb5c4)#151
andrewlukoshko merged 75 commits into
AlmaLinux:almalinux-ng-0.23.0from
yuravk:almalinux-ng-0.23.0

Conversation

@yuravk

@yuravk yuravk commented Feb 11, 2026

Copy link
Copy Markdown
Collaborator

No description provided.

danmyway and others added 30 commits December 16, 2025 12:07
When /boot is a separate partition, we bindmount what=/sysroot/boot to
/boot, so that we can perform necessary checks when booting with FIPS
enabled. However, the current solution contains incorrect unit
dependencies: it requires sysroot-boot.target. There is no such target,
and the correct value should be sysroot-boot.mount. This patch corrects
the dependencies.

(cherry picked from commit 2fb6bea)
Previously, multipath configs were scanned (and optionally) modified
only for the 8>9 upgrade paths. Known backward-compatibility issues were
fixed in the ApplicationsPhase, but any support for mounting multipath
devices was lacking. This patch refactors the handling of multipath so
that:
1) all multipath-related configs are copied into target uspace
2) any changes done in the ApplicationsPhase are performed to these
   copies instead
3) our modified multipath configs are included into the initramfs
4) dracut 'multipath' module is enabled when building upgrade initramfs
5) system configs are patched so that in the end they will look the same
   as if modified in the ApplicationPhase. This is achieved by simply
   copying our modified configs and replacing the old system ones.

These changes avoid reaching into the config-parsing code. An ugly
consequence of this is that some models (MultipathConfFacts8to9) needed
to be placed into the common repository, although they are only used for
8>9 upgrades. To address this ugliness would require designing and
producing a message that would contain the entire contents of the
primary multipath config (if we want to avoid parsing it twice).

Introduces new models / messages:
  * MultipathInfo
  * MultipathConfigUpdatesInfo

jira-ref: RHEL-14712, RHEL-124306 (dev task)
(cherry picked from commit 84b9fa4)
In checkrootsymlinks actor, remediation command did not include
necessary double quotes, what makes the command syntactically
incorrect and not able to apply.

Jira: RHEL-30447
(cherry picked from commit 07e2ec2)
JIRA: RHELMISC-11596
(cherry picked from commit 2c1ecc2)
The relevant user LVM configuration is now copied into the target userspace
container along with enabling LVM dracut module for upgrade initramfs creation.
The LVM configuration is copied into the target userspace container when
lvm2 package in installed. Based on the configuration, the devices file
is also copied in when present and enabled. The --nolvmconf option used when
executing dracut is changed into --lvmconf instead if the files are
copied into the target userspace container.

Jira: RHEL-14712
(cherry picked from commit 80169c2)
Our newly introduced handling of multipath in the upgrade initramfs has
a bug when it tries to check whether multipath_info.config_dir exists.
However, when multipath config does not exists, a default message with
multipath_info.config_dir=None is produced, causing an unhandled
exception. This patch fixes the issue. Moreover, an additional issue
when updated configs are not *guaranteed* to be placed into the target
uspace was discovered.

(cherry picked from commit c960a70)
There are certain packages that are distribution specific and need to be
replaced in the DNF upgrade transaction with their target distro
counterpart when converting during the upgrade. For example the release
and logos packages. Some packages, such as packages containing
repository definitions or GPG keys, need to be removed without any
replacement.

This patch introduces a new convert/swapdistropackages actor to
accomplish this. Currently only packages that need to be handled during
CS->RHEL and AL->RHEL conversion are handled, however the actor contains
a config dict to easily add more paths.

Jira: RHEL-110568
(cherry picked from commit 5b3ccd9)
Signed-off-by: Daniel Diblik <ddiblik@redhat.com>
(cherry picked from commit 78e2265)
The jquery.js file was not getting properly put into the
build/html/_static/ directory. Removing this line seems to fix that.

(cherry picked from commit 4ddf530)
Catch ModelViolationError when parsing sshd configuration files that
contain invalid values for case-sensitive options like PermitRootLogin
and UsePrivilegeSeparation.

This change provides a clear error message
explaining that arguments are case-sensitive and lists the valid values
based on the model definition.

Jira: RHEL-19247
(cherry picked from commit 4105452)
(cherry picked from commit bdcd944)
(cherry picked from commit 9557e64)
The tests never covered the part where UpgradeInitramfsTasks have to get
produced by the actor on 8->9.

(cherry picked from commit d327f56)
The comment left there by ivasilev suggest that this could possibly be
used on newer RHEL versions too. Let's leave commented out until it's
confirmed it's not needed.

(cherry picked from commit 418773c)
The name of the actor is kept for backwards compatibility.

(cherry picked from commit c746806)
karolinku and others added 28 commits February 6, 2026 15:53
Originally the DNF modulestreams have been reset (and eventually set)
just before the first RPM transaction calculation and before the actual
execution of the transaction. The idea was that during download and dry-run
the modulestreams are already reset - as originally it used the same
"environment" (and possibly there have been other problems if the reset
in the same environment is performed reundantly).

However, after the OVL composition redesign [0], we create a disk image for
every single partition (mounted file system) defined by FSTAB again,
so any previous changes in modulestreams configuration are lost.

This led to the situation that that actor reponsible for the download
of packages for the RPM upgrade transaction downloaded a different set
of packages than the set calculated later when the RPM transaction is
performed.

Nice example is having enabled php:8.2 modulestream on RHEL 8, which is present
also on RHEL 9 systems. So the reset of the modulestreams expected to install
(downgrade actually) to non-modularized php RPMs (initial calculation and execution
of the transaction), but for the download of packages (and dry-run) has been
expected to update packages to their php:8.2 counterpart on RHEL 9. This ended
during RPMUpgrade transaction to the failure as packages expected for the installation
has not been present and could not be downloaded (as the transaction is performed
in offline state).

There has been also identified and fixed issue with condition
indentation, which casued execution of module resetting only for
RHEL 9 target version.

[0] OVL redesign PR: oamg#1097)

Jira: RHEL-102361
(cherry picked from commit 63052c8)
By default, modules are disabled on RHEL 9 after the upgrade. However,
there is a special case for PHP where the default version on RHEL 9
(php:8.0) is lower than the desired php:8.2 stream on RHEL 8.

Without explicit handling, the PHP module would be disabled on the
target system or downgraded.

This actor checks if the php:8.2 module stream was enabled on the source
RHEL 8 system and schedules it for enabling on the target RHEL 9 system
via RpmTransactionTasks, preserving the same PHP version across the
upgrade.

(cherry picked from commit 81b8b72)
Originally if OSError is raised it ended with traceback due to
invalid input argument when trying to log a warning. This has been
fixed.

In addition, in case of FileNotFoundError, just a debug log is created.
This scenario is happening typically if the actor removing the squasfs
file is executed multiple times - e.g. when running
  # /root/tmp_leapp_py3/leapp3 rerun FirstBoot

Added unit-test to cover these scenarios correctly.

Jira: RHEL-135847
(cherry picked from commit c1130c0)
Originally, if /var/lib/leapp has been mountpoint, the check raised
FP inhibitor when the defined mountpoint in FSTAB has a traling slash:
  /var/lib/leapp/

Strip trailing slashes when checking defined FSTAB mountpoints.

Jira: RHEL-42609
(cherry picked from commit 232ac2e)
The grub library has been used for all things related to booting,
including also utilities related to EFI and "partitions".

This patch splits the unrelated information grub library into multiple
dedicated libraries:
- grub - now only grub related utilities
- firmware - contains the is_efi and is_bios helpers
- firmware/efi - utilities related to EFI
- partitions - contains utilities related to partitions and devices, used by
               both grub and efi

Functions in efi library now raise efi.EFIError instead of
StopActorExecutionError and StopActorExecution

Functions in the partitions library raises partitions.StorageScanError
exception instead of StopActorExecution.

(cherry picked from commit f7e50d9)
The function returns expected (default) canonical path for the default
efi directory (the directory under /boot/efi/EFI/ where the usual
EFI boot entry is supposed to be located) based on the specified
linux distribution.

E.g. for RHEL: /boot/efi/EFI/redhat

The path might be incorrect on other distributions that are not covered
correctly yet. In such a case, the default is:
  /boot/efi/EFI/redhat/<distro_id>

(cherry picked from commit 28ab232)
The path to the EFI dir has been hardcoded just for RHEL. Obtain
the expected canonical path to the default EFI boot entry dir
from `leapp.libraries.common.distro.get_distro_efidir_canon_path`
instead.

(cherry picked from commit ef6b03d)
After an upgrade+conversion, the upgraded system might end up with an
EFI boot loader entry from the source system pointing the shim or grub
EFI binary from the source system. E.g. Centos Stream pointing to
\EFI\centos\shimx64.efi instead of Red Hat Enterprise Linux pointing to
\EFI\redhat\shimx64.efi.

This patch introduces a new convert/updateefi actor that adds a new EFI
boot entry for the target system with the correct EFI binary, removes
the source system directory on ESP, e.g /boot/efi/EFI/centos, and
finally removes the source system EFI boot entry (see below).

This is handled for both x86_64 and aarch64 EFI systems. However,
in case of IPU 8 -> 9 on ARM systems it's little bit conflicting with
the existing fixes (the efi_reboot_fix library) which expects already
to set the EFI boot entry for the next boot. We will need to look
at it closer in future but partially it's resolved already.

Additionally, if the source EFI directory is not empty (usually when
it contains custom files), do not remove it and produce a post-upgrade
report instead, instructing the user to review the content and handle
it manually.

This currently does not work with SecureBoot enabled. The problem
probably is, in my understanding, that the shim and grub only contain
keys for verifying signatures of the source distro. Our upgrade boot
entry uses the target distros kernel, which is signed by the target
distro. And so the shim/grub of the source distro rejects it.

Jira: RHEL-133549
(cherry picked from commit d493740)
The EFI bootloader entry replacement during conversion, handled by the
convert/updateefi actor, does currently not handle secure boot. This
patch adds the convert/securebootinbihit actor that inhibits secureboot
during conversion, regular upgrade is not affected.

Jira: RHEL-133549
(cherry picked from commit f1d0e45)
In some VMs the Secure Boot is not supported even when UEFI is used.
On such system the scanner has been failing constantly. Check the
error properly and set secure boot to None in such a case.

(cherry picked from commit ef13971)
Previously, number of functions raised StopActorExecution on errors
or ignored them, deciding the logic inside the library instead of in
actors. This could potentially lead to hidden problems and bugs for
which we do not have a good explanation due to missing data. This
has been happening mainly for `get_grub_devices()`.

* `has_grub()` - raises OSError if cannot read from a given block device
* `get_grub_devices()` - raises grub.GRUBDeviceError when cannot obtain
  devices hosting GRUB

Also update actors calling `get_grub_devices()` to properly handle
the situation.

(cherry picked from commit 90c6c7c)
Introduce new model/message NVMEInfo containing information about
detected NVMe devices and basic configuration.

From the configuration it's loaded information about hostid and
hostnqn if defined. This configuration is mandatory for NVMe-oF
setups.

Devices are scanned directly from /sys/class/nvme/ directory, which
should contain information about all NVMe devices. The gathered
facts are limited to information important for the correct handling
of the IPU with NVMe devices - covering NVMe-FC.

Currently scanned information about each device:
    * device name
    * NVMe transport type
    * sys_path (/sys/class/...) to the device definition

If any of the information is not possible to obtain just log an error
message and skip the device - the issue is theoretical and it's not
expected to happen in real. But leaving log messages so in case of
issues we leave visible clues.

Co-Authored-By: Michal Hecko <mhecko@redhat.com>

Jira-ref: RHEL-46807
(cherry picked from commit c1ad8f1)
Add a new actor that checks whether the system uses NVMe devices. These
can be connected using different transport technologies, e.g., PCIe,
TCP, FC, etc. Transports handled by the current implementation:
    * PCIe (no special actions are required)
    * Fibre Channel (FC)

When NVMe-FC devices are detected, the following actions are taken:
    * dracut, dracut-network, nvme-cli, and some others packages are installed into initramfs
    * /etc/nvme is copied into target userspace
    * the nvmf dracut module is included into upgrade initramfs
    * rd.nvmf.discover=fc,auto is added to the upgrade boot entry
    * nvme_core.multipath is added to the upgrade and target boot entry

Conditions causing the upgrade to be inhibited:
    * detecting a NVMe device using a transport technology different than PCIe or FC
      that is used in /etc/fstab
    * missing /etc/nvme/hostnqn or /etc/nvme/hostid when NVMe-FC device is present
    * source system is RHEL 9+ and it has disabled native multipath

Co-Authored-By: Petr Stodulka <pstodulk@redhat.com>

Jira-ref: RHEL-46807
(cherry picked from commit a40abc6)
The udev rules provided by dracut's nvmf module
(95-nvmf-initqueue.rules) use initqueue to trigger `nvme-cli
connect-all`. This is problematic as initqueue might not be running when
the udev event lands. Furthermore, the original rules use --onetime when
calling initqueue, which is problematic as we are waiting for multiple
devices that might not appear simultaneously. Therefore, we add an actor
that replaces the original file with our own version that calls nvme-cli
directly.

Jira-ref: RHEL-46807
(cherry picked from commit 3b36d93)
Modify leapp's dracut module to insert a initqueue/finished hook that
prevents dracut's initqueue from exiting until all block devices that
are required (i.e. we generate mount units for them) are present in
/dev/. Stalling initqueue allows us to reuse dracut's modules that
handle enablement of different storage technologies such as NVMe over
fabrics. Normally, the initqueue finished when root and /usr are
mounted. However, during upgrade we want to mount all storage from
/etc/fstab, some of which might be, e.g., NVMe over Fibre Channel. We
want to reuse dracut's mechanism that enable such technologies, and,
therefore, we prevent "early" termination of initqueue.

Currently, the new stalling script "upgrade-mount-wait-check.sh" waits
on all devices that can be found in our generated mount units except
units that do not mount actual devices, or have 'bind' or 'rbind' in
their options. Therefore, for the script to wait for a device, the
corresponding mount unit must satisfy:
1) the What= property must start with /dev, i.e., What=/dev/...
1) the Options= field cannot contain the value 'bind' (this excludes
   also 'rbind')

Co-Authored-By: Michal Hecko <mhecko@redhat.com>

Jira-ref: RHEL-46807
(cherry picked from commit 580a428)
get_distro_efidir_canon_path() gets canonical path to the distro specific (rhel, almalinux, centos) EFI directory.
The tests are rewritten from the current_actor_context style to the
usual unit test style. And a new test is added to check that the actor
raises StopActorExecutionError when there is a failure in
get_grub_devices().

Jira: RHEL-145872
(cherry picked from commit f68c36f)
The recent changes in leapp.libraries.common.partitions introduced the
StorageScanError exception instead of silently raising
StopActorExecution. This patch handles those at the call sites,
including in actors and in shared libraries.

Jira: RHEL-145872
(cherry picked from commit 90b33a4)
This is ugly hardcode fix, but to save a time so close to release,
let's hardcode it into the deprecated list of SUPPORTED_VERSIONS.
The proper fix is going to be addressed in the next release, together
with the removal of this dict.

(cherry picked from commit 46b4cc5)
Remove unsupported paths and related tests.
Also add missing 8.10 -> 9.8 path.

Jira: RHEL-108106
(cherry picked from commit ffd8b1e)
* Update PES data to cover changes in RHEL 9.8 and 10.2; including
  updated events regarding tomcat & tomcat9 on rhel 10.2
  (tomcat9 is EOL; so ignore it during the upgrade)
* Updated repomap.json:
  * Update the list RHEL repositories
  * Update add Almalinux repositories that have 1:1 mapping to RHEL/CS
  * Details:
   * The following repos have been added:
     - Repo(pesid='rhel10-AppStream', major_version='10', repoid='appstream', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-AppStream', major_version='10', repoid='appstream', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-AppStream', major_version='10', repoid='appstream', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-AppStream', major_version='10', repoid='appstream', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-BaseOS', major_version='10', repoid='baseos', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-BaseOS', major_version='10', repoid='baseos', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-BaseOS', major_version='10', repoid='baseos', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-BaseOS', major_version='10', repoid='baseos', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-CRB', major_version='10', repoid='crb', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-CRB', major_version='10', repoid='crb', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-CRB', major_version='10', repoid='crb', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-CRB', major_version='10', repoid='crb', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-HighAvailability', major_version='10', repoid='highavailability', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-HighAvailability', major_version='10', repoid='highavailability', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-HighAvailability', major_version='10', repoid='highavailability', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-HighAvailability', major_version='10', repoid='highavailability', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-NFV', major_version='10', repoid='nfv', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-NFV', major_version='10', repoid='rhel-10-for-ppc64le-nfv-rpms', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-NFV', major_version='10', repoid='rhel-10-for-s390x-nfv-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-RT', major_version='10', repoid='rhel-10-for-ppc64le-rt-rpms', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-RT', major_version='10', repoid='rhel-10-for-s390x-rt-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-RT', major_version='10', repoid='rt', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel10-SAP-NetWeaver', major_version='10', repoid='rhel-10-for-aarch64-sap-netweaver-rpms', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-SAP-Solutions', major_version='10', repoid='rhel-10-for-aarch64-sap-solutions-rpms', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='rhel')
     - Repo(pesid='rhel10-SAP-Solutions', major_version='10', repoid='rhel-10-for-s390x-sap-solutions-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')
     - Repo(pesid='rhel8-AppStream', major_version='8', repoid='appstream', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-AppStream', major_version='8', repoid='appstream', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-AppStream', major_version='8', repoid='appstream', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-AppStream', major_version='8', repoid='appstream', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-BaseOS', major_version='8', repoid='baseos', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-BaseOS', major_version='8', repoid='baseos', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-BaseOS', major_version='8', repoid='baseos', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-BaseOS', major_version='8', repoid='baseos', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-CRB', major_version='8', repoid='powertools', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-CRB', major_version='8', repoid='powertools', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-CRB', major_version='8', repoid='powertools', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-CRB', major_version='8', repoid='powertools', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-HighAvailability', major_version='8', repoid='ha', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-HighAvailability', major_version='8', repoid='ha', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-HighAvailability', major_version='8', repoid='ha', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-HighAvailability', major_version='8', repoid='ha', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-NFV', major_version='8', repoid='nfv', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel8-RT', major_version='8', repoid='rt', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-AppStream', major_version='9', repoid='appstream', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-AppStream', major_version='9', repoid='appstream', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-AppStream', major_version='9', repoid='appstream', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-AppStream', major_version='9', repoid='appstream', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-BaseOS', major_version='9', repoid='baseos', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-BaseOS', major_version='9', repoid='baseos', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-BaseOS', major_version='9', repoid='baseos', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-BaseOS', major_version='9', repoid='baseos', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-CRB', major_version='9', repoid='crb', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-CRB', major_version='9', repoid='crb', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-CRB', major_version='9', repoid='crb', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-CRB', major_version='9', repoid='crb', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-HighAvailability', major_version='9', repoid='highavailability', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-HighAvailability', major_version='9', repoid='highavailability', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-HighAvailability', major_version='9', repoid='highavailability', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-HighAvailability', major_version='9', repoid='highavailability', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-NFV', major_version='9', repoid='nfv', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-NFV', major_version='9', repoid='rhel-9-for-ppc64le-nfv-rpms', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-NFV', major_version='9', repoid='rhel-9-for-s390x-nfv-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-RT', major_version='9', repoid='rhel-9-for-ppc64le-rt-rpms', repo_type='rpm', channel='ga', arch='ppc64le', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-RT', major_version='9', repoid='rhel-9-for-s390x-rt-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-RT', major_version='9', repoid='rt', repo_type='rpm', channel='ga', arch='x86_64', rhui=None, distro='almalinux')
     - Repo(pesid='rhel9-SAP-NetWeaver', major_version='9', repoid='rhel-9-for-aarch64-sap-netweaver-rpms', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-SAP-Solutions', major_version='9', repoid='rhel-9-for-aarch64-sap-solutions-rpms', repo_type='rpm', channel='ga', arch='aarch64', rhui=None, distro='rhel')
     - Repo(pesid='rhel9-SAP-Solutions', major_version='9', repoid='rhel-9-for-s390x-sap-solutions-rpms', repo_type='rpm', channel='ga', arch='s390x', rhui=None, distro='rhel')

Co-authored-by: Yuriy Kohut <yura.kohut@gmail.com>
(cherry picked from commit 5337d23)
The package name is different, otherwise minor changes.

Jira: RHEL-74265
(cherry picked from commit 91f37a3)
Conversions currently only work using custom repositories. There is a
bug in the logic determining whether the inhibitor which is created if
no base repositories were found in that it currently inhibits
conversions if the target distro is other than RHEL.
The bug doesn't affect RHEL as a target of either an upgrade or
conversion because the inhibitor is not raised on RHEL target with custom
repos in any case.

This patch disables the inhibitor on all conversions.

(cherry picked from commit d1df52f)
On CS8 the repofile layout is completely different from CS9, therefore
no distro-provided repoids are found on the system. The upgrade can only
be done with custom repos (or if the target repofiles are put on the
source system before the upgrade). However, when using custom
repositories only, the upgrade is inhibited because no base repositories
are found.

This patch disables the inhibitor on CS8->CS9 upgrades.

(cherry picked from commit 28278b9)
Do not wait for devices with nofail set in Options in the dracut
initqueue stalling script introduced in
524ffcf.

Jira: RHEL-46807
(cherry picked from commit 78640b6)
…ux.repo' to almalinux 9-th _DISTRO_REPOFILES_MAP"

This reverts commit f8898ca.
On AlmaLinux 9 there is no /etc/yum.repos.d/almalinux.repo config file, therefore
no distro-provided repoids are found on the system. So the upgrade is inhibited because no base repositories
are found.

This patch disables the inhibitor on AlmaLinux 8->9 upgrades.
@github-actions

Copy link
Copy Markdown

Thank you for contributing to the Leapp project!

Please note that every PR needs to comply with the leapp-repository contribution and development guidelines 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

Packit will automatically schedule regression tests for this PR's build and latest upstream leapp build.
However, here are additional useful commands for packit:

  • /packit test to re-run manually the default tests
  • /packit retest-failed to re-run failed tests manually
  • /packit test oamg/leapp#42 to run tests with leapp builds for the leapp PR#42 (default is latest upstream - main - build)

Note that first time contributors cannot run tests automatically - they need to be started by a reviewer.

It is possible to schedule specific on-demand tests as well. Currently 2 test sets are supported, beaker-minimal and kernel-rt, both can be used to be run on all upgrade paths or just a couple of specific ones.
To launch on-demand tests with packit:

  • /packit test --labels kernel-rt to schedule kernel-rt tests set for all upgrade paths
  • /packit test --labels beaker-minimal-8.10to9.4,kernel-rt-8.10to9.4 to schedule kernel-rt and beaker-minimal test sets for 8.10->9.4 upgrade path

See other labels for particular jobs defined in the .packit.yaml file.

Please open ticket 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.

@andrewlukoshko andrewlukoshko merged commit b7570ed into AlmaLinux:almalinux-ng-0.23.0 Feb 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.