Initial build for EL 9

Resolves: RHEL-57043
This commit is contained in:
Petr Stodulka 2024-09-18 11:34:19 +02:00
parent acceb256c3
commit 842799b948
6 changed files with 427 additions and 0 deletions

2
.gitignore vendored
View File

@ -0,0 +1,2 @@
/deps-pkgs-10.tar.gz
/leapp-repository-0.21.0.tar.gz

View File

@ -0,0 +1,43 @@
From fbc38d4ad1d828e0553579e3719c0e4ed4a2a6bd Mon Sep 17 00:00:00 2001
From: jinkangkang <1547182170@qq.com>
Date: Mon, 19 Aug 2024 18:46:08 +0800
Subject: [PATCH] rhui(alibaba): add ARM RHEL8 and RHEL9 setup entries (#1277)
Since leapp's RHUI mechanism filters setups based on the architecture of the source system,
it was not possible to upgrade of ARM-based RHEL systems on Alibaba cloud as there
were no ARM entries in RHUI_SETUPS. This patch adds these entries, making it possible
for EL 8 -> 9 upgrades of ARM systems on Alibaba cloud.
---
repos/system_upgrade/common/libraries/rhui.py | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py
index 51694ac2..30de0275 100644
--- a/repos/system_upgrade/common/libraries/rhui.py
+++ b/repos/system_upgrade/common/libraries/rhui.py
@@ -348,6 +348,22 @@ RHUI_SETUPS = {
('content.crt', RHUI_PKI_PRODUCT_DIR)
],
os_version='9'),
+ ],
+ RHUIFamily(RHUIProvider.ALIBABA, arch=arch.ARCH_ARM64, client_files_folder='alibaba'): [
+ mk_rhui_setup(clients={'aliyun_rhui_rhel8'}, 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='8'),
+ mk_rhui_setup(clients={'aliyun_rhui_rhel9'}, 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='9'),
]
}
--
2.45.2

7
gating.yaml Normal file
View File

@ -0,0 +1,7 @@
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional}

307
leapp-repository.spec Normal file
View File

@ -0,0 +1,307 @@
%global leapp_datadir %{_datadir}/leapp-repository
%global repositorydir %{leapp_datadir}/repositories
%global custom_repositorydir %{leapp_datadir}/custom-repositories
%define leapp_repo_deps 10
%if 0%{?rhel} == 7
%define leapp_python_sitelib %{python2_sitelib}
%define lpr_name leapp-upgrade-el7toel8
%define repo_shortname el7toel8
%define next_major_ver 8
%else
%define leapp_python_sitelib %{python3_sitelib}
%if 0%{?rhel} == 8
%define lpr_name leapp-upgrade-el8toel9
%define repo_shortname el8toel9
%define next_major_ver 9
%else
%define lpr_name leapp-upgrade-el9toel10
%define repo_shortname el9toel10
%define next_major_ver 10
%endif
# This drops autogenerated deps on
# - /usr/libexec/platform-python (rhel-8 buildroot)
# - /usr/bin/python3.x (epel-8 buildroot)
# - python(abi) = 3.x
# Each of these lead into the removal of leapp rpms as python is changed between
# major versions of RHEL
%global __requires_exclude ^python\\(abi\\) = 3\\..+|/usr/libexec/platform-python|/usr/bin/python.*
%endif
# TODO: not sure whether it's required nowadays. Let's check it and drop
# the whole block if not.
%if 0%{?rhel} == 7
# Defining py_byte_compile macro because it is not defined in old rpm (el7)
# Only defined to python2 since python3 is not used in RHEL7
%{!?py_byte_compile: %global py_byte_compile py2_byte_compile() {\
python_binary="%1"\
bytecode_compilation_path="%2"\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
find $bytecode_compilation_path -type f -a -name "*.py" -print0 | xargs -0 $python_binary -O -c 'import py_compile, sys; [py_compile.compile(f, dfile=f.partition("$RPM_BUILD_ROOT")[2]) for f in sys.argv[1:]]' || :\
}\
py2_byte_compile "%1" "%2"}
%endif
# We keeps the leapp-repository name for the component, however we do not plan
# to create such an rpm. Instead, we are going to introduce new naming for
# RHEL 8+ packages to be consistent with other leapp projects in future.
Name: leapp-repository
Version: 0.21.0
Release: 2%{?dist}
Summary: Repositories for leapp
License: ASL 2.0
URL: https://oamg.github.io/leapp/
Source0: https://github.com/oamg/%{name}/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Source1: deps-pkgs-10.tar.gz
# NOTE: Our packages must be noarch. Do no drop this in any way.
BuildArch: noarch
### PATCHES HERE
# Patch0001: filename.patch
Patch0001: 0001-rhui-alibaba-add-ARM-RHEL8-and-RHEL9-setup-entries-1.patch
%description
%{summary}
# This is the real RPM with the leapp repositories content
%package -n %{lpr_name}
Summary: Leapp repositories for the in-place upgrade
%if 0%{?rhel} == 7
######### RHEL 7 ############
BuildRequires: python-devel
Requires: python2-leapp
# We should not drop this on RHEL 7 because of the compatibility reasons
Obsoletes: leapp-repository-data <= 0.6.1
Provides: leapp-repository-data <= 0.6.1
# Former leapp subpackage that is part of the sos package since RHEL 7.8
Obsoletes: leapp-repository-sos-plugin <= 0.10.0
# Set the conflict to be sure this RPM is not upgraded automatically to
# the one from the target (upgraded) RHEL. The RPM has to stay untouched
# during the whole IPU process.
# The manual removal of the RPM is required after the IPU
Conflicts: leapp-upgrade-el8toel9
%else
######### RHEL 8+ (and newer) ############
BuildRequires: python3-devel
Requires: python3-leapp
# NOTE(pstodulk): else if / elif has been implemented quite late. as we still
# want to build on RHEL 7 too, go in the old way. Ref:
# https://github.com/rpm-software-management/rpm/issues/311
%if 0%{?rhel} == 8
######### RHEL 8 ############
# Same as the conflict above - we want to be sure our packages are untouched
# during the whole IPU process
Conflicts: leapp-upgrade-el7toel8
Conflicts: leapp-upgrade-el9toel10
%else
######### RHEL 9 ############
Conflicts: leapp-upgrade-el8toel9
%endif
%endif
# IMPORTANT: every time the requirements are changed, increment number by one
# - same for Provides in deps subpackage
Requires: leapp-repository-dependencies = %{leapp_repo_deps}
# IMPORTANT: this is capability provided by the leapp framework rpm.
# Check that 'version' instead of the real framework rpm version.
Requires: leapp-framework >= 5.0
# Since we provide sub-commands for the leapp utility, we expect the leapp
# tool to be installed as well.
Requires: leapp
# Used to determine RHEL version of a given target RHEL installation image -
# uncompressing redhat-release package from the ISO.
Requires: cpio
# The leapp-repository rpm is renamed to %%{lpr_name}
Obsoletes: leapp-repository < 0.14.0-5
Provides: leapp-repository = %{version}-%{release}
# Provide "leapp-upgrade" for the user convenience. Users will be pointed
# to install "leapp-upgrade" in the official docs.
Provides: leapp-upgrade = %{version}-%{release}
# Provide leapp-commands so the framework could refer to them when customers
# do not have installed particular leapp-repositories
Provides: leapp-command(answer)
Provides: leapp-command(preupgrade)
Provides: leapp-command(upgrade)
Provides: leapp-command(rerun)
Provides: leapp-command(list-runs)
%description -n %{lpr_name}
Leapp repositories for the in-place upgrade to the next major version
of the Red Hat Enterprise Linux system.
# This metapackage should contain all RPM dependencies excluding deps on *leapp*
# RPMs. This metapackage will be automatically replaced during the upgrade
# to satisfy dependencies with RPMs from target system.
%package -n %{lpr_name}-deps
Summary: Meta-package with system dependencies of %{lpr_name} package
# The package has been renamed, so let's obsoletes the old one
Obsoletes: leapp-repository-deps < 0.14.0-5
# IMPORTANT: every time the requirements are changed, increment number by one
# - same for Requires in main package
Provides: leapp-repository-dependencies = %{leapp_repo_deps}
##################################################
# Real requirements for the leapp-repository HERE
##################################################
Requires: dnf >= 4
Requires: pciutils
# required to be able to format disk images with XFS file systems (default)
Requires: xfsprogs
# required to be able to format disk images with Ext4 file systems
# NOTE: this is not happening by default, but we can expact that many customers
# will want to / need to do this - especially on RHEL 7 now. Adding this deps
# as the best trade-off to resolve this problem.
Requires: e2fsprogs
%if 0%{?rhel} && 0%{?rhel} == 7
# Required to gather system facts about SELinux
Requires: libselinux-python
Requires: python-pyudev
# required by SELinux actors
Requires: policycoreutils-python
# Required to fetch leapp data
Requires: python-requests
%else
############# RHEL 8 dependencies (when the source system is RHEL 8) ##########
# systemd-nspawn utility
Requires: systemd-container
Requires: python3-pyudev
# Required to fetch leapp data
Requires: python3-requests
# Required because the code is kept Py2 & Py3 compatible
Requires: python3-six
# required by SELinux actors
Requires: policycoreutils-python-utils
# required by systemfacts, and several other actors
Requires: procps-ng
Requires: kmod
# since RHEL 8+ dracut does not have to be present on the system all the time
# and missing dracut could be killing situation for us :)
Requires: dracut
# Required to scan NetworkManagerConnection (e.g. to recognize secrets)
# NM is requested to be used on RHEL 8+ systems
Requires: NetworkManager-libnm
Requires: python3-gobject-base
%endif
##################################################
# end requirement
##################################################
%description -n %{lpr_name}-deps
%{summary}
%prep
%setup -n %{name}-%{version}
%setup -q -n %{name}-%{version} -D -T -a 1
# APPLY PATCHES HERE
# %%patch0001 -p1
%patch0001 -p1
%build
cp -a leapp*deps*el%{next_major_ver}.noarch.rpm repos/system_upgrade/%{repo_shortname}/files/bundled-rpms/
%install
install -m 0755 -d %{buildroot}%{custom_repositorydir}
install -m 0755 -d %{buildroot}%{repositorydir}
cp -r repos/* %{buildroot}%{repositorydir}/
install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/repos.d/
# NOTE(pstodulk): drop transaction dir and its content if replaced by config files before RHEL 10
install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/transaction/
install -m 0755 -d %{buildroot}%{_sysconfdir}/leapp/files/
install -m 0644 etc/leapp/transaction/* %{buildroot}%{_sysconfdir}/leapp/transaction
install -m 0644 etc/leapp/files/* %{buildroot}%{_sysconfdir}/leapp/files
# install CLI commands for the leapp utility on the expected path
install -m 0755 -d %{buildroot}%{leapp_python_sitelib}/leapp/cli/
cp -r commands %{buildroot}%{leapp_python_sitelib}/leapp/cli/
rm -rf %{buildroot}%{leapp_python_sitelib}/leapp/cli/commands/tests
# Remove irrelevant repositories - We don't want to ship them for the particular
# RHEL version
for i in el7toel8 el8toel9 el9toel10;
do
[ "$i" != "%{repo_shortname}" ] && rm -rf %{buildroot}%{repositorydir}/system_upgrade/$i
done
# remove component/unit tests, Makefiles, ... stuff that related to testing only
rm -rf %{buildroot}%{repositorydir}/common/actors/testactor
find %{buildroot}%{repositorydir}/common -name "test.py" -delete
rm -rf `find %{buildroot}%{repositorydir} -name "tests" -type d`
find %{buildroot}%{repositorydir} -name "Makefile" -delete
find %{buildroot} -name "*.py.orig" -delete
for DIRECTORY in $(find %{buildroot}%{repositorydir}/ -mindepth 1 -maxdepth 1 -type d);
do
REPOSITORY=$(basename $DIRECTORY)
echo "Enabling repository $REPOSITORY"
ln -s %{repositorydir}/$REPOSITORY %{buildroot}%{_sysconfdir}/leapp/repos.d/$REPOSITORY
done;
# __python2 could be problematic on systems with Python3 only, but we have
# no choice as __python became error on F33+:
# https://fedoraproject.org/wiki/Changes/PythonMacroError
%if 0%{?rhel} == 7
%py_byte_compile %{__python2} %{buildroot}%{repositorydir}/*
%else
%py_byte_compile %{__python3} %{buildroot}%{repositorydir}/*
%endif
%files -n %{lpr_name}
%doc README.md
%license LICENSE
%dir %{_sysconfdir}/leapp/transaction
%dir %{_sysconfdir}/leapp/files
%dir %{leapp_datadir}
%dir %{repositorydir}
%dir %{custom_repositorydir}
%dir %{leapp_python_sitelib}/leapp/cli/commands
%config %{_sysconfdir}/leapp/files/*
%{_sysconfdir}/leapp/repos.d/*
%{_sysconfdir}/leapp/transaction/*
%{repositorydir}/*
%{leapp_python_sitelib}/leapp/cli/commands/*
%files -n %{lpr_name}-deps
# no files here
%changelog
* Mon Aug 19 2024 Petr Stodulka <pstodulk@redhat.com> - 0.21.0-2
- Initial build for EL 9
- Resolves: RHEL-57043

66
plans/tier0.fmf Normal file
View File

@ -0,0 +1,66 @@
# These test plans were created manually based on information taken from
# https://gitlab.cee.redhat.com/oamg/leapp-tests/-/blob/main/config.yaml. The tmt definitions can be simplified, once
# https://github.com/teemtee/tmt/issues/1770 is implemented.
summary: Internal Tier0 tests
environment:
SOURCE_RELEASE: '9.6'
TARGET_RELEASE: '10.0'
context:
distro: rhel-9.6
distro_target: rhel-10.0
adjust:
enabled: false
when: distro == centos-stream-9
/customrepos_upgrade_happy_path:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/destructive/customrepos/basic_upgrade/upgrade_happy_path
ref: main
/oamg3661_two_reboots:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/destructive/customrepos/oamg/oamg3661_two_reboots
ref: main
/oamg9299_devtmpfs_in_fstab:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/destructive/customrepos/oamg/oamg9299_devtmpfs_in_fstab
ref: main
/rhsm_upgrade_happy_path:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/destructive/rhsm/upgrade_happy_path
ref: main
/customrepos_tier0only:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/nondestructive/customrepos/tier0only
ref: main
/none_tier0only:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/nondestructive/none/tier0only
ref: main
/rhsm_tier0only:
plan:
import:
url: https://gitlab.cee.redhat.com/oamg/leapp-tests
name: /plans/nondestructive/rhsm/tier0only
ref: main

2
sources Normal file
View File

@ -0,0 +1,2 @@
SHA512 (deps-pkgs-10.tar.gz) = e63f77e439456e0a8b0fc338b370ee7e2d7824b1d62c75f2209b283905c8c0641d504bfe910021317884fa1662429d952fd4c9b9ee457c48b34182e6f975aa0e
SHA512 (leapp-repository-0.21.0.tar.gz) = 57cbc9cf3395ade0f2f0ec90d0000e9bcf3eba7c40473bfe930dac648c7ae21cb07d3a5b30e1eb72c4c3e24a49778d81a5c322a4a5956678a5c1705c524d11f6