diff --git a/ci-Honor-system-locale-for-RHEL-1355.patch b/ci-Honor-system-locale-for-RHEL-1355.patch new file mode 100644 index 0000000..c362160 --- /dev/null +++ b/ci-Honor-system-locale-for-RHEL-1355.patch @@ -0,0 +1,135 @@ +From 53e3f8ab9008fec8400f96918c2129f7defe6a70 Mon Sep 17 00:00:00 2001 +From: Emanuele Giuseppe Esposito +Date: Fri, 10 Jun 2022 20:51:55 +0200 +Subject: [PATCH 1/3] Honor system locale for RHEL (#1355) + +RH-Author: Emanuele Giuseppe Esposito +RH-MergeRequest: 29: Honor system locale for RHEL (#1355) +RH-Commit: [1/1] d571126fe6add8dc34a22c869d4e1a07a7373d8d (eesposit/cloud-init-centos-) +RH-Bugzilla: 2061604 +RH-Acked-by: Mohamed Gamal Morsy +RH-Acked-by: Vitaly Kuznetsov + +commit 58da7d856274e9ca2b507128d6f186e0e6abfe06 +Author: Wei Shi +Date: Wed Mar 30 23:55:30 2022 +0800 + + Honor system locale for RHEL (#1355) + + Make sure to use system locale as default on RHEL if locale is not + set in cloud-config. + + RHEL has a pre-installed cloud image using C.UTF-8 for system locale + just like ubuntu-minimal cloud image, without this patch, locale + module will set it to en_US.UTF-8 from ds default value during config + stage. + + Authored-by: Wei Shi + +Signed-off-by: Emanuele Giuseppe Esposito +--- + cloudinit/distros/rhel.py | 32 +++++++++++++++++++++++++ + tests/unittests/distros/test_generic.py | 10 ++++---- + tools/.github-cla-signers | 1 + + 3 files changed, 39 insertions(+), 4 deletions(-) + +diff --git a/cloudinit/distros/rhel.py b/cloudinit/distros/rhel.py +index 84744ece..320f4ba1 100644 +--- a/cloudinit/distros/rhel.py ++++ b/cloudinit/distros/rhel.py +@@ -7,6 +7,7 @@ + # Author: Joshua Harlow + # + # This file is part of cloud-init. See LICENSE file for license information. ++import os + + from cloudinit import distros, helpers + from cloudinit import log as logging +@@ -57,11 +58,25 @@ class Distro(distros.Distro): + # should only happen say once per instance...) + self._runner = helpers.Runners(paths) + self.osfamily = "redhat" ++ self.default_locale = "en_US.UTF-8" ++ self.system_locale = None + cfg["ssh_svcname"] = "sshd" + + def install_packages(self, pkglist): + self.package_command("install", pkgs=pkglist) + ++ def get_locale(self): ++ """Return the default locale if set, else use system locale""" ++ ++ # read system locale value ++ if not self.system_locale: ++ self.system_locale = self._read_system_locale() ++ ++ # Return system_locale setting if valid, else use default locale ++ return ( ++ self.system_locale if self.system_locale else self.default_locale ++ ) ++ + def apply_locale(self, locale, out_fn=None): + if self.uses_systemd(): + if not out_fn: +@@ -75,6 +90,23 @@ class Distro(distros.Distro): + } + rhel_util.update_sysconfig_file(out_fn, locale_cfg) + ++ def _read_system_locale(self, keyname="LANG"): ++ """Read system default locale setting, if present""" ++ if self.uses_systemd(): ++ locale_fn = self.systemd_locale_conf_fn ++ else: ++ locale_fn = self.locale_conf_fn ++ ++ if not locale_fn: ++ raise ValueError("Invalid path: %s" % locale_fn) ++ ++ if os.path.exists(locale_fn): ++ (_exists, contents) = rhel_util.read_sysconfig_file(locale_fn) ++ if keyname in contents: ++ return contents[keyname] ++ else: ++ return None ++ + def _write_hostname(self, hostname, filename): + # systemd will never update previous-hostname for us, so + # we need to do it ourselves +diff --git a/tests/unittests/distros/test_generic.py b/tests/unittests/distros/test_generic.py +index 93c5395c..fedc7300 100644 +--- a/tests/unittests/distros/test_generic.py ++++ b/tests/unittests/distros/test_generic.py +@@ -187,12 +187,14 @@ class TestGenericDistro(helpers.FilesystemMockingTestCase): + locale = d.get_locale() + self.assertEqual("C.UTF-8", locale) + +- def test_get_locale_rhel(self): +- """Test rhel distro returns NotImplementedError exception""" ++ @mock.patch("cloudinit.distros.rhel.Distro._read_system_locale") ++ def test_get_locale_rhel(self, m_locale): ++ """Test rhel distro returns locale set to C.UTF-8""" ++ m_locale.return_value = "C.UTF-8" + cls = distros.fetch("rhel") + d = cls("rhel", {}, None) +- with self.assertRaises(NotImplementedError): +- d.get_locale() ++ locale = d.get_locale() ++ self.assertEqual("C.UTF-8", locale) + + def test_expire_passwd_uses_chpasswd(self): + """Test ubuntu.expire_passwd uses the passwd command.""" +diff --git a/tools/.github-cla-signers b/tools/.github-cla-signers +index 9f71ea0c..9eb2ae38 100644 +--- a/tools/.github-cla-signers ++++ b/tools/.github-cla-signers +@@ -70,6 +70,7 @@ renanrodrigo + rhansen + riedel + sarahwzadara ++shi2wei3 + slingamn + slyon + smoser +-- +2.35.1 + diff --git a/ci-setup.py-adjust-udev-rules-default-path-1513.patch b/ci-setup.py-adjust-udev-rules-default-path-1513.patch new file mode 100644 index 0000000..c46af8d --- /dev/null +++ b/ci-setup.py-adjust-udev-rules-default-path-1513.patch @@ -0,0 +1,57 @@ +From f771d841dbdef8fbb1c1a3d1b8d51ff101354502 Mon Sep 17 00:00:00 2001 +From: Emanuele Giuseppe Esposito +Date: Fri, 17 Jun 2022 09:41:23 +0200 +Subject: [PATCH 3/3] setup.py: adjust udev/rules default path (#1513) + +RH-Author: Emanuele Giuseppe Esposito +RH-MergeRequest: 30: setup.py: adjust udev/rules default path (#1513) +RH-Commit: [2/2] b71362acefa15587b2c72e8981708065d2fcfa07 (eesposit/cloud-init-centos-) +RH-Bugzilla: 2096270 +RH-Acked-by: Mohamed Gamal Morsy +RH-Acked-by: Vitaly Kuznetsov + +commit 70715125f3af118ae242770e61064c24f41e9a02 +Author: Emanuele Giuseppe Esposito +Date: Thu Jun 16 20:39:42 2022 +0200 + + setup.py: adjust udev/rules default path (#1513) + + RHEL must put cloudinit .rules files in /usr/lib/udev/rules.d + This place is a rhel standard and since it is used by all packages + cannot be modified. + + Signed-off-by: Emanuele Giuseppe Esposito + +Signed-off-by: Emanuele Giuseppe Esposito +--- + setup.py | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/setup.py b/setup.py +index a9132d2c..fdf27cd7 100755 +--- a/setup.py ++++ b/setup.py +@@ -302,6 +302,11 @@ data_files = [ + ), + ] + if not platform.system().endswith("BSD"): ++ ++ RULES_PATH = LIB ++ if os.path.isfile("/etc/redhat-release"): ++ RULES_PATH = "/usr/lib" ++ + data_files.extend( + [ + ( +@@ -309,7 +314,7 @@ if not platform.system().endswith("BSD"): + ["tools/hook-network-manager"], + ), + (ETC + "/dhcp/dhclient-exit-hooks.d/", ["tools/hook-dhclient"]), +- (LIB + "/udev/rules.d", [f for f in glob("udev/*.rules")]), ++ (RULES_PATH + "/udev/rules.d", [f for f in glob("udev/*.rules")]), + ( + ETC + "/systemd/system/sshd-keygen@.service.d/", + ["systemd/disable-sshd-keygen-if-cloud-init-active.conf"], +-- +2.35.1 + diff --git a/cloud-init.spec b/cloud-init.spec index 4e4b129..da3b046 100644 --- a/cloud-init.spec +++ b/cloud-init.spec @@ -1,6 +1,6 @@ Name: cloud-init Version: 22.1 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Cloud instance init scripts License: ASL 2.0 or GPLv3 URL: http://launchpad.net/cloud-init @@ -27,6 +27,10 @@ Patch11: ci-Remove-rhel-specific-files.patch Patch12: ci-Support-EC2-tags-in-instance-metadata-1309.patch # For bz#1980403 - [RHV] RHEL 9 VM with cloud-init without hostname set doesn't result in the FQDN as hostname Patch13: ci-cc_set_hostname-do-not-write-localhost-when-no-hostn.patch +# For bz#2061604 - cloud-config will change /etc/locale.conf back to en_US.UTF-8 on rhel-guest-image-9.0 +Patch14: ci-Honor-system-locale-for-RHEL-1355.patch +# For bz#2096270 - Adjust udev/rules default path[rhel-9] +Patch15: ci-setup.py-adjust-udev-rules-default-path-1513.patch # Source-git patches @@ -207,7 +211,7 @@ fi %dir /var/lib/cloud /etc/NetworkManager/dispatcher.d/cloud-init-azure-hook /etc/dhcp/dhclient-exit-hooks.d/hook-dhclient -/lib/udev/rules.d/66-azure-ephemeral.rules +%{_udevrulesdir}/66-azure-ephemeral.rules %{_datadir}/bash-completion/completions/cloud-init %{_bindir}/cloud-id %{_systemdgeneratordir}/cloud-init-generator @@ -217,6 +221,15 @@ fi %config(noreplace) %{_sysconfdir}/rsyslog.d/21-cloudinit.conf %changelog +* Thu Jun 23 2022 Jon Maloy - 22.1-4 +- ci-Honor-system-locale-for-RHEL-1355.patch [bz#2061604] +- ci-cloud-init.spec-adjust-path-for-66-azure-ephemeral.r.patch [bz#2096270] +- ci-setup.py-adjust-udev-rules-default-path-1513.patch [bz#2096270] +- Resolves: bz#2061604 + (cloud-config will change /etc/locale.conf back to en_US.UTF-8 on rhel-guest-image-9.0) +- Resolves: bz#2096270 + (Adjust udev/rules default path[rhel-9]) + * Wed Jun 08 2022 Miroslav Rezanina - 22.1-3 - ci-Support-EC2-tags-in-instance-metadata-1309.patch [bz#2091640] - ci-cc_set_hostname-do-not-write-localhost-when-no-hostn.patch [bz#1980403]