feat(os): support 2403
This commit is contained in:
commit
b0471ce65a
159
0001-add-loongarch-support-for-anaconda.patch
Normal file
159
0001-add-loongarch-support-for-anaconda.patch
Normal file
@ -0,0 +1,159 @@
|
|||||||
|
From ad79c2e137e801c490fc35d4cecefbca6619fbea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Huang Yang <huangyang@loongson.cn>
|
||||||
|
Date: Thu, 25 Apr 2024 12:14:01 +0000
|
||||||
|
Subject: [PATCH] add loongarch support for anaconda
|
||||||
|
|
||||||
|
Signed-off-by: yueyuankun <yueyuankun@kylinos.cn>
|
||||||
|
---
|
||||||
|
pyanaconda/modules/storage/bootloader/base.py | 9 +++--
|
||||||
|
pyanaconda/modules/storage/bootloader/efi.py | 35 ++++++++++++++++++-
|
||||||
|
.../modules/storage/bootloader/factory.py | 4 +++
|
||||||
|
.../modules/storage/devicetree/fsset.py | 6 +++-
|
||||||
|
pyanaconda/modules/storage/platform.py | 10 ++++++
|
||||||
|
5 files changed, 59 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/base.py b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
index d40086d..191b8af 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
@@ -796,11 +796,14 @@ class BootLoader(object):
|
||||||
|
swap_devices = storage.fsset.swap_devices
|
||||||
|
dracut_devices.extend(swap_devices)
|
||||||
|
|
||||||
|
- # Add resume= option to enable hibernation on x86.
|
||||||
|
+ # Add resume= option to enable hibernation on x86 and loongarch.
|
||||||
|
# Choose the largest swap device for that.
|
||||||
|
- if blivet.arch.is_x86() and swap_devices:
|
||||||
|
+ if (blivet.arch.is_x86() or blivet.arch.is_loongarch())and swap_devices:
|
||||||
|
resume_device = max(swap_devices, key=lambda x: x.size)
|
||||||
|
- self.boot_args.add("resume=%s" % resume_device.fstab_spec)
|
||||||
|
+ if not blivet.arch.is_efi() and blivet.arch.is_loongarch():
|
||||||
|
+ self.boot_args.add("resume=%s" % resume_device.path)
|
||||||
|
+ else:
|
||||||
|
+ self.boot_args.add("resume=%s" % resume_device.fstab_spec)
|
||||||
|
|
||||||
|
# Does /usr have its own device? If so, we need to tell dracut
|
||||||
|
usr_device = storage.mountpoints.get("/usr")
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/efi.py b/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
index 5a28676..d2fffd2 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
@@ -28,7 +28,7 @@ from pyanaconda.product import productName
|
||||||
|
from pyanaconda.anaconda_loggers import get_module_logger
|
||||||
|
log = get_module_logger(__name__)
|
||||||
|
|
||||||
|
-__all__ = ["EFIBase", "EFIGRUB", "Aarch64EFIGRUB", "ArmEFIGRUB", "MacEFIGRUB"]
|
||||||
|
+__all__ = ["EFIBase", "EFIGRUB", "Aarch64EFIGRUB", "ArmEFIGRUB", "MacEFIGRUB", "LOONGARCHEFIGRUB"]
|
||||||
|
|
||||||
|
|
||||||
|
class EFIBase(object):
|
||||||
|
@@ -170,6 +170,39 @@ class Aarch64EFIGRUB(EFIGRUB):
|
||||||
|
self._packages64 = ["grub2-efi-aa64", "shim-aa64"]
|
||||||
|
|
||||||
|
|
||||||
|
+class LOONGARCHEFIGRUB(EFIGRUB):
|
||||||
|
+ _efi_binary = "grubloongarch64.efi"
|
||||||
|
+ stage2_is_valid_stage1 = False
|
||||||
|
+ stage2_bootable = False
|
||||||
|
+
|
||||||
|
+ def __init__(self):
|
||||||
|
+ super().__init__()
|
||||||
|
+ self._packages64 = ["grub2-efi-loongarch64"]
|
||||||
|
+
|
||||||
|
+ def remove_efi_boot_target(self):
|
||||||
|
+ return
|
||||||
|
+
|
||||||
|
+ def _add_single_efi_boot_target(self, partition):
|
||||||
|
+ boot_disk = partition.disk
|
||||||
|
+ boot_part_num = str(partition.parted_partition.number)
|
||||||
|
+
|
||||||
|
+ rc = util.execInSysroot("cp", ["-a", "/boot/efi/EFI/openEuler/" + self._efi_binary, "/boot/efi/EFI/BOOT/" + "BOOTLOONGARCH64.EFI"])
|
||||||
|
+ if rc:
|
||||||
|
+ raise BootLoaderError("Failed to set new efi boot target. This is most "
|
||||||
|
+ "likely a kernel or firmware bug.")
|
||||||
|
+ rc = util.execInSysroot("cp", ["-a", "/boot/efi/EFI/openEuler/" + self._efi_binary, "/boot/efi/EFI/BOOT/" + "BOOTLOONGARCH.EFI"])
|
||||||
|
+ if rc:
|
||||||
|
+ raise BootLoaderError("Failed to set new efi boot target for new BIOS. This is most "
|
||||||
|
+ "likely a kernel or firmware bug.")
|
||||||
|
+
|
||||||
|
+ def add_efi_boot_target(self):
|
||||||
|
+ if self.stage1_device.type == "partition": # pylint: disable=no-member
|
||||||
|
+ self._add_single_efi_boot_target(self.stage1_device) # pylint: disable=no-member
|
||||||
|
+ elif self.stage1_device.type == "mdarray": # pylint: disable=no-member
|
||||||
|
+ for parent in self.stage1_device.parents: # pylint: disable=no-member
|
||||||
|
+ self._add_single_efi_boot_target(parent)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
class ArmEFIGRUB(EFIGRUB):
|
||||||
|
_serial_consoles = ["ttyAMA", "ttyS"]
|
||||||
|
_efi_binary = "\\grubarm.efi"
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/factory.py b/pyanaconda/modules/storage/bootloader/factory.py
|
||||||
|
index 4815685..643f633 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/factory.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/factory.py
|
||||||
|
@@ -114,6 +114,10 @@ class BootLoaderFactory(object):
|
||||||
|
from pyanaconda.modules.storage.bootloader.efi import EFIGRUB
|
||||||
|
return EFIGRUB
|
||||||
|
|
||||||
|
+ if platform_class is platform.LOONGARCHEFI:
|
||||||
|
+ from pyanaconda.modules.storage.bootloader.efi import LOONGARCHEFIGRUB
|
||||||
|
+ return LOONGARCHEFIGRUB
|
||||||
|
+
|
||||||
|
if platform_class is platform.MacEFI:
|
||||||
|
from pyanaconda.modules.storage.bootloader.efi import MacEFIGRUB
|
||||||
|
return MacEFIGRUB
|
||||||
|
diff --git a/pyanaconda/modules/storage/devicetree/fsset.py b/pyanaconda/modules/storage/devicetree/fsset.py
|
||||||
|
index 4db3759..6f85a37 100644
|
||||||
|
--- a/pyanaconda/modules/storage/devicetree/fsset.py
|
||||||
|
+++ b/pyanaconda/modules/storage/devicetree/fsset.py
|
||||||
|
@@ -23,6 +23,7 @@ import gi
|
||||||
|
gi.require_version("BlockDev", "3.0")
|
||||||
|
from gi.repository import BlockDev as blockdev
|
||||||
|
|
||||||
|
+from blivet import arch
|
||||||
|
from blivet.devices import NoDevice, DirectoryDevice, NFSDevice, FileDevice, MDRaidArrayDevice, \
|
||||||
|
NetworkStorageDevice, OpticalDevice
|
||||||
|
from blivet.errors import UnrecognizedFSTabEntryError, FSTabTypeMismatchError
|
||||||
|
@@ -776,7 +777,10 @@ class FSSet(object):
|
||||||
|
break
|
||||||
|
if device.encrypted:
|
||||||
|
options += ",x-systemd.device-timeout=0"
|
||||||
|
- devspec = device.fstab_spec
|
||||||
|
+ if not arch.is_efi() and arch.is_loongarch():
|
||||||
|
+ devspec = device.path
|
||||||
|
+ else:
|
||||||
|
+ devspec = device.fstab_spec
|
||||||
|
dump = device.format.dump
|
||||||
|
if device.format.check and mountpoint == "/":
|
||||||
|
passno = 1
|
||||||
|
diff --git a/pyanaconda/modules/storage/platform.py b/pyanaconda/modules/storage/platform.py
|
||||||
|
index 20f2c4d..2bb8e41 100644
|
||||||
|
--- a/pyanaconda/modules/storage/platform.py
|
||||||
|
+++ b/pyanaconda/modules/storage/platform.py
|
||||||
|
@@ -287,6 +287,14 @@ class Aarch64EFI(EFI):
|
||||||
|
return ["vfat", "ntfs"]
|
||||||
|
|
||||||
|
|
||||||
|
+class LOONGARCHEFI(EFI):
|
||||||
|
+
|
||||||
|
+ @property
|
||||||
|
+ def non_linux_format_types(self):
|
||||||
|
+ """Format types of devices with non-linux operating systems."""
|
||||||
|
+ return ["vfat", "ntfs"]
|
||||||
|
+
|
||||||
|
+
|
||||||
|
class ArmEFI(EFI):
|
||||||
|
|
||||||
|
@property
|
||||||
|
@@ -522,6 +530,8 @@ def get_platform():
|
||||||
|
return ArmEFI()
|
||||||
|
elif arch.is_riscv64():
|
||||||
|
return RISCV64EFI()
|
||||||
|
+ elif arch.is_loongarch():
|
||||||
|
+ return LOONGARCHEFI()
|
||||||
|
else:
|
||||||
|
return EFI()
|
||||||
|
elif arch.is_x86():
|
||||||
|
--
|
||||||
|
2.43.0
|
||||||
|
|
||||||
80
Support-configuration-of-additional-boot-arguments.patch
Normal file
80
Support-configuration-of-additional-boot-arguments.patch
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
From 65258a808a703de25f790b2cb5aff8e734228ad1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Qiumiao Zhang <zhangqiumiao1@huawei.com>
|
||||||
|
Date: Mon, 7 Nov 2022 11:33:53 +0800
|
||||||
|
Subject: [PATCH] Support configuration of additional boot arguments
|
||||||
|
|
||||||
|
---
|
||||||
|
data/anaconda.conf | 2 ++
|
||||||
|
pyanaconda/argument_parsing.py | 2 +-
|
||||||
|
pyanaconda/core/configuration/bootloader.py | 8 ++++++++
|
||||||
|
pyanaconda/modules/storage/bootloader/base.py | 5 +++++
|
||||||
|
4 files changed, 16 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/data/anaconda.conf b/data/anaconda.conf
|
||||||
|
index 703114a..b80440e 100644
|
||||||
|
--- a/data/anaconda.conf
|
||||||
|
+++ b/data/anaconda.conf
|
||||||
|
@@ -159,6 +159,8 @@ preserved_arguments =
|
||||||
|
biosdevname ipv6.disable net.ifnames net.ifnames.prefix
|
||||||
|
nosmt
|
||||||
|
|
||||||
|
+# Arguments added by default.
|
||||||
|
+additional_arguments =
|
||||||
|
|
||||||
|
[Storage]
|
||||||
|
# Enable dmraid usage during the installation.
|
||||||
|
diff --git a/pyanaconda/argument_parsing.py b/pyanaconda/argument_parsing.py
|
||||||
|
index 75f28f4..dd5ecdf 100644
|
||||||
|
--- a/pyanaconda/argument_parsing.py
|
||||||
|
+++ b/pyanaconda/argument_parsing.py
|
||||||
|
@@ -589,7 +589,7 @@ def getArgumentParser(version_string, boot_cmdline=None):
|
||||||
|
|
||||||
|
# some defaults change based on cmdline flags
|
||||||
|
if boot_cmdline is not None:
|
||||||
|
- if "console" in boot_cmdline:
|
||||||
|
+ if "console" in boot_cmdline and "inst.text" in boot_cmdline:
|
||||||
|
ap.set_defaults(display_mode=DisplayModes.TUI)
|
||||||
|
|
||||||
|
return ap
|
||||||
|
diff --git a/pyanaconda/core/configuration/bootloader.py b/pyanaconda/core/configuration/bootloader.py
|
||||||
|
index 6746e45..7b782d3 100644
|
||||||
|
--- a/pyanaconda/core/configuration/bootloader.py
|
||||||
|
+++ b/pyanaconda/core/configuration/bootloader.py
|
||||||
|
@@ -69,3 +69,11 @@ class BootloaderSection(Section):
|
||||||
|
:return: a list of kernel arguments
|
||||||
|
"""
|
||||||
|
return self._get_option("preserved_arguments", str).split()
|
||||||
|
+
|
||||||
|
+ @property
|
||||||
|
+ def additional_arguments(self):
|
||||||
|
+ """Arguments added by default.
|
||||||
|
+
|
||||||
|
+ :return: a list of kernel arguments
|
||||||
|
+ """
|
||||||
|
+ return self._get_option("additional_arguments", str).split()
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/base.py b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
index be039c4..533d528 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
@@ -734,6 +734,7 @@ class BootLoader(object):
|
||||||
|
self._set_extra_boot_args(bootloader_proxy)
|
||||||
|
self._set_storage_boot_args(storage)
|
||||||
|
self._preserve_some_boot_args()
|
||||||
|
+ self._add_additional_boot_args()
|
||||||
|
self._set_graphical_boot_args()
|
||||||
|
self._set_security_boot_args()
|
||||||
|
|
||||||
|
@@ -908,6 +909,10 @@ class BootLoader(object):
|
||||||
|
|
||||||
|
self.boot_args.add(new_arg)
|
||||||
|
|
||||||
|
+ def _add_additional_boot_args(self):
|
||||||
|
+ for opt in conf.bootloader.additional_arguments:
|
||||||
|
+ self.boot_args.add(opt)
|
||||||
|
+
|
||||||
|
def _set_graphical_boot_args(self):
|
||||||
|
"""Set up the graphical boot."""
|
||||||
|
args = []
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
45
add-passwd-policy.patch
Normal file
45
add-passwd-policy.patch
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
From 3562cad5ea86afc5d2ce0ead649e64cf13e39128 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Mon, 7 Nov 2022 14:48:28 +0800
|
||||||
|
Subject: [PATCH] add passwd policy
|
||||||
|
|
||||||
|
---
|
||||||
|
data/anaconda.conf | 6 +++---
|
||||||
|
pyanaconda/input_checking.py | 4 ++++
|
||||||
|
2 files changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/data/anaconda.conf b/data/anaconda.conf
|
||||||
|
index 703114a..07e500f 100644
|
||||||
|
--- a/data/anaconda.conf
|
||||||
|
+++ b/data/anaconda.conf
|
||||||
|
@@ -308,9 +308,9 @@ can_change_users = False
|
||||||
|
# strict Require the minimum quality.
|
||||||
|
#
|
||||||
|
password_policies =
|
||||||
|
- root (quality 1, length 6)
|
||||||
|
- user (quality 1, length 6, empty)
|
||||||
|
- luks (quality 1, length 6)
|
||||||
|
+ root (quality 1, length 8, strict)
|
||||||
|
+ user (quality 1, length 8, empty, strict)
|
||||||
|
+ luks (quality 1, length 8, strict)
|
||||||
|
|
||||||
|
|
||||||
|
[License]
|
||||||
|
diff --git a/pyanaconda/input_checking.py b/pyanaconda/input_checking.py
|
||||||
|
index 4482b26..4bed6c1 100644
|
||||||
|
--- a/pyanaconda/input_checking.py
|
||||||
|
+++ b/pyanaconda/input_checking.py
|
||||||
|
@@ -421,6 +421,10 @@ class PasswordValidityCheck(InputCheck):
|
||||||
|
pw_score = 4
|
||||||
|
status_text = _(constants.SecretStatus.STRONG.value)
|
||||||
|
|
||||||
|
+ #disable set password without confirnation
|
||||||
|
+ if not error_message and not check_request.password_confirmation:
|
||||||
|
+ error_message = _(constants.SECRET_CONFIRM_ERROR_GUI[check_request.secret_type])
|
||||||
|
+
|
||||||
|
# the policy influences the overall success of the check
|
||||||
|
# - score 0 & strict == True -> success = False
|
||||||
|
# - score 0 & strict == False -> success = True
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
124
anaconda-33.19.sw.patch
Executable file
124
anaconda-33.19.sw.patch
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
diff -Nuar anaconda-33.19.org/pyanaconda/modules/storage/bootloader/factory.py anaconda-33.19.sw/pyanaconda/modules/storage/bootloader/factory.py
|
||||||
|
--- anaconda-33.19.org/pyanaconda/modules/storage/bootloader/factory.py 2022-09-07 14:50:46.860000000 +0800
|
||||||
|
+++ anaconda-33.19.sw/pyanaconda/modules/storage/bootloader/factory.py 2022-09-07 14:50:57.380000000 +0800
|
||||||
|
@@ -106,6 +106,10 @@
|
||||||
|
platform_class = platform.platform.__class__
|
||||||
|
|
||||||
|
# Get the type of the bootloader.
|
||||||
|
+ if platform_class is platform.Sw_64:
|
||||||
|
+ from pyanaconda.modules.storage.bootloader.grub2 import GRUB2
|
||||||
|
+ return GRUB2
|
||||||
|
+
|
||||||
|
if platform_class is platform.X86:
|
||||||
|
from pyanaconda.modules.storage.bootloader.grub2 import GRUB2
|
||||||
|
return GRUB2
|
||||||
|
diff -Nuar anaconda-33.19.org/pyanaconda/modules/storage/bootloader/grub2.py anaconda-33.19.sw/pyanaconda/modules/storage/bootloader/grub2.py
|
||||||
|
--- anaconda-33.19.org/pyanaconda/modules/storage/bootloader/grub2.py 2022-09-07 14:50:46.860000000 +0800
|
||||||
|
+++ anaconda-33.19.sw/pyanaconda/modules/storage/bootloader/grub2.py 2022-09-07 14:56:42.550000000 +0800
|
||||||
|
@@ -101,7 +101,7 @@
|
||||||
|
name = "GRUB2"
|
||||||
|
# grub2 is a virtual provides that's provided by grub2-pc, grub2-ppc64le,
|
||||||
|
# and all of the primary grub components that aren't grub2-efi-${EFIARCH}
|
||||||
|
- packages = ["grub2", "grub2-tools"]
|
||||||
|
+ packages = ["grub2-common", "grub2-tools"]
|
||||||
|
_config_file = "grub.cfg"
|
||||||
|
_config_dir = "grub2"
|
||||||
|
_passwd_file = "user.cfg"
|
||||||
|
@@ -453,16 +453,47 @@
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
- self.write_device_map()
|
||||||
|
- self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
- os.sync()
|
||||||
|
- self.install()
|
||||||
|
- os.sync()
|
||||||
|
- self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
+ if os.path.exists("/mnt/sysroot/boot/grub"):
|
||||||
|
+ FileName="/mnt/sysroot/boot/grub/grub.cfg"
|
||||||
|
+ f=open(FileName,"w+")
|
||||||
|
+ f.write("# SW_64 Grub default configurations\n")
|
||||||
|
+ f.write("set default=0\n")
|
||||||
|
+ f.write("set timeout=10\n")
|
||||||
|
+ f.write("\n")
|
||||||
|
+ f.write("set menu_color_normal=white/black\n")
|
||||||
|
+ f.write("set menu_color_highlight=light-red/black\n")
|
||||||
|
+ f.write("\n")
|
||||||
|
+ f.write("loadfont ${prefix}/fonts/unicode.pf2\n")
|
||||||
|
+ f.write("insmod efi_gop\n")
|
||||||
|
+ f.write("set lang=zh_CN\n")
|
||||||
|
+ f.write("set gfxmode=800x600\n")
|
||||||
|
+ f.write("set gfxplayload=auto\n")
|
||||||
|
+ f.write("terminal_output gfxterm\n")
|
||||||
|
+ f.write("background_color 64,0,64\n")
|
||||||
|
+ f.write("\n")
|
||||||
|
+ f.write("menuentry 'openEuler 22.03 LTS SP1' --class gnu-linux --class gnu --class os{\n")
|
||||||
|
+ f.write("echo \"Loading, please wait for a moment......\"\n")
|
||||||
|
+ f.write ("set boot=(${root})\n")
|
||||||
|
+ f.write("echo \"Loading boot\"\n")
|
||||||
|
+ f.write ("linux.boot ${boot}/initramfs-5.10.0-39.0.0.21.sw_64.img\n")
|
||||||
|
+ f.write("echo \"Loading vmlinuz\"\n")
|
||||||
|
+ f.write("linux.vmlinux ${boot}/vmlinuz-5.10.0-39.0.0.21.sw_64 root=/dev/mapper/openeuler-root rootdelay=60 net.ifnames=0 loglevel=0 vga=current rd.systemd.show_status=false rd.udev.log-priority=3 quiet splash video=sm750fb:1280x1024@60 cgroup.memory=nokmem notc\n")
|
||||||
|
+ f.write("echo \"Booting......\"\n")
|
||||||
|
+ f.write("boot\n")
|
||||||
|
+ f.write("}")
|
||||||
|
+ f.close()
|
||||||
|
+ else:
|
||||||
|
+ self.write_device_map()
|
||||||
|
+ self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
+ os.sync()
|
||||||
|
+ self.install()
|
||||||
|
+ os.sync()
|
||||||
|
+ self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
finally:
|
||||||
|
- self.write_config()
|
||||||
|
- os.sync()
|
||||||
|
- self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
+ pass
|
||||||
|
+ #self.write_config()
|
||||||
|
+ #os.sync()
|
||||||
|
+ #self.stage2_device.format.sync(root=conf.target.physical_root)
|
||||||
|
|
||||||
|
def check(self):
|
||||||
|
"""When installing to the mbr of a disk grub2 needs enough space
|
||||||
|
diff -Nuar anaconda-33.19.org/pyanaconda/modules/storage/platform.py anaconda-33.19.sw/pyanaconda/modules/storage/platform.py
|
||||||
|
--- anaconda-33.19.org/pyanaconda/modules/storage/platform.py 2022-09-07 14:50:46.850000000 +0800
|
||||||
|
+++ anaconda-33.19.sw/pyanaconda/modules/storage/platform.py 2022-09-07 14:50:57.380000000 +0800
|
||||||
|
@@ -116,6 +116,17 @@
|
||||||
|
selection fails."""
|
||||||
|
return self._boot_stage1_missing_error
|
||||||
|
|
||||||
|
+class Sw_64(Platform):
|
||||||
|
+ _boot_stage1_device_types = ["disk"]
|
||||||
|
+ _boot_mbr_description = N_("Master Boot Record")
|
||||||
|
+ _boot_descriptions = {"disk": _boot_mbr_description,
|
||||||
|
+ "partition": Platform._boot_partition_description,
|
||||||
|
+ "mdarray": Platform._boot_raid_description}
|
||||||
|
+
|
||||||
|
+ # XXX hpfs, if reported by blkid/udev, will end up with a type of None
|
||||||
|
+ _non_linux_format_types = ["vfat", "ntfs", "hpfs"]
|
||||||
|
+ _boot_stage1_missing_error = N_("You must include at least one MBR- or "
|
||||||
|
+ "GPT-formatted disk as an install target.")
|
||||||
|
|
||||||
|
class X86(Platform):
|
||||||
|
_boot_stage1_device_types = ["disk"]
|
||||||
|
@@ -281,6 +292,8 @@
|
||||||
|
raise SystemError("Unsupported PPC machine type: %s" % ppc_machine)
|
||||||
|
elif arch.is_s390():
|
||||||
|
return S390()
|
||||||
|
+ elif arch.is_sw_64():
|
||||||
|
+ return Sw_64()
|
||||||
|
elif arch.is_efi():
|
||||||
|
if arch.is_mactel():
|
||||||
|
return MacEFI()
|
||||||
|
diff -Nuar anaconda-33.19.org/tests/nosetests/pyanaconda_tests/module_bootloader_test.py anaconda-33.19.sw/tests/nosetests/pyanaconda_tests/module_bootloader_test.py
|
||||||
|
--- anaconda-33.19.org/tests/nosetests/pyanaconda_tests/module_bootloader_test.py 2022-09-07 14:50:46.610000000 +0800
|
||||||
|
+++ anaconda-33.19.sw/tests/nosetests/pyanaconda_tests/module_bootloader_test.py 2022-09-07 14:50:57.130000000 +0800
|
||||||
|
@@ -393,6 +393,7 @@
|
||||||
|
# Test known platforms.
|
||||||
|
boot_loader_by_platform = {
|
||||||
|
platform.X86: GRUB2,
|
||||||
|
+ platform.Sw_64: GRUB2,
|
||||||
|
platform.EFI: EFIGRUB,
|
||||||
|
platform.MacEFI: MacEFIGRUB,
|
||||||
|
platform.PPC: GRUB2,
|
||||||
BIN
anaconda-36.16.5.tar.bz2
Normal file
BIN
anaconda-36.16.5.tar.bz2
Normal file
Binary file not shown.
937
anaconda.spec
Normal file
937
anaconda.spec
Normal file
@ -0,0 +1,937 @@
|
|||||||
|
%define _empty_manifest_terminate_build 0
|
||||||
|
Name: anaconda
|
||||||
|
Version: 36.16.5
|
||||||
|
Release: 34
|
||||||
|
Summary: Graphical system installer
|
||||||
|
License: GPLv2+ and MIT
|
||||||
|
URL: http://fedoraproject.org/wiki/Anaconda
|
||||||
|
Source0: https://github.com/rhinstaller/%{name}/releases/download/%{name}-%{version}-1/%{name}-%{version}.tar.bz2
|
||||||
|
Source1: {os_name}.conf
|
||||||
|
Source2: euleros.conf
|
||||||
|
Source3: hce.conf
|
||||||
|
Source4: disable-disk-encryption.patch
|
||||||
|
Source5: nestos.conf
|
||||||
|
|
||||||
|
%ifarch sw_64
|
||||||
|
Patch6001: anaconda-33.19.sw.patch
|
||||||
|
%endif
|
||||||
|
|
||||||
|
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
|
||||||
|
Patch9007: fix-hostname-info.patch
|
||||||
|
Patch9008: hide-help-button.patch
|
||||||
|
Patch9009: modify-interface-is-extended-in-Chinese-mode.patch
|
||||||
|
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
|
||||||
|
|
||||||
|
Patch10000: 0001-add-loongarch-support-for-anaconda.patch
|
||||||
|
|
||||||
|
|
||||||
|
%define dasbusver 1.3
|
||||||
|
%define dbusver 1.2.3
|
||||||
|
%define dnfver 3.6.0
|
||||||
|
%define dracutver 034-7
|
||||||
|
%define gettextver 0.19.8
|
||||||
|
%define gtk3ver 3.22.17
|
||||||
|
%define isomd5sumver 1.0.10
|
||||||
|
%define langtablever 0.0.54
|
||||||
|
%define libarchivever 3.0.4
|
||||||
|
%define libblockdevver 2.1
|
||||||
|
%define libxklavierver 5.4
|
||||||
|
%define mehver 0.23-1
|
||||||
|
%define nmver 1.0
|
||||||
|
%define pykickstartver 3.32-1
|
||||||
|
%define pypartedver 2.5-2
|
||||||
|
%define pythonblivetver 1:3.4.0-1
|
||||||
|
%define rpmver 4.15.0
|
||||||
|
%define simplelinever 1.1-1
|
||||||
|
%define utillinuxver 2.15.1
|
||||||
|
BuildRequires: python3-pygments
|
||||||
|
|
||||||
|
BuildRequires: audit-libs-devel libtool gettext-devel >= %{gettextver} gtk3-devel >= %{gtk3ver}
|
||||||
|
BuildRequires: gtk-doc gtk3-devel-docs >= %{gtk3ver} glib2-doc gobject-introspection-devel
|
||||||
|
BuildRequires: glade-devel libgnomekbd-devel libxklavier-devel >= %{libxklavierver} pango-devel
|
||||||
|
BuildRequires: make
|
||||||
|
BuildRequires: python3-kickstart >= %{pykickstartver} python3-devel systemd
|
||||||
|
BuildRequires: rpm-devel >= %{rpmver} libarchive-devel >= %{libarchivever} gdk-pixbuf2-devel
|
||||||
|
BuildRequires: libxml2-devel
|
||||||
|
BuildRequires: gsettings-desktop-schemas metacity
|
||||||
|
|
||||||
|
Requires: anaconda-core = %{version}-%{release}
|
||||||
|
Requires: anaconda-tui = %{version}-%{release}
|
||||||
|
Requires: libblockdev-plugins-all >= %{libblockdevver} realmd isomd5sum >= %{isomd5sumver}
|
||||||
|
Requires: kexec-tools createrepo_c tmux gdb rsync python3-meh-gui >= %{mehver}
|
||||||
|
Requires: adwaita-icon-theme python3-kickstart
|
||||||
|
Requires: tigervnc-server-minimal libxklavier >= %{libxklavierver} libgnomekbd
|
||||||
|
Requires: nm-connection-editor keybinder3 system-logos
|
||||||
|
Requires: python3
|
||||||
|
BuildRequires: desktop-file-utils
|
||||||
|
Requires: zenity
|
||||||
|
Requires: xfsprogs dosfstools e2fsprogs
|
||||||
|
|
||||||
|
Provides: anaconda-gui = %{version}-%{release}
|
||||||
|
Obsoletes: anaconda-gui < %{version}-%{release}
|
||||||
|
|
||||||
|
Provides: anaconda-widgets = %{version}-%{release}
|
||||||
|
Obsoletes: anaconda-widgets < %{version}-%{release}
|
||||||
|
|
||||||
|
Provides: anaconda-install-env-deps = %{version}-%{release}
|
||||||
|
Obsoletes: anaconda-install-env-deps < %{version}-%{release}
|
||||||
|
|
||||||
|
%description
|
||||||
|
The anaconda package is a metapackage for the Anaconda installer.
|
||||||
|
|
||||||
|
%package core
|
||||||
|
Summary: Core of the Anaconda installer
|
||||||
|
Requires: python3-libs python3-dnf >= %{dnfver} python3-blivet >= %{pythonblivetver}
|
||||||
|
Requires: python3-blockdev >= %{libblockdevver} rpm-python3 >= %{rpmver} python3-productmd
|
||||||
|
Requires: libreport-anaconda >= 2.0.21-1 libselinux-python3 python3-meh >= %{mehver}
|
||||||
|
Requires: python3-pyparted >= %{pypartedver} python3-requests python3-requests-file
|
||||||
|
Requires: python3-requests-ftp python3-kickstart >= %{pykickstartver}
|
||||||
|
Requires: python3-langtable >= %{langtablever} util-linux >= %{utillinuxver} python3-gobject-base
|
||||||
|
Requires: python3-dbus python3-pwquality python3-systemd python3-dasbus >= %{dasbusver}
|
||||||
|
Requires: python3-packaging
|
||||||
|
Requires: cracklib-dicts python3-pytz teamd NetworkManager >= %{nmver} NetworkManager-libnm >= %{nmver}
|
||||||
|
Requires: NetworkManager-team kbd chrony systemd python3-pid
|
||||||
|
Requires: python3-ordered-set >= 2.0.0 glibc-langpack-en dbus-daemon
|
||||||
|
Requires: systemd-resolved
|
||||||
|
# Required by the systemd service anaconda-fips.
|
||||||
|
Requires: crypto-policies
|
||||||
|
Requires: /usr/bin/update-crypto-policies
|
||||||
|
# required because of the rescue mode and VNC question
|
||||||
|
Requires: anaconda-tui = %{version}-%{release}
|
||||||
|
Provides: anaconda-images = %{version}-%{release}
|
||||||
|
Obsoletes: anaconda-images <= 10
|
||||||
|
Provides: anaconda-runtime = %{version}-%{release}
|
||||||
|
Obsoletes: anaconda-runtime < %{version}-%{release}
|
||||||
|
Obsoletes: booty <= 0.107-1
|
||||||
|
|
||||||
|
# Ensure it's not possible for a version of grubby to be installed
|
||||||
|
# that doesn't work with btrfs subvolumes correctly...
|
||||||
|
Conflicts: grubby < 8.40-10
|
||||||
|
Requires: usermode
|
||||||
|
|
||||||
|
%description core
|
||||||
|
The anaconda-core package contains the program which was used to install your
|
||||||
|
system.
|
||||||
|
|
||||||
|
%package tui
|
||||||
|
Summary: Textual user interface for the Anaconda installer
|
||||||
|
Requires: anaconda-core = %{version}-%{release} python3-simpleline >= %{simplelinever}
|
||||||
|
|
||||||
|
%description tui
|
||||||
|
This package contains textual user interface for the Anaconda installer.
|
||||||
|
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files for anaconda-widgets
|
||||||
|
Requires: glade
|
||||||
|
Requires: %{name}-widgets = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
This package contains libraries and header files needed for writing the anaconda
|
||||||
|
installer. It also contains Python and Glade support files, as well as
|
||||||
|
documentation for working with this library.
|
||||||
|
|
||||||
|
%package dracut
|
||||||
|
Summary: The anaconda dracut module
|
||||||
|
Requires: dracut >= %{dracutver}
|
||||||
|
Requires: dracut-network
|
||||||
|
Requires: dracut-live
|
||||||
|
Requires: xz
|
||||||
|
Requires: python3-kickstart
|
||||||
|
|
||||||
|
%description dracut
|
||||||
|
The 'anaconda' dracut module handles installer-specific boot tasks and
|
||||||
|
options. This includes driver disks, kickstarts, and finding the anaconda
|
||||||
|
runtime on NFS/HTTP/FTP servers or local disks.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%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
|
||||||
|
%else
|
||||||
|
%configure ANACONDA_RELEASE=%{release}
|
||||||
|
%endif
|
||||||
|
%make_build
|
||||||
|
|
||||||
|
%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}
|
||||||
|
|
||||||
|
# Create an empty directory for addons
|
||||||
|
install -d -m 0755 %{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} || :
|
||||||
|
|
||||||
|
%ldconfig_scriptlets
|
||||||
|
|
||||||
|
%ifarch %{ix86} x86_64
|
||||||
|
%post
|
||||||
|
update-desktop-database &> /dev/null || :
|
||||||
|
|
||||||
|
%postun
|
||||||
|
update-desktop-database &> /dev/null || :
|
||||||
|
%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)
|
||||||
|
%license COPYING
|
||||||
|
%{_sbindir}/anaconda
|
||||||
|
%{_sbindir}/handle-sshpw
|
||||||
|
%{_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}/*
|
||||||
|
%{_datadir}/anaconda
|
||||||
|
%{_datadir}/locale/*
|
||||||
|
%{python3_sitearch}/pyanaconda
|
||||||
|
%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
|
||||||
|
%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}/*
|
||||||
|
%dir %{_sysconfdir}/%{name}/conf.d
|
||||||
|
%config %{_sysconfdir}/%{name}/conf.d/*
|
||||||
|
%dir %{_sysconfdir}/%{name}/profile.d
|
||||||
|
%config %{_sysconfdir}/%{name}/profile.d/*
|
||||||
|
%{_sbindir}/liveinst
|
||||||
|
%{_bindir}/liveinst
|
||||||
|
%{_libexecdir}/liveinst-setup.sh
|
||||||
|
%{_datadir}/applications/*.desktop
|
||||||
|
%{_sysconfdir}/xdg/autostart/*.desktop
|
||||||
|
%config(noreplace) %{_sysconfdir}/pam.d/*
|
||||||
|
%config(noreplace) %{_sysconfdir}/security/console.apps/*
|
||||||
|
|
||||||
|
%files tui
|
||||||
|
%{python3_sitearch}/pyanaconda/rescue.py
|
||||||
|
%{python3_sitearch}/pyanaconda/__pycache__/rescue.*
|
||||||
|
%{python3_sitearch}/pyanaconda/ui/tui/*
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_libdir}/libAnacondaWidgets.so
|
||||||
|
%{_libdir}/glade/modules/libAnacondaWidgets.so
|
||||||
|
%{_includedir}/*
|
||||||
|
%{_datadir}/glade/catalogs/AnacondaWidgets.xml
|
||||||
|
%{_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
|
||||||
|
* Thu May 23 2024 yueyuankun <yueyuankun@kylinos.cn> - 36.16.5-34
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix patch10000 cannot be applied on loongarch64
|
||||||
|
|
||||||
|
* Thu May 09 2024 jchzhou <zhoujiacheng@iscas.ac.cn> - 36.16.5-33
|
||||||
|
- Type:feature
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: backport a riscv64 enablement patch from upstream
|
||||||
|
|
||||||
|
* Mon Apr 22 2024 Huang Yang <huangyang@loongson.cn> - 36.16.5-32
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix patch9025 error on loongarch64
|
||||||
|
|
||||||
|
* Sat Apr 20 2024 sunhai <sunhai10@huawei.com> - 36.16.5-31
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: config adjust
|
||||||
|
revise hostname chinese tip
|
||||||
|
|
||||||
|
* Tue Apr 09 2024 sunhai <sunhai10@huawei.com> - 36.16.5-30
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix custom storage chinese tip
|
||||||
|
|
||||||
|
* Tue Apr 09 2024 sunhai <sunhai10@huawei.com> - 36.16.5-29
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix lost ntfsprogs
|
||||||
|
fix lost nvme-cli
|
||||||
|
fix BuildRequires
|
||||||
|
|
||||||
|
* Thu Feb 29 2024 sunhai <sunhai10@huawei.com> - 36.16.5-28
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: add fs requires
|
||||||
|
|
||||||
|
* Wed Feb 28 2024 sunhai <sunhai10@huawei.com> - 36.16.5-27
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: import new BlockDev
|
||||||
|
|
||||||
|
* Sat Dec 23 2023 sunhai <sunhai10@huawei.com> - 36.16.5-26
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: revert "Set default entry to the BLS id instead of the entry index"
|
||||||
|
|
||||||
|
* Sat Sep 23 2023 wangyueliang <wangyueliang@kylinos.cn> - 36.16.5-25
|
||||||
|
- Type:feature
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: add support for nestos
|
||||||
|
|
||||||
|
* Thu Sep 07 2023 sunhai <sunhai10@huawei.com> - 36.16.5-24
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: bugfix more dnf grouplist info
|
||||||
|
|
||||||
|
* Thu Aug 31 2023 sunhai <sunhai10@huawei.com> - 36.16.5-23
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: bugfix change root and storage interface shows
|
||||||
|
|
||||||
|
* Wed Aug 30 2023 sunhai <sunhai10@huawei.com> - 36.16.5-22
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: Fix the systemd generator for systemd 253
|
||||||
|
|
||||||
|
* Mon Aug 21 2023 sunhai <sunhai10@huawei.com> - 36.16.5-21
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: Don't attempt to add frozen python modules to initramfs
|
||||||
|
|
||||||
|
* Mon Jul 10 2023 sunhai <sunhai10@huawei.com> - 36.16.5-20
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: keep source code consistency
|
||||||
|
|
||||||
|
* Mon Jul 10 2023 sunhai <sunhai10@huawei.com> - 36.16.5-19
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: change the startup mode of do_transaction sub proces
|
||||||
|
|
||||||
|
* Fri Jun 09 2023 sunhai <sunhai10@huawei.com> - 36.16.5-18
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: set grub configuration file is as original
|
||||||
|
|
||||||
|
* Fri Jun 09 2023 sunhai <sunhai10@huawei.com> - 36.16.5-17
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: Ignore SIGINT in D Bus launcher and x11 too
|
||||||
|
network use separate main conext for NM client in threads
|
||||||
|
dracut handle compressed kernel modules
|
||||||
|
Sort RPM versions via rpm.labelCompare
|
||||||
|
|
||||||
|
* Sat Jun 03 2023 sunhai <sunhai10@huawei.com> - 36.16.5-16
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix gui hostname warn info
|
||||||
|
|
||||||
|
* Tue May 16 2023 Chenxi Mao <chenxi.mao@suse.com> - 36.16.5-15
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: Support build with clang.
|
||||||
|
|
||||||
|
* Fri Feb 24 2023 sunhai <sunhai10@huawei.com> - 36.16.5-14
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: backport password tooltip text adapt language
|
||||||
|
close disk encryption
|
||||||
|
|
||||||
|
* Tue Dec 27 2022 Chenxi Mao <chenxi.mao@suse.com> - 36.16.5-13
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: Change patch sequence.
|
||||||
|
|
||||||
|
* Mon Dec 26 2022 fengtao <fengtao40@huawei.com> - 36.16.5-12
|
||||||
|
- Type:feature
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: add loongarch and sw support patch in SP1
|
||||||
|
|
||||||
|
* Tue Dec 20 2022 Qingqing Li <liqingqing3@huawei.com> - 36.16.5-11
|
||||||
|
- Type:feature
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:cgroup files is a additional enhanced cgroup feature, which will
|
||||||
|
limit cgroup opened files, add cgroup_disable=files to
|
||||||
|
default cmdline to disable this feature to keep cgroup's default behavior.
|
||||||
|
|
||||||
|
* Thu Dec 15 2022 sunhai <sunhai10@huawei.com> - 36.16.5-10
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix conf of storage
|
||||||
|
|
||||||
|
* Wed Dec 14 2022 sunhai <sunhai10@huawei.com> - 36.16.5-9
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:adapt active connection without interface name
|
||||||
|
|
||||||
|
* Sat Dec 10 2022 sunhai <sunhai10@huawei.com> - 36.16.5-8
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:ignore detect enable smt
|
||||||
|
open swap in storage
|
||||||
|
|
||||||
|
* Tue Nov 29 2022 sunhai <sunhai10@huawei.com> - 36.16.5-7
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:change product name not with upper
|
||||||
|
add SM3 with tui
|
||||||
|
|
||||||
|
* Thu Nov 24 2022 sunhai <sunhai10@huawei.com> - 36.16.5-6
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add logo with install
|
||||||
|
the kickstart version change to patch
|
||||||
|
|
||||||
|
* Wed Nov 23 2022 sunhai <sunhai10@huawei.com> - 36.16.5-5
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:pxe kickstart version with local pykickstart
|
||||||
|
and with build save patch by source4
|
||||||
|
|
||||||
|
* Mon Nov 21 2022 sunhai <sunhai10@huawei.com> - 36.16.5-4
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:open disk encryption on openEuler
|
||||||
|
|
||||||
|
* Tue Nov 15 2022 sunhai <sunhai10@huawei.com> - 36.16.5-3
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: fix install with tui and gui
|
||||||
|
|
||||||
|
* Fri Nov 11 2022 sunhai <sunhai10@huawei.com> - 36.16.5-2
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: use kickstart version with local pykickstart
|
||||||
|
|
||||||
|
* Tue Nov 08 2022 sunhai <sunhai10@huawei.com> - 36.16.5-1
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:update anaconda to 36.16.5
|
||||||
|
|
||||||
|
* Mon Mar 28 2022 Wenlong Zhang <zhangwenlong@loongson.cn> - 33.19-49
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC: add loongarch support for anaconda
|
||||||
|
|
||||||
|
* Tue Oct 18 2022 wuzx<wuzx1226@qq.com> - 33.19-48
|
||||||
|
- Type:feature
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Add sw64 architecture
|
||||||
|
|
||||||
|
* Wed Sep 21 2022 sunhai <sunhai10@huawei.com> - 33.19-47
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:solve the problem that the circular loading progress bar does not rotate
|
||||||
|
|
||||||
|
* Tue Aug 23 2022 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-46
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix missing group information in dnf
|
||||||
|
|
||||||
|
* Fri Aug 5 2022 wanglu <wanglu210@huawei.com> - 33.19-45
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix a mistake about revert "Set default entry to the BLS id instead of the entry index"
|
||||||
|
|
||||||
|
* Thu Aug 4 2022 wanglu <wanglu210@huawei.com> - 33.19-44
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:revert "Set default entry to the BLS id instead of the entry index"
|
||||||
|
|
||||||
|
* Fri Apr 8 2022 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-43
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:change the grub2 user.cfg permission from 0700 to 0600
|
||||||
|
|
||||||
|
* Thu Apr 7 2022 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-42
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add support for configuration of additional boot arguments
|
||||||
|
change the startup mode of do_transaction sub process to spawn
|
||||||
|
|
||||||
|
* Sat Mar 05 2022 gaihuiying <eaglegai@163.com> - 33.19-41
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:separate anaconda-dracut
|
||||||
|
|
||||||
|
* Mon Feb 21 2022 gaihuiying <eaglegai@163.com> - 33.19-40
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove yelp and foce-utils from requires
|
||||||
|
|
||||||
|
* Sun Jan 30 2022 yanan <yanan@huawei.com> - 33.19-39
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove authconfig support
|
||||||
|
|
||||||
|
* Thu Jan 27 2022 liufushou <liufushou@live.cn> - 33.19-38
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:let networking up after reboot
|
||||||
|
|
||||||
|
* Wed Jan 26 2022 zhujunhao <zhujunhao11@huawei.com> - 33.19-37
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:support use sm3 crypt user password
|
||||||
|
|
||||||
|
* Sun Jan 23 2022 liuxin <liuxin350@huawei.com> - 33.19-36
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Cancel planned manual update of system time on turning ntp on
|
||||||
|
|
||||||
|
* Sat Jan 22 2022 fengtao <fengtao40@huawei.com> - 33.19-35
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:revert "fix deadlock when forking in multithread"
|
||||||
|
|
||||||
|
* Thu Jan 13 2022 gaihuiying <gaihuiying1@huawei.com> - 33.19-34
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove flatpak support in source code
|
||||||
|
|
||||||
|
* Tue Jan 11 2022 gaihuiying <gaihuiying1@huawei.com> - 33.19-33
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove anaconda-user-help dependency
|
||||||
|
|
||||||
|
* Fri Dec 31 2021 xihaochen <xihaochen@huawei.com> - 33.19-32
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove flatpak dependency
|
||||||
|
|
||||||
|
* Fri Dec 31 2021 xihaochen <xihaochen@huawei.com> - 33.19-31
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove python3-nose dependency
|
||||||
|
|
||||||
|
* Fri Oct 29 2021 zhujunhao <zhujunhao8@huawei.com> - 33.19-30
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix boot options generated by dracut module
|
||||||
|
|
||||||
|
* Sat Aug 28 2021 yanan <yanan@huawei.com> - 33.19-29
|
||||||
|
- Type:bugfix
|
||||||
|
- CVE:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix deadlock when forking in multithread
|
||||||
|
|
||||||
|
* Mon Aug 23 2021 wangce <wangce@uniontech.com> - 33.19-28
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Change sidebar background size
|
||||||
|
|
||||||
|
* Sat Aug 7 2021 zhujunhao <zhujunhao8@huawei.com> - 33.19-27
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:delete date zone map
|
||||||
|
|
||||||
|
* Thu Jun 24 2021 youyifeng <ctyuncommiter05@chinatelecom.cn> - 33.19-26
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:change inst.repo default value
|
||||||
|
|
||||||
|
* Mon Jun 21 2021 gaihuiying <gaihuiying1@huawei.com> - 33.19-25
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:change topbar background size
|
||||||
|
|
||||||
|
* Mon Jun 21 2021 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-24
|
||||||
|
- Type:requirement
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:replace openEuler by %{_vendor}
|
||||||
|
|
||||||
|
* Mon Jun 21 2021 liuxin <liuxin264@huawei.com> - 33.19-23
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Fix section headers in docstrings
|
||||||
|
|
||||||
|
* Wed May 19 2021 liuxin <liuxin264@huawei.com> - 33.19-22
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Fix issue when ns_info cannot be retrieved for NVDimm namespace
|
||||||
|
|
||||||
|
* Sat May 8 2021 fengtao <fengtao40@huawei.com> - 33.19-21
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix xorg timeout and throw exception
|
||||||
|
|
||||||
|
* Thu Apr 29 2021 zhangrui <zhangrui182@huawei.com> - 33.19-20
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:do not mount dbus sources
|
||||||
|
|
||||||
|
* Mon Mar 29 2021 xuxiaolong <xuxiaolon23@huawei.com> - 33.19-19
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:sync 50 bugfix commit from github
|
||||||
|
|
||||||
|
* Sat Mar 27 2021 zhangrui <zhangrui182@huawei.com> - 33.19-18
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:reset the state of the custom partitioning spoke
|
||||||
|
|
||||||
|
* Mon Jan 25 2021 liuxin <liuxin264@huawei.com> - 33.19-17
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Propagate a lazy proxy o the storage model
|
||||||
|
|
||||||
|
* Thu Jan 14 2021 yuboyun <yuboyun@huawei.com> - 33.19-16
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:set up LD_PRELOAD for the Storage and Services module
|
||||||
|
|
||||||
|
* Thu Dec 10 2020 zhouyihang <zhouyihang3@huawei.com> - 33.19-15
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Change length limit of hostname from 255 to 64
|
||||||
|
|
||||||
|
* Fri Dec 04 2020 gaihuiying <gaihuiying1@huawei.com> - 33.19-14
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:improve ntp servers to fix unkown error
|
||||||
|
|
||||||
|
* Sat Nov 28 2020 lunankun <lunankun@huawei.com> - 33.19-13
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix issue of iscsi_tcp and sha256 not found
|
||||||
|
|
||||||
|
* Mon Oct 26 2020 fengtao <fengtao40@huawei.com> - 33.19-12
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:bugfix for partitioning when sda exists a ext4 filesystem
|
||||||
|
|
||||||
|
* Sat Sep 26 2020 fengtao <fengtao40@huawei.com> - 33.19-11
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add dnf transactions timeout
|
||||||
|
|
||||||
|
* Thu Sep 17 2020 zhuqingfu <zhuqingfu1@huawei.com> - 33.19-10
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:do not require treeinfo
|
||||||
|
|
||||||
|
* Wed Sep 16 2020 xiaqirong <xiaqirong1@huawei.com> - 33.19-9
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:disable disk encryption
|
||||||
|
|
||||||
|
* Fri Sep 11 2020 fengtao <fengtao40@huawei.com> - 33.19-8
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add boot args for smmu and video
|
||||||
|
|
||||||
|
* Thu Sep 10 2020 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-7
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:revert add-passwd-check-policy.patch and bugfix-fix-encrypt-weak-passphrase-save.patch
|
||||||
|
fix password policy
|
||||||
|
|
||||||
|
* Fri Sep 4 2020 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-6
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix password policy
|
||||||
|
|
||||||
|
* Mon Aug 31 2020 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-5
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix kdump patch err
|
||||||
|
|
||||||
|
* Fri Aug 28 2020 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-4
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:remove dependency on blivet-gui-runtime
|
||||||
|
|
||||||
|
* Fri Aug 7 2020 fengtao <fengtao40@huawei.com> - 33.19-3
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix stage2 as default sources
|
||||||
|
|
||||||
|
* Tue Jul 14 2020 zhangqiumiao <zhangqiumiao1@huawei.com> - 33.19-2
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add kdump parameter into kernel cmdline
|
||||||
|
|
||||||
|
* Fri Jun 19 2020 fengtao <fengtao40@huawei.com> - 33.19-1
|
||||||
|
- update version to 33.19
|
||||||
|
|
||||||
|
* Mon Mar 9 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-28
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add boot options for dummy
|
||||||
|
|
||||||
|
* Wed Feb 12 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-27
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:Remove initThreading method from pyanaconda.threading
|
||||||
|
|
||||||
|
* Thu Feb 06 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-26
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify network hostname dot error
|
||||||
|
|
||||||
|
* Thu Jan 16 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-25
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify default timezone and zh_CN.po
|
||||||
|
|
||||||
|
* Thu Jan 16 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-24
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix setup fail in decode
|
||||||
|
|
||||||
|
* Thu Jan 16 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-23
|
||||||
|
- Type:enhancement
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify openeuler in welcome to lowercase
|
||||||
|
|
||||||
|
* Thu Jan 16 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-22
|
||||||
|
- optimization the patch
|
||||||
|
|
||||||
|
* Wed Jan 15 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-21
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add boot options for kdump.
|
||||||
|
|
||||||
|
* Sat Jan 11 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-20
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add boot options for raid 3408
|
||||||
|
|
||||||
|
* Wed Jan 8 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-19
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify arguments parsing
|
||||||
|
|
||||||
|
* Wed Jan 1 2020 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-18
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:bugfix for encrypting partition
|
||||||
|
|
||||||
|
* Mon Dec 30 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-17
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:bugfix in setup
|
||||||
|
|
||||||
|
* Mon Dec 30 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-16
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:bugfix in network spokes when add virtual devices
|
||||||
|
|
||||||
|
|
||||||
|
* Mon Dec 30 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-15
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:fix bug
|
||||||
|
|
||||||
|
* Mon Dec 23 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-14
|
||||||
|
- Type:bugfix
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify the patches
|
||||||
|
|
||||||
|
* Mon Dec 16 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-13
|
||||||
|
- Type:bugfix
|
||||||
|
- Id:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:modify interface is extended in Chinese mode
|
||||||
|
|
||||||
|
* Thu Dec 12 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-12
|
||||||
|
- Type:bugfix
|
||||||
|
- Id:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add quiet cmdline args for x86
|
||||||
|
|
||||||
|
* Tue Oct 22 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-11
|
||||||
|
- Type:bugfix
|
||||||
|
- Id:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add dracut-live packages as requires
|
||||||
|
|
||||||
|
* Mon Oct 21 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-10
|
||||||
|
- Type:bugfix
|
||||||
|
- Id:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DESC:add anaconda-core and anaconda-tui package
|
||||||
|
|
||||||
|
* Sun Oct 13 2019 openEuler Buildteam <buildteam@openeuler.org> - 29.24.7-9
|
||||||
|
- Package init
|
||||||
4
anaconda.yaml
Normal file
4
anaconda.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
version_control: github
|
||||||
|
src_repo: rhinstaller/anaconda
|
||||||
|
tag_prefix: anaconda-
|
||||||
|
seperator: .
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
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] 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
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
From 2cd57fee4d66ab8df06afe089da80a5e20168f25 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Adam Williamson <awilliam@redhat.com>
|
||||||
|
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 <awilliam@redhat.com>
|
||||||
|
|
||||||
|
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
|
||||||
76
backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch
Normal file
76
backport-Ignore-SIGINT-in-D-Bus-launcher-and-x11-too.patch
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
From d8060d01a01e3d5b187ae4388f10b0d0c2c0c4f3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: iasunsea <iasunsea@sina.com>
|
||||||
|
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 <jkonecny@redhat.com>
|
||||||
|
#
|
||||||
|
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
|
||||||
@ -0,0 +1,109 @@
|
|||||||
|
From 1742188518c9af7e3cd060a26f3a3b1e4cb61e91 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz>
|
||||||
|
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
|
||||||
113
backport-a-riscv64-enablement-patch-from-upstream.patch
Normal file
113
backport-a-riscv64-enablement-patch-from-upstream.patch
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
From: U2FsdGVkX1 <U2FsdGVkX1@gmail.com>
|
||||||
|
Signed-off-by: Songsong Zhang <U2FsdGVkX1@gmail.com>
|
||||||
|
Reviewed-by: Wei Fu <wefu@redhat.com>
|
||||||
|
Subject: [PATCH] Backport a riscv64 enablement patch from upstream
|
||||||
|
|
||||||
|
Signed-off-by: jchzhou <zhoujiacheng@iscas.ac.cn>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
||||||
47
backport-dracut-handle-compressed-kernel-modules.patch
Normal file
47
backport-dracut-handle-compressed-kernel-modules.patch
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
From c4a388d3956088c96631b72f0631db2a380127b0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
|
||||||
|
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
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
From 76d232cbf406416103d2cb38ab0141649f5440ee 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] 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
|
||||||
@ -0,0 +1,824 @@
|
|||||||
|
From 3972b5dadcadd355d2ff25eae601bc35c336c45a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Radek Vykydal <rvykydal@redhat.com>
|
||||||
|
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 <t.feng94 at foxmail.com> who deserves
|
||||||
|
the biggest credit, and upated with suggestions by poncovka <vponcova at
|
||||||
|
redhat.com>
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
<snip>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
</snip>
|
||||||
|
|
||||||
|
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
|
||||||
26
bugfix-GUI-nfs-unknown-error.patch
Normal file
26
bugfix-GUI-nfs-unknown-error.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From 7af95c3ee0fe3f0c2a5ec6fb05673f10c19441f9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Thu, 18 Jun 2020 22:48:03 +0800
|
||||||
|
Subject: [PATCH] bugfix GUI nfs unknown error
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/ui/gui/spokes/installation_source.py | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/installation_source.py b/pyanaconda/ui/gui/spokes/installation_source.py
|
||||||
|
index 396cad6..16e81b4 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/installation_source.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/installation_source.py
|
||||||
|
@@ -1141,6 +1141,9 @@ class SourceSpoke(NormalSpoke, GUISpokeInputCheckHandler, SourceSwitchHandler):
|
||||||
|
else:
|
||||||
|
return _("Remote directory is required")
|
||||||
|
|
||||||
|
+ if ":" not in url_string or len(url_string.split(":")) != 2:
|
||||||
|
+ return _("Server must be specified as SERVER:/PATH")
|
||||||
|
+
|
||||||
|
return InputCheck.CHECK_OK
|
||||||
|
|
||||||
|
def _check_url_entry(self, inputcheck):
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
From ccc28e983cd2c1f1f02fd00b9b1659fb572bac1b Mon Sep 17 00:00:00 2001
|
||||||
|
From: yueyuankun <yueyuankun@kylinos.cn>
|
||||||
|
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
|
||||||
|
|
||||||
26
bugfix-adapt-active-connection-without-interface-name.patch
Normal file
26
bugfix-adapt-active-connection-without-interface-name.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From ade550fb89b10cf218ce96541e1c540a2a8a7ea1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunha10@huawei.com>
|
||||||
|
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
|
||||||
|
|
||||||
173
bugfix-add-SM3-with-tui.patch
Normal file
173
bugfix-add-SM3-with-tui.patch
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
From 1a11874c57156e576620dd396b4357ec9bab2cc4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Tue, 29 Nov 2022 09:34:09 +0800
|
||||||
|
Subject: [PATCH] add SM3 with tui
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/ui/tui/spokes/root_password.py | 81 ++++++++++++++++++++---
|
||||||
|
pyanaconda/ui/tui/tuiobject.py | 7 +-
|
||||||
|
2 files changed, 77 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/ui/tui/spokes/root_password.py b/pyanaconda/ui/tui/spokes/root_password.py
|
||||||
|
index 3c5ba16..dfaca4e 100644
|
||||||
|
--- a/pyanaconda/ui/tui/spokes/root_password.py
|
||||||
|
+++ b/pyanaconda/ui/tui/spokes/root_password.py
|
||||||
|
@@ -26,7 +26,11 @@ from pyanaconda.core.i18n import N_, _
|
||||||
|
from pyanaconda.modules.common.constants.services import USERS
|
||||||
|
from pyanaconda.core.constants import PASSWORD_POLICY_ROOT
|
||||||
|
|
||||||
|
-from simpleline.render.widgets import TextWidget
|
||||||
|
+from simpleline.render.containers import ListColumnContainer
|
||||||
|
+from simpleline.render.prompt import Prompt
|
||||||
|
+from simpleline.render.screen import InputState
|
||||||
|
+from simpleline.render.screen_handler import ScreenHandler
|
||||||
|
+from simpleline.render.widgets import TextWidget, CheckboxWidget
|
||||||
|
|
||||||
|
|
||||||
|
class PasswordSpoke(FirstbootSpokeMixIn, NormalTUISpoke):
|
||||||
|
@@ -50,20 +54,18 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalTUISpoke):
|
||||||
|
return FirstbootSpokeMixIn.should_run(environment, data)
|
||||||
|
|
||||||
|
def __init__(self, data, storage, payload):
|
||||||
|
- NormalTUISpoke.__init__(self, data, storage, payload)
|
||||||
|
- self.initialize_start()
|
||||||
|
+ super().__init__(data, storage, payload)
|
||||||
|
self.title = N_("Root password")
|
||||||
|
- self.input_required = False
|
||||||
|
-
|
||||||
|
- self._password = None
|
||||||
|
-
|
||||||
|
self._users_module = USERS.get_proxy()
|
||||||
|
- self.initialize_done()
|
||||||
|
+ self._sm3_config = False
|
||||||
|
+
|
||||||
|
+ def _set_sm3_config(self, args):
|
||||||
|
+ self._sm3_config = not self._sm3_config
|
||||||
|
|
||||||
|
@property
|
||||||
|
def completed(self):
|
||||||
|
return self._users_module.IsRootPasswordSet
|
||||||
|
-
|
||||||
|
+
|
||||||
|
@property
|
||||||
|
def showable(self):
|
||||||
|
return can_modify_root_configuration(self._users_module)
|
||||||
|
@@ -77,6 +79,59 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalTUISpoke):
|
||||||
|
def status(self):
|
||||||
|
return get_root_configuration_status(self._users_module)
|
||||||
|
|
||||||
|
+ def initialize(self):
|
||||||
|
+ self.initialize_start()
|
||||||
|
+ NormalTUISpoke.initialize(self)
|
||||||
|
+ self.initialize_done()
|
||||||
|
+
|
||||||
|
+ def refresh(self, args=None):
|
||||||
|
+ """ Refresh screen. """
|
||||||
|
+ NormalTUISpoke.refresh(self, args)
|
||||||
|
+
|
||||||
|
+ self._container = ListColumnContainer(1)
|
||||||
|
+
|
||||||
|
+ msg = _("SM3 encrypt")
|
||||||
|
+ sm3_check = CheckboxWidget(title=msg, completed=self._sm3_config)
|
||||||
|
+ self._container.add(sm3_check, self._set_sm3_config)
|
||||||
|
+
|
||||||
|
+ self.window.add_with_separator(self._container)
|
||||||
|
+
|
||||||
|
+ def input(self, args, key):
|
||||||
|
+ """Handle the user input."""
|
||||||
|
+ if self._container.process_user_input(key):
|
||||||
|
+ return InputState.PROCESSED_AND_REDRAW
|
||||||
|
+
|
||||||
|
+ if key.lower() == Prompt.CONTINUE:
|
||||||
|
+ spoke = RootPasswordSpoke(
|
||||||
|
+ self.data,
|
||||||
|
+ self.storage,
|
||||||
|
+ self.payload,
|
||||||
|
+ self._sm3_config,
|
||||||
|
+ )
|
||||||
|
+ ScreenHandler.push_screen_modal(spoke)
|
||||||
|
+ return InputState.PROCESSED_AND_CLOSE
|
||||||
|
+
|
||||||
|
+ return super().input(args, key)
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class RootPasswordSpoke(NormalTUISpoke):
|
||||||
|
+ """
|
||||||
|
+ .. inheritance-diagram:: PasswordSpoke
|
||||||
|
+ :parts: 3
|
||||||
|
+ """
|
||||||
|
+
|
||||||
|
+ def __init__(self, data, storage, payload, sm3_config):
|
||||||
|
+ NormalTUISpoke.__init__(self, data, storage, payload)
|
||||||
|
+ self.initialize_start()
|
||||||
|
+ self.title = N_("Root password")
|
||||||
|
+ self.input_required = False
|
||||||
|
+
|
||||||
|
+ self._password = None
|
||||||
|
+ self._sm3_config = sm3_config
|
||||||
|
+
|
||||||
|
+ self._users_module = USERS.get_proxy()
|
||||||
|
+ self.initialize_done()
|
||||||
|
+
|
||||||
|
def refresh(self, args=None):
|
||||||
|
NormalTUISpoke.refresh(self, args)
|
||||||
|
|
||||||
|
@@ -85,10 +140,15 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalTUISpoke):
|
||||||
|
|
||||||
|
def show_all(self):
|
||||||
|
super().show_all()
|
||||||
|
+ if self._sm3_config:
|
||||||
|
+ algo = "sm3"
|
||||||
|
+ else:
|
||||||
|
+ algo = None
|
||||||
|
|
||||||
|
password_dialog = PasswordDialog(
|
||||||
|
title=_("Password"),
|
||||||
|
- policy_name=PASSWORD_POLICY_ROOT
|
||||||
|
+ policy_name=PASSWORD_POLICY_ROOT,
|
||||||
|
+ func_args=(algo,)
|
||||||
|
)
|
||||||
|
password_dialog.no_separator = True
|
||||||
|
self._password = password_dialog.run()
|
||||||
|
@@ -101,6 +161,7 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalTUISpoke):
|
||||||
|
self.close()
|
||||||
|
|
||||||
|
def apply(self):
|
||||||
|
+
|
||||||
|
self._users_module.SetCryptedRootPassword(self._password)
|
||||||
|
if self._password:
|
||||||
|
self._users_module.SetRootAccountLocked(False)
|
||||||
|
diff --git a/pyanaconda/ui/tui/tuiobject.py b/pyanaconda/ui/tui/tuiobject.py
|
||||||
|
index 6cb439b..c642931 100644
|
||||||
|
--- a/pyanaconda/ui/tui/tuiobject.py
|
||||||
|
+++ b/pyanaconda/ui/tui/tuiobject.py
|
||||||
|
@@ -209,12 +209,14 @@ class PasswordDialog(Dialog):
|
||||||
|
report_func=reporting_callback,
|
||||||
|
process_func=crypt_password,
|
||||||
|
secret_type=constants.SecretType.PASSWORD,
|
||||||
|
+ func_args=None,
|
||||||
|
message=None):
|
||||||
|
super().__init__(title, report_func=report_func)
|
||||||
|
self._no_separator = False
|
||||||
|
self._policy = input_checking.get_policy(policy_name)
|
||||||
|
self._secret_type = secret_type
|
||||||
|
self._process_password = process_func
|
||||||
|
+ self._func_args = func_args
|
||||||
|
self._dialog_message = message
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
@@ -292,7 +294,10 @@ class PasswordDialog(Dialog):
|
||||||
|
if any(char not in constants.PW_ASCII_CHARS for char in password):
|
||||||
|
self._report(_(constants.SECRET_ASCII[self._secret_type]))
|
||||||
|
|
||||||
|
- return self._process_password(password)
|
||||||
|
+ if self._func_args == None:
|
||||||
|
+ return self._process_password(password)
|
||||||
|
+ else:
|
||||||
|
+ return self._process_password(password, *self._func_args)
|
||||||
|
|
||||||
|
def _report(self, message):
|
||||||
|
if self._report_func:
|
||||||
|
--
|
||||||
|
2.28.0.windows.1
|
||||||
|
|
||||||
46
bugfix-add-log-and-background.patch
Normal file
46
bugfix-add-log-and-background.patch
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 8b5428e400ac80d57ae6bc6b0ec792e17a62a04e Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Thu, 24 Nov 2022 11:13:58 +0800
|
||||||
|
Subject: [PATCH] add log and background
|
||||||
|
|
||||||
|
---
|
||||||
|
data/anaconda-gtk.css | 11 ++++++++++-
|
||||||
|
1 file changed, 10 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/data/anaconda-gtk.css b/data/anaconda-gtk.css
|
||||||
|
index 7de933d..7c6643a 100644
|
||||||
|
--- a/data/anaconda-gtk.css
|
||||||
|
+++ b/data/anaconda-gtk.css
|
||||||
|
@@ -98,12 +98,18 @@ infobar.error {
|
||||||
|
@define-color anaconda_bg_color #2f4265;
|
||||||
|
|
||||||
|
.logo-sidebar {
|
||||||
|
+ background-image: url('/usr/share/anaconda/pixmaps/sidebar-bg.png');
|
||||||
|
+ background-size: 100% 100%;
|
||||||
|
+ background-repeat: no-repeat;
|
||||||
|
background-color: @anaconda_bg_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is a placeholder to be filled by a product-specific logo. */
|
||||||
|
.logo {
|
||||||
|
- background-image: none;
|
||||||
|
+ background-image: url('/usr/share/anaconda/pixmaps/sidebar-logo.png');
|
||||||
|
+ background-position: 50% 20px;
|
||||||
|
+ background-size: 90%;
|
||||||
|
+ background-repeat: no-repeat;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -114,6 +120,9 @@ infobar.error {
|
||||||
|
}
|
||||||
|
|
||||||
|
AnacondaSpokeWindow #nav-box {
|
||||||
|
+ background-image: url('/usr/share/anaconda/pixmaps/topbar-bg.png');
|
||||||
|
+ background-size: 100% 100%;
|
||||||
|
+ background-repeat: no-repeat;
|
||||||
|
background-color: @anaconda_bg_color;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
28
bugfix-change-gnome-kiosk-to-use-metacity.patch
Normal file
28
bugfix-change-gnome-kiosk-to-use-metacity.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 4de5376d5b1b88d1190476b8d179b677a08fe03c Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Tue, 15 Nov 2022 15:46:38 +0800
|
||||||
|
Subject: [PATCH] change 'gnome-kiosk' to use 'metacity'
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/display.py | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/display.py b/pyanaconda/display.py
|
||||||
|
index 880af9c..ddf24fb 100644
|
||||||
|
--- a/pyanaconda/display.py
|
||||||
|
+++ b/pyanaconda/display.py
|
||||||
|
@@ -192,9 +192,9 @@ def do_startup_x11_actions():
|
||||||
|
else:
|
||||||
|
xdg_data_dirs = datadir + '/window-manager:/usr/share'
|
||||||
|
|
||||||
|
- childproc = util.startProgram(["gnome-kiosk", "--display", ":1", "--sm-disable", "--x11"],
|
||||||
|
+ childproc = util.startProgram(["metacity", "--display", ":1", "--sm-disable"],
|
||||||
|
env_add={'XDG_DATA_DIRS': xdg_data_dirs})
|
||||||
|
- WatchProcesses.watch_process(childproc, "gnome-kiosk")
|
||||||
|
+ WatchProcesses.watch_process(childproc, "metacity")
|
||||||
|
|
||||||
|
|
||||||
|
def set_x_resolution(runres):
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
39
bugfix-change-product-name-do-not-with-upper.patch
Normal file
39
bugfix-change-product-name-do-not-with-upper.patch
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
From 613035ac2716f99ce2ec536c4769d3dc6e6f90e5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunha10@huawei.com>
|
||||||
|
Date: Tue, 29 Nov 2022 15:44:45 +0800
|
||||||
|
Subject: [PATCH] change product name do not with upper
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/product.py | 4 ++--
|
||||||
|
pyanaconda/ui/gui/spokes/welcome.py | 2 +-
|
||||||
|
2 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/product.py b/pyanaconda/product.py
|
||||||
|
index b5e97d7..7fe28cb 100644
|
||||||
|
--- a/pyanaconda/product.py
|
||||||
|
+++ b/pyanaconda/product.py
|
||||||
|
@@ -57,6 +57,6 @@ productVersion = trim_product_version_for_ui(productVersion)
|
||||||
|
|
||||||
|
def distributionText():
|
||||||
|
return _("%(productName)s %(productVersion)s INSTALLATION") % {
|
||||||
|
- "productName": productName.upper(),
|
||||||
|
- "productVersion": productVersion.upper()
|
||||||
|
+ "productName": productName,
|
||||||
|
+ "productVersion": productVersion
|
||||||
|
}
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/welcome.py b/pyanaconda/ui/gui/spokes/welcome.py
|
||||||
|
index 773d5a8..3fc5ebf 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/welcome.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/welcome.py
|
||||||
|
@@ -271,7 +271,7 @@ class WelcomeLanguageSpoke(StandaloneSpoke, LangLocaleHandler):
|
||||||
|
welcomeLabel = self.builder.get_object("welcomeLabel")
|
||||||
|
|
||||||
|
welcomeLabel.set_text(_("WELCOME TO %(name)s %(version)s.") %
|
||||||
|
- {"name" : productName.upper(), "version" : productVersion}) # pylint: disable=no-member
|
||||||
|
+ {"name" : productName, "version" : productVersion}) # pylint: disable=no-member
|
||||||
|
|
||||||
|
# Retranslate the language (filtering) entry's placeholder text
|
||||||
|
languageEntry = self.builder.get_object("languageEntry")
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
126
bugfix-change-root-and-storage-interface-shows.patch
Normal file
126
bugfix-change-root-and-storage-interface-shows.patch
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
From c8d6fa0fa3ba5820f6f2239064d33fabc17cb671 Mon Sep 17 00:00:00 2001
|
||||||
|
From: s30028044 <sunhai10@huawei.com>
|
||||||
|
Date: Thu, 31 Aug 2023 20:32:50 +0800
|
||||||
|
Subject: [PATCH] change root and custom storage interface shows
|
||||||
|
|
||||||
|
---
|
||||||
|
po/zh_CN.po | 22 +++++++++++++------
|
||||||
|
pyanaconda/modules/storage/bootloader/base.py | 2 +-
|
||||||
|
pyanaconda/ui/gui/spokes/lib/accordion.py | 2 +-
|
||||||
|
3 files changed, 17 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/po/zh_CN.po b/po/zh_CN.po
|
||||||
|
index 3b6fc12..4b2d109 100644
|
||||||
|
--- a/po/zh_CN.po
|
||||||
|
+++ b/po/zh_CN.po
|
||||||
|
@@ -866,6 +866,10 @@ msgstr "引导加载程序阶段1设备不能在一个没有在 iBFT 中配置
|
||||||
|
msgid "%s cannot be on an encrypted block device."
|
||||||
|
msgstr "%s 不能位于加密的块设备上。"
|
||||||
|
|
||||||
|
+#: pyanaconda/modules/storage/bootloader/base.py:612
|
||||||
|
+msgid "Failed to find a suitable stage1 device"
|
||||||
|
+msgstr "未能找到合适的stage1设备"
|
||||||
|
+
|
||||||
|
#: pyanaconda/modules/storage/bootloader/base.py:644
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
@@ -1745,6 +1749,10 @@ msgctxt "GUI|Custom Partitioning|Autopart Page"
|
||||||
|
msgid "_Encrypt automatically created mount points by default:"
|
||||||
|
msgstr "自动地加密默认创建的挂载点(_E):"
|
||||||
|
|
||||||
|
+#: pyanaconda/ui/gui/spokes/lib/accordion.py:547
|
||||||
|
+msgid "Encrypt my data."
|
||||||
|
+msgstr "加密我的数据(_E)。"
|
||||||
|
+
|
||||||
|
#: pyanaconda/ui/gui/spokes/lib/resize.py:54
|
||||||
|
msgid "Preserve"
|
||||||
|
msgstr "保留"
|
||||||
|
@@ -1990,7 +1998,7 @@ msgstr "未注册。"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/subscription.py:1024
|
||||||
|
msgid "Registered with account {}"
|
||||||
|
-msgstr "已使用账户 {} 注册"
|
||||||
|
+msgstr "已使用帐户 {} 注册"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/subscription.py:1028
|
||||||
|
msgid "Registered with organization {}"
|
||||||
|
@@ -2821,7 +2829,7 @@ msgstr "正在检查存储配置..."
|
||||||
|
|
||||||
|
#: pyanaconda/ui/lib/users.py:35
|
||||||
|
msgid "Root account is disabled"
|
||||||
|
-msgstr "Root 账户已禁用"
|
||||||
|
+msgstr "Root 帐户已禁用"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/lib/users.py:37
|
||||||
|
msgid "Root password is set"
|
||||||
|
@@ -5417,7 +5425,7 @@ msgstr "连接到红帽"
|
||||||
|
#: pyanaconda/ui/gui/spokes/subscription.glade:100
|
||||||
|
msgctxt "GUI|Subscription|Authentication|Account"
|
||||||
|
msgid "_Account"
|
||||||
|
-msgstr "账户(_A)"
|
||||||
|
+msgstr "帐户(_A)"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/subscription.glade:117
|
||||||
|
msgctxt "GUI|Subscription|Authetication|Activation Key"
|
||||||
|
@@ -5646,7 +5654,7 @@ msgid ""
|
||||||
|
"Note: The settings you make on this screen will not be applied until you "
|
||||||
|
"click on the main menu's 'Begin Installation' button."
|
||||||
|
msgstr ""
|
||||||
|
-"注意:在您点击主菜单上的“开始安装“按钮之前”,您在本屏幕内所做的设置更改不会被"
|
||||||
|
+"注意:在您点击主菜单上的“开始安装”按钮之前,您在本屏幕内所做的设置更改不会被"
|
||||||
|
"应用。"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/custom_storage.glade:1129
|
||||||
|
@@ -6454,12 +6462,12 @@ msgstr ""
|
||||||
|
#: pyanaconda/ui/gui/spokes/root_password.glade:97
|
||||||
|
msgctxt "GUI|Password"
|
||||||
|
msgid "_Disable root account"
|
||||||
|
-msgstr "禁用 root 账户(_D)"
|
||||||
|
+msgstr "禁用 root 帐户(_D)"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/root_password.glade:125
|
||||||
|
msgctxt "GUI|Password"
|
||||||
|
msgid "_Enable root account"
|
||||||
|
-msgstr "启用 root 账户(_E)"
|
||||||
|
+msgstr "启用 root 帐户(_E)"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/root_password.glade:146
|
||||||
|
msgid ""
|
||||||
|
@@ -7043,7 +7051,7 @@ msgstr "需要密码才能使用该帐户(_R)"
|
||||||
|
msgctxt "GUI|User"
|
||||||
|
msgid ""
|
||||||
|
"Add ad_ministrative privileges to this user account (wheel group membership)"
|
||||||
|
-msgstr "为此用户账户 (wheel 组成员) 添加管理权限(_M)"
|
||||||
|
+msgstr "为此用户帐户 (wheel 组成员) 添加管理权限(_M)"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/user.glade:269
|
||||||
|
msgctxt "GUI|User"
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/base.py b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
index 533d528..d40086d 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/base.py
|
||||||
|
@@ -609,7 +609,7 @@ class BootLoader(object):
|
||||||
|
|
||||||
|
if not self.stage1_device:
|
||||||
|
self.reset()
|
||||||
|
- msg = "Failed to find a suitable stage1 device"
|
||||||
|
+ msg = _("Failed to find a suitable stage1 device")
|
||||||
|
if errors:
|
||||||
|
msg = msg + ": " + "; ".join(errors)
|
||||||
|
raise BootLoaderError(msg)
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/lib/accordion.py b/pyanaconda/ui/gui/spokes/lib/accordion.py
|
||||||
|
index 3a75565..b9344da 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/lib/accordion.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/lib/accordion.py
|
||||||
|
@@ -544,7 +544,7 @@ class CreateNewPage(BasePage):
|
||||||
|
)
|
||||||
|
self._createBox.attach(label, 0, 6, 2, 1)
|
||||||
|
|
||||||
|
- checkbox = Gtk.CheckButton(label="Encrypt my data.")
|
||||||
|
+ checkbox = Gtk.CheckButton(label=_("Encrypt my data."))
|
||||||
|
checkbox.connect("toggled", encrypted_changed_cb)
|
||||||
|
checkbox.set_active(default_encryption)
|
||||||
|
checkbox.set_margin_start(18)
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
@ -0,0 +1,160 @@
|
|||||||
|
From 7dc41d9a1f3d0e3dfa48838cf0e75c2f0f04e207 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Sun, 25 Jun 2023 15:01:25 +0800
|
||||||
|
Subject: [PATCH] change the startup mode of do_transaction sub proces
|
||||||
|
|
||||||
|
---
|
||||||
|
.../payloads/payload/dnf/dnf_manager.py | 109 ++++++++++++++++--
|
||||||
|
1 file changed, 102 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py b/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
|
||||||
|
index b1f452c..c73f3d9 100644
|
||||||
|
--- a/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
|
||||||
|
+++ b/pyanaconda/modules/payloads/payload/dnf/dnf_manager.py
|
||||||
|
@@ -67,6 +67,50 @@ DNF_PLUGINCONF_DIR = '/tmp/dnf.pluginconf'
|
||||||
|
#
|
||||||
|
DNF_EXTRA_SIZE_PER_FILE = Size("6 KiB")
|
||||||
|
|
||||||
|
+g_include_list = []
|
||||||
|
+g_exclude_list = []
|
||||||
|
+
|
||||||
|
+def update_conf(conf, substitutions, releasever, installroot, multilib_policy, timeout, retries):
|
||||||
|
+ conf.cachedir = DNF_CACHE_DIR
|
||||||
|
+ conf.pluginconfpath = DNF_PLUGINCONF_DIR
|
||||||
|
+ conf.logdir = '/tmp/'
|
||||||
|
+
|
||||||
|
+ conf.substitutions = substitutions
|
||||||
|
+ conf.releasever = releasever
|
||||||
|
+ conf.installroot = installroot
|
||||||
|
+ conf.prepend_installroot('persistdir')
|
||||||
|
+ conf.multilib_policy = multilib_policy
|
||||||
|
+ conf.timeout = timeout
|
||||||
|
+ conf.retries = retries
|
||||||
|
+
|
||||||
|
+ conf.substitutions.update_from_etc(conf.installroot)
|
||||||
|
+
|
||||||
|
+ conf.reposdir = DNF_REPO_DIRS
|
||||||
|
+
|
||||||
|
+def update_proxy(conf, proxy, proxy_username, proxy_password):
|
||||||
|
+ conf.proxy = proxy
|
||||||
|
+ conf.proxy_username = proxy_username
|
||||||
|
+ conf.proxy_password = proxy_password
|
||||||
|
+
|
||||||
|
+def update_depdency(base, include_list, exclude_list, ignore_broken_packages, ignore_missing_packages):
|
||||||
|
+ base.fill_sack()
|
||||||
|
+ base.read_comps()
|
||||||
|
+
|
||||||
|
+ try:
|
||||||
|
+ base.install_specs(
|
||||||
|
+ install=include_list,
|
||||||
|
+ exclude=exclude_list,
|
||||||
|
+ strict=not ignore_broken_packages
|
||||||
|
+ )
|
||||||
|
+ except dnf.exceptions.MarkingErrors as e:
|
||||||
|
+ log.error("Failed to apply specs!\n%s", str(e))
|
||||||
|
+ if ignore_missing_packages:
|
||||||
|
+ log.info("Ignoring missing packages, groups or modules.")
|
||||||
|
+ else:
|
||||||
|
+ message = _("Some packages, groups or modules are missing.")
|
||||||
|
+ raise MissingSpecsError(message + "\n\n" + str(e).strip()) from None
|
||||||
|
+
|
||||||
|
+ base.resolve()
|
||||||
|
|
||||||
|
class DNFManagerError(Exception):
|
||||||
|
"""General error for the DNF manager."""
|
||||||
|
@@ -555,6 +599,10 @@ class DNFManager(object):
|
||||||
|
log.info("Including specs: %s", include_list)
|
||||||
|
log.info("Excluding specs: %s", exclude_list)
|
||||||
|
|
||||||
|
+ global g_include_list, g_exclude_list
|
||||||
|
+ g_include_list = list(include_list)
|
||||||
|
+ g_exclude_list = list(exclude_list)
|
||||||
|
+
|
||||||
|
try:
|
||||||
|
self._base.install_specs(
|
||||||
|
install=include_list,
|
||||||
|
@@ -664,12 +712,35 @@ class DNFManager(object):
|
||||||
|
:param timeout: a time out of a failed process in seconds
|
||||||
|
:raise PayloadInstallationError: if the installation fails
|
||||||
|
"""
|
||||||
|
- queue = multiprocessing.Queue()
|
||||||
|
- display = TransactionProgress(queue)
|
||||||
|
- process = multiprocessing.Process(
|
||||||
|
- target=self._run_transaction,
|
||||||
|
- args=(self._base, display)
|
||||||
|
- )
|
||||||
|
+ repos = dict()
|
||||||
|
+ for repo in self._base.repos.iter_enabled():
|
||||||
|
+ t_repo = dict()
|
||||||
|
+ repo_agrs = dict()
|
||||||
|
+ t_repo['baseurl'] = list(repo.baseurl)
|
||||||
|
+ repo_agrs['sslverify'] = repo.sslverify
|
||||||
|
+ repo_agrs['proxy'] = repo.proxy
|
||||||
|
+ t_repo['repo_agrs'] = repo_agrs
|
||||||
|
+ repos[repo.id] = t_repo
|
||||||
|
+
|
||||||
|
+ global g_include_list, g_exclude_list
|
||||||
|
+ ctx = multiprocessing.get_context('spawn')
|
||||||
|
+ queue = ctx.Queue()
|
||||||
|
+ process = ctx.Process(target=self._run_transaction,
|
||||||
|
+ args=(queue, repos,
|
||||||
|
+ self._base.conf.releasever,
|
||||||
|
+ self._base.conf.installroot,
|
||||||
|
+ self._base.conf.substitutions,
|
||||||
|
+ self._base.conf.multilib_policy,
|
||||||
|
+ self._base.conf.timeout,
|
||||||
|
+ self._base.conf.retries,
|
||||||
|
+ self._download_location,
|
||||||
|
+ self._base.conf.proxy,
|
||||||
|
+ self._base.conf.proxy_username,
|
||||||
|
+ self._base.conf.proxy_password,
|
||||||
|
+ g_include_list,
|
||||||
|
+ g_exclude_list,
|
||||||
|
+ self._ignore_broken_packages,
|
||||||
|
+ self._ignore_missing_packages))
|
||||||
|
|
||||||
|
# Start the transaction.
|
||||||
|
log.debug("Starting the transaction process...")
|
||||||
|
@@ -688,7 +759,10 @@ class DNFManager(object):
|
||||||
|
log.debug("The transaction process exited with %s.", process.exitcode)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
- def _run_transaction(base, display):
|
||||||
|
+ def _run_transaction(queue_instance, repos, releasever, installroot, substitutions,
|
||||||
|
+ multilib_policy, timeout, retries, pkgdir, proxy,
|
||||||
|
+ proxy_username, proxy_password, include_list, exclude_list,
|
||||||
|
+ ignore_broken_packages, ignore_missing_packages):
|
||||||
|
"""Run the DNF transaction.
|
||||||
|
|
||||||
|
Execute the DNF transaction and catch any errors. An error
|
||||||
|
@@ -702,6 +776,27 @@ class DNFManager(object):
|
||||||
|
exit_reason = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
+ display = TransactionProgress(queue_instance)
|
||||||
|
+
|
||||||
|
+ base = dnf.Base()
|
||||||
|
+ conf = base.conf
|
||||||
|
+
|
||||||
|
+ update_conf(conf, substitutions, releasever, installroot, multilib_policy, timeout, retries)
|
||||||
|
+ update_proxy(conf, proxy, proxy_username, proxy_password)
|
||||||
|
+
|
||||||
|
+ queue_instance.put(('log', 'start to setup repo.'))
|
||||||
|
+
|
||||||
|
+ for (key, repo) in repos.items():
|
||||||
|
+ base.repos.add_new_repo(key, conf, repo['baseurl'], **repo['repo_agrs'])
|
||||||
|
+ base.repos[key].enable()
|
||||||
|
+
|
||||||
|
+ for repo in base.repos.iter_enabled():
|
||||||
|
+ repo.pkgdir = pkgdir
|
||||||
|
+
|
||||||
|
+ queue_instance.put(('log', 'start to update depdency.'))
|
||||||
|
+ update_depdency(base, include_list, exclude_list, ignore_broken_packages, ignore_missing_packages)
|
||||||
|
+ queue_instance.put(('log', 'start to transaction.'))
|
||||||
|
+
|
||||||
|
base.do_transaction(display)
|
||||||
|
exit_reason = "DNF done"
|
||||||
|
except BaseException as e: # pylint: disable=broad-except
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
44
bugfix-fix-custom-storage-chinese-tip.patch
Normal file
44
bugfix-fix-custom-storage-chinese-tip.patch
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
From 043c6ba5f0e9d97fed947246dfd65f5cfd5d251e Mon Sep 17 00:00:00 2001
|
||||||
|
From: s30028044 <sunhai10@huawei.com>
|
||||||
|
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
|
||||||
|
|
||||||
123
bugfix-import-new-BlockDev.patch
Normal file
123
bugfix-import-new-BlockDev.patch
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
From 765938409daeeacf1faf3c2695c68a85f0b30b4d Mon Sep 17 00:00:00 2001
|
||||||
|
From: s30028044 <sunhai10@huawei.com>
|
||||||
|
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
|
||||||
|
|
||||||
36
bugfix-password-tooltip-text-adapt-language.patch
Normal file
36
bugfix-password-tooltip-text-adapt-language.patch
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
From a7de90b4741689b12137dc22f1b478bdd451762f Mon Sep 17 00:00:00 2001
|
||||||
|
From: iasunsea <iasunsea@sina.com>
|
||||||
|
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
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
From 971650357e4d7228cfa95ea01bc61e69715b159c Mon Sep 17 00:00:00 2001
|
||||||
|
From: zhangqiumiao <zhangqiumiao1@huawei.com>
|
||||||
|
Date: Thu, 29 Apr 2021 09:09:10 -0400
|
||||||
|
Subject: [PATCH] revert "Set default entry to the BLS id instead of the entry index"
|
||||||
|
|
||||||
|
revert the patch of "Set default entry to the BLS id instead of the entry index"
|
||||||
|
Reference: https://github.com/rhinstaller/anaconda/commit/a252e4424bd51d6236d3b7b8e3840d8ca0af90a2
|
||||||
|
Conflict: https://github.com/rhinstaller/anaconda/commit/a252e4424bd51d6236d3b7b8e3840d8ca0af90a2
|
||||||
|
---
|
||||||
|
.../modules/storage/bootloader/grub2.py | 24 ++++++++-----------
|
||||||
|
1 file changed, 10 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/grub2.py b/pyanaconda/modules/storage/bootloader/grub2.py
|
||||||
|
index 48ca354..964c56a 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/grub2.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/grub2.py
|
||||||
|
@@ -335,20 +335,16 @@ class GRUB2(BootLoader):
|
||||||
|
|
||||||
|
# make sure the default entry is the OS we are installing
|
||||||
|
if self.default is not None:
|
||||||
|
- machine_id_path = conf.target.system_root + "/etc/machine-id"
|
||||||
|
- if not os.access(machine_id_path, os.R_OK):
|
||||||
|
- log.error("failed to read machine-id, default entry not set")
|
||||||
|
- return
|
||||||
|
-
|
||||||
|
- with open(machine_id_path, "r") as fd:
|
||||||
|
- machine_id = fd.readline().strip()
|
||||||
|
-
|
||||||
|
- default_entry = "%s-%s" % (machine_id, self.default.version)
|
||||||
|
- rc = util.execWithRedirect(
|
||||||
|
- "grub2-set-default",
|
||||||
|
- [default_entry],
|
||||||
|
- root=conf.target.system_root
|
||||||
|
- )
|
||||||
|
+ # find the index of the default image
|
||||||
|
+ try:
|
||||||
|
+ default_index = self.images.index(self.default)
|
||||||
|
+ except ValueError:
|
||||||
|
+ # pylint: disable=no-member
|
||||||
|
+ log.warning("Failed to find default image (%s), defaulting to 0",
|
||||||
|
+ self.default.label)
|
||||||
|
+ default_index = 0
|
||||||
|
+
|
||||||
|
+ rc = util.execInSysroot("grub2-set-default", [str(default_index)])
|
||||||
|
if rc:
|
||||||
|
log.error("failed to set default menu entry to %s", productName)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.19.1
|
||||||
|
|
||||||
@ -0,0 +1,104 @@
|
|||||||
|
From d5d6b1498db9f9e3378c11421caa523556c04752 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Tue, 28 Mar 2023 14:22:39 +0800
|
||||||
|
Subject: [PATCH] revert Unify GRUB configuration file location across all platforms
|
||||||
|
Reference:https://github.com/rhinstaller/anaconda/commit/15c3b2044367d375db6739e8b8f419ef3e17cae7
|
||||||
|
---
|
||||||
|
pyanaconda/modules/storage/bootloader/efi.py | 38 +------------------
|
||||||
|
.../modules/storage/bootloader/utils.py | 8 +++-
|
||||||
|
2 files changed, 9 insertions(+), 37 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/efi.py b/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
index 1b47e24..6135699 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/efi.py
|
||||||
|
@@ -35,11 +35,7 @@ class EFIBase(object):
|
||||||
|
"""A base class for EFI-based boot loaders."""
|
||||||
|
|
||||||
|
@property
|
||||||
|
- def efi_config_dir(self):
|
||||||
|
- return "/boot/" + self._efi_config_dir
|
||||||
|
-
|
||||||
|
- @property
|
||||||
|
- def _efi_config_dir(self):
|
||||||
|
+ def _config_dir(self):
|
||||||
|
return "efi/EFI/{}".format(conf.bootloader.efi_dir)
|
||||||
|
|
||||||
|
def efibootmgr(self, *args, **kwargs):
|
||||||
|
@@ -62,7 +58,7 @@ class EFIBase(object):
|
||||||
|
|
||||||
|
@property
|
||||||
|
def efi_dir_as_efifs_dir(self):
|
||||||
|
- ret = self._efi_config_dir.replace('efi/', '')
|
||||||
|
+ ret = self._config_dir.replace('efi/', '')
|
||||||
|
return "\\" + ret.replace('/', '\\')
|
||||||
|
|
||||||
|
def _add_single_efi_boot_target(self, partition):
|
||||||
|
@@ -164,36 +160,6 @@ class EFIGRUB(EFIBase, GRUB2):
|
||||||
|
return self._packages32 + self._packages_common
|
||||||
|
return self._packages64 + self._packages_common
|
||||||
|
|
||||||
|
- @property
|
||||||
|
- def efi_config_file(self):
|
||||||
|
- """ Full path to EFI configuration file. """
|
||||||
|
- return "%s/%s" % (self.efi_config_dir, self._config_file)
|
||||||
|
-
|
||||||
|
- def write_config(self):
|
||||||
|
- config_path = "%s%s" % (conf.target.system_root, self.efi_config_file)
|
||||||
|
-
|
||||||
|
- with open(config_path, "w") as fd:
|
||||||
|
- grub_dir = self.config_dir
|
||||||
|
- if self.stage2_device.format.type != "btrfs":
|
||||||
|
- fs_uuid = self.stage2_device.format.uuid
|
||||||
|
- else:
|
||||||
|
- fs_uuid = self.stage2_device.format.vol_uuid
|
||||||
|
-
|
||||||
|
- if fs_uuid is None:
|
||||||
|
- raise BootLoaderError("Could not get stage2 filesystem UUID")
|
||||||
|
-
|
||||||
|
- grub_dir = util.execWithCapture("grub2-mkrelpath", [grub_dir],
|
||||||
|
- root=conf.target.system_root)
|
||||||
|
- if not grub_dir:
|
||||||
|
- raise BootLoaderError("Could not get GRUB directory path")
|
||||||
|
-
|
||||||
|
- fd.write("search --no-floppy --fs-uuid --set=dev %s\n" % fs_uuid)
|
||||||
|
- fd.write("set prefix=($dev)%s\n" % grub_dir)
|
||||||
|
- fd.write("export $prefix\n")
|
||||||
|
- fd.write("configfile $prefix/grub.cfg\n")
|
||||||
|
-
|
||||||
|
- super().write_config()
|
||||||
|
-
|
||||||
|
|
||||||
|
class Aarch64EFIGRUB(EFIGRUB):
|
||||||
|
_serial_consoles = ["ttyAMA", "ttyS"]
|
||||||
|
diff --git a/pyanaconda/modules/storage/bootloader/utils.py b/pyanaconda/modules/storage/bootloader/utils.py
|
||||||
|
index 27fc2a0..84e45b6 100644
|
||||||
|
--- a/pyanaconda/modules/storage/bootloader/utils.py
|
||||||
|
+++ b/pyanaconda/modules/storage/bootloader/utils.py
|
||||||
|
@@ -19,6 +19,7 @@ import os
|
||||||
|
from glob import glob
|
||||||
|
|
||||||
|
from pyanaconda.modules.common.errors.installation import BootloaderInstallationError
|
||||||
|
+from pyanaconda.modules.storage.bootloader.efi import EFIBase
|
||||||
|
from pyanaconda.modules.storage.bootloader.image import LinuxBootLoaderImage
|
||||||
|
from pyanaconda.core.configuration.anaconda import conf
|
||||||
|
from pyanaconda.core.util import execWithRedirect
|
||||||
|
@@ -244,9 +245,14 @@ def create_bls_entries(sysroot, storage, kernel_versions):
|
||||||
|
# Update the bootloader configuration to make sure that the BLS
|
||||||
|
# entries will have the correct kernel cmdline and not the value
|
||||||
|
# taken from /proc/cmdline, that is used to boot the live image.
|
||||||
|
+ if isinstance(storage.bootloader, EFIBase):
|
||||||
|
+ grub_cfg_path = "/etc/grub2-efi.cfg"
|
||||||
|
+ else:
|
||||||
|
+ grub_cfg_path = "/etc/grub2.cfg"
|
||||||
|
+
|
||||||
|
rc = execWithRedirect(
|
||||||
|
"grub2-mkconfig",
|
||||||
|
- ["-o", "/etc/grub2.cfg"],
|
||||||
|
+ ["-o", grub_cfg_path],
|
||||||
|
root=sysroot
|
||||||
|
)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
From 769f395e80c92972900ef348d7dd747014666f70 Mon Sep 17 00:00:00 2001
|
||||||
|
From: yu_boyun <1215979730@qq.com>
|
||||||
|
Date: Mon, 11 Jan 2021 17:01:58 +0800
|
||||||
|
Subject: [PATCH] set up LD_PRELOAD for the Storage and Services module
|
||||||
|
|
||||||
|
---
|
||||||
|
data/dbus/org.fedoraproject.Anaconda.Modules.Services.service | 2 +-
|
||||||
|
data/dbus/org.fedoraproject.Anaconda.Modules.Storage.service | 2 +-
|
||||||
|
pyanaconda/modules/services/__main__.py | 4 ++++
|
||||||
|
pyanaconda/modules/storage/__main__.py | 4 ++++
|
||||||
|
4 files changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/data/dbus/org.fedoraproject.Anaconda.Modules.Services.service b/data/dbus/org.fedoraproject.Anaconda.Modules.Services.service
|
||||||
|
index 79c6949..c3a6098 100644
|
||||||
|
--- a/data/dbus/org.fedoraproject.Anaconda.Modules.Services.service
|
||||||
|
+++ b/data/dbus/org.fedoraproject.Anaconda.Modules.Services.service
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
[D-BUS Service]
|
||||||
|
Name=org.fedoraproject.Anaconda.Modules.Services
|
||||||
|
-Exec=/usr/libexec/anaconda/start-module pyanaconda.modules.services
|
||||||
|
+Exec=/usr/libexec/anaconda/start-module --env LD_PRELOAD=libgomp.so.1 pyanaconda.modules.services
|
||||||
|
User=root
|
||||||
|
diff --git a/data/dbus/org.fedoraproject.Anaconda.Modules.Storage.service b/data/dbus/org.fedoraproject.Anaconda.Modules.Storage.service
|
||||||
|
index 018ecf1..780200e 100644
|
||||||
|
--- a/data/dbus/org.fedoraproject.Anaconda.Modules.Storage.service
|
||||||
|
+++ b/data/dbus/org.fedoraproject.Anaconda.Modules.Storage.service
|
||||||
|
@@ -1,4 +1,4 @@
|
||||||
|
[D-BUS Service]
|
||||||
|
Name=org.fedoraproject.Anaconda.Modules.Storage
|
||||||
|
-Exec=/usr/libexec/anaconda/start-module pyanaconda.modules.storage
|
||||||
|
+Exec=/usr/libexec/anaconda/start-module --env LD_PRELOAD=libgomp.so.1 pyanaconda.modules.storage
|
||||||
|
User=root
|
||||||
|
diff --git a/pyanaconda/modules/services/__main__.py b/pyanaconda/modules/services/__main__.py
|
||||||
|
index d4b0879..4327dc9 100644
|
||||||
|
--- a/pyanaconda/modules/services/__main__.py
|
||||||
|
+++ b/pyanaconda/modules/services/__main__.py
|
||||||
|
@@ -20,6 +20,10 @@
|
||||||
|
from pyanaconda.modules.common import init
|
||||||
|
init()
|
||||||
|
|
||||||
|
+import os
|
||||||
|
+if "LD_PRELOAD" in os.environ:
|
||||||
|
+ del os.environ["LD_PRELOAD"]
|
||||||
|
+
|
||||||
|
from pyanaconda.modules.services.services import ServicesService
|
||||||
|
service = ServicesService()
|
||||||
|
service.run()
|
||||||
|
diff --git a/pyanaconda/modules/storage/__main__.py b/pyanaconda/modules/storage/__main__.py
|
||||||
|
index 327a129..29212a9 100644
|
||||||
|
--- a/pyanaconda/modules/storage/__main__.py
|
||||||
|
+++ b/pyanaconda/modules/storage/__main__.py
|
||||||
|
@@ -20,6 +20,10 @@
|
||||||
|
from pyanaconda.modules.common import init
|
||||||
|
init("/tmp/storage.log")
|
||||||
|
|
||||||
|
+import os
|
||||||
|
+if "LD_PRELOAD" in os.environ:
|
||||||
|
+ del os.environ["LD_PRELOAD"]
|
||||||
|
+
|
||||||
|
# Initialize Blivet.
|
||||||
|
from pyanaconda.modules.storage.initialization import enable_installer_mode
|
||||||
|
enable_installer_mode()
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
38
bugfix-with-use-local-kickstart-version.patch
Normal file
38
bugfix-with-use-local-kickstart-version.patch
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
From d361beead1ff91273aa0f13147b2b279172133aa Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
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
|
||||||
|
|
||||||
26
change-inst-repo-default-value.patch
Normal file
26
change-inst-repo-default-value.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From e73464ef17f54743dc194ad28e32797a10e844a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: ctyuncommiter05 <ctyuncommiter05@chinatelecom.cn>
|
||||||
|
Date: Thu, 24 Jun 2021 16:30:45 +0800
|
||||||
|
Subject: [PATCH] change inst.repo default value
|
||||||
|
|
||||||
|
Solve the problem of U disk installation failure problem.
|
||||||
|
---
|
||||||
|
anaconda.py | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/anaconda.py b/anaconda.py
|
||||||
|
index 1abdeb2..44b573c 100755
|
||||||
|
--- a/anaconda.py
|
||||||
|
+++ b/anaconda.py
|
||||||
|
@@ -263,6 +263,8 @@ if __name__ == "__main__":
|
||||||
|
from pyanaconda.flags import flags
|
||||||
|
from pyanaconda.core.kernel import kernel_arguments
|
||||||
|
(opts, removed_no_inst_args) = parse_arguments(boot_cmdline=kernel_arguments)
|
||||||
|
+ if not opts.method:
|
||||||
|
+ opts.method = opts.stage2
|
||||||
|
|
||||||
|
from pyanaconda.core.configuration.anaconda import conf
|
||||||
|
conf.set_from_opts(opts)
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
71
disable-disk-encryption.patch
Normal file
71
disable-disk-encryption.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From bec6776715baaff79d29e1703b7c3306c265071b Mon Sep 17 00:00:00 2001
|
||||||
|
From: xia_qirong <xiaqirong1@huawei.com>
|
||||||
|
Date: Wed, 16 Sep 2020 15:28:39 +0800
|
||||||
|
Subject: [PATCH] disable disk encryption
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/ui/gui/spokes/custom_storage.py | 8 ++++----
|
||||||
|
pyanaconda/ui/gui/spokes/storage.py | 7 ++++---
|
||||||
|
2 files changed, 8 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/custom_storage.py b/pyanaconda/ui/gui/spokes/custom_storage.py
|
||||||
|
index 347a0e0..d72e315 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/custom_storage.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/custom_storage.py
|
||||||
|
@@ -796,8 +796,8 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler):
|
||||||
|
fancy_set_sensitive(self._reformatCheckbox, self._permissions.reformat)
|
||||||
|
|
||||||
|
# Set up the encryption.
|
||||||
|
- self._encryptCheckbox.set_active(self._request.device_encrypted)
|
||||||
|
- fancy_set_sensitive(self._encryptCheckbox, self._permissions.device_encrypted)
|
||||||
|
+ self._encryptCheckbox.set_active(False)
|
||||||
|
+ fancy_set_sensitive(self._encryptCheckbox, False)
|
||||||
|
|
||||||
|
self._encryptCheckbox.set_inconsistent(self._request.container_encrypted)
|
||||||
|
text = _("The container is encrypted.") if self._request.container_encrypted else ""
|
||||||
|
@@ -1268,7 +1268,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler):
|
||||||
|
self._encryptCheckbox.set_active(False)
|
||||||
|
self._encryptCheckbox.set_inconsistent(True)
|
||||||
|
|
||||||
|
- fancy_set_sensitive(self._encryptCheckbox, self._permissions.device_encrypted)
|
||||||
|
+ fancy_set_sensitive(self._encryptCheckbox, False)
|
||||||
|
self._update_luks_combo()
|
||||||
|
|
||||||
|
# Update the UI.
|
||||||
|
@@ -1490,7 +1490,7 @@ class CustomPartitioningSpoke(NormalSpoke, StorageCheckHandler):
|
||||||
|
|
||||||
|
# Update the UI.
|
||||||
|
fancy_set_sensitive(self._labelEntry, self._permissions.label)
|
||||||
|
- fancy_set_sensitive(self._encryptCheckbox, self._permissions.device_encrypted)
|
||||||
|
+ fancy_set_sensitive(self._encryptCheckbox, False)
|
||||||
|
self._update_luks_combo()
|
||||||
|
fancy_set_sensitive(self._fsCombo, self._permissions.format_type)
|
||||||
|
self.on_value_changed()
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/storage.py b/pyanaconda/ui/gui/spokes/storage.py
|
||||||
|
index 9494d6a..b2c0d3e 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/storage.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/storage.py
|
||||||
|
@@ -289,6 +289,9 @@ class StorageSpoke(NormalSpoke, StorageCheckHandler):
|
||||||
|
# Configure the partitioning methods.
|
||||||
|
self._configure_partitioning_methods()
|
||||||
|
|
||||||
|
+ # disable disk encryption
|
||||||
|
+ self._encryption_revealer.set_reveal_child(False)
|
||||||
|
+
|
||||||
|
def _configure_partitioning_methods(self):
|
||||||
|
if "CustomPartitioningSpoke" in conf.ui.hidden_spokes:
|
||||||
|
self._custom_part_radio_button.set_visible(False)
|
||||||
|
@@ -325,9 +328,7 @@ class StorageSpoke(NormalSpoke, StorageCheckHandler):
|
||||||
|
# as Blivet GUI handles encryption per encrypted device, not globally.
|
||||||
|
# Hide it also for the interactive partitioning as CustomPartitioningSpoke
|
||||||
|
# provides support for encryption of mount points.
|
||||||
|
- self._encryption_revealer.set_reveal_child(
|
||||||
|
- current_partitioning_method == PARTITIONING_METHOD_AUTOMATIC
|
||||||
|
- )
|
||||||
|
+ self._encryption_revealer.set_reveal_child(False)
|
||||||
|
|
||||||
|
# Hide the reclaim space checkbox if automatic storage configuration is not used.
|
||||||
|
self._reclaim_revealer.set_reveal_child(
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
37
disable-ssh-login-checkbox.patch
Normal file
37
disable-ssh-login-checkbox.patch
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
From 4229601e2c53c2e002436a0132663f83a89e6e47 Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Wed, 1 Jul 2020 18:08:35 +0800
|
||||||
|
Subject: [PATCH] disable ssh login checkbox
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/ui/gui/spokes/root_password.py | 7 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/root_password.py b/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
index 1d19380..f2e389d 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
@@ -80,6 +80,8 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
self._enable_root_radio = self.builder.get_object("enable_root_radio")
|
||||||
|
self._disable_root_radio = self.builder.get_object("disable_root_radio")
|
||||||
|
self._root_password_ssh_login_override = self.builder.get_object("root_password_ssh_login_override")
|
||||||
|
+ self._root_password_ssh_login_override.set_visible(False)
|
||||||
|
+ self._root_password_ssh_login_override.set_no_show_all(True)
|
||||||
|
self._revealer = self.builder.get_object("password_revealer")
|
||||||
|
|
||||||
|
# Install the password checks:
|
||||||
|
@@ -159,9 +160,8 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
control.set_active(True)
|
||||||
|
self.on_root_enabled_changed(control)
|
||||||
|
|
||||||
|
- self._root_password_ssh_login_override.set_active(
|
||||||
|
- self._users_module.RootPasswordSSHLoginAllowed
|
||||||
|
- )
|
||||||
|
+ self._root_password_ssh_login_override.set_visible(False)
|
||||||
|
+ self._root_password_ssh_login_override.set_no_show_all(True)
|
||||||
|
if self.root_enabled:
|
||||||
|
# rerun checks so that we have a correct status message, if any
|
||||||
|
self.checker.run_checks()
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
42
euleros.conf
Normal file
42
euleros.conf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Anaconda configuration file for EulerOS.
|
||||||
|
|
||||||
|
[Profile]
|
||||||
|
# Define the profile.
|
||||||
|
profile_id = EulerOS
|
||||||
|
|
||||||
|
[Profile Detection]
|
||||||
|
# Match os-release values.
|
||||||
|
os_id = euleros
|
||||||
|
|
||||||
|
[Installation System]
|
||||||
|
can_detect_enabled_smt = False
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
default_on_boot = FIRST_WIRED_WITH_LINK
|
||||||
|
|
||||||
|
[Bootloader]
|
||||||
|
efi_dir = euleros
|
||||||
|
additional_arguments = crash_kexec_post_notifiers softlockup_panic=1 reserve_kbox_mem=16M fsck.mode=auto fsck.repair=yes
|
||||||
|
|
||||||
|
[Payload]
|
||||||
|
enable_closest_mirror = True
|
||||||
|
ignored_packages =
|
||||||
|
ntfsprogs
|
||||||
|
btrfs-progs
|
||||||
|
dmraid
|
||||||
|
nvme-cli
|
||||||
|
|
||||||
|
[Storage]
|
||||||
|
default_partitioning =
|
||||||
|
/ (min 1 GiB, max 70 GiB)
|
||||||
|
/home (min 500 MiB, free 50 GiB)
|
||||||
|
swap
|
||||||
|
|
||||||
|
[Storage Constraints]
|
||||||
|
swap_is_recommended = False
|
||||||
|
|
||||||
|
[User Interface]
|
||||||
|
blivet_gui_supported = False
|
||||||
|
|
||||||
|
[License]
|
||||||
|
eula = /usr/share/euleros-release/EULA
|
||||||
61
fix-hostname-info.patch
Normal file
61
fix-hostname-info.patch
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
From cc1706cdbcabab80ab867c2a8f5a517884faa048 Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Thu, 18 Jun 2020 17:13:47 +0800
|
||||||
|
Subject: [PATCH] fix hostname info
|
||||||
|
|
||||||
|
---
|
||||||
|
po/zh_CN.po | 6 +++---
|
||||||
|
pyanaconda/core/regexes.py | 2 +-
|
||||||
|
pyanaconda/network.py | 4 ++--
|
||||||
|
3 files changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/po/zh_CN.po b/po/zh_CN.po
|
||||||
|
index 18b0925..c2216e6 100644
|
||||||
|
--- a/po/zh_CN.po
|
||||||
|
+++ b/po/zh_CN.po
|
||||||
|
@@ -4089,11 +4089,11 @@ msgstr "本地主机名不能以英文句号“.”结尾。"
|
||||||
|
#: pyanaconda/network.py:119
|
||||||
|
msgid ""
|
||||||
|
"Host names can only contain the characters 'a-z', 'A-Z', '0-9', '-', or '.', "
|
||||||
|
-"parts between periods must contain something and cannot start or end with "
|
||||||
|
-"'-'."
|
||||||
|
+"parts between periods must contain something being 63 or fewer "
|
||||||
|
+"characters and cannot start or end with '.' and '-'."
|
||||||
|
msgstr ""
|
||||||
|
"主机名只能包含 'a-z'、'A-Z'、 '0-9'、 '-'(英文减号),或者 '.'(英文点号),"
|
||||||
|
-"其中两个点号中不能为空且不能以 '-' 开头或结尾。"
|
||||||
|
+"其中符号不能连接在一起,需用数字或字母隔开,整体长度必须少于64个字符且不能以'.'和'-'开头或结尾。"
|
||||||
|
|
||||||
|
#: pyanaconda/network.py:457
|
||||||
|
msgid "Status not available"
|
||||||
|
diff --git a/pyanaconda/core/regexes.py b/pyanaconda/core/regexes.py
|
||||||
|
index cc00702..388d1ff 100644
|
||||||
|
--- a/pyanaconda/core/regexes.py
|
||||||
|
+++ b/pyanaconda/core/regexes.py
|
||||||
|
@@ -103,7 +103,7 @@ IPV4_NETMASK_WITH_ANCHORS = re.compile("^" + IPV4_NETMASK_WITHOUT_ANCHORS + "$")
|
||||||
|
# with a period, but it can end with one.
|
||||||
|
# This regex uses negative lookahead and lookback assertions to enforce the
|
||||||
|
# hyphen rules and make it way more confusing
|
||||||
|
-HOSTNAME_PATTERN_WITHOUT_ANCHORS = r'(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)(?:\.(?!-)[A-Za-z0-9-]{1,63}(?<!-))*\.?)'
|
||||||
|
+HOSTNAME_PATTERN_WITHOUT_ANCHORS = r'(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)(?:\.(?!-)[A-Za-z0-9-]{1,63}(?<!-))*)'
|
||||||
|
|
||||||
|
# URL Hostname
|
||||||
|
# This matches any hostname, IPv4 literal or properly encased IPv6 literal
|
||||||
|
diff --git a/pyanaconda/network.py b/pyanaconda/network.py
|
||||||
|
index 38fe957..8f04d63 100644
|
||||||
|
--- a/pyanaconda/network.py
|
||||||
|
+++ b/pyanaconda/network.py
|
||||||
|
@@ -114,8 +114,8 @@ def is_valid_hostname(hostname, local=False):
|
||||||
|
if not re.match('^' + HOSTNAME_PATTERN_WITHOUT_ANCHORS + '$', hostname):
|
||||||
|
return (False, _("Host names can only contain the characters 'a-z', "
|
||||||
|
"'A-Z', '0-9', '-', or '.', parts between periods "
|
||||||
|
- "must contain something and cannot start or end with "
|
||||||
|
- "'-'."))
|
||||||
|
+ "must contain something being 63 or fewer "
|
||||||
|
+ "characters and cannot start or end with '.' and '-'."))
|
||||||
|
|
||||||
|
return (True, "")
|
||||||
|
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
42
hce.conf
Normal file
42
hce.conf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Anaconda configuration file for HCE.
|
||||||
|
|
||||||
|
[Profile]
|
||||||
|
# Define the profile.
|
||||||
|
profile_id = HCE
|
||||||
|
|
||||||
|
[Profile Detection]
|
||||||
|
# Match os-release values.
|
||||||
|
os_id = hce
|
||||||
|
|
||||||
|
[Installation System]
|
||||||
|
can_detect_enabled_smt = False
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
default_on_boot = FIRST_WIRED_WITH_LINK
|
||||||
|
|
||||||
|
[Bootloader]
|
||||||
|
efi_dir = hce
|
||||||
|
additional_arguments = crash_kexec_post_notifiers softlockup_panic=1 reserve_kbox_mem=16M fsck.mode=auto fsck.repair=yes
|
||||||
|
|
||||||
|
[Payload]
|
||||||
|
enable_closest_mirror = True
|
||||||
|
ignored_packages =
|
||||||
|
ntfsprogs
|
||||||
|
btrfs-progs
|
||||||
|
dmraid
|
||||||
|
nvme-cli
|
||||||
|
|
||||||
|
[Storage]
|
||||||
|
default_partitioning =
|
||||||
|
/ (min 1 GiB, max 70 GiB)
|
||||||
|
/home (min 500 MiB, free 50 GiB)
|
||||||
|
swap
|
||||||
|
|
||||||
|
[Storage Constraints]
|
||||||
|
swap_is_recommended = False
|
||||||
|
|
||||||
|
[User Interface]
|
||||||
|
blivet_gui_supported = False
|
||||||
|
|
||||||
|
[License]
|
||||||
|
eula = /usr/share/hce-release/EULA
|
||||||
131
hide-help-button.patch
Normal file
131
hide-help-button.patch
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
From cf192d77045b8aeb8cdcd55c98a93ad64fea3c3b Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Fri, 19 Jun 2020 09:20:14 +0800
|
||||||
|
Subject: [PATCH] hide help button
|
||||||
|
|
||||||
|
---
|
||||||
|
data/tmux.conf | 3 +--
|
||||||
|
pyanaconda/ui/gui/__init__.py | 27 ---------------------------
|
||||||
|
widgets/src/BaseWindow.c | 21 ---------------------
|
||||||
|
3 files changed, 1 insertion(+), 50 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/data/tmux.conf b/data/tmux.conf
|
||||||
|
index 87c9cb7..63240f7 100644
|
||||||
|
--- a/data/tmux.conf
|
||||||
|
+++ b/data/tmux.conf
|
||||||
|
@@ -1,7 +1,6 @@
|
||||||
|
# tmux.conf for the anaconda environment
|
||||||
|
|
||||||
|
bind -n M-tab next
|
||||||
|
-bind -n F1 list-keys
|
||||||
|
|
||||||
|
set-option -s exit-unattached off
|
||||||
|
set-option -g base-index 1
|
||||||
|
@@ -25,7 +24,7 @@ set-option -g history-limit 10000
|
||||||
|
# then re-attach to it in the tmux service run on the console tty.
|
||||||
|
new-session -d -s anaconda -n main anaconda
|
||||||
|
|
||||||
|
-set-option status-right '#[fg=blue]#(echo -n "Switch tab: Alt+Tab | Help: F1 ")'
|
||||||
|
+set-option status-right '#[fg=blue]#(echo -n "Switch tab: Alt+Tab ")'
|
||||||
|
|
||||||
|
new-window -d -n shell "bash --login"
|
||||||
|
new-window -d -n log "tail -F /tmp/anaconda.log"
|
||||||
|
diff --git a/pyanaconda/ui/gui/__init__.py b/pyanaconda/ui/gui/__init__.py
|
||||||
|
index 06373d9..6a6e3b9 100644
|
||||||
|
--- a/pyanaconda/ui/gui/__init__.py
|
||||||
|
+++ b/pyanaconda/ui/gui/__init__.py
|
||||||
|
@@ -443,20 +443,6 @@ class MainWindow(Gtk.Window):
|
||||||
|
# Return False to indicate that the child allocation is not yet set
|
||||||
|
return False
|
||||||
|
|
||||||
|
- def _on_mnemonics_visible_changed(self, window, property_type, obj):
|
||||||
|
- # mnemonics display has been activated or deactivated,
|
||||||
|
- # add or remove the F1 mnemonics display from the help button
|
||||||
|
- help_button = obj.window.get_help_button()
|
||||||
|
- if window.props.mnemonics_visible:
|
||||||
|
- # save current label
|
||||||
|
- old_label = help_button.get_label()
|
||||||
|
- self._saved_help_button_label = old_label
|
||||||
|
- # add the (F1) "mnemonics" to the help button
|
||||||
|
- help_button.set_label("%s (F1)" % old_label)
|
||||||
|
- else:
|
||||||
|
- # restore the old label
|
||||||
|
- help_button.set_label(self._saved_help_button_label)
|
||||||
|
-
|
||||||
|
def _on_child_added(self, widget, user_data):
|
||||||
|
# If this is GtkLabel, apply the language attribute
|
||||||
|
if isinstance(widget, Gtk.Label):
|
||||||
|
@@ -480,8 +466,6 @@ class MainWindow(Gtk.Window):
|
||||||
|
old_screen = self._stack.get_visible_child()
|
||||||
|
if old_screen:
|
||||||
|
old_screen.remove_accelerator(self._accel_group, Gdk.KEY_F12, 0)
|
||||||
|
- old_screen.remove_accelerator(self._accel_group, Gdk.KEY_F1, 0)
|
||||||
|
- old_screen.remove_accelerator(self._accel_group, Gdk.KEY_F1, Gdk.ModifierType.MOD1_MASK)
|
||||||
|
|
||||||
|
# Check if the widget is already on the stack
|
||||||
|
if child not in self._stack_contents:
|
||||||
|
@@ -498,17 +482,6 @@ class MainWindow(Gtk.Window):
|
||||||
|
child.window.add_accelerator("button-clicked", self._accel_group,
|
||||||
|
Gdk.KEY_F12, 0, 0)
|
||||||
|
|
||||||
|
- # Configure the help button
|
||||||
|
- child.window.add_accelerator("help-button-clicked", self._accel_group,
|
||||||
|
- Gdk.KEY_F1, 0, 0)
|
||||||
|
- child.window.add_accelerator("help-button-clicked", self._accel_group,
|
||||||
|
- Gdk.KEY_F1, Gdk.ModifierType.MOD1_MASK, 0)
|
||||||
|
-
|
||||||
|
- # Connect to mnemonics-visible to add the (F1) mnemonic to the button label
|
||||||
|
- if self._mnemonic_signal:
|
||||||
|
- self.disconnect(self._mnemonic_signal)
|
||||||
|
- self._mnemonic_signal = self.connect("notify::mnemonics-visible", self._on_mnemonics_visible_changed, child)
|
||||||
|
-
|
||||||
|
self._stack.set_visible_child(child.window)
|
||||||
|
|
||||||
|
if child.focusWidgetName:
|
||||||
|
diff --git a/widgets/src/BaseWindow.c b/widgets/src/BaseWindow.c
|
||||||
|
index 6a1e372..203d4a7 100644
|
||||||
|
--- a/widgets/src/BaseWindow.c
|
||||||
|
+++ b/widgets/src/BaseWindow.c
|
||||||
|
@@ -393,30 +393,11 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||||
|
gtk_widget_set_margin_top(win->priv->layout_indicator, 6);
|
||||||
|
gtk_widget_set_margin_bottom(win->priv->layout_indicator, 6);
|
||||||
|
|
||||||
|
- /* Create the help button. */
|
||||||
|
- win->priv->help_button = gtk_button_new_with_label(_(HELP_BUTTON_LABEL));
|
||||||
|
- gtk_widget_set_halign(win->priv->help_button, GTK_ALIGN_END);
|
||||||
|
- gtk_widget_set_vexpand(win->priv->help_button, FALSE);
|
||||||
|
- gtk_widget_set_valign(win->priv->help_button, GTK_ALIGN_END);
|
||||||
|
- gtk_widget_set_margin_bottom(win->priv->help_button, 6);
|
||||||
|
- gtk_widget_set_name(win->priv->help_button, "anaconda-help-button");
|
||||||
|
-
|
||||||
|
- atk = gtk_widget_get_accessible(win->priv->help_button);
|
||||||
|
- atk_object_set_name(atk, _(HELP_BUTTON_LABEL));
|
||||||
|
-
|
||||||
|
- /* Hook up some signals for that button. The signal handlers here will
|
||||||
|
- * just raise our own custom signals for the whole window.
|
||||||
|
- */
|
||||||
|
- g_signal_connect(win->priv->help_button, "clicked",
|
||||||
|
- G_CALLBACK(anaconda_base_window_help_button_clicked), win);
|
||||||
|
-
|
||||||
|
-
|
||||||
|
/* Add everything to the nav area. */
|
||||||
|
gtk_grid_attach(GTK_GRID(win->priv->nav_area), win->priv->name_label, 0, 0, 1, 1);
|
||||||
|
gtk_grid_attach(GTK_GRID(win->priv->nav_area), win->priv->distro_label, 1, 0, 2, 1);
|
||||||
|
gtk_grid_attach(GTK_GRID(win->priv->nav_area), win->priv->beta_label, 1, 1, 1, 1);
|
||||||
|
gtk_grid_attach(GTK_GRID(win->priv->nav_area), win->priv->layout_indicator, 1, 2, 1, 1);
|
||||||
|
- gtk_grid_attach(GTK_GRID(win->priv->nav_area), win->priv->help_button, 2, 1, 1, 2);
|
||||||
|
|
||||||
|
/* Last thing for the main_box is a revealer for the info bar */
|
||||||
|
win->priv->info_revealer = gtk_revealer_new();
|
||||||
|
@@ -832,8 +813,6 @@ void anaconda_base_window_retranslate(AnacondaBaseWindow *win) {
|
||||||
|
|
||||||
|
gtk_label_set_text(GTK_LABEL(win->priv->beta_label), _(win->priv->orig_beta));
|
||||||
|
|
||||||
|
- gtk_button_set_label(GTK_BUTTON(win->priv->help_button), _(HELP_BUTTON_LABEL));
|
||||||
|
-
|
||||||
|
/* retranslate the layout indicator */
|
||||||
|
anaconda_layout_indicator_retranslate(ANACONDA_LAYOUT_INDICATOR(win->priv->layout_indicator));
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
25
modify-interface-is-extended-in-Chinese-mode.patch
Normal file
25
modify-interface-is-extended-in-Chinese-mode.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From ae056f86eca56a76ae9736d7f199d73548a7574b Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Mon, 7 Nov 2022 20:03:39 +0800
|
||||||
|
Subject: [PATCH] modify interface is extended in Chinese mode
|
||||||
|
|
||||||
|
---
|
||||||
|
po/zh_CN.po | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/po/zh_CN.po b/po/zh_CN.po
|
||||||
|
index 8f48aad..18b0925 100644
|
||||||
|
--- a/po/zh_CN.po
|
||||||
|
+++ b/po/zh_CN.po
|
||||||
|
@@ -4433,7 +4433,7 @@ msgstr "搜索方式(_B):"
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/advanced_storage.glade:153
|
||||||
|
msgid "Port / Target / LUN #"
|
||||||
|
-msgstr "端口 / 目标 / 逻辑单位数标示符 (LUN #)"
|
||||||
|
+msgstr "端口 / 目标 / LUN # "
|
||||||
|
|
||||||
|
#: pyanaconda/ui/gui/spokes/advanced_storage.glade:154
|
||||||
|
msgid "Target WWID"
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
184
modify-timezone-and-delete-datezone-map.patch
Normal file
184
modify-timezone-and-delete-datezone-map.patch
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
From 303b072992542dfa9a7e2b2a9dc99120564a3f07 Mon Sep 17 00:00:00 2001
|
||||||
|
From: sun_hai_10 <sunhai10@huawei.com>
|
||||||
|
Date: Mon, 7 Nov 2022 14:23:04 +0800
|
||||||
|
Subject: [PATCH] modify timezone and delete datezone map
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/modules/timezone/installation.py | 4 +-
|
||||||
|
pyanaconda/modules/timezone/timezone.py | 2 +-
|
||||||
|
pyanaconda/ui/gui/spokes/datetime_spoke.glade | 14 -------
|
||||||
|
pyanaconda/ui/gui/spokes/datetime_spoke.py | 38 +++----------------
|
||||||
|
4 files changed, 8 insertions(+), 50 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/modules/timezone/installation.py b/pyanaconda/modules/timezone/installation.py
|
||||||
|
index 08e24c0..f11874f 100644
|
||||||
|
--- a/pyanaconda/modules/timezone/installation.py
|
||||||
|
+++ b/pyanaconda/modules/timezone/installation.py
|
||||||
|
@@ -63,8 +63,8 @@ class ConfigureTimezoneTask(Task):
|
||||||
|
if not is_valid_timezone(self._timezone):
|
||||||
|
# this should never happen, but for pity's sake
|
||||||
|
log.warning("Timezone %s set in kickstart is not valid, "
|
||||||
|
- "falling back to default (America/New_York).", self._timezone)
|
||||||
|
- self._timezone = "America/New_York"
|
||||||
|
+ "falling back to default (Asia/Shanghai).", self._timezone)
|
||||||
|
+ self._timezone = "Asia/Shanghai"
|
||||||
|
|
||||||
|
def _make_timezone_symlink(self):
|
||||||
|
"""Create the symlink that actually defines timezone."""
|
||||||
|
diff --git a/pyanaconda/modules/timezone/timezone.py b/pyanaconda/modules/timezone/timezone.py
|
||||||
|
index b5d5f7b..2a328a3 100644
|
||||||
|
--- a/pyanaconda/modules/timezone/timezone.py
|
||||||
|
+++ b/pyanaconda/modules/timezone/timezone.py
|
||||||
|
@@ -44,7 +44,7 @@ class TimezoneService(KickstartService):
|
||||||
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
|
self.timezone_changed = Signal()
|
||||||
|
- self._timezone = "America/New_York"
|
||||||
|
+ self._timezone = "Asia/Shanghai"
|
||||||
|
|
||||||
|
self.is_utc_changed = Signal()
|
||||||
|
self._is_utc = False
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.glade b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
|
||||||
|
index 188f93b..aa468d9 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.glade
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.glade
|
||||||
|
@@ -3,7 +3,6 @@
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.12"/>
|
||||||
|
<requires lib="AnacondaWidgets" version="1.0"/>
|
||||||
|
- <requires lib="TimezoneMap" version="0.4"/>
|
||||||
|
<object class="GtkListStore" id="cities">
|
||||||
|
<columns>
|
||||||
|
<!-- column-name name -->
|
||||||
|
@@ -314,19 +313,6 @@
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
- <child>
|
||||||
|
- <object class="CcTimezoneMap" id="tzmap">
|
||||||
|
- <property name="visible">True</property>
|
||||||
|
- <property name="can_focus">False</property>
|
||||||
|
- <signal name="location-changed" handler="on_location_changed" swapped="no"/>
|
||||||
|
- </object>
|
||||||
|
- <packing>
|
||||||
|
- <property name="expand">True</property>
|
||||||
|
- <property name="fill">True</property>
|
||||||
|
- <property name="padding">6</property>
|
||||||
|
- <property name="position">1</property>
|
||||||
|
- </packing>
|
||||||
|
- </child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkAlignment" id="footerAlignment">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/datetime_spoke.py b/pyanaconda/ui/gui/spokes/datetime_spoke.py
|
||||||
|
index b21bbc3..c8416b4 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/datetime_spoke.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/datetime_spoke.py
|
||||||
|
@@ -50,15 +50,14 @@ from pyanaconda.threading import threadMgr, AnacondaThread
|
||||||
|
import gi
|
||||||
|
gi.require_version("Gdk", "3.0")
|
||||||
|
gi.require_version("Gtk", "3.0")
|
||||||
|
-gi.require_version("TimezoneMap", "1.0")
|
||||||
|
|
||||||
|
-from gi.repository import Gdk, Gtk, TimezoneMap
|
||||||
|
+from gi.repository import Gdk, Gtk
|
||||||
|
|
||||||
|
log = get_module_logger(__name__)
|
||||||
|
|
||||||
|
__all__ = ["DatetimeSpoke"]
|
||||||
|
|
||||||
|
-DEFAULT_TZ = "America/New_York"
|
||||||
|
+DEFAULT_TZ = "Asia/Shanghai"
|
||||||
|
|
||||||
|
SPLIT_NUMBER_SUFFIX_RE = re.compile(r'([^0-9]*)([-+])([0-9]+)')
|
||||||
|
|
||||||
|
@@ -168,11 +167,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
icon = "preferences-system-time-symbolic"
|
||||||
|
title = CN_("GUI|Spoke", "_Time & Date")
|
||||||
|
|
||||||
|
- # Hack to get libtimezonemap loaded for GtkBuilder
|
||||||
|
- # see https://bugzilla.gnome.org/show_bug.cgi?id=712184
|
||||||
|
- _hack = TimezoneMap.TimezoneMap()
|
||||||
|
- del(_hack)
|
||||||
|
-
|
||||||
|
@staticmethod
|
||||||
|
def get_screen_id():
|
||||||
|
"""Return a unique id of this UI screen."""
|
||||||
|
@@ -211,7 +205,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
self._yearsStore = self.builder.get_object("years")
|
||||||
|
self._regionsStore = self.builder.get_object("regions")
|
||||||
|
self._citiesStore = self.builder.get_object("cities")
|
||||||
|
- self._tzmap = self.builder.get_object("tzmap")
|
||||||
|
self._dateBox = self.builder.get_object("dateBox")
|
||||||
|
|
||||||
|
# we need to know it the new value is the same as previous or not
|
||||||
|
@@ -334,10 +327,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
else:
|
||||||
|
return _("Invalid timezone")
|
||||||
|
else:
|
||||||
|
- location = self._tzmap.get_location()
|
||||||
|
- if location and location.get_property("zone"):
|
||||||
|
- return _("%s timezone") % get_xlated_timezone(location.get_property("zone"))
|
||||||
|
- else:
|
||||||
|
return _("Nothing selected")
|
||||||
|
|
||||||
|
def apply(self):
|
||||||
|
@@ -389,7 +378,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
kickstart_timezone = self._timezone_module.Timezone
|
||||||
|
|
||||||
|
if is_valid_timezone(kickstart_timezone):
|
||||||
|
- self._tzmap.set_timezone(kickstart_timezone)
|
||||||
|
time.tzset()
|
||||||
|
|
||||||
|
self._update_datetime()
|
||||||
|
@@ -766,7 +754,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
if region == "Etc":
|
||||||
|
# Etc timezones cannot be displayed on the map, so let's reset the
|
||||||
|
# location and manually set a highlight with no location pin.
|
||||||
|
- self._tzmap.clear_location()
|
||||||
|
# Some time zones are just the same default.
|
||||||
|
if city in ("GMT", "UTC", "UCT", "Greenwich", "Universal", "Zulu"):
|
||||||
|
offset = 0.0
|
||||||
|
@@ -780,13 +767,14 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
else:
|
||||||
|
log.warning("Unknown time zone selected in GUI: Etc/%s", city)
|
||||||
|
|
||||||
|
- self._tzmap.set_selected_offset(offset)
|
||||||
|
time.tzset()
|
||||||
|
else:
|
||||||
|
# we don't want the timezone-changed signal to be emitted
|
||||||
|
- self._tzmap.set_timezone(timezone)
|
||||||
|
time.tzset()
|
||||||
|
|
||||||
|
+ self._tz = get_timezone(timezone)
|
||||||
|
+ self._update_datetime()
|
||||||
|
+
|
||||||
|
# update "old" values
|
||||||
|
self._old_city = city
|
||||||
|
|
||||||
|
@@ -836,22 +824,6 @@ class DatetimeSpoke(FirstbootSpokeMixIn, NormalSpoke):
|
||||||
|
self._stop_and_maybe_start_time_updating(interval=5)
|
||||||
|
self._daysFilter.refilter()
|
||||||
|
|
||||||
|
- def on_location_changed(self, tz_map, location):
|
||||||
|
- if not location:
|
||||||
|
- return
|
||||||
|
-
|
||||||
|
- timezone = location.get_property('zone')
|
||||||
|
-
|
||||||
|
- # Updating the timezone will update the region/city combo boxes to match.
|
||||||
|
- # The on_city_changed handler will attempt to convert the timezone back
|
||||||
|
- # to a location and set it in the map, which we don't want, since we
|
||||||
|
- # already have a location. That's why we're here.
|
||||||
|
- with blockedHandler(self._cityCombo, self.on_city_changed):
|
||||||
|
- if self._set_timezone(timezone):
|
||||||
|
- # timezone successfully set
|
||||||
|
- self._tz = get_timezone(timezone)
|
||||||
|
- self._update_datetime()
|
||||||
|
-
|
||||||
|
def on_timeformat_changed(self, button24h, *args):
|
||||||
|
hours = int(self._hoursLabel.get_text())
|
||||||
|
amPm = self._amPmLabel.get_text()
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
42
nestos.conf
Normal file
42
nestos.conf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Anaconda configuration file for nestos.
|
||||||
|
|
||||||
|
[Profile]
|
||||||
|
# Define the profile.
|
||||||
|
profile_id = nestos
|
||||||
|
|
||||||
|
[Profile Detection]
|
||||||
|
# Match os-release values.
|
||||||
|
os_id = nestos
|
||||||
|
|
||||||
|
[Installation System]
|
||||||
|
can_detect_enabled_smt = False
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
default_on_boot = FIRST_WIRED_WITH_LINK
|
||||||
|
|
||||||
|
[Bootloader]
|
||||||
|
efi_dir = openEuler
|
||||||
|
additional_arguments = cgroup_disable=files apparmor=0
|
||||||
|
|
||||||
|
[Payload]
|
||||||
|
enable_closest_mirror = True
|
||||||
|
ignored_packages =
|
||||||
|
ntfsprogs
|
||||||
|
btrfs-progs
|
||||||
|
dmraid
|
||||||
|
nvme-cli
|
||||||
|
|
||||||
|
[Storage]
|
||||||
|
default_partitioning =
|
||||||
|
/ (min 1 GiB, max 70 GiB)
|
||||||
|
/home (min 500 MiB, free 50 GiB)
|
||||||
|
swap
|
||||||
|
|
||||||
|
[Storage Constraints]
|
||||||
|
swap_is_recommended = False
|
||||||
|
|
||||||
|
[User Interface]
|
||||||
|
blivet_gui_supported = False
|
||||||
|
|
||||||
|
[License]
|
||||||
|
eula = /usr/share/NestOS-release/EULA
|
||||||
42
openeuler.conf
Normal file
42
openeuler.conf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Anaconda configuration file for {os_name}.
|
||||||
|
|
||||||
|
[Profile]
|
||||||
|
# Define the profile.
|
||||||
|
profile_id = {os_name}
|
||||||
|
|
||||||
|
[Profile Detection]
|
||||||
|
# Match os-release values.
|
||||||
|
os_id = {os_name}
|
||||||
|
|
||||||
|
[Installation System]
|
||||||
|
can_detect_enabled_smt = False
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
default_on_boot = FIRST_WIRED_WITH_LINK
|
||||||
|
|
||||||
|
[Bootloader]
|
||||||
|
efi_dir = openEuler
|
||||||
|
additional_arguments = cgroup_disable=files apparmor=0
|
||||||
|
|
||||||
|
[Payload]
|
||||||
|
enable_closest_mirror = True
|
||||||
|
ignored_packages =
|
||||||
|
ntfsprogs
|
||||||
|
btrfs-progs
|
||||||
|
dmraid
|
||||||
|
nvme-cli
|
||||||
|
|
||||||
|
[Storage]
|
||||||
|
default_partitioning =
|
||||||
|
/ (min 1 GiB, max 70 GiB)
|
||||||
|
/home (min 500 MiB, free 50 GiB)
|
||||||
|
swap
|
||||||
|
|
||||||
|
[Storage Constraints]
|
||||||
|
swap_is_recommended = False
|
||||||
|
|
||||||
|
[User Interface]
|
||||||
|
blivet_gui_supported = False
|
||||||
|
|
||||||
|
[License]
|
||||||
|
eula = /usr/share/{os_name}-release/EULA
|
||||||
28
remove-vender-issue-in-netdev.patch
Normal file
28
remove-vender-issue-in-netdev.patch
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From b896b694238389a85539f60cab6ee41ab04c4f29 Mon Sep 17 00:00:00 2001
|
||||||
|
From: t_feng <fengtao40@huawei.com>
|
||||||
|
Date: Fri, 19 Jun 2020 10:25:20 +0800
|
||||||
|
Subject: [PATCH] remove vender issue in netdev
|
||||||
|
|
||||||
|
---
|
||||||
|
pyanaconda/ui/gui/spokes/network.py | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/network.py b/pyanaconda/ui/gui/spokes/network.py
|
||||||
|
index 1318e17..e906f9e 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/network.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/network.py
|
||||||
|
@@ -782,9 +782,8 @@ class NetworkControlBox(GObject.GObject):
|
||||||
|
unplugged)
|
||||||
|
|
||||||
|
if device:
|
||||||
|
- title += '\n<span size="small">%s %s</span>' % \
|
||||||
|
- (escape_markup(device.get_vendor() or ""),
|
||||||
|
- escape_markup(device.get_product() or ""))
|
||||||
|
+ title += '\n<span size="small">%s</span>' % \
|
||||||
|
+ (escape_markup(device.get_product() or ""))
|
||||||
|
return title
|
||||||
|
|
||||||
|
def refresh_ui(self, state=None):
|
||||||
|
--
|
||||||
|
2.23.0
|
||||||
|
|
||||||
234
support-use-sm3-crypt-user-password.patch
Normal file
234
support-use-sm3-crypt-user-password.patch
Normal file
@ -0,0 +1,234 @@
|
|||||||
|
From b311b645f9447f7e765b0e418d3f37c32e2702e1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: liuxin <liuxin264@huawei.com>
|
||||||
|
Date: Mon, 7 Nov 2022 19:07:50 +0800
|
||||||
|
Subject: [PATCH] support use sm3 crypt user password
|
||||||
|
|
||||||
|
---
|
||||||
|
po/zh_CN.po | 5 ++++
|
||||||
|
pyanaconda/core/users.py | 5 +++-
|
||||||
|
pyanaconda/ui/gui/spokes/root_password.glade | 15 ++++++++++++
|
||||||
|
pyanaconda/ui/gui/spokes/root_password.py | 16 ++++++++++++-
|
||||||
|
pyanaconda/ui/gui/spokes/user.glade | 16 ++++++++++++-
|
||||||
|
pyanaconda/ui/gui/spokes/user.py | 14 ++++++++++-
|
||||||
|
.../pyanaconda_tests/test_crypt_password.py | 23 +++++++++++++++++++
|
||||||
|
7 files changed, 90 insertions(+), 4 deletions(-)
|
||||||
|
create mode 100644 tests/unit_tests/pyanaconda_tests/test_crypt_password.py
|
||||||
|
|
||||||
|
diff --git a/po/zh_CN.po b/po/zh_CN.po
|
||||||
|
index e31f0b2..8f48aad 100644
|
||||||
|
--- a/po/zh_CN.po
|
||||||
|
+++ b/po/zh_CN.po
|
||||||
|
@@ -7640,3 +7640,8 @@ msgstr "开始安装到硬盘"
|
||||||
|
#~ msgstr[0] ""
|
||||||
|
#~ "<b>%(count)d 个磁盘;容量 %(size)s;空闲空间 %(free)s</b> (包括未分区及文"
|
||||||
|
#~ "件系统内的部分)"
|
||||||
|
+
|
||||||
|
+#: pyanaconda/ui/gui/spokes/root_password.glade:215
|
||||||
|
+#: pyanaconda/ui/gui/spokes/user.glade:278
|
||||||
|
+msgid "Use SM3 to encrypt the password"
|
||||||
|
+msgstr "使用SM3算法加密密码"
|
||||||
|
diff --git a/pyanaconda/core/users.py b/pyanaconda/core/users.py
|
||||||
|
index c2d14e2..649fad6 100644
|
||||||
|
--- a/pyanaconda/core/users.py
|
||||||
|
+++ b/pyanaconda/core/users.py
|
||||||
|
@@ -38,7 +38,7 @@ from pyanaconda.anaconda_loggers import get_module_logger
|
||||||
|
log = get_module_logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
-def crypt_password(password):
|
||||||
|
+def crypt_password(password, algo=None):
|
||||||
|
"""Crypt a password.
|
||||||
|
|
||||||
|
Process a password with appropriate salted one-way algorithm.
|
||||||
|
@@ -51,6 +51,9 @@ def crypt_password(password):
|
||||||
|
# so we need to generate the setting ourselves
|
||||||
|
b64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
|
||||||
|
setting = "$y$j9T$" + "".join(sr().choice(b64) for _sc in range(24))
|
||||||
|
+
|
||||||
|
+ if algo == "sm3":
|
||||||
|
+ setting = crypt.METHOD_SM3
|
||||||
|
|
||||||
|
# and try to compute the password hash using our yescrypt setting
|
||||||
|
try:
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/root_password.glade b/pyanaconda/ui/gui/spokes/root_password.glade
|
||||||
|
index f710439..53bc90c 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/root_password.glade
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/root_password.glade
|
||||||
|
@@ -328,6 +328,21 @@ The root user (also known as super user) has complete access to the entire syste
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkCheckButton" id="passwd_sm3">
|
||||||
|
+ <property name="label" translatable="yes">Use SM3 to encrypt the password</property>
|
||||||
|
+ <property name="can_focus">True</property>
|
||||||
|
+ <property name="receives_default">False</property>
|
||||||
|
+ <property name="halign">start</property>
|
||||||
|
+ <property name="draw_indicator">True</property>
|
||||||
|
+ <signal name="clicked" handler="on_sm3_clicked" swapped="no"/>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="expand">False</property>
|
||||||
|
+ <property name="fill">True</property>
|
||||||
|
+ <property name="position">3</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/root_password.py b/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
index f2e389d..062f59d 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/root_password.py
|
||||||
|
@@ -68,6 +68,8 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
NormalSpoke.__init__(self, *args)
|
||||||
|
GUISpokeInputCheckHandler.__init__(self)
|
||||||
|
self._users_module = USERS.get_proxy()
|
||||||
|
+ # sm3 password method
|
||||||
|
+ self._passwd_method_sm3 = False
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
NormalSpoke.initialize(self)
|
||||||
|
@@ -83,6 +85,9 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
self._root_password_ssh_login_override.set_no_show_all(True)
|
||||||
|
self._revealer = self.builder.get_object("password_revealer")
|
||||||
|
|
||||||
|
+ # sm3 object
|
||||||
|
+ self._passwd_method_button = self.builder.get_object("passwd_sm3")
|
||||||
|
+
|
||||||
|
# Install the password checks:
|
||||||
|
# - Has a password been specified?
|
||||||
|
# - If a password has been specified and there is data in the confirm box, do they match?
|
||||||
|
@@ -179,9 +184,15 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
return not self._users_module.CheckAdminUserExists()
|
||||||
|
|
||||||
|
def apply(self):
|
||||||
|
+
|
||||||
|
+ if self._passwd_method_sm3 is True:
|
||||||
|
+ algo = "sm3"
|
||||||
|
+ else:
|
||||||
|
+ algo = None
|
||||||
|
+
|
||||||
|
if self.root_enabled and self.password:
|
||||||
|
# Set the root password.
|
||||||
|
- self._users_module.SetCryptedRootPassword(crypt_password(self.password))
|
||||||
|
+ self._users_module.SetCryptedRootPassword(crypt_password(self.password, algo))
|
||||||
|
|
||||||
|
# Unlock the root account.
|
||||||
|
self._users_module.SetRootAccountLocked(False)
|
||||||
|
@@ -330,3 +341,6 @@ class PasswordSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler)
|
||||||
|
self._revealer.set_reveal_child(unlocked)
|
||||||
|
if unlocked:
|
||||||
|
self.password_entry.grab_focus()
|
||||||
|
+
|
||||||
|
+ def on_sm3_clicked(self, button):
|
||||||
|
+ self._passwd_method_sm3 = self._passwd_method_button.get_active()
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/user.glade b/pyanaconda/ui/gui/spokes/user.glade
|
||||||
|
index 4783a9f..2e844fa 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/user.glade
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/user.glade
|
||||||
|
@@ -277,6 +277,20 @@
|
||||||
|
<property name="top-attach">3</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
+ <child>
|
||||||
|
+ <object class="GtkCheckButton" id="passwd_sm3">
|
||||||
|
+ <property name="label" translatable="yes">Use SM3 to encrypt the password</property>
|
||||||
|
+ <property name="can_focus">True</property>
|
||||||
|
+ <property name="receives_default">False</property>
|
||||||
|
+ <property name="halign">start</property>
|
||||||
|
+ <property name="draw_indicator">True</property>
|
||||||
|
+ <signal name="clicked" handler="on_sm3_clicked" swapped="no"/>
|
||||||
|
+ </object>
|
||||||
|
+ <packing>
|
||||||
|
+ <property name="left_attach">1</property>
|
||||||
|
+ <property name="top_attach">8</property>
|
||||||
|
+ </packing>
|
||||||
|
+ </child>
|
||||||
|
<child>
|
||||||
|
<!-- n-columns=3 n-rows=3 -->
|
||||||
|
<object class="GtkGrid" id="grid2">
|
||||||
|
@@ -324,7 +338,7 @@
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left-attach">1</property>
|
||||||
|
- <property name="top-attach">8</property>
|
||||||
|
+ <property name="top-attach">9</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
diff --git a/pyanaconda/ui/gui/spokes/user.py b/pyanaconda/ui/gui/spokes/user.py
|
||||||
|
index 5b16443..cb62873 100644
|
||||||
|
--- a/pyanaconda/ui/gui/spokes/user.py
|
||||||
|
+++ b/pyanaconda/ui/gui/spokes/user.py
|
||||||
|
@@ -261,6 +261,8 @@ class UserSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler):
|
||||||
|
|
||||||
|
self._users_module = USERS.get_proxy()
|
||||||
|
self._password_is_required = True
|
||||||
|
+ # sm3 password method
|
||||||
|
+ self._passwd_method_sm3 = False
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
NormalSpoke.initialize(self)
|
||||||
|
@@ -294,6 +296,9 @@ class UserSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler):
|
||||||
|
self._password_bar = self.builder.get_object("password_bar")
|
||||||
|
self._password_label = self.builder.get_object("password_label")
|
||||||
|
|
||||||
|
+ # sm3 object
|
||||||
|
+ self._passwd_method_button = self.builder.get_object("passwd_sm3")
|
||||||
|
+
|
||||||
|
# Install the password checks:
|
||||||
|
# - Has a password been specified?
|
||||||
|
# - If a password has been specified and there is data in the confirm box, do they match?
|
||||||
|
@@ -470,7 +475,11 @@ class UserSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler):
|
||||||
|
if self.password_required:
|
||||||
|
if self.password:
|
||||||
|
self.password_kickstarted = False
|
||||||
|
- self.user.password = crypt_password(self.password)
|
||||||
|
+ if self._passwd_method_sm3 is True:
|
||||||
|
+ algo = "sm3"
|
||||||
|
+ else:
|
||||||
|
+ algo = None
|
||||||
|
+ self.user.password = crypt_password(self.password, algo)
|
||||||
|
self.user.is_crypted = True
|
||||||
|
self.remove_placeholder_texts()
|
||||||
|
|
||||||
|
@@ -696,3 +705,6 @@ class UserSpoke(FirstbootSpokeMixIn, NormalSpoke, GUISpokeInputCheckHandler):
|
||||||
|
NormalSpoke.on_back_clicked(self, button)
|
||||||
|
else:
|
||||||
|
log.info("Return to hub prevented by password checking rules.")
|
||||||
|
+
|
||||||
|
+ def on_sm3_clicked(self, button):
|
||||||
|
+ self._passwd_method_sm3 = self._passwd_method_button.get_active()
|
||||||
|
diff --git a/tests/unit_tests/pyanaconda_tests/test_crypt_password.py b/tests/unit_tests/pyanaconda_tests/test_crypt_password.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..c2e1e4c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/unit_tests/pyanaconda_tests/test_crypt_password.py
|
||||||
|
@@ -0,0 +1,23 @@
|
||||||
|
+from pyanaconda.core.users import crypt_password
|
||||||
|
+import unittest
|
||||||
|
+import crypt
|
||||||
|
+import os
|
||||||
|
+
|
||||||
|
+@unittest.skipIf(os.geteuid() != 0, "user creation must be run as root")
|
||||||
|
+class CryptPasswordTest(unittest.TestCase):
|
||||||
|
+ def setUp(self):
|
||||||
|
+ pass
|
||||||
|
+
|
||||||
|
+ def tearDown(self):
|
||||||
|
+ pass
|
||||||
|
+
|
||||||
|
+ def test_crypt_password(self):
|
||||||
|
+ origin_password = "password"
|
||||||
|
+ encrypted = crypt_password(origin_password, "sm3")
|
||||||
|
+ self.assertTrue(encrypted.startswith("$sm3$"))
|
||||||
|
+
|
||||||
|
+ encrypted = crypt_password(origin_password)
|
||||||
|
+ self.assertTrue(encrypted.startswith("$6$"))
|
||||||
|
+
|
||||||
|
+if __name__ == '__main__':
|
||||||
|
+ unittest.main()
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user