Compare commits

..

9 commits

Author SHA1 Message Date
Radek Vykydal
65091473bc Make sure we don't build the anaconda-webui package on F37 2022-10-05 15:17:06 +02:00
Packit
2511857bd2 [packit] 37.12.6 upstream release
Upstream tag: anaconda-37.12.6-1
Upstream commit: 8c4148af

Signed-off-by: Packit <hello@packit.dev>
2022-10-05 11:58:00 +00:00
Martin Kolman
072ca1ab5e Make sure we don't build the anaconda-webui package on F37 2022-09-19 19:04:45 +02:00
Packit
6474ceda6e [packit] 37.12.5 upstream release
Upstream tag: anaconda-37.12.5-1
Upstream commit: 74d37f21

Signed-off-by: Packit <hello@packit.dev>
2022-09-19 16:24:13 +00:00
Martin Kolman
ce9347141c 37.12.4 upstream release
Verify a biosboot partition on all installation targets (vponcova)
Define the install_targets property for all bootloader classes (vponcova)
Test the InstallerStorage.copy method (vponcova)
Show multiple bootloader devices on the Manual Partitioning screen (vponcova)
Implement the Root.copy method (vponcova)
Redefine the Blivet.roots attribute (vponcova)
Redefine the Blivet.copy method (vponcova)
2022-09-13 19:52:17 +02:00
Martin Kolman
5ab63f3b8f 37.12.3 upstream release
Run yelp under liveuser with the right environment (vslavik)
2022-09-07 01:33:55 +02:00
Adam Williamson
b4413b6cee Backport PR #4317 to fix running yelp on KDE etc (#2124097) 2022-09-06 12:41:48 -07:00
Martin Kolman
9b21743766 37.12.2 upstream release
Run yelp under liveuser if possible (vslavik)
2022-09-01 18:00:17 +02:00
Packit
970b42ff9a [packit] 37.12.1 upstream release
Upstream tag: anaconda-37.12.1-1
Upstream commit: 2301f427

Signed-off-by: Packit <hello@packit.dev>
2022-08-15 16:59:07 +00:00
16 changed files with 305 additions and 3058 deletions

170
.gitignore vendored
View file

@ -323,167 +323,9 @@
/anaconda-37.10.tar.bz2
/anaconda-37.11.tar.bz2
/anaconda-37.12.tar.bz2
/anaconda-38.1.tar.bz2
/anaconda-38.2.tar.bz2
/anaconda-38.3.tar.bz2
/anaconda-38.4.tar.bz2
/anaconda-38.5.tar.bz2
/anaconda-38.6.tar.bz2
/anaconda-38.7.tar.bz2
/anaconda-38.8.tar.bz2
/anaconda-38.9.tar.bz2
/anaconda-38.10.tar.bz2
/anaconda-38.11.tar.bz2
/anaconda-38.12.tar.bz2
/anaconda-38.13.tar.bz2
/anaconda-38.14.tar.bz2
/anaconda-38.15.tar.bz2
/anaconda-38.17.tar.bz2
/anaconda-38.18.tar.bz2
/anaconda-38.19.tar.bz2
/anaconda-38.20.tar.bz2
/anaconda-38.21.tar.bz2
/anaconda-38.22.tar.bz2
/anaconda-38.23.tar.bz2
/anaconda-39.1.tar.bz2
/anaconda-39.2.tar.bz2
/anaconda-39.3.tar.bz2
/anaconda-39.4.tar.bz2
/anaconda-39.5.tar.bz2
/anaconda-39.6.tar.bz2
/anaconda-39.7.tar.bz2
/anaconda-39.8.tar.bz2
/anaconda-39.9.tar.bz2
/anaconda-39.10.tar.bz2
/anaconda-39.11.tar.bz2
/anaconda-39.12.tar.bz2
/anaconda-39.13.tar.bz2
/anaconda-39.14.tar.bz2
/anaconda-39.15.tar.bz2
/anaconda-39.16.tar.bz2
/anaconda-39.17.tar.bz2
/anaconda-39.18.tar.bz2
/anaconda-39.19.tar.bz2
/anaconda-39.20.tar.bz2
/anaconda-39.21.tar.bz2
/anaconda-39.22.tar.bz2
/anaconda-39.23.tar.bz2
/anaconda-39.24.tar.bz2
/anaconda-39.25.tar.bz2
/anaconda-39.26.tar.bz2
/anaconda-39.27.tar.bz2
/anaconda-39.28.tar.bz2
/anaconda-39.29.tar.bz2
/anaconda-39.30.tar.bz2
/anaconda-39.31.tar.bz2
/anaconda-39.32.tar.bz2
/anaconda-39.33.tar.bz2
/anaconda-40.1.tar.bz2
/anaconda-40.2.tar.bz2
/anaconda-40.3.tar.bz2
/anaconda-40.4.tar.bz2
/anaconda-40.5.tar.bz2
/anaconda-40.6.tar.bz2
/anaconda-40.7.tar.bz2
/anaconda-40.8.tar.bz2
/anaconda-40.9.tar.bz2
/anaconda-40.10.tar.bz2
/anaconda-40.11.tar.bz2
/anaconda-40.12.tar.bz2
/anaconda-40.13.tar.bz2
/anaconda-40.15.tar.bz2
/anaconda-40.17.tar.bz2
/anaconda-40.18.tar.bz2
/anaconda-40.20.tar.bz2
/anaconda-40.21.tar.bz2
/anaconda-41.1.tar.bz2
/anaconda-41.2.tar.bz2
/anaconda-41.6.tar.bz2
/anaconda-41.7.tar.bz2
/anaconda-41.9.tar.bz2
/anaconda-41.13.tar.bz2
/anaconda-41.14.tar.bz2
/anaconda-41.15.tar.bz2
/anaconda-41.17.tar.bz2
/anaconda-41.18.tar.bz2
/anaconda-41.19.tar.bz2
/anaconda-41.20.tar.bz2
/anaconda-41.22.tar.bz2
/anaconda-41.23.tar.bz2
/anaconda-41.24.tar.bz2
/anaconda-41.25.tar.bz2
/anaconda-41.26.tar.bz2
/anaconda-41.27.tar.bz2
/anaconda-41.28.tar.bz2
/anaconda-41.29.tar.bz2
/anaconda-41.30.tar.bz2
/anaconda-41.31.tar.bz2
/anaconda-41.32.tar.bz2
/anaconda-42.1.tar.bz2
/anaconda-42.2.tar.bz2
/anaconda-42.3.tar.bz2
/anaconda-42.4.tar.bz2
/anaconda-42.5.tar.bz2
/anaconda-42.6.tar.bz2
/anaconda-42.7.tar.bz2
/anaconda-42.8.tar.bz2
/anaconda-42.9.tar.bz2
/anaconda-42.10.tar.bz2
/anaconda-42.11.tar.bz2
/anaconda-42.12.tar.bz2
/anaconda-42.13.tar.bz2
/anaconda-42.14.tar.bz2
/anaconda-42.15.tar.bz2
/anaconda-42.16.tar.bz2
/anaconda-42.18.tar.bz2
/anaconda-42.20.tar.bz2
/anaconda-42.21.tar.bz2
/anaconda-42.23.tar.bz2
/anaconda-42.24.tar.bz2
/anaconda-42.26.tar.bz2
/anaconda-43.1.tar.bz2
/anaconda-43.5.tar.bz2
/anaconda-43.6.tar.bz2
/anaconda-43.7.tar.bz2
/anaconda-43.8.tar.bz2
/anaconda-43.9.tar.bz2
/anaconda-43.10.tar.bz2
/anaconda-43.11.tar.bz2
/anaconda-43.12.tar.bz2
/anaconda-43.13.tar.bz2
/anaconda-43.14.tar.bz2
/anaconda-43.15.tar.bz2
/anaconda-43.16.tar.bz2
/anaconda-43.17.tar.bz2
/anaconda-43.18.tar.bz2
/anaconda-43.20.tar.bz2
/anaconda-43.21.tar.bz2
/anaconda-43.22.tar.bz2
/anaconda-43.24.tar.bz2
/anaconda-43.25.tar.bz2
/anaconda-43.28.tar.bz2
/anaconda-43.29.tar.bz2
/anaconda-43.30.tar.bz2
/anaconda-43.31.tar.bz2
/anaconda-43.32.tar.bz2
/anaconda-43.33.tar.bz2
/anaconda-43.34.tar.bz2
/anaconda-43.35.tar.bz2
/anaconda-43.36.tar.bz2
/anaconda-43.37.tar.bz2
/anaconda-43.38.tar.bz2
/anaconda-43.39.tar.bz2
/anaconda-43.40.tar.bz2
/anaconda-43.41.tar.bz2
/anaconda-43.44.tar.bz2
/anaconda-43.46.tar.bz2
/anaconda-44.1.tar.bz2
/anaconda-44.2.tar.bz2
/anaconda-44.4.tar.bz2
/anaconda-44.5.tar.bz2
/anaconda-44.6.tar.bz2
/anaconda-44.7.tar.bz2
/anaconda-44.8.tar.bz2
/anaconda-44.9.tar.bz2
/anaconda-44.10.tar.bz2
/anaconda-44.11.tar.bz2
/anaconda-37.12.1.tar.bz2
/anaconda-37.12.2.tar.bz2
/anaconda-37.12.3.tar.bz2
/anaconda-37.12.4.tar.bz2
/anaconda-37.12.5.tar.bz2
/anaconda-37.12.6.tar.bz2

View file

@ -7,13 +7,8 @@
specfile_path: anaconda.spec
upstream_package_name: anaconda
upstream_tag_template: anaconda-{version}
upstream_tag_template: anaconda-{version}-1
copy_upstream_release_description: true
downstream_package_name: anaconda
files_to_sync:
- rpmlint.toml
- .packit.yml
srpm_build_deps:
- automake
@ -27,15 +22,9 @@ srpm_build_deps:
- libxklavier-devel
- libarchive-devel
- rpm-devel
- audit-libs-devel
- nss_wrapper
- nodejs-npm
packages:
anaconda-fedora:
specfile_path: anaconda.spec
anaconda-centos:
specfile_path: anaconda.spec
pkg_tool: centpkg
- npm
actions:
post-upstream-clone:
@ -46,70 +35,28 @@ actions:
- 'bash -c "ls -1 anaconda-*.tar.bz2"'
jobs:
# Propose downstream (Fedora)
- job: propose_downstream
trigger: release
packages: [anaconda-fedora]
dist_git_branches:
- main
dist_git_branches: f37
# Tests on PR (Fedora)
- job: tests
trigger: pull_request
packages: [anaconda-fedora]
targets:
- fedora-rawhide
- fedora-latest
# COPR builds on PR (Fedora)
- job: copr_build
trigger: pull_request
packages: [anaconda-fedora]
targets:
- fedora-rawhide
- fedora-eln
# COPR builds on commit (Fedora): single job with multiple targets (add ELN on main)
- job: copr_build
trigger: commit
packages: [anaconda-fedora]
targets:
- fedora-rawhide
- fedora-eln
branch: main
- fedora-latest
branch: f37-release
owner: "@rhinstaller"
project: Anaconda
project: Anaconda-devel
preserve_project: True
additional_repos:
- "copr://@storage/blivet-daily"
# This repository contains fixup of Rawhide broken environment.
# Mainly useful when there is a package which is not yet in Rawhide but build is available.
- "https://fedorapeople.org/groups/anaconda/repos/anaconda_fixup_repo/"
- job: koji_build
trigger: commit
packages: [anaconda-fedora]
sidetag_group: anaconda-releases
dist_git_branches:
- fedora-development
allowed_committers:
- m4rtink
- kkoukiou
- rvykydal
- jkonecny
- packit
allowed_pr_authors:
- m4rtink
- kkoukiou
- rvykydal
- jkonecny
- packit
- job: bodhi_update
trigger: koji_build
packages: [anaconda-fedora]
sidetag_group: anaconda-releases
dependencies:
- anaconda-webui
dist_git_branches:
- fedora-development
allowed_builders:
- m4rtink
- kkoukiou
- rvykydal
- jkonecny
- packit

View file

@ -1,31 +0,0 @@
From b4b09f54b39b288f326b4734c13d27aa710e69d3 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Mon, 2 Jun 2025 12:28:49 -0700
Subject: [PATCH] Don't pass --no-x11 to gnome-kiosk
This is also gone when mutter is built without X11 support, as
is now the case in Rawhide and ELN, and probably soon in EL 10.
Don't backport this to earlier branches.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
pyanaconda/display.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/pyanaconda/display.py b/pyanaconda/display.py
index 25a0e15142..20adcf58ff 100644
--- a/pyanaconda/display.py
+++ b/pyanaconda/display.py
@@ -226,8 +226,7 @@ def do_startup_wl_actions(timeout, headless=False, headless_resolution=None):
argv.extend(["--vt", "6"])
# add the generic GNOME Kiosk invocation
- argv.extend(["gnome-kiosk", "--wayland", "--no-x11",
- "--wayland-display", constants.WAYLAND_SOCKET_NAME])
+ argv.extend(["gnome-kiosk", "--wayland", "--wayland-display", constants.WAYLAND_SOCKET_NAME])
# remote access needs gnome-kiosk to start in headless mode
if headless:
--
2.49.0

View file

@ -1,66 +0,0 @@
From c7dce0445423e7386fdc6998a6a8de50a7a39bca Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Thu, 9 Oct 2025 10:07:01 -0700
Subject: [PATCH] RebootData: don't allow action to be None
Silverblue installs (and probably others where the kickstart data
does not explicitly specify a reboot action) crash, because
the `RebootData` instance's `action` winds up as `None`, since
this is the default value of `self.action` in
`pykickstart.commands.reboot.F23_Reboot`. Trying to translate
this to a DBus structure with `RebootData.to_structure` fails,
because DBus has no concept of `None`.
To avoid this, let's have the setter convert `None` to `-1`, the
same value we use as a default when initializing the instance.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
pyanaconda/modules/common/structures/reboot.py | 5 ++++-
.../modules/runtime/test_module_runtime.py | 10 ++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/pyanaconda/modules/common/structures/reboot.py b/pyanaconda/modules/common/structures/reboot.py
index fd2673b169..cadbfbd01f 100644
--- a/pyanaconda/modules/common/structures/reboot.py
+++ b/pyanaconda/modules/common/structures/reboot.py
@@ -46,7 +46,10 @@ class RebootData(DBusData):
return self._action
@action.setter
- def action(self, value: Int):
+ def action(self, value: Int | None):
+ if value is None:
+ # dbus cannot handle None
+ value = -1
self._action = value
@property
diff --git a/tests/unit_tests/pyanaconda_tests/modules/runtime/test_module_runtime.py b/tests/unit_tests/pyanaconda_tests/modules/runtime/test_module_runtime.py
index 22286e59c1..83d3a123ef 100644
--- a/tests/unit_tests/pyanaconda_tests/modules/runtime/test_module_runtime.py
+++ b/tests/unit_tests/pyanaconda_tests/modules/runtime/test_module_runtime.py
@@ -18,6 +18,7 @@
import unittest
from textwrap import dedent
+from pyanaconda.modules.common.structures.reboot import RebootData
from pyanaconda.modules.runtime.runtime import RuntimeService
from pyanaconda.modules.runtime.runtime_interface import RuntimeInterface
from tests.unit_tests.pyanaconda_tests import check_kickstart_interface
@@ -166,3 +167,12 @@ class RuntimeInterfaceTestCase(unittest.TestCase):
ks_in = "halt --eject\n"
ks_out = "# Halt after installation\nhalt --eject\n"
self._test_kickstart(ks_in, ks_out)
+
+ def test_process_kickstart_with_no_payload(self):
+ """Test all values are ints when reading empty kickstart."""
+ self.interface.ReadKickstart("")
+ assert isinstance(self.module.reboot.action, int)
+ assert isinstance(self.module.reboot.eject, int)
+ assert isinstance(self.module.reboot.kexec, int)
+ # and check we can to_structure it
+ RebootData.to_structure(self.module.reboot)
--
2.51.0

View file

@ -0,0 +1,46 @@
From 427f98963643e7f823f650dab015c80d854aa2d1 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Thu, 19 May 2022 09:50:17 -0700
Subject: [PATCH] Specify that we want the Adwaita icon theme
Back in 38556e7e in 2016 when anaconda switched from 'gnome'
icon theme, intending to use 'Adwaita' instead, we dropped the
line that specifically declares what theme anaconda wants to
use. Presumably we expected GTK would always pick Adwaita for
us. However, with GTK 3.24.34, this seems to not reliably happen
on KDE. On KDE images, the breeze icon theme is installed, and
it also provides many of the icons anaconda uses. When running
anaconda on a KDE live image with GTK 3.24.34, we're often seeing
the icons from the breeze theme used instead of the icons from
the Adwaita theme. This happened in 4 out of 4 tests on openQA
prod, 3 out of 4 tests on openQA stg, and 5 out of 5 tests I
ran in a VM myself. I then applied this change directly to the
file in the VM and re-tested another 5 times; all 5 times the
right icons were shown.
I'm not sure why this is suddenly a problem with GTK 3.24.34
when it never was before even though both icon themes have been
in KDE for years, but this seems correct anyway. We definitely
want anaconda to use the Adwaita icons, not ones from any other
theme.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
pyanaconda/ui/gui/__init__.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py
index d458b66f14..428f30e744 100644
--- a/pyanaconda/ui/gui/__init__.py
+++ b/pyanaconda/ui/gui/__init__.py
@@ -754,6 +754,7 @@ class GraphicalUserInterface(UserInterface):
# Set some program-wide settings.
settings = Gtk.Settings.get_default()
settings.set_property("gtk-font-name", "Cantarell")
+ settings.set_property("gtk-icon-theme-name", "Adwaita")
# Get the path to the application data
data_path = os.environ.get("ANACONDA_DATA", "/usr/share/anaconda")
--
2.36.1

View file

@ -0,0 +1,48 @@
From 216c1aa6684cbed2a7869d48f97bea95cb503ab6 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Tue, 8 Mar 2022 16:10:30 -0800
Subject: [PATCH] network: Handle network configuration paths not existing
When installing network configuration files, we shouldn't assume
that the relevant paths (network-scripts and system-connections)
actually exist, they don't have to. NetworkManager has split
/etc/sysconfig/network-scripts off into a subpackage that is
no longer installed by default. We guarded against this in
`get_config_files_paths` already, but not in
`_copy_device_config_files`.
---
pyanaconda/modules/network/installation.py | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/pyanaconda/modules/network/installation.py b/pyanaconda/modules/network/installation.py
index f46574e6f6..3ac65e0df0 100644
--- a/pyanaconda/modules/network/installation.py
+++ b/pyanaconda/modules/network/installation.py
@@ -240,15 +240,17 @@ Name={}
:param root: path to the root of the target system
:type root: str
"""
- for config_file in os.listdir(self.NETWORK_SCRIPTS_DIR_PATH):
- if config_file.startswith(self.NETWORK_SCRIPTS_CONFIG_FILE_PREFIXES):
- config_file_path = os.path.join(self.NETWORK_SCRIPTS_DIR_PATH,
+ if os.path.exists(self.NETWORK_SCRIPTS_DIR_PATH):
+ for config_file in os.listdir(self.NETWORK_SCRIPTS_DIR_PATH):
+ if config_file.startswith(self.NETWORK_SCRIPTS_CONFIG_FILE_PREFIXES):
+ config_file_path = os.path.join(self.NETWORK_SCRIPTS_DIR_PATH,
+ config_file)
+ self._copy_file_to_root(root, config_file_path)
+ if os.path.exists(self.NM_SYSTEM_CONNECTIONS_DIR_PATH):
+ for config_file in os.listdir(self.NM_SYSTEM_CONNECTIONS_DIR_PATH):
+ config_file_path = os.path.join(self.NM_SYSTEM_CONNECTIONS_DIR_PATH,
config_file)
self._copy_file_to_root(root, config_file_path)
- for config_file in os.listdir(self.NM_SYSTEM_CONNECTIONS_DIR_PATH):
- config_file_path = os.path.join(self.NM_SYSTEM_CONNECTIONS_DIR_PATH,
- config_file)
- self._copy_file_to_root(root, config_file_path)
def _copy_dhclient_config_files(self, root, network_ifaces):
"""Copy dhclient configuration files to target system.
--
2.35.1

View file

@ -1,139 +0,0 @@
From c6118f65fe3583e1c15c383a8a9c6f5c1989fb22 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Thu, 9 Oct 2025 16:51:15 -0700
Subject: [PATCH] pyanaconda: localization: Indicate ASCII support in
get_keyboard_layouts
It is useful to know whether a given keyboard layout supports
ASCII input or not. Immediately, we want to use this in the
webUI keyboard logic, but it may be useful elsewhere too in
future, e.g. to warn the user if they use the Keyboard spoke
to create a configuration with no layout capable of ASCII input.
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
pyanaconda/localization.py | 11 +++++++++
.../common/structures/keyboard_layout.py | 10 ++++++++
.../modules/localization/localization.py | 2 ++
.../localization/test_module_localization.py | 23 +++++++++++--------
4 files changed, 36 insertions(+), 10 deletions(-)
diff --git a/pyanaconda/localization.py b/pyanaconda/localization.py
index 73415b2511..08a9343463 100644
--- a/pyanaconda/localization.py
+++ b/pyanaconda/localization.py
@@ -489,6 +489,17 @@ def get_common_keyboard_layouts():
return langtable.list_common_keyboards()
+def layout_supports_ascii(layout):
+ """Return a boolean indicating whether the xkb layout (given as
+ e.g. 'en(us)' or 'fr(oss)' or 'ru') can input ASCII characters.
+
+ :return: True for ASCII capable, False for not
+ :rtype: bool
+ :param str layout: layout descriptor string
+ """
+ return langtable.supports_ascii(layout)
+
+
def get_locale_timezones(locale):
"""Function returning preferred timezones for the given locale.
diff --git a/pyanaconda/modules/common/structures/keyboard_layout.py b/pyanaconda/modules/common/structures/keyboard_layout.py
index b5aacc764b..007e975965 100644
--- a/pyanaconda/modules/common/structures/keyboard_layout.py
+++ b/pyanaconda/modules/common/structures/keyboard_layout.py
@@ -29,6 +29,7 @@ class KeyboardLayout(DBusData):
def __init__(self):
self._layout_id = ""
self._description = ""
+ self._supports_ascii = False
self._is_common = False
self._langs = []
@@ -59,6 +60,15 @@ class KeyboardLayout(DBusData):
def is_common(self, value: bool):
self._is_common = value
+ @property
+ def supports_ascii(self) -> bool:
+ """Return whether the layout is capable of typing ASCII characters."""
+ return self._supports_ascii
+
+ @supports_ascii.setter
+ def supports_ascii(self, value: bool):
+ self._supports_ascii = value
+
@property
def langs(self) -> List[Str]:
"""Return the list of associated languages."""
diff --git a/pyanaconda/modules/localization/localization.py b/pyanaconda/modules/localization/localization.py
index 346a55a1c0..4fb7333ed7 100644
--- a/pyanaconda/modules/localization/localization.py
+++ b/pyanaconda/modules/localization/localization.py
@@ -33,6 +33,7 @@ from pyanaconda.localization import (
get_language_id,
get_language_locales,
get_native_name,
+ layout_supports_ascii,
)
from pyanaconda.modules.common.base import KickstartService
from pyanaconda.modules.common.constants.services import LOCALIZATION
@@ -218,6 +219,7 @@ class LocalizationService(KickstartService):
layout.description = self.get_layout_variant_description(name, with_lang=True, xlated=True)
layout.is_common = name.replace(" ", "") in common_langtable_keyboards and is_common_lang
layout.langs = info.langs
+ layout.supports_ascii = layout_supports_ascii(name.replace(" ", ""))
layouts.append(layout)
return layouts
diff --git a/tests/unit_tests/pyanaconda_tests/modules/localization/test_module_localization.py b/tests/unit_tests/pyanaconda_tests/modules/localization/test_module_localization.py
index 7f6449d3ea..7582df2401 100644
--- a/tests/unit_tests/pyanaconda_tests/modules/localization/test_module_localization.py
+++ b/tests/unit_tests/pyanaconda_tests/modules/localization/test_module_localization.py
@@ -228,28 +228,31 @@ class LocalizationInterfaceTestCase(unittest.TestCase):
normalized_layouts = KeyboardLayout.from_structure_list(layouts)
layouts_expectation = [
- ("ara (olpc)", "Arabic (OLPC)", "Arabic", False),
- ("cz", "Czech", "Czech", False),
- ("de (nodeadkeys)", "German (no dead keys)", "German", True),
- ("es", "Spanish", "Spanish; Castilian", True),
- ("fr (oss)", "French (alt.)", "French", True),
- ("gr", "Greek", "Greek, Modern (1453-); Greek", False),
- ("it", "Italian", "Italian", False),
- ("jp", "Japanese", "Japanese", True),
- ("us", "English (US)", "English", True),
+ ("ara (olpc)", "Arabic (OLPC)", "Arabic", False, True),
+ ("cz", "Czech", "Czech", False, True),
+ ("de (nodeadkeys)", "German (no dead keys)", "German", True, True),
+ ("es", "Spanish", "Spanish; Castilian", True, True),
+ ("fr (oss)", "French (alt.)", "French", True, True),
+ ("gr", "Greek", "Greek, Modern (1453-); Greek", False, False),
+ ("it", "Italian", "Italian", False, True),
+ ("jp", "Japanese", "Japanese", True, True),
+ ("us", "English (US)", "English", True, True),
+ ("ru (dos)", "Russian (DOS)", "Russian", False, False),
]
- for layout_id, description, lang, is_common in layouts_expectation:
+ for layout_id, description, lang, is_common, supports_ascii in layouts_expectation:
layout = KeyboardLayout()
layout.layout_id = layout_id
layout.description = description
layout.is_common = is_common
+ layout.supports_ascii = supports_ascii
layout.langs = [lang]
gen = (normalized_layout for normalized_layout in normalized_layouts if layout.layout_id == normalized_layout.layout_id)
for normalized_layout in gen:
assert layout.description == normalized_layout.description
assert layout.is_common == normalized_layout.is_common
+ assert layout.supports_ascii == normalized_layout.supports_ascii
assert layout.langs == normalized_layout.langs
break
else:
--
2.51.0

54
4207.patch Normal file
View file

@ -0,0 +1,54 @@
From 67d146999a2356dd445cc4c6532e052596cae4db Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Tue, 21 Jun 2022 18:50:35 +0200
Subject: [PATCH 1/2] 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 cc6138a5e44..587b44a46f9 100755
--- 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():
From da2f2499a6bfd2a0c1996c91457065d02040737f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Tue, 21 Jun 2022 19:01:21 +0200
Subject: [PATCH 2/2] Don't ignore errors from python-deps
---
dracut/module-setup.sh | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dracut/module-setup.sh b/dracut/module-setup.sh
index f54d7539621..019f0a1ef24 100755
--- a/dracut/module-setup.sh
+++ b/dracut/module-setup.sh
@@ -72,13 +72,14 @@ install() {
# timeout script for errors reporting
inst_hook initqueue/timeout 50 "$moddir/anaconda-error-reporting.sh"
# python deps for parse-kickstart. DOUBLE WOOOO
+ set -o pipefail
PYTHONHASHSEED=42 "$moddir/python-deps" "$moddir/parse-kickstart" "$moddir/driver_updates.py" | while read -r dep; do
case "$dep" in
*.so) inst_library "$dep" ;;
*.py) inst_simple "$dep" ;;
*) inst "$dep" ;;
esac
- done
+ done || exit 1
# support for specific architectures
case "$(uname -m)" in

View file

@ -1,42 +0,0 @@
From d75de3da3648dee474ddea6639e09c071f027232 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Sat, 7 Jun 2025 13:44:25 +0200
Subject: [PATCH] Avoid buffer overflow with TIOCGWINSZ
It has 4 bytes, not 2.
On Python 3.14+, the previous version raised SystemError:
>>> from pyanaconda.argument_parsing import get_help_width
...
>>> get_help_width()
Traceback (most recent call last):
File "<python-input-1>", line 1, in <module>
get_help_width()
~~~~~~~~~~~~~~^^
File "/usr/lib64/python3.14/site-packages/pyanaconda/argument_parsing.py", line 68, in get_help_width
data = fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ, '1234')
SystemError: buffer overflow
See https://github.com/python/cpython/commit/c2eaeee3dc3306ca486b0377b07b1a957584b691
Fixes https://bugzilla.redhat.com/2370944
---
pyanaconda/argument_parsing.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/argument_parsing.py b/pyanaconda/argument_parsing.py
index e24f0f1b999..55cf7993625 100644
--- a/pyanaconda/argument_parsing.py
+++ b/pyanaconda/argument_parsing.py
@@ -65,8 +65,8 @@ def get_help_width():
return DEFAULT_HELP_WIDTH
try:
- data = fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ, '1234')
- columns = int(struct.unpack('hh', data)[1])
+ data = fcntl.ioctl(sys.stdout, termios.TIOCGWINSZ, '12345678')
+ columns = int(struct.unpack('hhhh', data)[1])
except (OSError, ValueError) as e:
log.info("Unable to determine terminal width: %s", e)
print("terminal size detection failed, using default width")

View file

@ -1,70 +0,0 @@
From 11b7e782d8de7da49f0b4e650e8fc0c60f69304f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
Date: Sun, 8 Jun 2025 17:46:29 +0200
Subject: [PATCH] Avoid the multiprocessing forkserver method with dnf
Fixes:
Traceback (most recent call last):
File "/usr/lib64/python3.14/site-packages/pyanaconda/core/threads.py", line 281, in run
threading.Thread.run(self)
~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/lib64/python3.14/threading.py", line 1023, in run
self._target(*self._args, **self._kwargs)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.14/site-packages/pyanaconda/modules/common/task/task.py", line 97, in _thread_run_callback
self._task_run_callback()
~~~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/lib64/python3.14/site-packages/pyanaconda/modules/common/task/task.py", line 110, in _task_run_callback
self._set_result(self.run())
~~~~~~~~^^
File "/usr/lib64/python3.14/site-packages/pyanaconda/modules/payloads/payload/dnf/installation.py", line 281, in run
self._dnf_manager.install_packages(self.report_progress)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.14/site-packages/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py", line 664, in install_packages
process.start()
~~~~~~~~~~~~~^^
File "/usr/lib64/python3.14/multiprocessing/process.py", line 121, in start
self._popen = self._Popen(self)
~~~~~~~~~~~^^^^^^
File "/usr/lib64/python3.14/multiprocessing/context.py", line 224, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib64/python3.14/multiprocessing/context.py", line 300, in _Popen
return Popen(process_obj)
File "/usr/lib64/python3.14/multiprocessing/popen_forkserver.py", line 35, in __init__
super().__init__(process_obj)
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib64/python3.14/multiprocessing/popen_fork.py", line 20, in __init__
self._launch(process_obj)
~~~~~~~~~~~~^^^^^^^^^^^^^
File "/usr/lib64/python3.14/multiprocessing/popen_forkserver.py", line 47, in _launch
reduction.dump(process_obj, buf)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
File "/usr/lib64/python3.14/multiprocessing/reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^
TypeError: cannot pickle 'SwigPyObject' object
---
pyanaconda/modules/payloads/payload/dnf/dnf_manager.py | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py b/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
index 925ed73790a..e7c25369912 100644
--- a/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
+++ b/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
@@ -652,9 +652,12 @@ def install_packages(self, callback, timeout=20):
:param timeout: a time out of a failed process in seconds
:raise PayloadInstallationError: if the installation fails
"""
- queue = multiprocessing.Queue()
+ # SwigPyObjects are not picklable, so force the fork method
+ # On Python 3.14+, forkserver is the default (and it pickles)
+ context = multiprocessing.get_context(method="fork")
+ queue = context.Queue()
display = TransactionProgress(queue)
- process = multiprocessing.Process(
+ process = context.Process(
target=self._run_transaction,
args=(self._base, display)
)

View file

@ -1,3 +1,3 @@
This repository is maintained by packit.
https://packit.dev/
The file was generated using packit 1.13.0.post1.dev2+g84134016c.
The file was generated using packit 0.59.2.dev15+g4b11aa2.

File diff suppressed because it is too large Load diff

View file

@ -1,36 +0,0 @@
# The purpose of this file is to overwrite some default config
# of rpmlint, which may not fit our project needs / specification
Filters = [
# Discard no-binary error for anaconda packages which cant be a noarch type
'anaconda.x86_64: E: no-binary',
'anaconda-core-debuginfo.x86_64: E: no-binary',
'anaconda-install-env-deps.x86_64: E: no-binary',
'anaconda-install-img-deps.x86_64: E: no-binary',
# Discard explicite library dependencies
'explicit-lib-dependency flatpak-libs',
'explicit-lib-dependency libblockdev-lvm-dbus',
'explicit-lib-dependency libblockdev-tools',
'explicit-lib-dependency librsvg2',
# Discard warning about binary debug symbols. Those are our helper
# binaries and it is not important for them to be stripped
'unstripped-binary-or-object /usr/libexec/anaconda/dd_extract',
'unstripped-binary-or-object /usr/libexec/anaconda/dd_list',
'unstripped-binary-or-object /usr/lib64/libAnacondaWidgets*',
'unstripped-binary-or-object /usr/lib64/glade/modules/libAnacondaWidgets*',
# Discard symbolic link warnings.
'dangling-symlink /usr/share/anaconda/window-manager/glib-2.0/schemas/org.gnome.*',
'dangling-relative-symlink /usr/lib/.build-id/*',
# Discard missing manual pages error
'no-manual-page-for-binary liveinst',
'no-manual-page-for-binary anaconda-cleanup',
'no-manual-page-for-binary anaconda-disable-nm-ibft-plugin',
'no-manual-page-for-binary anaconda-nm-disable-autocons',
'no-manual-page-for-binary instperf',
'no-manual-page-for-binary instperf',
'no-manual-page-for-binary anaconda',
'no-manual-page-for-binary handle-sshpw',
# Discard missing README / documentation for package
'no-documentation',
# Discard spelling errors for project commonly used words
'spelling-error .* en_US (metapackage|kickstarts|iso|eg|lorax) ',
]

View file

@ -1 +1 @@
SHA512 (anaconda-44.11.tar.bz2) = 30e8c3bde05afefe7cb18ba17d84fc31007e9086932f47136e74e432563786cd577123f7c904bc3ddd5e5c5f6f722dae3cedbc131d5871c06f7829ba632ffaf7
SHA512 (anaconda-37.12.6.tar.bz2) = 6f4b3c13f7ecbd64501a1aff9ba1d8fde867b52df8a517821c1a70a4ab2af81ef6a22c8534afba8239a5c608f4c06fdd505e6d4c7a58a23fa8d852e54a79694a

View file

@ -1,10 +1,5 @@
#!/bin/sh -eux
# Remove webui because it does not support much anything yet
# Possible alternative: rpm -E --nodeps anaconda-webui
dnf remove -y anaconda-webui
# Prepare test work directory
@ -18,9 +13,9 @@ source ./repositories
TEST_KICKSTART=./ks.dirinstall.cfg
# Dump URLs of installation repositories found in local repositories whose names are configured in 'repositories' file
echo "url --metalink=$(dnf repoinfo $BASE_REPO | grep -e "^ *Metalink *:" | cut -d: -f2- | sed 's/^ *//')" > ${KICKSTART_PATH}
echo "url --metalink=$(dnf repoinfo $BASE_REPO | grep ^Repo-metalink | cut -d: -f2- | sed 's/^ *//')" > ${KICKSTART_PATH}
for repo in $REPOS; do
echo "repo --name=$repo --metalink=$(dnf repoinfo $repo | grep "^ *Metalink *:" | cut -d: -f2- | sed 's/^ *//')" >> ${KICKSTART_PATH}
echo "repo --name=$repo --metalink=$(dnf repoinfo $repo | grep ^Repo-metalink | cut -d: -f2- | sed 's/^ *//')" >> ${KICKSTART_PATH}
done
cat ${TEST_KICKSTART} >> ${KICKSTART_PATH}

View file

@ -1,12 +1,4 @@
# Names of local repositories whose urls will be used for installation
# Repositories for "Fedora X" needs to be dynamically resolved based on host
if dnf repoinfo --enabled | grep -qe "Repo ID *: rawhide"; then
BASE_REPO="rawhide"
else
BASE_REPO="fedora"
fi
# Additional repositories
REPOS=""
#REPOS="fedora-modular"
# Repositories for "Fedora X" release:
BASE_REPO="fedora"
REPOS="fedora-modular"