diff --git a/anaconda-36.16.5.tar.bz2 b/anaconda-41.9.tar.bz2 similarity index 31% rename from anaconda-36.16.5.tar.bz2 rename to anaconda-41.9.tar.bz2 index 6f0fb954ab8eda913160b6a9fc511e9e3f145ab3..15eb26e6218e2af348ce2de341214d5f28c9f88a 100644 Binary files a/anaconda-36.16.5.tar.bz2 and b/anaconda-41.9.tar.bz2 differ diff --git a/anaconda.spec b/anaconda.spec index 7f40781c9526ac12b98eb6ea381ea86e59e54419..5f99315f0ceb15b44f919389212b9832e63427f7 100644 --- a/anaconda.spec +++ b/anaconda.spec @@ -1,7 +1,7 @@ %define _empty_manifest_terminate_build 0 Name: anaconda -Version: 36.16.5 -Release: 32 +Version: 41.9 +Release: 1 Summary: Graphical system installer License: GPLv2+ and MIT URL: http://fedoraproject.org/wiki/Anaconda @@ -22,7 +22,6 @@ Patch6002: 0001-add-loongarch-support-for-anaconda.patch Patch9000: add-passwd-policy.patch Patch9001: bugfix-GUI-nfs-unknown-error.patch Patch9002: bugfix-set-up-LD_PRELOAD-for-the-Storage-and-Services-module.patch -Patch9003: bugfix-Solve-the-problem-that-the-circular-loading-progress-bar-does-not-rotate.patch Patch9004: change-inst-repo-default-value.patch Patch9005: disable-disk-encryption.patch Patch9006: disable-ssh-login-checkbox.patch @@ -33,33 +32,16 @@ Patch9010: modify-timezone-and-delete-datezone-map.patch Patch9011: remove-vender-issue-in-netdev.patch Patch9012: Support-configuration-of-additional-boot-arguments.patch Patch9013: support-use-sm3-crypt-user-password.patch -Patch9014: bugfix-with-use-local-kickstart-version.patch Patch9015: bugfix-change-gnome-kiosk-to-use-metacity.patch Patch9016: bugfix-add-log-and-background.patch Patch9017: bugfix-add-SM3-with-tui.patch Patch9018: bugfix-change-product-name-do-not-with-upper.patch -Patch6003: backport-dracut-handle-compressed-kernel-modules.patch -Patch6004: backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch -Patch6005: backport-network-use-separate-main-conext-for-NM-client-in-threads.patch -Patch6006: backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch - -Patch9019: bugfix-adapt-active-connection-without-interface-name.patch - -Patch9020: bugfix-password-tooltip-text-adapt-language.patch - Patch9021: bugfix-revert-Unify-GRUB-configuration-file-location-across-all-platforms.patch Patch9022: bugfix-change-the-startup-mode-of-do_transaction-sub-proces.patch - -Patch6007: backport-Don-t-attempt-to-add-frozen-python-modules-to-initramfs.patch -Patch6008: backport-module-setup.sh-Don-t-ignore-errors-unbound-variable-and-pipe-fails.patch -Patch6009: backport-Fix-the-systemd-generator-for-systemd-253-2165433.patch -# https://github.com/rhinstaller/anaconda/pull/5198 -Patch6010: backport-a-riscv64-enablement-patch-from-upstream.patch - Patch9023: bugfix-change-root-and-storage-interface-shows.patch Patch9024: bugfix-revert-Set-default-entry-to-the-BLS-id-instead-of-the-entry-index.patch -Patch9025: bugfix-import-new-BlockDev.patch -Patch9026: bugfix-fix-custom-storage-chinese-tip.patch +Patch9025: remove-fanalyzer-option-for-clang.patch + %define dasbusver 1.3 %define dbusver 1.2.3 @@ -68,18 +50,22 @@ Patch9026: bugfix-fix-custom-storage-chinese-tip.patch %define gettextver 0.19.8 %define gtk3ver 3.22.17 %define isomd5sumver 1.0.10 -%define langtablever 0.0.54 +%define langtablever 0.0.60 %define libarchivever 3.0.4 %define libblockdevver 2.1 +%define libreportanacondaver 2.0.21-1 %define libxklavierver 5.4 %define mehver 0.23-1 %define nmver 1.0 -%define pykickstartver 3.32-1 +%define pykickstartver 3.48-1 %define pypartedver 2.5-2 -%define pythonblivetver 1:3.4.0-1 +%define pythonblivetver 1:3.9.0-1 %define rpmver 4.15.0 -%define simplelinever 1.1-1 +%define simplelinever 1.9.0-1 %define utillinuxver 2.15.1 +%define subscriptionmanagerver 1.26 +%define rpmostreever 2023.2 + BuildRequires: python3-pygments BuildRequires: audit-libs-devel libtool gettext-devel >= %{gettextver} gtk3-devel >= %{gtk3ver} @@ -156,6 +142,13 @@ Requires: anaconda-core = %{version}-%{release} python3-simpleline >= %{simpleli %description tui This package contains textual user interface for the Anaconda installer. +%package widgets +Summary: A set of custom GTK+ widgets for use with anaconda +Requires: %{__python3} + +%description widgets +This package contains a set of custom GTK+ widgets used by the anaconda +installer. %package devel Summary: Development files for anaconda-widgets @@ -184,104 +177,64 @@ runtime on NFS/HTTP/FTP servers or local disks. %autosetup -n %{name}-%{version} -p1 %build -# use actual build-time release number, not tarball creation time release number %if "%toolchain" == "clang" -%configure ANACONDA_RELEASE=%{release} CC=clang +%configure ANACONDA_RELEASE=%{release} CC=clang %{!?with_glade:--disable-glade} %else -%configure ANACONDA_RELEASE=%{release} +%configure ANACONDA_RELEASE=%{release} %{!?with_glade:--disable-glade} %endif -%make_build +%{__make} %{?_smp_mflags} %install -%make_install -%delete_la - -cp %{SOURCE1} %{SOURCE1}_tmp -cp %{SOURCE2} %{SOURCE2}_tmp -cp %{SOURCE3} %{SOURCE3}_tmp -cp %{SOURCE5} %{SOURCE5}_tmp - -# install openEuler conf for anaconda -%ifarch x86_64 -sed -i "/^additional_arguments =*/ s/$/ crashkernel=512M/" %{SOURCE1} -sed -i "/^additional_arguments =*/ s/$/ panic=3 nmi_watchdog=1/" %{SOURCE2} -sed -i "/^additional_arguments =*/ s/$/ panic=3 nmi_watchdog=1/" %{SOURCE3} -sed -i "/^additional_arguments =*/ s/$/ crashkernel=512M/" %{SOURCE5} -%endif - -%ifarch aarch64 -sed -i "/^additional_arguments =*/ s/$/ crashkernel=1024M,high smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15/" %{SOURCE1} -sed -i "/^additional_arguments =*/ s/$/ panic=1 vga=0x317 nohz=off smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15/" %{SOURCE2} -sed -i "/^additional_arguments =*/ s/$/ panic=1 vga=0x317 nohz=off smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15/" %{SOURCE3} -sed -i "/^additional_arguments =*/ s/$/ crashkernel=1024M,high smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15/" %{SOURCE5} -%endif -install -m 0644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/%{name}/profile.d/ -install -m 0644 %{SOURCE2} %{buildroot}/%{_sysconfdir}/%{name}/profile.d/ -install -m 0644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/%{name}/profile.d/ -install -m 0644 %{SOURCE5} %{buildroot}/%{_sysconfdir}/%{name}/profile.d/ - -mv %{SOURCE1}_tmp %{SOURCE1} -mv %{SOURCE2}_tmp %{SOURCE2} -mv %{SOURCE3}_tmp %{SOURCE3} -mv %{SOURCE5}_tmp %{SOURCE5} +%{make_install} +find %{buildroot} -type f -name "*.la" | xargs %{__rm} # Create an empty directory for addons -install -d -m 0755 %{buildroot}%{_datadir}/anaconda/addons +mkdir %{buildroot}%{_datadir}/anaconda/addons -desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop - -# If no langs found, keep going -%find_lang %{name} || : +# Create an empty directory for post-scripts +mkdir %{buildroot}%{_datadir}/anaconda/post-scripts -%ldconfig_scriptlets - -%ifarch %{ix86} x86_64 -%post -update-desktop-database &> /dev/null || : - -%postun -update-desktop-database &> /dev/null || : +%if %{with live} +# required for live installations +desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop +%else +# Remove all live-installer files from the buildroot +rm -rf \ + %{buildroot}/%{_sysconfdir}/xdg/autostart/liveinst-setup.desktop \ + %{buildroot}/%{_bindir}/liveinst \ + %{buildroot}/%{_libexecdir}/liveinst-setup.sh \ + %{buildroot}/%{_datadir}/anaconda/gnome \ + %{buildroot}/%{_datadir}/anaconda/gnome/fedora-welcome \ + %{buildroot}/%{_datadir}/anaconda/gnome/org.fedoraproject.welcome-screen.desktop \ + %{buildroot}/%{_datadir}/polkit-1/actions/* \ + %{buildroot}/%{_datadir}/applications/liveinst.desktop %endif - -#Anaconda test cases require python3-nose. However, python3-nose on 22.03 has been deleted due to aging. -#As a result, the anaconda lacks dependency. Now, the anaconda needs to remove the python3-nose dependency. -#However, the removal will affect the test cases. - -%files -%defattr(-,root,root) -%license COPYING -%{_libdir}/libAnacondaWidgets.so.* -%{_libdir}/girepository*/AnacondaWidgets*typelib -%{python3_sitearch}/gi/overrides/* -%{python3_sitearch}/pyanaconda/ui/gui/* -%exclude %{python3_sitearch}/pyanaconda/ui/gui/spokes/blivet_gui.* - -%files core -%defattr(-,root,root) +# If no langs found, keep going +%find_lang %{name} + +%files core -f %{name}.lang %license COPYING -%{_sbindir}/anaconda -%{_sbindir}/handle-sshpw +%{_unitdir}/* +%{_prefix}/lib/systemd/system-generators/* %{_bindir}/instperf -%{_bindir}/analog -%{_bindir}/anaconda-cleanup %{_bindir}/anaconda-disable-nm-ibft-plugin -%{_libdir}/libAnacondaWidgets.so -%{_prefix}/libexec/anaconda -%{_prefix}/lib/systemd/system-generators/* -%{_unitdir}/* +%{_bindir}/anaconda-nm-disable-autocons +%{_sbindir}/anaconda +%{_sbindir}/handle-sshpw %{_datadir}/anaconda -%{_datadir}/locale/* -%{python3_sitearch}/pyanaconda +%{_prefix}/libexec/anaconda +%exclude %{_datadir}/anaconda/gnome +%exclude %{_datadir}/anaconda/pixmaps +%exclude %{_datadir}/anaconda/ui +%exclude %{_datadir}/anaconda/window-manager +%exclude %{_datadir}/anaconda/anaconda-gtk.css +%dir %{_datadir}/anaconda/post-scripts %exclude %{_prefix}/libexec/anaconda/dd_* -%exclude %{_libdir}/libAnacondaWidgets.so -%exclude %{_datadir}/gtk-doc -%exclude %{_datadir}/anaconda/ui/spokes/blivet_gui.* -%exclude %{_datadir}/glade/catalogs/AnacondaWidgets.xml +%{python3_sitearch}/pyanaconda %exclude %{python3_sitearch}/pyanaconda/rescue.py* %exclude %{python3_sitearch}/pyanaconda/__pycache__/rescue.* %exclude %{python3_sitearch}/pyanaconda/ui/gui/* %exclude %{python3_sitearch}/pyanaconda/ui/tui/* -%{_bindir}/analog %{_bindir}/anaconda-cleanup %dir %{_sysconfdir}/%{name} %config %{_sysconfdir}/%{name}/* @@ -289,32 +242,49 @@ update-desktop-database &> /dev/null || : %config %{_sysconfdir}/%{name}/conf.d/* %dir %{_sysconfdir}/%{name}/profile.d %config %{_sysconfdir}/%{name}/profile.d/* -%{_sbindir}/liveinst + +%if %{with live} +%files live %{_bindir}/liveinst +%{_datadir}/polkit-1/actions/* %{_libexecdir}/liveinst-setup.sh %{_datadir}/applications/*.desktop +%{_datadir}/anaconda/gnome %{_sysconfdir}/xdg/autostart/*.desktop -%config(noreplace) %{_sysconfdir}/pam.d/* -%config(noreplace) %{_sysconfdir}/security/console.apps/* - +%endif + %files tui %{python3_sitearch}/pyanaconda/rescue.py %{python3_sitearch}/pyanaconda/__pycache__/rescue.* %{python3_sitearch}/pyanaconda/ui/tui/* + +%files widgets +%{_libdir}/libAnacondaWidgets.so.* +%{_libdir}/girepository*/AnacondaWidgets*typelib +%{python3_sitearch}/gi/overrides/* + %files devel +%{_includedir}/* %{_libdir}/libAnacondaWidgets.so +%if %{with glade} %{_libdir}/glade/modules/libAnacondaWidgets.so -%{_includedir}/* %{_datadir}/glade/catalogs/AnacondaWidgets.xml +%endif %{_datadir}/gtk-doc - + %files dracut %dir %{_prefix}/lib/dracut/modules.d/80%{name} %{_prefix}/lib/dracut/modules.d/80%{name}/* %{_prefix}/libexec/anaconda/dd_* %changelog +* Tue May 21 2024 shafeipaozi - 41.9-1 +- Type:Update +- ID:NA +- SUG:NA +- DESC:rebase patch + * Thu May 09 2024 jchzhou - 36.16.5-32 - Type:feature - ID:NA diff --git a/backport-Don-t-attempt-to-add-frozen-python-modules-to-initramfs.patch b/backport-Don-t-attempt-to-add-frozen-python-modules-to-initramfs.patch deleted file mode 100644 index f121283481c3df83796c9414603dc4f371cd1558..0000000000000000000000000000000000000000 --- a/backport-Don-t-attempt-to-add-frozen-python-modules-to-initramfs.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 67d146999a2356dd445cc4c6532e052596cae4db Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Tue, 21 Jun 2022 18:50:35 +0200 -Subject: [PATCH] Don't attempt to add frozen python modules to initramfs - ---- - dracut/python-deps | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/dracut/python-deps b/dracut/python-deps -index cc6138a5e4..587b44a46f 100644 ---- a/dracut/python-deps -+++ b/dracut/python-deps -@@ -70,6 +70,10 @@ except AttributeError: - while scripts: - script = scripts.pop() - -+ if script == 'frozen': -+ # https://docs.python.org/3.11/whatsnew/3.11.html#frozen-imports-static-code-objects -+ continue -+ - finder = ModuleFinder() - finder.run_script(script) # parse the script - for mod in finder.modules.values(): --- -2.23.0 \ No newline at end of file diff --git a/backport-Fix-the-systemd-generator-for-systemd-253-2165433.patch b/backport-Fix-the-systemd-generator-for-systemd-253-2165433.patch deleted file mode 100644 index 61678527966af432a6ce5cf08edba76c76b911ed..0000000000000000000000000000000000000000 --- a/backport-Fix-the-systemd-generator-for-systemd-253-2165433.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 2cd57fee4d66ab8df06afe089da80a5e20168f25 Mon Sep 17 00:00:00 2001 -From: Adam Williamson -Date: Wed, 1 Feb 2023 08:26:31 -0800 -Subject: [PATCH] Fix the systemd generator for systemd 253 (#2165433) - -As Zbyszek explained in -https://bugzilla.redhat.com/show_bug.cgi?id=2165433#c5 , -generators aren't supposed to write outside the special locations -passed to them as args. Just writing the files into the first -of the provided locations seems to work fine (tested that this -fixes both text install and rescue mode). - -Signed-off-by: Adam Williamson - -Conflict:https://github.com/rhinstaller/anaconda/commit/2cd57fee4d66ab8df06afe089da80a5e20168f25 -Reference:https://github.com/rhinstaller/anaconda/commit/2cd57fee4d66ab8df06afe089da80a5e20168f25 - ---- - data/systemd/anaconda-generator | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/data/systemd/anaconda-generator b/data/systemd/anaconda-generator -index 5791678609..c9a5230cae 100755 ---- a/data/systemd/anaconda-generator -+++ b/data/systemd/anaconda-generator -@@ -11,8 +11,8 @@ fi - - # set up dirs - systemd_dir=/lib/systemd/system --target_dir=$systemd_dir/anaconda.target.wants --mkdir -p $target_dir -+target_dir="$1/anaconda.target.wants" -+mkdir -p "$target_dir" - - # create symlink anaconda.target.wants/SERVICE@TTY.service - service_on_tty() { -@@ -41,5 +41,5 @@ for tty in hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do - fi - done - --ln -sf $systemd_dir/anaconda-nm-config.service $target_dir/anaconda-nm-config.service --ln -sf $systemd_dir/anaconda-pre.service $target_dir/anaconda-pre.service -+ln -sf "$systemd_dir/anaconda-nm-config.service" "$target_dir/anaconda-nm-config.service" -+ln -sf "$systemd_dir/anaconda-pre.service" "$target_dir/anaconda-pre.service" --- -2.23.0 \ No newline at end of file diff --git a/backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch b/backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch deleted file mode 100644 index ad950d445a75daf6bdff66744c268bf2920e8a40..0000000000000000000000000000000000000000 --- a/backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch +++ /dev/null @@ -1,76 +0,0 @@ -From d8060d01a01e3d5b187ae4388f10b0d0c2c0c4f3 Mon Sep 17 00:00:00 2001 -From: iasunsea -Date: Tue, 6 Dec 2022 18:24:50 +0800 -Subject: [PATCH] Ignore SIGINT in D-Bus launcher and x11 too - -When we do install, especially use TUI to install, we some time have take -a mistake to put "CTRL+C", then there will be stop with traceback. And we -know the main process have shielded SIGINT, so we to shield subprocesses also. - -Conflict:NA -Reference:https://github.com/rhinstaller/anaconda/commit/d8060d01a01e3d5b187ae4388f10b0d0c2c0c4f3 ---- - pyanaconda/core/startup/dbus_launcher.py | 6 ++++++ - pyanaconda/display.py | 8 +++++++- - 2 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/pyanaconda/core/startup/dbus_launcher.py b/pyanaconda/core/startup/dbus_launcher.py -index 2881c28..a866df0 100644 ---- a/pyanaconda/core/startup/dbus_launcher.py -+++ b/pyanaconda/core/startup/dbus_launcher.py -@@ -24,6 +24,7 @@ - # Author(s): Jiri Konecny - # - import os -+import signal - from subprocess import TimeoutExpired - - from pyanaconda.core.configuration.anaconda import conf -@@ -109,6 +110,10 @@ class AnacondaDBusLauncher(object): - "--syslog", - "--config-file={}".format(ANACONDA_BUS_CONF_FILE) - ] -+ -+ def dbus_preexec(): -+ # to set dbus subprocess SIGINT handler -+ signal.signal(signal.SIGINT, signal.SIG_IGN) - - self._log_file = open('/tmp/dbus.log', 'a') - self._dbus_daemon_process = startProgram( -@@ -117,6 +122,7 @@ class AnacondaDBusLauncher(object): - env_add={"LANG": DEFAULT_LANG}, - env_prune=["LANGUAGE", "LC_ALL", "LC_MESSAGES"], - reset_lang=False, -+ preexec_fn=dbus_preexec - ) - - if self._dbus_daemon_process.poll() is not None: -diff --git a/pyanaconda/display.py b/pyanaconda/display.py -index ddf24fb..ed163e7 100644 ---- a/pyanaconda/display.py -+++ b/pyanaconda/display.py -@@ -24,6 +24,7 @@ import subprocess - import time - import textwrap - import pkgutil -+import signal - - from pyanaconda.core.configuration.anaconda import conf - from pyanaconda.core.process_watchers import WatchProcesses -@@ -192,8 +193,13 @@ def do_startup_x11_actions(): - else: - xdg_data_dirs = datadir + '/window-manager:/usr/share' - -+ def x11_preexec(): -+ # to set GUI subprocess SIGINT handler -+ signal.signal(signal.SIGINT, signal.SIG_IGN) -+ - childproc = util.startProgram(["metacity", "--display", ":1", "--sm-disable"], -- env_add={'XDG_DATA_DIRS': xdg_data_dirs}) -+ env_add={'XDG_DATA_DIRS': xdg_data_dirs}, -+ preexec_fn=x11_preexec) - WatchProcesses.watch_process(childproc, "metacity") - - --- -2.23.0 \ No newline at end of file diff --git a/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch b/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch deleted file mode 100644 index 447c5b9a9134f980cd3e8a6955bfaaba77bb2d6a..0000000000000000000000000000000000000000 --- a/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 1742188518c9af7e3cd060a26f3a3b1e4cb61e91 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Fri, 3 Feb 2023 21:46:15 +0100 -Subject: [PATCH] Sort RPM versions via rpm.labelCompare() and not via - packaging.version.LegacyVersion() - -Packaging 22+ removed the long-deprecated packaging.version.LegacyVersion class. -The packaging.version library is intended to parse Python (PEP 440) versions, -not arbitrary versions and definitively not RPM versions. - -Even if LegacyVersion was still available, it may produce incorrect results -if the version contains ~, ^ or other characters with special meaning in RPM. - -This assumes the Python rpm module is always available. -If that assumption is wrong -the logic from rpm.labelCompare() needs to be reimplemented instead. - -Reference:https://github.com/rhinstaller/anaconda/commit/1742188518c9af7e3cd060a26f3a3b1e4cb61e91 -Conflict:NA ---- - pyanaconda/core/payload.py | 5 +++++ - pyanaconda/modules/payloads/base/utils.py | 13 ++----------- - pyanaconda/modules/storage/checker/utils.py | 4 ++-- - 3 files changed, 9 insertions(+), 13 deletions(-) - -diff --git a/pyanaconda/core/payload.py b/pyanaconda/core/payload.py -index 17277b7..7817150 100644 ---- a/pyanaconda/core/payload.py -+++ b/pyanaconda/core/payload.py -@@ -15,11 +15,16 @@ - # License and may only be used or replicated with the express permission of - # Red Hat, Inc. - # -+from functools import cmp_to_key - from urllib.parse import quote, unquote - -+import rpm -+ - from pyanaconda.core.i18n import _ - from pyanaconda.core.regexes import URL_PARSE - -+rpm_version_key = cmp_to_key(rpm.labelCompare) -+ - - def parse_nfs_url(nfs_url): - """Parse NFS URL into components. -diff --git a/pyanaconda/modules/payloads/base/utils.py b/pyanaconda/modules/payloads/base/utils.py -index 738ae66..5f19b57 100644 ---- a/pyanaconda/modules/payloads/base/utils.py -+++ b/pyanaconda/modules/payloads/base/utils.py -@@ -17,13 +17,11 @@ - # License and may only be used or replicated with the express permission of - # Red Hat, Inc. - # --import functools - import os - import stat - --from packaging.version import LegacyVersion as parse_version -- - from pyanaconda.anaconda_loggers import get_module_logger -+from pyanaconda.core.payload import rpm_version_key - log = get_module_logger(__name__) - - -@@ -70,11 +68,4 @@ def get_dir_size(directory): - - def sort_kernel_version_list(kernel_version_list): - """Sort the given kernel version list.""" -- kernel_version_list.sort(key=functools.cmp_to_key(_compare_versions)) -- -- --def _compare_versions(v1, v2): -- """Compare two version number strings.""" -- first_version = parse_version(v1) -- second_version = parse_version(v2) -- return (first_version > second_version) - (first_version < second_version) -+ kernel_version_list.sort(key=rpm_version_key) -diff --git a/pyanaconda/modules/storage/checker/utils.py b/pyanaconda/modules/storage/checker/utils.py -index 180c351..9ccd398 100644 ---- a/pyanaconda/modules/storage/checker/utils.py -+++ b/pyanaconda/modules/storage/checker/utils.py -@@ -20,7 +20,6 @@ gi.require_version("BlockDev", "2.0") - from gi.repository import BlockDev as blockdev - - from collections import defaultdict --from packaging.version import LegacyVersion as parse_version - - from blivet import arch, util - from blivet.devicefactory import get_device_type -@@ -34,6 +33,7 @@ from pyanaconda.core.constants import productName, STORAGE_REFORMAT_BLOCKLIST, \ - STORAGE_LUKS2_MIN_RAM, STORAGE_ROOT_DEVICE_TYPES, STORAGE_REQ_PARTITION_SIZES, \ - STORAGE_MUST_NOT_BE_ON_ROOT - from pyanaconda.core.i18n import _ -+from pyanaconda.core.payload import rpm_version_key - from pyanaconda.core.storage import DEVICE_TEXT_MAP - from pyanaconda.modules.storage.platform import platform - -@@ -259,7 +259,7 @@ def _check_opal_firmware_kernel_version(detected_version, required_version): - """ - try: - if detected_version and required_version: -- return parse_version(detected_version) >= parse_version(required_version) -+ return rpm_version_key(detected_version) >= rpm_version_key(required_version) - except Exception as e: # pylint: disable=broad-except - log.warning("Couldn't check the firmware kernel version: %s", str(e)) - --- -2.23.0 \ No newline at end of file diff --git a/backport-a-riscv64-enablement-patch-from-upstream.patch b/backport-a-riscv64-enablement-patch-from-upstream.patch deleted file mode 100644 index 387f4d0d7e7a202576d020d40c791568a312bd97..0000000000000000000000000000000000000000 --- a/backport-a-riscv64-enablement-patch-from-upstream.patch +++ /dev/null @@ -1,113 +0,0 @@ -From: U2FsdGVkX1 -Signed-off-by: Songsong Zhang -Reviewed-by: Wei Fu -Subject: [PATCH] Backport a riscv64 enablement patch from upstream - -Signed-off-by: jchzhou ---- - pyanaconda/modules/storage/bootloader/efi.py | 8 ++++ - .../modules/storage/bootloader/factory.py | 8 ++++ - pyanaconda/modules/storage/platform.py | 38 +++++++++++++++++++ - 3 files changed, 54 insertions(+) - -diff --git a/pyanaconda/modules/storage/bootloader/efi.py b/pyanaconda/modules/storage/bootloader/efi.py -index 1b47e24..6743717 100644 ---- a/pyanaconda/modules/storage/bootloader/efi.py -+++ b/pyanaconda/modules/storage/bootloader/efi.py -@@ -214,6 +214,14 @@ class ArmEFIGRUB(EFIGRUB): - self._is_32bit_firmware = True - - -+class RISCV64EFIGRUB(EFIGRUB): -+ _serial_consoles = ["ttyS"] -+ _efi_binary = "\\grubriscv64.efi" -+ -+ def __init__(self): -+ super().__init__() -+ self._packages64 = ["grub2-efi-riscv64"] -+ - class MacEFIGRUB(EFIGRUB): - def __init__(self): - super().__init__() -diff --git a/pyanaconda/modules/storage/bootloader/factory.py b/pyanaconda/modules/storage/bootloader/factory.py -index 8aa3afb..4815685 100644 ---- a/pyanaconda/modules/storage/bootloader/factory.py -+++ b/pyanaconda/modules/storage/bootloader/factory.py -@@ -146,4 +146,12 @@ class BootLoaderFactory(object): - from pyanaconda.modules.storage.bootloader.efi import ArmEFIGRUB - return ArmEFIGRUB - -+ if platform_class is platform.RISCV64: -+ from pyanaconda.modules.storage.bootloader.extlinux import EXTLINUX -+ return EXTLINUX -+ -+ if platform_class is platform.RISCV64EFI: -+ from pyanaconda.modules.storage.bootloader.efi import RISCV64EFIGRUB -+ return RISCV64EFIGRUB -+ - return None -diff --git a/pyanaconda/modules/storage/platform.py b/pyanaconda/modules/storage/platform.py -index d0aa7ca..20f2c4d 100644 ---- a/pyanaconda/modules/storage/platform.py -+++ b/pyanaconda/modules/storage/platform.py -@@ -459,6 +459,40 @@ class ARM(Platform): - } - return dict(super().stage1_constraints, **constraints) - -+class RISCV64(Platform): -+ -+ @property -+ def stage1_suggestion(self): -+ """The platform-specific suggestion about the stage1 device.""" -+ return _( -+ "You must include at least one MBR-formatted " -+ "disk as an install target." -+ ) -+ -+ @property -+ def stage1_descriptions(self): -+ """The platform-specific descriptions of the stage1 device.""" -+ return { -+ "disk": _(MBR_DESCRIPTION), -+ "partition": _(PARTITION_DESCRIPTION) -+ } -+ -+ @property -+ def stage1_constraints(self): -+ """The platform-specific constraints for the stage1 device.""" -+ constraints = { -+ PLATFORM_DEVICE_TYPES: ["disk"] -+ } -+ return dict(super().stage1_constraints, **constraints) -+ -+ -+class RISCV64EFI(EFI): -+ -+ @property -+ def non_linux_format_types(self): -+ """Format types of devices with non-linux operating systems.""" -+ return ["vfat", "ntfs"] -+ - - def get_platform(): - """Check the architecture of the system and return an instance of a -@@ -486,12 +520,16 @@ def get_platform(): - return Aarch64EFI() - elif arch.is_arm(): - return ArmEFI() -+ elif arch.is_riscv64(): -+ return RISCV64EFI() - else: - return EFI() - elif arch.is_x86(): - return X86() - elif arch.is_arm(): - return ARM() -+ elif arch.is_riscv64(): -+ return RISCV64() - else: - raise SystemError("Could not determine system architecture.") - --- -2.44.0 - diff --git a/backport-dracut-handle-compressed-kernel-modules.patch b/backport-dracut-handle-compressed-kernel-modules.patch deleted file mode 100644 index 651da2691796625d01ad75cb55e91c56faba6a6f..0000000000000000000000000000000000000000 --- a/backport-dracut-handle-compressed-kernel-modules.patch +++ /dev/null @@ -1,47 +0,0 @@ -From c4a388d3956088c96631b72f0631db2a380127b0 Mon Sep 17 00:00:00 2001 -From: Mikhail Novosyolov -Date: Fri, 10 Jun 2022 22:03:43 +0300 -Subject: [PATCH] dracut: handle compressed kernel modules - -Compressed kernel modules could not be loaded. -Now both compressed and not compressed ones will be loaded. - -$ uname -r -5.10.74-generic-2rosa2021.1-x86_64 -$ ls -1v /lib/modules/$(uname -r)/kernel/drivers/scsi/device_handler/ -scsi_dh_alua.ko.zst -scsi_dh_emc.ko.zst -scsi_dh_hp_sw.ko.zst -scsi_dh_rdac.ko.zst - -Replaces https://github.com/rhinstaller/anaconda/pull/3501 -Noted by slava86@ -Reference:https://github.com/rhinstaller/anaconda/commit/c4a388d3956088c96631b72f0631db2a380127b0 -Conflict:NA ---- - dracut/anaconda-modprobe.sh | 9 +++++---- - 1 file changed, 5 insertions(+), 4 deletions(-) - -diff --git a/dracut/anaconda-modprobe.sh b/dracut/anaconda-modprobe.sh -index 97ee53bcb1..3640b4d42f 100755 ---- a/dracut/anaconda-modprobe.sh -+++ b/dracut/anaconda-modprobe.sh -@@ -14,11 +14,12 @@ MODULE_LIST="cramfs squashfs iscsi_tcp " - shopt -s nullglob - - SCSI_MODULES=/lib/modules/$KERNEL/kernel/drivers/scsi/device_handler/ --for m in "$SCSI_MODULES"/*.ko; do -+for m in "$SCSI_MODULES"/*.ko*; do - # Shell spew to work around not having basename -- # Trim the paths off the prefix, then the . suffix -- a="${m##*/}" -- MODULE_LIST+=" ${a%.*}" -+ m="${m##*/}" -+ # Handle *.ko, *.ko.zst, *.ko.gz, *.ko.xz etc. -+ IFS='.ko' read -r -a m <<< "$m" -+ MODULE_LIST+=" ${m[0]}" - done - - shopt -u nullglob --- -2.23.0 \ No newline at end of file diff --git a/backport-module-setup.sh-Don-t-ignore-errors-unbound-variable-and-pipe-fails.patch b/backport-module-setup.sh-Don-t-ignore-errors-unbound-variable-and-pipe-fails.patch deleted file mode 100644 index 0101635ca4efb069db16a58fcc4de5e0d73b64ae..0000000000000000000000000000000000000000 --- a/backport-module-setup.sh-Don-t-ignore-errors-unbound-variable-and-pipe-fails.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 76d232cbf406416103d2cb38ab0141649f5440ee Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= -Date: Tue, 21 Jun 2022 19:01:21 +0200 -Subject: [PATCH] module-setup.sh: Don't ignore errors, unbound variable and - pipe fails - -Note that -eu could be in the shebang, -but this way it's set even when executed via `bash module-setup.sh` -or when sourced. ---- - dracut/module-setup.sh | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh -index f54d753962..9c07375c8c 100644 ---- a/dracut/module-setup.sh -+++ b/dracut/module-setup.sh -@@ -1,5 +1,6 @@ - #!/bin/bash - # module-setup.sh for anaconda -+set -eu -o pipefail - - check() { - [[ $hostonly ]] && return 1 -@@ -90,3 +91,5 @@ install() { - esac - } - -+# revert back to the default in case this is sourced -+set +eu +o pipefail --- -2.23.0 \ No newline at end of file diff --git a/backport-network-use-separate-main-conext-for-NM-client-in-threads.patch b/backport-network-use-separate-main-conext-for-NM-client-in-threads.patch deleted file mode 100644 index 8ba07d702eaa49bd644c2346d729a44a3b3e209a..0000000000000000000000000000000000000000 --- a/backport-network-use-separate-main-conext-for-NM-client-in-threads.patch +++ /dev/null @@ -1,824 +0,0 @@ -From 3972b5dadcadd355d2ff25eae601bc35c336c45a Mon Sep 17 00:00:00 2001 -From: Radek Vykydal -Date: Thu, 29 Sep 2022 12:38:55 +0200 -Subject: [PATCH] network: use separate main conext for NM client in threads - -Resolves: rhbz#1931389 - -Create a special NM client with separate main context for calling NM -client from installation tasks which run in separate threads. - -Based on a pull request by t.feng who deserves -the biggest credit, and upated with suggestions by poncovka - -The created client should be used only in a limited scope as documented -in nm_client_in_thread docstring. If we want to extend it and address -potential issues with client instance releasing and reusing we'd need to -follow recommendations from Thomas Haller's kind reviews: - - - -first of all, initializing a NMClient instance takes relatively long, -because it makes D-Bus calls and the round trip time adds up. Btw, if -you'd pass -instance_flags=NM.ClientInstanceFlags.NO_AUTO_FETCH_PERMISSIONS it can -make it faster, see here. If it's too slow, then the solution would be -to re-use the nmclient instance or use async initialization and do stuff -in parallel. Both is more complicated however, so not necessary unless -we find that it's a problem. - -What is maybe more a problem is that each GMainContext consumes at least -one file descriptor. When you use the sync nm_client_new() method, then -NMClient has an additional internal GMainContext, so possibly there are -2 or more file descriptors involved. The way to "stop" NMClient is by -unrefing it. However, with all async operations in glib, they cannot -complete right away. That is because when NMClient gets unrefed, it will -cancel all (internally) pending operations, but even when you cancel a -glib operation, the callback still will be invoked with the cancellation -error. And callbacks only get invoked by iterating/running the -mainloop/maincontext. This means, if you have a short-running -application (e.g. not a GUI) and a reasonable small number of NMClient -instances, then you don't need to care. Otherwise, you unfortunately -need to make sure that the GMainContext is still iterated just long -enough, for all operations to be cancelled. That's slightly cumbersome, -and you can use nm_client_get_context_busy_watcher() to find that out. - -Btw, what you also cannot do, is having a NMClient instance alive and -just not iterating the GMainContext anymore. NMClient will subscribe to -D-Bus events, and those come (because GDBus has a separate worker -thread) and will be enqueued in the GMainContext. This applies to all -applications that register DBus signals via GDBus: you must iterate the -context enough, so that those events get eventually processed. I think -this does not apply to you here, but it would apply, if you try to keep -the nmclient instance alive and reuse later. - - - -Reference:https://github.com/rhinstaller/anaconda/commit/3972b5dadcadd355d2ff25eae601bc35c336c45a -Conflict:NA ---- - pyanaconda/core/glib.py | 109 +++++++++++- - pyanaconda/modules/network/initialization.py | 56 +++--- - pyanaconda/modules/network/installation.py | 19 +- - pyanaconda/modules/network/network.py | 26 +-- - pyanaconda/modules/network/nm_client.py | 167 +++++++++++------- - 5 files changed, 254 insertions(+), 123 deletions(-) - -diff --git a/pyanaconda/core/glib.py b/pyanaconda/core/glib.py -index 03c598db43..32925384bb 100644 ---- a/pyanaconda/core/glib.py -+++ b/pyanaconda/core/glib.py -@@ -24,34 +24,42 @@ - - import gi - gi.require_version("GLib", "2.0") -+gi.require_version("Gio", "2.0") - - from gi.repository.GLib import markup_escape_text, format_size_full, \ - timeout_add_seconds, timeout_add, idle_add, \ - io_add_watch, child_watch_add, \ -- source_remove, \ -+ source_remove, timeout_source_new, \ - spawn_close_pid, spawn_async_with_pipes, \ - MainLoop, MainContext, \ - GError, Variant, VariantType, Bytes, \ - IOCondition, IOChannel, SpawnFlags, \ - MAXUINT -+from gi.repository.Gio import Cancellable -+ -+from pyanaconda.anaconda_loggers import get_module_logger -+log = get_module_logger(__name__) -+ - - __all__ = ["create_main_loop", "create_new_context", - "markup_escape_text", "format_size_full", - "timeout_add_seconds", "timeout_add", "idle_add", - "io_add_watch", "child_watch_add", -- "source_remove", -+ "source_remove", "timeout_source_new", - "spawn_close_pid", "spawn_async_with_pipes", - "GError", "Variant", "VariantType", "Bytes", - "IOCondition", "IOChannel", "SpawnFlags", -- "MAXUINT"] -+ "MAXUINT", "Cancellable"] - - --def create_main_loop(): -+def create_main_loop(main_context=None): - """Create GLib main loop. - -+ :param main_context: main context to be used for the loop -+ :type main_context: GLib.MainContext - :returns: GLib.MainLoop instance. - """ -- return MainLoop() -+ return MainLoop(main_context) - - - def create_new_context(): -@@ -59,3 +67,94 @@ def create_new_context(): - - :returns: GLib.MainContext.""" - return MainContext.new() -+ -+ -+class GLibCallResult(): -+ """Result of GLib async finish callback.""" -+ def __init__(self): -+ self.received_data = None -+ self.error_message = "" -+ self.timeout = False -+ -+ @property -+ def succeeded(self): -+ """The async call has succeeded.""" -+ return not self.failed -+ -+ @property -+ def failed(self): -+ """The async call has failed.""" -+ return bool(self.error_message) or self.timeout -+ -+ -+def sync_call_glib(context, async_call, async_call_finish, timeout, *call_args): -+ """Call GLib asynchronous method synchronously with timeout. -+ -+ :param context: context for the new loop in which the method will be called -+ :type context: GMainContext -+ :param async_call: asynchronous GLib method to be called -+ :type async_call: GLib method -+ :param async_call_finish: finish method of the asynchronous call -+ :type async_call_finish: GLib method -+ :param timeout: timeout for the loop in seconds (0 == no timeout) -+ :type timeout: int -+ -+ *call_args should hold all positional arguments preceding the cancellable argument -+ """ -+ -+ info = async_call.get_symbol() -+ result = GLibCallResult() -+ -+ loop = create_main_loop(context) -+ callbacks = [loop.quit] -+ -+ def _stop_loop(): -+ log.debug("sync_call_glib[%s]: quit", info) -+ while callbacks: -+ callback = callbacks.pop() -+ callback() -+ -+ def _cancellable_cb(): -+ log.debug("sync_call_glib[%s]: cancelled", info) -+ -+ cancellable = Cancellable() -+ cancellable_id = cancellable.connect(_cancellable_cb) -+ callbacks.append(lambda: cancellable.disconnect(cancellable_id)) -+ -+ def _timeout_cb(user_data): -+ log.debug("sync_call_glib[%s]: timeout", info) -+ result.timeout = True -+ cancellable.cancel() -+ return False -+ -+ timeout_source = timeout_source_new(int(timeout * 1000)) -+ timeout_source.set_callback(_timeout_cb) -+ timeout_source.attach(context) -+ callbacks.append(timeout_source.destroy) -+ -+ def _finish_cb(source_object, async_result): -+ log.debug("sync_call_glib[%s]: call %s", -+ info, -+ async_call_finish.get_symbol()) -+ try: -+ result.received_data = async_call_finish(async_result) -+ except Exception as e: # pylint: disable=broad-except -+ result.error_message = str(e) -+ finally: -+ _stop_loop() -+ -+ context.push_thread_default() -+ -+ log.debug("sync_call_glib[%s]: call", info) -+ try: -+ async_call( -+ *call_args, -+ cancellable=cancellable, -+ callback=_finish_cb -+ ) -+ loop.run() -+ finally: -+ _stop_loop() -+ context.pop_thread_default() -+ -+ return result -diff --git a/pyanaconda/modules/network/initialization.py b/pyanaconda/modules/network/initialization.py -index c7f0ba4cf8..bf1ffd12af 100644 ---- a/pyanaconda/modules/network/initialization.py -+++ b/pyanaconda/modules/network/initialization.py -@@ -25,7 +25,7 @@ from pyanaconda.modules.network.network_interface import NetworkInitializationTa - from pyanaconda.modules.network.nm_client import get_device_name_from_network_data, \ - update_connection_from_ksdata, add_connection_from_ksdata, bound_hwaddr_of_device, \ - update_connection_values, commit_changes_with_autoconnection_blocked, \ -- get_config_file_connection_of_device, clone_connection_sync -+ get_config_file_connection_of_device, clone_connection_sync, nm_client_in_thread - from pyanaconda.modules.network.device_configuration import supported_wired_device_types, \ - virtual_device_types - from pyanaconda.modules.network.utils import guard_by_system_configuration -@@ -40,11 +40,9 @@ from gi.repository import NM - class ApplyKickstartTask(Task): - """Task for application of kickstart network configuration.""" - -- def __init__(self, nm_client, network_data, supported_devices, bootif, ifname_option_values): -+ def __init__(self, network_data, supported_devices, bootif, ifname_option_values): - """Create a new task. - -- :param nm_client: NetworkManager client used as configuration backend -- :type nm_client: NM.Client - :param network_data: kickstart network data to be applied - :type: list(NetworkData) - :param supported_devices: list of names of supported network devices -@@ -55,7 +53,6 @@ class ApplyKickstartTask(Task): - :type ifname_option_values: list(str) - """ - super().__init__() -- self._nm_client = nm_client - self._network_data = network_data - self._supported_devices = supported_devices - self._bootif = bootif -@@ -76,13 +73,17 @@ class ApplyKickstartTask(Task): - :returns: names of devices to which kickstart was applied - :rtype: list(str) - """ -+ with nm_client_in_thread() as nm_client: -+ return self._run(nm_client) -+ -+ def _run(self, nm_client): - applied_devices = [] - - if not self._network_data: - log.debug("%s: No kickstart data.", self.name) - return applied_devices - -- if not self._nm_client: -+ if not nm_client: - log.debug("%s: No NetworkManager available.", self.name) - return applied_devices - -@@ -92,7 +93,7 @@ class ApplyKickstartTask(Task): - log.info("%s: Wireless devices configuration is not supported.", self.name) - continue - -- device_name = get_device_name_from_network_data(self._nm_client, -+ device_name = get_device_name_from_network_data(nm_client, - network_data, - self._supported_devices, - self._bootif) -@@ -102,28 +103,28 @@ class ApplyKickstartTask(Task): - - applied_devices.append(device_name) - -- connection = self._find_initramfs_connection_of_iface(device_name) -+ connection = self._find_initramfs_connection_of_iface(nm_client, device_name) - - if connection: - # if the device was already configured in initramfs update the settings - log.debug("%s: updating connection %s of device %s", - self.name, connection.get_uuid(), device_name) - update_connection_from_ksdata( -- self._nm_client, -+ nm_client, - connection, - network_data, - device_name, - ifname_option_values=self._ifname_option_values - ) - if network_data.activate: -- device = self._nm_client.get_device_by_iface(device_name) -- self._nm_client.activate_connection_async(connection, device, None, None) -+ device = nm_client.get_device_by_iface(device_name) -+ nm_client.activate_connection_async(connection, device, None, None) - log.debug("%s: activating updated connection %s with device %s", - self.name, connection.get_uuid(), device_name) - else: - log.debug("%s: adding connection for %s", self.name, device_name) - add_connection_from_ksdata( -- self._nm_client, -+ nm_client, - network_data, - device_name, - activate=network_data.activate, -@@ -132,8 +133,8 @@ class ApplyKickstartTask(Task): - - return applied_devices - -- def _find_initramfs_connection_of_iface(self, iface): -- device = self._nm_client.get_device_by_iface(iface) -+ def _find_initramfs_connection_of_iface(self, nm_client, iface): -+ device = nm_client.get_device_by_iface(iface) - if device: - cons = device.get_available_connections() - for con in cons: -@@ -145,18 +146,15 @@ class ApplyKickstartTask(Task): - class DumpMissingConfigFilesTask(Task): - """Task for dumping of missing config files.""" - -- def __init__(self, nm_client, default_network_data, ifname_option_values): -+ def __init__(self, default_network_data, ifname_option_values): - """Create a new task. - -- :param nm_client: NetworkManager client used as configuration backend -- :type nm_client: NM.Client - :param default_network_data: kickstart network data of default device configuration - :type default_network_data: NetworkData - :param ifname_option_values: list of ifname boot option values - :type ifname_option_values: list(str) - """ - super().__init__() -- self._nm_client = nm_client - self._default_network_data = default_network_data - self._ifname_option_values = ifname_option_values - -@@ -186,7 +184,7 @@ class DumpMissingConfigFilesTask(Task): - return con - return None - -- def _update_connection(self, con, iface): -+ def _update_connection(self, nm_client, con, iface): - log.debug("%s: updating id and binding (interface-name) of connection %s for %s", - self.name, con.get_uuid(), iface) - s_con = con.get_setting_connection() -@@ -196,7 +194,7 @@ class DumpMissingConfigFilesTask(Task): - if s_wired: - # By default connections are bound to interface name - s_wired.set_property(NM.SETTING_WIRED_MAC_ADDRESS, None) -- bound_mac = bound_hwaddr_of_device(self._nm_client, iface, self._ifname_option_values) -+ bound_mac = bound_hwaddr_of_device(nm_client, iface, self._ifname_option_values) - if bound_mac: - s_wired.set_property(NM.SETTING_WIRED_MAC_ADDRESS, bound_mac) - log.debug("%s: iface %s bound to mac address %s by ifname boot option", -@@ -216,19 +214,23 @@ class DumpMissingConfigFilesTask(Task): - :returns: names of devices for which config file was created - :rtype: list(str) - """ -+ with nm_client_in_thread() as nm_client: -+ return self._run(nm_client) -+ -+ def _run(self, nm_client): - new_configs = [] - -- if not self._nm_client: -+ if not nm_client: - log.debug("%s: No NetworkManager available.", self.name) - return new_configs - - dumped_device_types = supported_wired_device_types + virtual_device_types -- for device in self._nm_client.get_devices(): -+ for device in nm_client.get_devices(): - if device.get_device_type() not in dumped_device_types: - continue - - iface = device.get_iface() -- if get_config_file_connection_of_device(self._nm_client, iface): -+ if get_config_file_connection_of_device(nm_client, iface): - continue - - cons = device.get_available_connections() -@@ -259,10 +261,10 @@ class DumpMissingConfigFilesTask(Task): - # Try to clone the persistent connection for the device - # from the connection which should be a generic (not bound - # to iface) connection created by NM in initramfs -- con = clone_connection_sync(self._nm_client, cons[0], con_id=iface) -+ con = clone_connection_sync(nm_client, cons[0], con_id=iface) - - if con: -- self._update_connection(con, iface) -+ self._update_connection(nm_client, con, iface) - # Update some values of connection generated in initramfs so it - # can be used as persistent configuration. - if has_initramfs_con: -@@ -285,7 +287,7 @@ class DumpMissingConfigFilesTask(Task): - ) - log.debug("%s: dumping connection %s to config file for %s", - self.name, con.get_uuid(), iface) -- commit_changes_with_autoconnection_blocked(con) -+ commit_changes_with_autoconnection_blocked(con, nm_client) - else: - log.debug("%s: none of the connections can be dumped as persistent", - self.name) -@@ -298,7 +300,7 @@ class DumpMissingConfigFilesTask(Task): - if has_initramfs_con: - network_data.onboot = True - add_connection_from_ksdata( -- self._nm_client, -+ nm_client, - network_data, - iface, - activate=False, -diff --git a/pyanaconda/modules/network/installation.py b/pyanaconda/modules/network/installation.py -index 3ac65e0df0..d91eb51ae7 100644 ---- a/pyanaconda/modules/network/installation.py -+++ b/pyanaconda/modules/network/installation.py -@@ -23,7 +23,7 @@ from pyanaconda.modules.common.errors.installation import NetworkInstallationErr - from pyanaconda.modules.common.task import Task - from pyanaconda.anaconda_loggers import get_module_logger - from pyanaconda.modules.network.nm_client import update_connection_values, \ -- commit_changes_with_autoconnection_blocked -+ commit_changes_with_autoconnection_blocked, nm_client_in_thread - from pyanaconda.modules.network.utils import guard_by_system_configuration - from pyanaconda.modules.network.nm_client import get_config_file_connection_of_device - from pyanaconda.modules.network.config_file import IFCFG_DIR, KEYFILE_DIR -@@ -281,16 +281,13 @@ Name={} - class ConfigureActivationOnBootTask(Task): - """Task for configuration of automatic activation of devices on boot""" - -- def __init__(self, nm_client, onboot_ifaces): -+ def __init__(self, onboot_ifaces): - """Create a new task. - -- :param nm_client: NetworkManager client used as configuration backend -- :type nm_client: NM.Client - :param onboot_ifaces: interfaces that should be autoactivated on boot - :type onboot_ifaces: list(str) - """ - super().__init__() -- self._nm_client = nm_client - self._onboot_ifaces = onboot_ifaces - - @property -@@ -299,18 +296,22 @@ class ConfigureActivationOnBootTask(Task): - - @guard_by_system_configuration(return_value=None) - def run(self): -- if not self._nm_client: -+ with nm_client_in_thread() as nm_client: -+ return self._run(nm_client) -+ -+ def _run(self, nm_client): -+ if not nm_client: - log.debug("%s: No NetworkManager available.", self.name) - return None - - for iface in self._onboot_ifaces: -- con_uuid = get_config_file_connection_of_device(self._nm_client, iface) -+ con_uuid = get_config_file_connection_of_device(nm_client, iface) - if con_uuid: -- con = self._nm_client.get_connection_by_uuid(con_uuid) -+ con = nm_client.get_connection_by_uuid(con_uuid) - update_connection_values( - con, - [("connection", NM.SETTING_CONNECTION_AUTOCONNECT, True)] - ) -- commit_changes_with_autoconnection_blocked(con) -+ commit_changes_with_autoconnection_blocked(con, nm_client) - else: - log.warning("Configure ONBOOT: can't find config for %s", iface) -diff --git a/pyanaconda/modules/network/network.py b/pyanaconda/modules/network/network.py -index 445c9d8b46..a905ee31d6 100644 ---- a/pyanaconda/modules/network/network.py -+++ b/pyanaconda/modules/network/network.py -@@ -23,7 +23,7 @@ from pyanaconda.core.async_utils import run_in_loop - from pyanaconda.core.configuration.anaconda import conf - from pyanaconda.core.configuration.network import NetworkOnBoot - from pyanaconda.core.kernel import kernel_arguments --from pyanaconda.core.dbus import DBus, SystemBus -+from pyanaconda.core.dbus import DBus - from pyanaconda.core.signal import Signal - from pyanaconda.modules.common.base import KickstartService - from pyanaconda.modules.common.containers import TaskContainer -@@ -37,7 +37,7 @@ from pyanaconda.modules.network.firewall import FirewallModule - from pyanaconda.modules.network.device_configuration import DeviceConfigurations, \ - supported_device_types, supported_wired_device_types - from pyanaconda.modules.network.nm_client import devices_ignore_ipv6, get_connections_dump, \ -- get_dracut_arguments_from_connection, get_kickstart_network_data -+ get_dracut_arguments_from_connection, get_kickstart_network_data, get_new_nm_client - from pyanaconda.modules.network.config_file import get_config_files_content, \ - is_config_file_for_system - from pyanaconda.modules.network.installation import NetworkInstallationTask, \ -@@ -70,17 +70,12 @@ class NetworkService(KickstartService): - self._hostname_service_proxy = self._get_hostname_proxy() - - self.connected_changed = Signal() -- self.nm_client = None - # TODO fallback solution - use Gio/GNetworkMonitor ? -- if SystemBus.check_connection(): -- nm_client = NM.Client.new(None) -- if nm_client.get_nm_running(): -- self.nm_client = nm_client -- self.nm_client.connect("notify::%s" % NM.CLIENT_STATE, self._nm_state_changed) -- initial_state = self.nm_client.get_state() -- self.set_connected(self._nm_state_connected(initial_state)) -- else: -- log.debug("NetworkManager is not running.") -+ self.nm_client = get_new_nm_client() -+ if self.nm_client: -+ self.nm_client.connect("notify::%s" % NM.CLIENT_STATE, self._nm_state_changed) -+ initial_state = self.nm_client.get_state() -+ self.set_connected(self._nm_state_connected(initial_state)) - - self._original_network_data = [] - self._device_configurations = None -@@ -393,7 +388,6 @@ class NetworkService(KickstartService): - all_onboot_ifaces = list(set(onboot_ifaces + onboot_ifaces_by_policy)) - - task = ConfigureActivationOnBootTask( -- self.nm_client, - all_onboot_ifaces - ) - task.succeeded_signal.connect(lambda: self.log_task_result(task)) -@@ -616,8 +610,7 @@ class NetworkService(KickstartService): - :returns: a task applying the kickstart - """ - supported_devices = [dev_info.device_name for dev_info in self.get_supported_devices()] -- task = ApplyKickstartTask(self.nm_client, -- self._original_network_data, -+ task = ApplyKickstartTask(self._original_network_data, - supported_devices, - self.bootif, - self.ifname_option_values) -@@ -645,8 +638,7 @@ class NetworkService(KickstartService): - """ - data = self.get_kickstart_handler() - default_network_data = data.NetworkData(onboot=False, ipv6="auto") -- task = DumpMissingConfigFilesTask(self.nm_client, -- default_network_data, -+ task = DumpMissingConfigFilesTask(default_network_data, - self.ifname_option_values) - task.succeeded_signal.connect(lambda: self.log_task_result(task, check_result=True)) - return task -diff --git a/pyanaconda/modules/network/nm_client.py b/pyanaconda/modules/network/nm_client.py -index 3cc28ec48e..421ef1e0d9 100644 ---- a/pyanaconda/modules/network/nm_client.py -+++ b/pyanaconda/modules/network/nm_client.py -@@ -21,18 +21,20 @@ - import gi - gi.require_version("NM", "1.0") - from gi.repository import NM -+from contextlib import contextmanager - - import socket --from queue import Queue, Empty - from pykickstart.constants import BIND_TO_MAC -+from pyanaconda.core.glib import create_new_context, GError, sync_call_glib - from pyanaconda.modules.network.constants import NM_CONNECTION_UUID_LENGTH, \ -- CONNECTION_ACTIVATION_TIMEOUT, NM_CONNECTION_TYPE_WIFI, NM_CONNECTION_TYPE_ETHERNET, \ -+ CONNECTION_ADDING_TIMEOUT, NM_CONNECTION_TYPE_WIFI, NM_CONNECTION_TYPE_ETHERNET, \ - NM_CONNECTION_TYPE_VLAN, NM_CONNECTION_TYPE_BOND, NM_CONNECTION_TYPE_TEAM, \ -- NM_CONNECTION_TYPE_BRIDGE, NM_CONNECTION_TYPE_INFINIBAND, CONNECTION_ADDING_TIMEOUT -+ NM_CONNECTION_TYPE_BRIDGE, NM_CONNECTION_TYPE_INFINIBAND - from pyanaconda.modules.network.kickstart import default_ks_vlan_interface_name - from pyanaconda.modules.network.utils import is_s390, get_s390_settings, netmask2prefix, \ - prefix2netmask - from pyanaconda.modules.network.config_file import is_config_file_for_system -+from pyanaconda.core.dbus import SystemBus - - from pyanaconda.anaconda_loggers import get_module_logger - log = get_module_logger(__name__) -@@ -51,6 +53,51 @@ NM_BRIDGE_DUMPED_SETTINGS_DEFAULTS = { - } - - -+@contextmanager -+def nm_client_in_thread(): -+ """Create NM Client with new GMainContext to be run in thread. -+ -+ Expected to be used only in installer environment for a few -+ one-shot isolated network configuration tasks. -+ Destroying of the created NM Client instance and release of -+ related resources is not implemented. -+ -+ For more information see NetworkManager example examples/python/gi/gmaincontext.py -+ """ -+ mainctx = create_new_context() -+ mainctx.push_thread_default() -+ -+ try: -+ yield get_new_nm_client() -+ finally: -+ mainctx.pop_thread_default() -+ -+ -+def get_new_nm_client(): -+ """Get new instance of NMClient. -+ -+ :returns: an instance of NetworkManager NMClient or None if system bus -+ is not available or NM is not running -+ :rtype: NM.NMClient -+ """ -+ if not SystemBus.check_connection(): -+ log.debug("get new NM Client failed: SystemBus connection check failed.") -+ return None -+ -+ try: -+ nm_client = NM.Client.new(None) -+ except GError as e: -+ log.debug("get new NM Client constructor failed: %s", e) -+ return None -+ -+ if not nm_client.get_nm_running(): -+ log.debug("get new NM Client failed: NetworkManager is not running.") -+ return None -+ -+ log.debug("get new NM Client succeeded.") -+ return nm_client -+ -+ - def get_iface_from_connection(nm_client, uuid): - """Get the name of device that would be used for the connection. - -@@ -268,7 +315,7 @@ def _add_existing_virtual_device_to_bridge(nm_client, device_name, bridge_spec): - bridge_spec), - ] - ) -- commit_changes_with_autoconnection_blocked(port_connection) -+ commit_changes_with_autoconnection_blocked(port_connection, nm_client) - return port_connection.get_uuid() - - -@@ -532,7 +579,7 @@ def add_connection_from_ksdata(nm_client, network_data, device_name, activate=Fa - connection.to_dbus(NM.ConnectionSerializationFlags.NO_SECRETS)) - added_connection = add_connection_sync( - nm_client, -- connection, -+ connection - ) - - if not added_connection: -@@ -557,37 +604,39 @@ def add_connection_from_ksdata(nm_client, network_data, device_name, activate=Fa - def add_connection_sync(nm_client, connection): - """Add a connection synchronously and optionally activate asynchronously. - -+ Synchronous run is implemented by running a blocking GMainLoop with -+ GMainContext belonging to the nm_client created for the calling Task. -+ -+ :param nm_client: NetoworkManager client -+ :type nm_client: NM.NMClient - :param connection: connection to be added - :type connection: NM.SimpleConnection - :return: added connection or None on timeout - :rtype: NM.RemoteConnection - """ -- sync_queue = Queue() -- -- def finish_callback(nm_client, result, sync_queue): -- con, result = nm_client.add_connection2_finish(result) -- log.debug("connection %s added:\n%s", con.get_uuid(), -- con.to_dbus(NM.ConnectionSerializationFlags.NO_SECRETS)) -- sync_queue.put(con) -- -- nm_client.add_connection2( -+ result = sync_call_glib( -+ nm_client.get_main_context(), -+ nm_client.add_connection2, -+ nm_client.add_connection2_finish, -+ CONNECTION_ADDING_TIMEOUT, - connection.to_dbus(NM.ConnectionSerializationFlags.ALL), - (NM.SettingsAddConnection2Flags.TO_DISK | - NM.SettingsAddConnection2Flags.BLOCK_AUTOCONNECT), - None, -- False, -- None, -- finish_callback, -- sync_queue -+ False - ) - -- try: -- ret = sync_queue.get(timeout=CONNECTION_ADDING_TIMEOUT) -- except Empty: -- log.error("Adding of connection %s timed out.", connection.get_uuid()) -- ret = None -+ if result.failed: -+ log.error("adding of a connection %s failed: %s", -+ connection.get_uuid(), -+ result.error_message) -+ return None -+ -+ con, _res = result.received_data -+ log.debug("connection %s added:\n%s", connection.get_uuid(), -+ connection.to_dbus(NM.ConnectionSerializationFlags.NO_SECRETS)) - -- return ret -+ return con - - - def create_port_connection(port_type, port_idx, port, controller, autoconnect, settings=None): -@@ -713,7 +762,7 @@ def update_connection_from_ksdata(nm_client, connection, network_data, device_na - else: - bind_connection(nm_client, connection, network_data.bindto, device_name) - -- commit_changes_with_autoconnection_blocked(connection) -+ commit_changes_with_autoconnection_blocked(connection, nm_client) - - log.debug("updated connection %s:\n%s", connection.get_uuid(), - connection.to_dbus(NM.ConnectionSerializationFlags.NO_SECRETS)) -@@ -1013,42 +1062,47 @@ def get_connections_dump(nm_client): - return "\n".join(con_dumps) - - --def commit_changes_with_autoconnection_blocked(connection, save_to_disk=True): -+def commit_changes_with_autoconnection_blocked(connection, nm_client, save_to_disk=True): - """Implementation of NM CommitChanges() method with blocked autoconnection. - -- Update2() API is used to implement the functionality (called synchronously). -- -+ Update2() API is used to implement the functionality. - Prevents autoactivation of the connection on its update which would happen - with CommitChanges if "autoconnect" is set True. - -+ Synchronous run is implemented by running a blocking GMainLoop with -+ GMainContext belonging to the nm_client created for the calling Task. -+ - :param connection: NetworkManager connection - :type connection: NM.RemoteConnection -+ :param nm_client: NetoworkManager client -+ :type nm_client: NM.NMClient - :param save_to_disk: should the changes be written also to disk? - :type save_to_disk: bool - :return: on success result of the Update2() call, None of failure - :rtype: GVariant of type "a{sv}" or None - """ -- sync_queue = Queue() -- -- def finish_callback(connection, result, sync_queue): -- ret = connection.update2_finish(result) -- sync_queue.put(ret) -- - flags = NM.SettingsUpdate2Flags.BLOCK_AUTOCONNECT - if save_to_disk: - flags |= NM.SettingsUpdate2Flags.TO_DISK -- - con2 = NM.SimpleConnection.new_clone(connection) -- connection.update2( -+ -+ result = sync_call_glib( -+ nm_client.get_main_context(), -+ connection.update2, -+ connection.update2_finish, -+ CONNECTION_ADDING_TIMEOUT, - con2.to_dbus(NM.ConnectionSerializationFlags.ALL), - flags, -- None, -- None, -- finish_callback, -- sync_queue -+ None - ) - -- return sync_queue.get() -+ if result.failed: -+ log.error("comitting changes of connection %s failed: %s", -+ connection.get_uuid(), -+ result.error_message) -+ return None -+ -+ return result.received_data - - - def clone_connection_sync(nm_client, connection, con_id=None, uuid=None): -@@ -1063,36 +1117,19 @@ def clone_connection_sync(nm_client, connection, con_id=None, uuid=None): - :return: NetworkManager connection or None on timeout - :rtype: NM.RemoteConnection - """ -- sync_queue = Queue() -- -- def finish_callback(nm_client, result, sync_queue): -- con, result = nm_client.add_connection2_finish(result) -- log.debug("connection %s cloned:\n%s", con.get_uuid(), -- con.to_dbus(NM.ConnectionSerializationFlags.NO_SECRETS)) -- sync_queue.put(con) -- - cloned_connection = NM.SimpleConnection.new_clone(connection) - s_con = cloned_connection.get_setting_connection() - s_con.props.uuid = uuid or NM.utils_uuid_generate() - s_con.props.id = con_id or "{}-clone".format(connection.get_id()) -- nm_client.add_connection2( -- cloned_connection.to_dbus(NM.ConnectionSerializationFlags.ALL), -- (NM.SettingsAddConnection2Flags.TO_DISK | -- NM.SettingsAddConnection2Flags.BLOCK_AUTOCONNECT), -- None, -- False, -- None, -- finish_callback, -- sync_queue -- ) - -- try: -- ret = sync_queue.get(timeout=CONNECTION_ACTIVATION_TIMEOUT) -- except Empty: -- log.error("Cloning of a connection timed out.") -- ret = None -+ log.debug("cloning connection %s", connection.get_uuid()) -+ added_connection = add_connection_sync(nm_client, cloned_connection) - -- return ret -+ if added_connection: -+ log.debug("connection was cloned into %s", added_connection.get_uuid()) -+ else: -+ log.debug("connection cloning failed") -+ return added_connection - - - def get_dracut_arguments_from_connection(nm_client, connection, iface, target_ip, --- -2.23.0 \ No newline at end of file diff --git a/bugfix-Solve-the-problem-that-the-circular-loading-progress-bar-does-not-rotate.patch b/bugfix-Solve-the-problem-that-the-circular-loading-progress-bar-does-not-rotate.patch deleted file mode 100644 index b9ea22e5d8ee6aaf4ddaba984287de7f75c25b2a..0000000000000000000000000000000000000000 --- a/bugfix-Solve-the-problem-that-the-circular-loading-progress-bar-does-not-rotate.patch +++ /dev/null @@ -1,25 +0,0 @@ -From ccc28e983cd2c1f1f02fd00b9b1659fb572bac1b Mon Sep 17 00:00:00 2001 -From: yueyuankun -Date: Tue, 23 Aug 2022 15:53:18 +0800 -Subject: [PATCH] Solve the problem that sometimes the circular - loading progress bar does not rotate - ---- - pyanaconda/ui/gui/spokes/installation_progress.py | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/pyanaconda/ui/gui/spokes/installation_progress.py b/pyanaconda/ui/gui/spokes/installation_progress.py -index 0de742b..5ed3424 100644 ---- a/pyanaconda/ui/gui/spokes/installation_progress.py -+++ b/pyanaconda/ui/gui/spokes/installation_progress.py -@@ -85,6 +85,7 @@ class ProgressSpoke(StandaloneSpoke): - - if code == progressQ.PROGRESS_CODE_INIT: - self._init_progress_bar(args[0]) -+ gtk_call_once(self._spinner.start) - elif code == progressQ.PROGRESS_CODE_STEP: - self._step_progress_bar() - elif code == progressQ.PROGRESS_CODE_MESSAGE: --- -2.27.0 - diff --git a/bugfix-adapt-active-connection-without-interface-name.patch b/bugfix-adapt-active-connection-without-interface-name.patch deleted file mode 100644 index d64ab0c854ba0f96e9709461c8944fee4af5c012..0000000000000000000000000000000000000000 --- a/bugfix-adapt-active-connection-without-interface-name.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ade550fb89b10cf218ce96541e1c540a2a8a7ea1 Mon Sep 17 00:00:00 2001 -From: sun_hai_10 -Date: Wed, 14 Dec 2022 11:04:41 +0800 -Subject: [PATCH] adapt active connection without interface-name - ---- - pyanaconda/modules/network/initialization.py | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/pyanaconda/modules/network/initialization.py b/pyanaconda/modules/network/initialization.py -index c7f0ba4..85a1da7 100644 ---- a/pyanaconda/modules/network/initialization.py -+++ b/pyanaconda/modules/network/initialization.py -@@ -136,6 +136,9 @@ class ApplyKickstartTask(Task): - def _find_initramfs_connection_of_iface(self, nm_client, iface): - device = nm_client.get_device_by_iface(iface) - if device: -+ active_connection = device.get_active_connection() -+ if active_connection: -+ return active_connection.get_connection() - cons = device.get_available_connections() - for con in cons: - if con.get_interface_name() == iface and con.get_id() == iface: --- -2.23.0 - diff --git a/bugfix-fix-custom-storage-chinese-tip.patch b/bugfix-fix-custom-storage-chinese-tip.patch deleted file mode 100644 index b209f4352333f9e7418b6ead3cebccd448a0280d..0000000000000000000000000000000000000000 --- a/bugfix-fix-custom-storage-chinese-tip.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 043c6ba5f0e9d97fed947246dfd65f5cfd5d251e Mon Sep 17 00:00:00 2001 -From: s30028044 -Date: Sat, 13 Apr 2024 17:00:13 +0800 -Subject: [PATCH] fix custom storage chinese tip - ---- - po/zh_CN.po | 6 +++--- - pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py | 2 +- - 2 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/po/zh_CN.po b/po/zh_CN.po -index ce63959..6a854c7 100644 ---- a/po/zh_CN.po -+++ b/po/zh_CN.po -@@ -1627,10 +1627,10 @@ msgid "" - "'512m' = 512 megabytes\n" - "'123456789' = 123 terabytes and a bit less than a half\n" - msgstr "" --"请以整数或十进制小数指定期望容量,并带上合适的单位。\n" -+"请使用整数或小数指定所需容量以及可以带上合适的单位。\n" - "\n" --"不允许以空格分隔的数字组。单位包括十进制前缀或二进制前缀,以及可选的字母 B。" --"单位对字母的大小写不敏感。如果省略单位,则默认的单位是 MiB。\n" -+"但不允许使用空格将数字分隔成数组。单位由十进制或二进制的计数单位,以及可选字母B组成。" -+"单位会忽略字母大小写,并且缺省单位是 MiB。\n" - "\n" - "有效输入的例子:\n" - "“100GiB” = 100 Gibibytes\n" -diff --git a/pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py b/pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py -index 81bb793..d374fcf 100644 ---- a/pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py -+++ b/pyanaconda/ui/gui/spokes/lib/custom_storage_helpers.py -@@ -255,7 +255,7 @@ class AddDialog(GUIObject): - self._warning_label = self.builder.get_object("mountPointWarningLabel") - - self._size_entry = self.builder.get_object("addSizeEntry") -- self._size_entry.set_tooltip_text(DESIRED_CAPACITY_HINT) -+ self._size_entry.set_tooltip_text(_(DESIRED_CAPACITY_HINT)) - - self._populate_mount_points() - --- -2.27.0 - diff --git a/bugfix-import-new-BlockDev.patch b/bugfix-import-new-BlockDev.patch deleted file mode 100644 index 3d839d618c7c2a0d82c9ffabf8601ff3aeeff577..0000000000000000000000000000000000000000 --- a/bugfix-import-new-BlockDev.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 765938409daeeacf1faf3c2695c68a85f0b30b4d Mon Sep 17 00:00:00 2001 -From: s30028044 -Date: Wed, 28 Feb 2024 11:33:54 +0800 -Subject: [PATCH] import new BlockDev - ---- - pyanaconda/modules/storage/checker/utils.py | 2 +- - pyanaconda/modules/storage/dasd/discover.py | 2 +- - pyanaconda/modules/storage/dasd/format.py | 2 +- - pyanaconda/modules/storage/devicetree/fsset.py | 2 +- - pyanaconda/modules/storage/initialization.py | 2 +- - pyanaconda/modules/storage/installation.py | 2 +- - pyanaconda/modules/storage/nvdimm/nvdimm.py | 2 +- - pyanaconda/modules/storage/zfcp/discover.py | 2 +- - 8 files changed, 8 insertions(+), 8 deletions(-) - -diff --git a/pyanaconda/modules/storage/checker/utils.py b/pyanaconda/modules/storage/checker/utils.py -index 9ccd398..74aedae 100644 ---- a/pyanaconda/modules/storage/checker/utils.py -+++ b/pyanaconda/modules/storage/checker/utils.py -@@ -16,7 +16,7 @@ - # Red Hat, Inc. - # - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - from collections import defaultdict -diff --git a/pyanaconda/modules/storage/dasd/discover.py b/pyanaconda/modules/storage/dasd/discover.py -index 06e3b39..d1de38e 100644 ---- a/pyanaconda/modules/storage/dasd/discover.py -+++ b/pyanaconda/modules/storage/dasd/discover.py -@@ -18,7 +18,7 @@ - # Red Hat, Inc. - # - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - from pyanaconda.core.regexes import DASD_DEVICE_NUMBER -diff --git a/pyanaconda/modules/storage/dasd/format.py b/pyanaconda/modules/storage/dasd/format.py -index 7ae389b..48d5c46 100644 ---- a/pyanaconda/modules/storage/dasd/format.py -+++ b/pyanaconda/modules/storage/dasd/format.py -@@ -21,7 +21,7 @@ from pyanaconda.modules.common.task import Task - from pyanaconda.anaconda_loggers import get_module_logger - - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - log = get_module_logger(__name__) -diff --git a/pyanaconda/modules/storage/devicetree/fsset.py b/pyanaconda/modules/storage/devicetree/fsset.py -index 0d151d3..4db3759 100644 ---- a/pyanaconda/modules/storage/devicetree/fsset.py -+++ b/pyanaconda/modules/storage/devicetree/fsset.py -@@ -20,7 +20,7 @@ import shutil - import time - - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - from blivet.devices import NoDevice, DirectoryDevice, NFSDevice, FileDevice, MDRaidArrayDevice, \ -diff --git a/pyanaconda/modules/storage/initialization.py b/pyanaconda/modules/storage/initialization.py -index bb5ad24..17b8274 100644 ---- a/pyanaconda/modules/storage/initialization.py -+++ b/pyanaconda/modules/storage/initialization.py -@@ -26,7 +26,7 @@ from pyanaconda.anaconda_logging import program_log_lock - from pyanaconda.core.configuration.anaconda import conf - - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - __all__ = ["enable_installer_mode"] -diff --git a/pyanaconda/modules/storage/installation.py b/pyanaconda/modules/storage/installation.py -index 05d91f3..8f82734 100644 ---- a/pyanaconda/modules/storage/installation.py -+++ b/pyanaconda/modules/storage/installation.py -@@ -36,7 +36,7 @@ from pyanaconda.modules.common.errors.installation import StorageInstallationErr - from pyanaconda.modules.common.task import Task - - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - log = get_module_logger(__name__) -diff --git a/pyanaconda/modules/storage/nvdimm/nvdimm.py b/pyanaconda/modules/storage/nvdimm/nvdimm.py -index f9aef8b..1aa6295 100644 ---- a/pyanaconda/modules/storage/nvdimm/nvdimm.py -+++ b/pyanaconda/modules/storage/nvdimm/nvdimm.py -@@ -32,7 +32,7 @@ from pyanaconda.modules.storage.nvdimm.nvdimm_interface import NVDIMMInterface - from pyanaconda.modules.storage.nvdimm.reconfigure import NVDIMMReconfigureTask - - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - log = get_module_logger(__name__) -diff --git a/pyanaconda/modules/storage/zfcp/discover.py b/pyanaconda/modules/storage/zfcp/discover.py -index 231e097..796f7c5 100644 ---- a/pyanaconda/modules/storage/zfcp/discover.py -+++ b/pyanaconda/modules/storage/zfcp/discover.py -@@ -18,7 +18,7 @@ - # Red Hat, Inc. - # - import gi --gi.require_version("BlockDev", "2.0") -+gi.require_version("BlockDev", "3.0") - from gi.repository import BlockDev as blockdev - - from blivet.zfcp import zfcp --- -2.27.0 - diff --git a/bugfix-password-tooltip-text-adapt-language.patch b/bugfix-password-tooltip-text-adapt-language.patch deleted file mode 100644 index 4ce6e75c68f345698ace561b4b25ef7b2f134546..0000000000000000000000000000000000000000 --- a/bugfix-password-tooltip-text-adapt-language.patch +++ /dev/null @@ -1,36 +0,0 @@ -From a7de90b4741689b12137dc22f1b478bdd451762f Mon Sep 17 00:00:00 2001 -From: iasunsea -Date: Thu, 23 Feb 2023 20:19:51 +0800 -Subject: [PATCH] password tooltip text adapt language - ---- - pyanaconda/ui/gui/utils.py | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/pyanaconda/ui/gui/utils.py b/pyanaconda/ui/gui/utils.py -index 282f1bc53c6..ae32ec2558b 100644 ---- a/pyanaconda/ui/gui/utils.py -+++ b/pyanaconda/ui/gui/utils.py -@@ -37,6 +37,7 @@ - from pyanaconda.core.async_utils import async_action_wait, run_in_loop - from pyanaconda.core.constants import NOTICEABLE_FREEZE, PASSWORD_HIDE, PASSWORD_SHOW, \ - PASSWORD_HIDE_ICON, PASSWORD_SHOW_ICON -+from pyanaconda.core.i18n import _ - - from pyanaconda.anaconda_loggers import get_module_logger - log = get_module_logger(__name__) -@@ -542,10 +543,10 @@ def set_password_visibility(entry, visible): - - if visible: - icon = PASSWORD_HIDE_ICON -- text = PASSWORD_HIDE -+ text = _(PASSWORD_HIDE) - else: - icon = PASSWORD_SHOW_ICON -- text = PASSWORD_SHOW -+ text = _(PASSWORD_SHOW) - - entry.set_visibility(visible) - entry.set_icon_from_icon_name(position, icon) --- -2.27.0 diff --git a/bugfix-with-use-local-kickstart-version.patch b/bugfix-with-use-local-kickstart-version.patch deleted file mode 100644 index 6110c10f6004a77a458d585d2eda2544fe52d95c..0000000000000000000000000000000000000000 --- a/bugfix-with-use-local-kickstart-version.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d361beead1ff91273aa0f13147b2b279172133aa Mon Sep 17 00:00:00 2001 -From: sun_hai_10 -Date: Thu, 24 Nov 2022 10:40:41 +0800 -Subject: [PATCH] with use local kickstart version - ---- - dracut/parse-kickstart | 2 +- - pyanaconda/core/kickstart/version.py | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart -index 56cacb8..e0fdd1f 100755 ---- a/dracut/parse-kickstart -+++ b/dracut/parse-kickstart -@@ -41,7 +41,7 @@ from pykickstart.constants import * - from collections import OrderedDict - - # Import the kickstart version. --from pykickstart.version import F36 as VERSION -+from pykickstart.version import DEVEL as VERSION - - # Import all kickstart commands as version-less. - from pykickstart.commands.cdrom import FC3_Cdrom as Cdrom -diff --git a/pyanaconda/core/kickstart/version.py b/pyanaconda/core/kickstart/version.py -index 4170214..df743a6 100644 ---- a/pyanaconda/core/kickstart/version.py -+++ b/pyanaconda/core/kickstart/version.py -@@ -18,6 +18,6 @@ - # Red Hat, Inc. - # - --from pykickstart.version import F36 as VERSION -+from pykickstart.version import DEVEL as VERSION - - __all__ = ["VERSION"] --- -2.23.0 -