From 5dd223b77ffd8258664ccc7dc5b1ca2c3e6cab73 Mon Sep 17 00:00:00 2001 From: Jiabao Date: Fri, 19 Dec 2025 06:03:30 +0000 Subject: [PATCH] cloud-init: add UnionTech/Kylin distro support - detect UnionTech and Kylin via /etc/*-release Signed-off-by: Jiabao --- cloud-init.spec | 6 +- ...ect-package-manager-on-kylin-and-uos.patch | 265 ++++++++++++++++++ 2 files changed, 270 insertions(+), 1 deletion(-) create mode 100644 fix-cannot-detect-package-manager-on-kylin-and-uos.patch diff --git a/cloud-init.spec b/cloud-init.spec index 2c8b092..da6b36c 100644 --- a/cloud-init.spec +++ b/cloud-init.spec @@ -1,6 +1,6 @@ Name: cloud-init Version: 19.4 -Release: 16 +Release: 17 Summary: the defacto multi-distribution package that handles early initialization of a cloud instance. License: ASL 2.0 or GPLv3 URL: http://launchpad.net/cloud-init @@ -31,6 +31,7 @@ Patch20: fix-CVE-2024-6174-1.patch Patch21: fix-CVE-2024-6174-2.patch Patch9000: Fix-the-error-level-logs-displayed-for-the-cloud-init-local-service.patch +Patch9001: fix-cannot-detect-package-manager-on-kylin-and-uos.patch BuildRequires: pkgconfig(systemd) python3-devel python3-setuptools systemd BuildRequires: iproute python3-configobj python3-httpretty >= 0.8.14-2 @@ -137,6 +138,9 @@ fi %exclude /usr/share/doc/* %changelog +* Wed Dec 17 2025 jiabao.li - 19.4-17 +- add UnionTech/Kylin distro support + * Mon Jul 07 2025 cenhuilin - 19.4-16 - fix CVE-2024-6174 diff --git a/fix-cannot-detect-package-manager-on-kylin-and-uos.patch b/fix-cannot-detect-package-manager-on-kylin-and-uos.patch new file mode 100644 index 0000000..0016a3f --- /dev/null +++ b/fix-cannot-detect-package-manager-on-kylin-and-uos.patch @@ -0,0 +1,265 @@ +From 775b3ac5f09a25680cdcc9db6f6503992caf0a0e Mon Sep 17 00:00:00 2001 +From: jiabao.li +Date: Wed, 17 Dec 2025 18:33:49 +0800 +Subject: [PATCH] fix cannot detect package manager on kylin and uos + +--- + cloudinit/config/cc_ntp.py | 2 +- + cloudinit/config/cc_resolv_conf.py | 2 +- + cloudinit/config/cc_rh_subscription.py | 2 +- + cloudinit/config/cc_spacewalk.py | 2 +- + cloudinit/config/cc_yum_add_repo.py | 2 +- + cloudinit/distros/Kylin.py | 12 ++++++++++++ + cloudinit/distros/UnionTech.py | 12 ++++++++++++ + cloudinit/distros/__init__.py | 2 +- + cloudinit/net/sysconfig.py | 2 +- + cloudinit/util.py | 6 +++++- + config/cloud.cfg.tmpl | 8 ++++---- + systemd/cloud-init-generator.tmpl | 2 +- + systemd/cloud-init.service.tmpl | 2 +- + tests/cloud_tests/util.py | 2 +- + tools/render-cloudcfg | 2 +- + 15 files changed, 44 insertions(+), 16 deletions(-) + create mode 100644 cloudinit/distros/Kylin.py + create mode 100644 cloudinit/distros/UnionTech.py + +diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py +index 5481f54..f37d32b 100644 +--- a/cloudinit/config/cc_ntp.py ++++ b/cloudinit/config/cc_ntp.py +@@ -25,7 +25,7 @@ LOG = logging.getLogger(__name__) + frequency = PER_INSTANCE + NTP_CONF = '/etc/ntp.conf' + NR_POOL_SERVERS = 4 +-distros = ['centos', 'debian', 'fedora', 'opensuse', 'rhel', 'sles', 'ubuntu', 'openeuler'] ++distros = ['centos', 'debian', 'fedora', 'opensuse', 'rhel', 'sles', 'ubuntu', 'openeuler', 'UnionTech', 'Kylin'] + + NTP_CLIENT_CONFIG = { + 'chrony': { +diff --git a/cloudinit/config/cc_resolv_conf.py b/cloudinit/config/cc_resolv_conf.py +index c396dcf..a37e0d2 100644 +--- a/cloudinit/config/cc_resolv_conf.py ++++ b/cloudinit/config/cc_resolv_conf.py +@@ -55,7 +55,7 @@ LOG = logging.getLogger(__name__) + + frequency = PER_INSTANCE + +-distros = ['fedora', 'opensuse', 'rhel', 'sles', 'openeuler'] ++distros = ['fedora', 'opensuse', 'rhel', 'sles', 'openeuler', 'UnionTech', 'Kylin'] + + + def generate_resolv_conf(template_fn, params, target_fname="/etc/resolv.conf"): +diff --git a/cloudinit/config/cc_rh_subscription.py b/cloudinit/config/cc_rh_subscription.py +index d0ea71a..c10c0e5 100644 +--- a/cloudinit/config/cc_rh_subscription.py ++++ b/cloudinit/config/cc_rh_subscription.py +@@ -43,7 +43,7 @@ from cloudinit import util + + LOG = logging.getLogger(__name__) + +-distros = ['fedora', 'rhel', 'openeuler'] ++distros = ['fedora', 'rhel', 'openeuler', 'UnionTech', 'Kylin'] + + + def handle(name, cfg, _cloud, log, _args): +diff --git a/cloudinit/config/cc_spacewalk.py b/cloudinit/config/cc_spacewalk.py +index 7696c47..86f4758 100644 +--- a/cloudinit/config/cc_spacewalk.py ++++ b/cloudinit/config/cc_spacewalk.py +@@ -30,7 +30,7 @@ For more information about spacewalk see: https://fedorahosted.org/spacewalk/ + from cloudinit import util + + +-distros = ['redhat', 'fedora', 'openeuler'] ++distros = ['redhat', 'fedora', 'openeuler', 'UnionTech', 'Kylin'] + required_packages = ['rhn-setup'] + def_ca_cert_path = "/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT" + +diff --git a/cloudinit/config/cc_yum_add_repo.py b/cloudinit/config/cc_yum_add_repo.py +index 0c3f481..5dc0a8f 100644 +--- a/cloudinit/config/cc_yum_add_repo.py ++++ b/cloudinit/config/cc_yum_add_repo.py +@@ -40,7 +40,7 @@ import six + + from cloudinit import util + +-distros = ['fedora', 'rhel', 'openeuler'] ++distros = ['fedora', 'rhel', 'openeuler', 'UnionTech', 'Kylin'] + + + def _canonicalize_id(repo_id): +diff --git a/cloudinit/distros/Kylin.py b/cloudinit/distros/Kylin.py +new file mode 100644 +index 0000000..7505ca4 +--- /dev/null ++++ b/cloudinit/distros/Kylin.py +@@ -0,0 +1,12 @@ ++# Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved. ++# This file is part of cloud-init. See LICENSE file for license information. ++ ++from cloudinit.distros import rhel ++from cloudinit import log as logging ++ ++LOG = logging.getLogger(__name__) ++ ++class Distro(rhel.Distro): ++ pass ++ ++# vi: ts=4 expandtab +diff --git a/cloudinit/distros/UnionTech.py b/cloudinit/distros/UnionTech.py +new file mode 100644 +index 0000000..7505ca4 +--- /dev/null ++++ b/cloudinit/distros/UnionTech.py +@@ -0,0 +1,12 @@ ++# Copyright (c) Huawei Technologies Co., Ltd. 2019-2019. All rights reserved. ++# This file is part of cloud-init. See LICENSE file for license information. ++ ++from cloudinit.distros import rhel ++from cloudinit import log as logging ++ ++LOG = logging.getLogger(__name__) ++ ++class Distro(rhel.Distro): ++ pass ++ ++# vi: ts=4 expandtab +diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py +index f878c22..7e627a2 100755 +--- a/cloudinit/distros/__init__.py ++++ b/cloudinit/distros/__init__.py +@@ -36,7 +36,7 @@ ALL_DISTROS = 'all' + + OSFAMILIES = { + 'debian': ['debian', 'ubuntu'], +- 'redhat': ['amazon', 'centos', 'fedora', 'rhel', 'openeuler'], ++ 'redhat': ['amazon', 'centos', 'fedora', 'rhel', 'openeuler', 'UnionTech', 'Kylin'], + 'gentoo': ['gentoo'], + 'freebsd': ['freebsd'], + 'suse': ['opensuse', 'sles'], +diff --git a/cloudinit/net/sysconfig.py b/cloudinit/net/sysconfig.py +index 17959d8..1c91a30 100644 +--- a/cloudinit/net/sysconfig.py ++++ b/cloudinit/net/sysconfig.py +@@ -18,7 +18,7 @@ from .network_state import ( + + LOG = logging.getLogger(__name__) + NM_CFG_FILE = "/etc/NetworkManager/NetworkManager.conf" +-KNOWN_DISTROS = ['centos', 'fedora', 'rhel', 'suse', 'openeuler'] ++KNOWN_DISTROS = ['centos', 'fedora', 'rhel', 'suse', 'openeuler', 'UnionTech', 'Kylin'] + + + def _make_header(sep='#'): +diff --git a/cloudinit/util.py b/cloudinit/util.py +index 2379177..3caa674 100644 +--- a/cloudinit/util.py ++++ b/cloudinit/util.py +@@ -669,8 +669,12 @@ def system_info(): + if system == "linux": + linux_dist = info['dist'][0].lower() + if linux_dist in ( +- 'arch', 'centos', 'debian', 'fedora', 'rhel', 'suse', 'openeuler'): ++ 'arch', 'centos', 'debian', 'fedora', 'rhel', 'suse', 'openeuler', 'UnionTech', 'Kylin'): + var = linux_dist ++ elif linux_dist == 'uos': ++ var = 'UnionTech' ++ elif linux_dist == 'kylin': ++ var = 'Kylin' + elif linux_dist in ('ubuntu', 'linuxmint', 'mint'): + var = 'ubuntu' + elif linux_dist == 'redhat': +diff --git a/config/cloud.cfg.tmpl b/config/cloud.cfg.tmpl +index 296da18..51dd645 100644 +--- a/config/cloud.cfg.tmpl ++++ b/config/cloud.cfg.tmpl +@@ -21,7 +21,7 @@ disable_root: false + disable_root: true + {% endif %} + +-{% if variant in ["centos", "fedora", "rhel", "openeuler"] %} ++{% if variant in ["centos", "fedora", "rhel", "openeuler", "UnionTech", "Kylin"] %} + mount_default_fields: [~, ~, 'auto', 'defaults,nofail', '0', '2'] + resize_rootfs_tmp: /dev + ssh_pwauth: 0 +@@ -76,7 +76,7 @@ cloud_config_modules: + - ssh-import-id + - locale + - set-passwords +-{% if variant in ["rhel", "fedora", "openeuler"] %} ++{% if variant in ["rhel", "fedora", "openeuler", "UnionTech", "Kylin"] %} + - spacewalk + - yum-add-repo + {% endif %} +@@ -137,7 +137,7 @@ cloud_final_modules: + # (not accessible to handlers/transforms) + system_info: + # This will affect which distro class gets used +-{% if variant in ["arch", "centos", "debian", "fedora", "freebsd", "rhel", "suse", "ubuntu", "openeuler"] %} ++{% if variant in ["arch", "centos", "debian", "fedora", "freebsd", "rhel", "suse", "ubuntu", "openeuler", "UnionTech", "Kylin"] %} + distro: {{ variant }} + {% else %} + # Unknown/fallback distro. +@@ -185,7 +185,7 @@ system_info: + primary: http://ports.ubuntu.com/ubuntu-ports + security: http://ports.ubuntu.com/ubuntu-ports + ssh_svcname: ssh +-{% elif variant in ["arch", "centos", "fedora", "rhel", "suse", "openeuler"] %} ++{% elif variant in ["arch", "centos", "fedora", "rhel", "suse", "openeuler", "UnionTech", "Kylin"] %} + # Default user name + that default users groups (if added/used) + default_user: + name: {{ variant }} +diff --git a/systemd/cloud-init-generator.tmpl b/systemd/cloud-init-generator.tmpl +index 8bd49cc..22c358b 100755 +--- a/systemd/cloud-init-generator.tmpl ++++ b/systemd/cloud-init-generator.tmpl +@@ -83,7 +83,7 @@ default() { + + check_for_datasource() { + local ds_rc="" +-{% if variant in ["redhat", "fedora", "centos", "openeuler"] %} ++{% if variant in ["redhat", "fedora", "centos", "openeuler", "UnionTech", "Kylin"] %} + local dsidentify="/usr/libexec/cloud-init/ds-identify" + {% else %} + local dsidentify="/usr/lib/cloud-init/ds-identify" +diff --git a/systemd/cloud-init.service.tmpl b/systemd/cloud-init.service.tmpl +index c7fe613..d3bd617 100644 +--- a/systemd/cloud-init.service.tmpl ++++ b/systemd/cloud-init.service.tmpl +@@ -10,7 +10,7 @@ After=systemd-networkd-wait-online.service + {% if variant in ["ubuntu", "unknown", "debian"] %} + After=networking.service + {% endif %} +-{% if variant in ["centos", "fedora", "redhat", "openeuler"] %} ++{% if variant in ["centos", "fedora", "redhat", "openeuler", "UnionTech", "Kylin"] %} + After=network.service + After=NetworkManager.service + {% endif %} +diff --git a/tests/cloud_tests/util.py b/tests/cloud_tests/util.py +index 6dbc413..10c2802 100644 +--- a/tests/cloud_tests/util.py ++++ b/tests/cloud_tests/util.py +@@ -19,7 +19,7 @@ from tests.cloud_tests import LOG + + OS_FAMILY_MAPPING = { + 'debian': ['debian', 'ubuntu'], +- 'redhat': ['centos', 'rhel', 'fedora', 'openeuler'], ++ 'redhat': ['centos', 'rhel', 'fedora', 'openeuler', 'UnionTech', 'Kylin'], + 'gentoo': ['gentoo'], + 'freebsd': ['freebsd'], + 'suse': ['sles'], +diff --git a/tools/render-cloudcfg b/tools/render-cloudcfg +index ef0afa8..4ceb646 100755 +--- a/tools/render-cloudcfg ++++ b/tools/render-cloudcfg +@@ -5,7 +5,7 @@ import os + import sys + + VARIANTS = ["arch", "centos", "debian", "fedora", "freebsd", "rhel", "suse", +- "ubuntu", "unknown", "openeuler"] ++ "ubuntu", "unknown", "openeuler", "UnionTech", "Kylin"] + + if "avoid-pep8-E402-import-not-top-of-file": + _tdir = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) +-- +2.27.0 + -- Gitee