From 842799b948aeb12216202b656b62b0c5cf91b17b Mon Sep 17 00:00:00 2001 From: Petr Stodulka Date: Wed, 18 Sep 2024 11:34:19 +0200 Subject: [PATCH] Initial build for EL 9 Resolves: RHEL-57043 --- .gitignore | 2 + ...-ARM-RHEL8-and-RHEL9-setup-entries-1.patch | 43 +++ gating.yaml | 7 + leapp-repository.spec | 307 ++++++++++++++++++ plans/tier0.fmf | 66 ++++ sources | 2 + 6 files changed, 427 insertions(+) create mode 100644 0001-rhui-alibaba-add-ARM-RHEL8-and-RHEL9-setup-entries-1.patch create mode 100644 gating.yaml create mode 100644 leapp-repository.spec create mode 100644 plans/tier0.fmf create mode 100644 sources diff --git a/.gitignore b/.gitignore index e69de29..9266e79 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +/deps-pkgs-10.tar.gz +/leapp-repository-0.21.0.tar.gz diff --git a/0001-rhui-alibaba-add-ARM-RHEL8-and-RHEL9-setup-entries-1.patch b/0001-rhui-alibaba-add-ARM-RHEL8-and-RHEL9-setup-entries-1.patch new file mode 100644 index 0000000..2f559b9 --- /dev/null +++ b/0001-rhui-alibaba-add-ARM-RHEL8-and-RHEL9-setup-entries-1.patch @@ -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 + diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..5d120c8 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,7 @@ +--- !Policy +product_versions: + - rhel-9 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} + diff --git a/leapp-repository.spec b/leapp-repository.spec new file mode 100644 index 0000000..a1a1a38 --- /dev/null +++ b/leapp-repository.spec @@ -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 - 0.21.0-2 +- Initial build for EL 9 +- Resolves: RHEL-57043 diff --git a/plans/tier0.fmf b/plans/tier0.fmf new file mode 100644 index 0000000..b8650eb --- /dev/null +++ b/plans/tier0.fmf @@ -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 diff --git a/sources b/sources new file mode 100644 index 0000000..e6845bc --- /dev/null +++ b/sources @@ -0,0 +1,2 @@ +SHA512 (deps-pkgs-10.tar.gz) = e63f77e439456e0a8b0fc338b370ee7e2d7824b1d62c75f2209b283905c8c0641d504bfe910021317884fa1662429d952fd4c9b9ee457c48b34182e6f975aa0e +SHA512 (leapp-repository-0.21.0.tar.gz) = 57cbc9cf3395ade0f2f0ec90d0000e9bcf3eba7c40473bfe930dac648c7ae21cb07d3a5b30e1eb72c4c3e24a49778d81a5c322a4a5956678a5c1705c524d11f6