From bbdede545c99fbc69168d44d4dabde9c86f20525 Mon Sep 17 00:00:00 2001 From: MSVSphere Packaging Team Date: Tue, 26 Nov 2024 15:29:53 +0300 Subject: [PATCH] import WALinuxAgent-2.9.1.1-7.el10 --- .WALinuxAgent.metadata | 1 + .gitignore | 1 + ...set-ConditionVirtualization-microsof.patch | 69 ++++ SOURCES/module-setup.sh | 16 + .../wla-Disable-automatic-log-collector.patch | 38 ++ ...rkManager-to-set-DHCP-hostnames-on-r.patch | 61 ++++ SOURCES/wla-skip-cgorup-monitor-2939.patch | 288 +++++++++++++++ SPECS/WALinuxAgent.spec | 341 ++++++++++++++++++ 8 files changed, 815 insertions(+) create mode 100644 .WALinuxAgent.metadata create mode 100644 .gitignore create mode 100644 SOURCES/0001-waagent.service-set-ConditionVirtualization-microsof.patch create mode 100644 SOURCES/module-setup.sh create mode 100644 SOURCES/wla-Disable-automatic-log-collector.patch create mode 100644 SOURCES/wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch create mode 100644 SOURCES/wla-skip-cgorup-monitor-2939.patch create mode 100644 SPECS/WALinuxAgent.spec diff --git a/.WALinuxAgent.metadata b/.WALinuxAgent.metadata new file mode 100644 index 0000000..cf7b381 --- /dev/null +++ b/.WALinuxAgent.metadata @@ -0,0 +1 @@ +b61bd57f3b2f7b048d6bab2739690bbf1d9c213b SOURCES/v2.9.1.1.tar.gz diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6695c2f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/v2.9.1.1.tar.gz diff --git a/SOURCES/0001-waagent.service-set-ConditionVirtualization-microsof.patch b/SOURCES/0001-waagent.service-set-ConditionVirtualization-microsof.patch new file mode 100644 index 0000000..c6a312e --- /dev/null +++ b/SOURCES/0001-waagent.service-set-ConditionVirtualization-microsof.patch @@ -0,0 +1,69 @@ +From dac5101c56b59dbb14d96d4344d6cb2ac047b392 Mon Sep 17 00:00:00 2001 +From: Chris Patterson +Date: Thu, 1 Sep 2022 10:45:47 -0400 +Subject: [PATCH] waagent.service: set ConditionVirtualization=|microsoft + +Only start waagent service when running under Microsoft virtualization. + +Set it as a triggering condition to make it easier for downstreams or +test setups to add another condition (i.e. run outside of hyperv). + +Signed-off-by: Chris Patterson +--- + bin/waagent2.0 | 1 + + init/redhat/py2/waagent.service | 1 + + init/redhat/waagent.service | 1 + + init/waagent.service | 1 + + 4 files changed, 4 insertions(+) + +diff --git a/bin/waagent2.0 b/bin/waagent2.0 +index 34732677..c84c8c40 100644 +--- a/bin/waagent2.0 ++++ b/bin/waagent2.0 +@@ -1569,6 +1569,7 @@ After=network.target + After=sshd.service + ConditionFileIsExecutable=/usr/sbin/waagent + ConditionPathExists=/etc/waagent.conf ++ConditionVirtualization=|microsoft + + [Service] + Type=simple +diff --git a/init/redhat/py2/waagent.service b/init/redhat/py2/waagent.service +index c6d15420..132e7027 100644 +--- a/init/redhat/py2/waagent.service ++++ b/init/redhat/py2/waagent.service +@@ -5,6 +5,7 @@ After=network-online.target + + ConditionFileIsExecutable=/usr/sbin/waagent + ConditionPathExists=/etc/waagent.conf ++ConditionVirtualization=|microsoft + + [Service] + Type=simple +diff --git a/init/redhat/waagent.service b/init/redhat/waagent.service +index dc11fbb1..7c93b101 100644 +--- a/init/redhat/waagent.service ++++ b/init/redhat/waagent.service +@@ -5,6 +5,7 @@ After=network-online.target + + ConditionFileIsExecutable=/usr/sbin/waagent + ConditionPathExists=/etc/waagent.conf ++ConditionVirtualization=|microsoft + + [Service] + Type=simple +diff --git a/init/waagent.service b/init/waagent.service +index e91f1433..aa1f3203 100644 +--- a/init/waagent.service ++++ b/init/waagent.service +@@ -5,6 +5,7 @@ After=network-online.target + + ConditionFileIsExecutable=/usr/sbin/waagent + ConditionPathExists=/etc/waagent.conf ++ConditionVirtualization=|microsoft + + [Service] + Type=simple +-- +2.37.3 + diff --git a/SOURCES/module-setup.sh b/SOURCES/module-setup.sh new file mode 100644 index 0000000..00d0eb7 --- /dev/null +++ b/SOURCES/module-setup.sh @@ -0,0 +1,16 @@ +#!/usr/bin/bash + +# called by dracut +check() { + return 0 +} + +# called by dracut +depends() { + return 0 +} + +# called by dracut +install() { + inst_rules 66-azure-storage.rules 99-azure-product-uuid.rules +} diff --git a/SOURCES/wla-Disable-automatic-log-collector.patch b/SOURCES/wla-Disable-automatic-log-collector.patch new file mode 100644 index 0000000..8371dbf --- /dev/null +++ b/SOURCES/wla-Disable-automatic-log-collector.patch @@ -0,0 +1,38 @@ +From 896d0f1edfbfad20c2eecb04fca17e7dc335dfb8 Mon Sep 17 00:00:00 2001 +From: Ani Sinha +Date: Mon, 6 May 2024 11:50:49 +0530 +Subject: [PATCH] Disable automatic log collector + +RH-Author: Ani Sinha +RH-MergeRequest: 12: Disable automatic log collector +RH-Jira: RHEL-35963 +RH-Acked-by: Miroslav Rezanina +RH-Commit: [1/1] d885b584e6bf7ad7d2169b21bcc12db2b526b651 (anisinha/centos-wa-linux-agent) + +Log collector is enabled by default. Due to security concerns from our customers +disable it. + +Jira: https://issues.redhat.com/browse/RHEL-35963 +Upstream: RHEL only. + +Signed-off-by: Ani Sinha +--- + config/waagent.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/config/waagent.conf b/config/waagent.conf +index 7316dc2d..4a345fc0 100644 +--- a/config/waagent.conf ++++ b/config/waagent.conf +@@ -70,7 +70,7 @@ Logs.Verbose=n + # Logs.Console=y + + # Enable periodic log collection, default is y +-Logs.Collect=y ++Logs.Collect=n + + # How frequently to collect logs, default is each hour + Logs.CollectPeriod=3600 +-- +2.39.3 + diff --git a/SOURCES/wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch b/SOURCES/wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch new file mode 100644 index 0000000..e2e962b --- /dev/null +++ b/SOURCES/wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch @@ -0,0 +1,61 @@ +From 8cc6f62bd1be39e60be6ae606ea4beb76ae24d7c Mon Sep 17 00:00:00 2001 +From: Mohammed Gamal +Date: Fri, 29 Jul 2022 13:07:13 +0200 +Subject: [PATCH 1/4] redhat: Use NetworkManager to set DHCP hostnames on + recent RHEL distros + +RH-Author: Ani Sinha +RH-MergeRequest: 13: sync c10s branch from c9s +RH-Jira: RHEL-40966 +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Miroslav Rezanina +RH-Commit: [1/4] 05e1d05db526deae49e976dea3bae140ea1b2ecf (anisinha/centos-wa-linux-agent) + +RH-Author: Mohamed Gamal Morsy +RH-MergeRequest: 3: redhat: Use NetworkManager to set DHCP hostnames on recent RHEL distros +RH-Commit: [1/1] 2bf51293796ba0e8567e436836adc0547f062b04 +RH-Bugzilla: 2114830 +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Miroslav Rezanina + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2114830 + +Recent versions of RHEL 8 and RHEL 9 started using NetworkManager to configure +network intefaces instead of sysconfig files. Configurations are no longer +stored in /etc/sysconfig/ifcfg-{interface}. + +Fix this for setting DHCP hostnames in those RHEL versions. + +Signed-off-by: Mohammed Gamal + +Patch-name: wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch +Patch-id: +Patch-present-in-specfile: True +(cherry picked from commit 8400a993c6c27f8f8fc598f81e2c329dc8255805) +--- + azurelinuxagent/common/osutil/redhat.py | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/azurelinuxagent/common/osutil/redhat.py b/azurelinuxagent/common/osutil/redhat.py +index 312dd160..4b46a97a 100644 +--- a/azurelinuxagent/common/osutil/redhat.py ++++ b/azurelinuxagent/common/osutil/redhat.py +@@ -164,3 +164,15 @@ class RedhatOSModernUtil(RedhatOSUtil): + time.sleep(wait) + else: + logger.warn("exceeded restart retries") ++ ++ def set_dhcp_hostname(self, hostname): ++ """ ++ Recent RHEL distributions use network manager instead of sysconfig files ++ to configure network interfaces ++ """ ++ ifname = self.get_if_name() ++ ++ return_code = shellutil.run("nmcli device modify {0} ipv4.dhcp-hostname {1} ipv6.dhcp-hostname {1}".format(ifname, hostname)) ++ ++ if return_code != 0: ++ logger.error("failed to set DHCP hostname for interface {0}: return code {1}".format(ifname, return_code)) +-- +2.39.3 + diff --git a/SOURCES/wla-skip-cgorup-monitor-2939.patch b/SOURCES/wla-skip-cgorup-monitor-2939.patch new file mode 100644 index 0000000..e8813b2 --- /dev/null +++ b/SOURCES/wla-skip-cgorup-monitor-2939.patch @@ -0,0 +1,288 @@ +From 3747dabadea2fe288e6991723e5364179b2906dd Mon Sep 17 00:00:00 2001 +From: Nageswara Nandigam <84482346+nagworld9@users.noreply.github.com> +Date: Mon, 9 Oct 2023 11:14:30 -0700 +Subject: [PATCH] skip cgorup monitor (#2939) + +RH-Author: Ani Sinha +RH-MergeRequest: 14: skip cgorup monitor (#2939) +RH-Jira: RHEL-46713 +RH-Acked-by: Vitaly Kuznetsov +RH-Acked-by: Emanuele Giuseppe Esposito +RH-Commit: [1/1] 613c87b13204159b6b33214d0cf02ed25bcd67e7 (anisinha/centos-wa-linux-agent) + +(cherry picked from commit 5bad0b4b19c907386b80ec18ad1423cdb7f3a050) +Signed-off-by: Ani Sinha + +Conflicts: + azurelinuxagent/agent.py + azurelinuxagent/common/logcollector.py + tests/common/test_logcollector.py + All due to libraries being moved around in upstream. +--- + azurelinuxagent/agent.py | 30 +++++++++++++++++++------- + azurelinuxagent/common/logcollector.py | 15 +------------ + azurelinuxagent/ga/collect_logs.py | 10 ++++----- + tests/common/test_logcollector.py | 16 +++++++------- + tests/test_agent.py | 8 +++---- + 5 files changed, 40 insertions(+), 39 deletions(-) + +diff --git a/azurelinuxagent/agent.py b/azurelinuxagent/agent.py +index 8c303482..0fb681e6 100644 +--- a/azurelinuxagent/agent.py ++++ b/azurelinuxagent/agent.py +@@ -30,6 +30,7 @@ import sys + import threading + from azurelinuxagent.common import cgroupconfigurator, logcollector + from azurelinuxagent.common.cgroupapi import SystemdCgroupsApi ++from azurelinuxagent.common.cgroup import AGENT_LOG_COLLECTOR, CpuCgroup, MemoryCgroup + + import azurelinuxagent.common.conf as conf + import azurelinuxagent.common.event as event +@@ -204,11 +205,10 @@ class Agent(object): + logger.info("Running log collector mode normal") + + # Check the cgroups unit +- cpu_cgroup_path, memory_cgroup_path, log_collector_monitor = None, None, None +- if CollectLogsHandler.should_validate_cgroups(): +- cgroups_api = SystemdCgroupsApi() +- cpu_cgroup_path, memory_cgroup_path = cgroups_api.get_process_cgroup_paths("self") +- ++ log_collector_monitor = None ++ cgroups_api = SystemdCgroupsApi() ++ cpu_cgroup_path, memory_cgroup_path = cgroups_api.get_process_cgroup_paths("self") ++ if CollectLogsHandler.is_enabled_monitor_cgroups_check(): + cpu_slice_matches = (cgroupconfigurator.LOGCOLLECTOR_SLICE in cpu_cgroup_path) + memory_slice_matches = (cgroupconfigurator.LOGCOLLECTOR_SLICE in memory_cgroup_path) + +@@ -221,10 +221,24 @@ class Agent(object): + + sys.exit(logcollector.INVALID_CGROUPS_ERRCODE) + ++ def initialize_cgroups_tracking(cpu_cgroup_path, memory_cgroup_path): ++ cpu_cgroup = CpuCgroup(AGENT_LOG_COLLECTOR, cpu_cgroup_path) ++ msg = "Started tracking cpu cgroup {0}".format(cpu_cgroup) ++ logger.info(msg) ++ cpu_cgroup.initialize_cpu_usage() ++ memory_cgroup = MemoryCgroup(AGENT_LOG_COLLECTOR, memory_cgroup_path) ++ msg = "Started tracking memory cgroup {0}".format(memory_cgroup) ++ logger.info(msg) ++ return [cpu_cgroup, memory_cgroup] ++ + try: +- log_collector = LogCollector(is_full_mode, cpu_cgroup_path, memory_cgroup_path) +- log_collector_monitor = get_log_collector_monitor_handler(log_collector.cgroups) +- log_collector_monitor.run() ++ log_collector = LogCollector(is_full_mode) ++ # Running log collector resource(CPU, Memory) monitoring only if agent starts the log collector. ++ # If Log collector start by any other means, then it will not be monitored. ++ if CollectLogsHandler.is_enabled_monitor_cgroups_check(): ++ tracked_cgroups = initialize_cgroups_tracking(cpu_cgroup_path, memory_cgroup_path) ++ log_collector_monitor = get_log_collector_monitor_handler(tracked_cgroups) ++ log_collector_monitor.run() + archive = log_collector.collect_logs_and_get_archive() + logger.info("Log collection successfully completed. Archive can be found at {0} " + "and detailed log output can be found at {1}".format(archive, OUTPUT_RESULTS_FILE_PATH)) +diff --git a/azurelinuxagent/common/logcollector.py b/azurelinuxagent/common/logcollector.py +index fe62a7db..5f45a7de 100644 +--- a/azurelinuxagent/common/logcollector.py ++++ b/azurelinuxagent/common/logcollector.py +@@ -26,7 +26,6 @@ import zipfile + from datetime import datetime + from heapq import heappush, heappop + +-from azurelinuxagent.common.cgroup import CpuCgroup, AGENT_LOG_COLLECTOR, MemoryCgroup + from azurelinuxagent.common.conf import get_lib_dir, get_ext_log_dir, get_agent_log_file + from azurelinuxagent.common.event import initialize_event_logger_vminfo_common_parameters + from azurelinuxagent.common.future import ustr +@@ -71,14 +70,13 @@ class LogCollector(object): + + _TRUNCATED_FILE_PREFIX = "truncated_" + +- def __init__(self, is_full_mode=False, cpu_cgroup_path=None, memory_cgroup_path=None): ++ def __init__(self, is_full_mode=False): + self._is_full_mode = is_full_mode + self._manifest = MANIFEST_FULL if is_full_mode else MANIFEST_NORMAL + self._must_collect_files = self._expand_must_collect_files() + self._create_base_dirs() + self._set_logger() + self._initialize_telemetry() +- self.cgroups = self._set_resource_usage_cgroups(cpu_cgroup_path, memory_cgroup_path) + + @staticmethod + def _mkdir(dirname): +@@ -105,17 +103,6 @@ class LogCollector(object): + _LOGGER.addHandler(_f_handler) + _LOGGER.setLevel(logging.INFO) + +- @staticmethod +- def _set_resource_usage_cgroups(cpu_cgroup_path, memory_cgroup_path): +- cpu_cgroup = CpuCgroup(AGENT_LOG_COLLECTOR, cpu_cgroup_path) +- msg = "Started tracking cpu cgroup {0}".format(cpu_cgroup) +- _LOGGER.info(msg) +- cpu_cgroup.initialize_cpu_usage() +- memory_cgroup = MemoryCgroup(AGENT_LOG_COLLECTOR, memory_cgroup_path) +- msg = "Started tracking memory cgroup {0}".format(memory_cgroup) +- _LOGGER.info(msg) +- return [cpu_cgroup, memory_cgroup] +- + @staticmethod + def _initialize_telemetry(): + protocol = get_protocol_util().get_protocol(init_goal_state=False) +diff --git a/azurelinuxagent/ga/collect_logs.py b/azurelinuxagent/ga/collect_logs.py +index 95c42f3a..4f42e149 100644 +--- a/azurelinuxagent/ga/collect_logs.py ++++ b/azurelinuxagent/ga/collect_logs.py +@@ -83,16 +83,16 @@ class CollectLogsHandler(ThreadHandlerInterface): + return CollectLogsHandler._THREAD_NAME + + @staticmethod +- def enable_cgroups_validation(): ++ def enable_monitor_cgroups_check(): + os.environ[CollectLogsHandler.__CGROUPS_FLAG_ENV_VARIABLE] = "1" + + @staticmethod +- def disable_cgroups_validation(): ++ def disable_monitor_cgroups_check(): + if CollectLogsHandler.__CGROUPS_FLAG_ENV_VARIABLE in os.environ: + del os.environ[CollectLogsHandler.__CGROUPS_FLAG_ENV_VARIABLE] + + @staticmethod +- def should_validate_cgroups(): ++ def is_enabled_monitor_cgroups_check(): + if CollectLogsHandler.__CGROUPS_FLAG_ENV_VARIABLE in os.environ: + return os.environ[CollectLogsHandler.__CGROUPS_FLAG_ENV_VARIABLE] == "1" + return False +@@ -147,7 +147,7 @@ class CollectLogsHandler(ThreadHandlerInterface): + time.sleep(_INITIAL_LOG_COLLECTION_DELAY) + + try: +- CollectLogsHandler.enable_cgroups_validation() ++ CollectLogsHandler.enable_monitor_cgroups_check() + if self.protocol_util is None or self.protocol is None: + self.init_protocols() + +@@ -162,7 +162,7 @@ class CollectLogsHandler(ThreadHandlerInterface): + except Exception as e: + logger.error("An error occurred in the log collection thread; will exit the thread.\n{0}", ustr(e)) + finally: +- CollectLogsHandler.disable_cgroups_validation() ++ CollectLogsHandler.disable_monitor_cgroups_check() + + def collect_and_send_logs(self): + if self._collect_logs(): +diff --git a/tests/common/test_logcollector.py b/tests/common/test_logcollector.py +index 521e0f23..bf402cc7 100644 +--- a/tests/common/test_logcollector.py ++++ b/tests/common/test_logcollector.py +@@ -212,7 +212,7 @@ diskinfo,""".format(folder_to_list, file_to_collect) + + with patch("azurelinuxagent.common.logcollector.MANIFEST_NORMAL", manifest): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + archive = log_collector.collect_logs_and_get_archive() + + with open(self.output_results_file_path, "r") as fh: +@@ -241,7 +241,7 @@ copy,{0} + + with patch("azurelinuxagent.common.logcollector.MANIFEST_FULL", manifest): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(is_full_mode=True, cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector(is_full_mode=True) + archive = log_collector.collect_logs_and_get_archive() + + self._assert_archive_created(archive) +@@ -255,7 +255,7 @@ copy,{0} + # and combined they do not cross the archive size threshold. + + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + archive = log_collector.collect_logs_and_get_archive() + + self._assert_archive_created(archive) +@@ -277,7 +277,7 @@ copy,{0} + # Set the size limit so that some files are too large to collect in full. + with patch("azurelinuxagent.common.logcollector._FILE_SIZE_LIMIT", SMALL_FILE_SIZE): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + archive = log_collector.collect_logs_and_get_archive() + + self._assert_archive_created(archive) +@@ -311,7 +311,7 @@ copy,{0} + with patch("azurelinuxagent.common.logcollector._UNCOMPRESSED_ARCHIVE_SIZE_LIMIT", 10 * 1024 * 1024): + with patch("azurelinuxagent.common.logcollector._MUST_COLLECT_FILES", must_collect_files): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + archive = log_collector.collect_logs_and_get_archive() + + self._assert_archive_created(archive) +@@ -362,7 +362,7 @@ copy,{0} + # Ensure the archive reflects the state of files on the disk at collection time. If a file was updated, it + # needs to be updated in the archive, deleted if removed from disk, and added if not previously seen. + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + first_archive = log_collector.collect_logs_and_get_archive() + self._assert_archive_created(first_archive) + +@@ -433,7 +433,7 @@ copy,{0} + with patch("azurelinuxagent.common.logcollector._MUST_COLLECT_FILES", must_collect_files): + with patch("azurelinuxagent.common.logcollector._FILE_SIZE_LIMIT", SMALL_FILE_SIZE): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + archive = log_collector.collect_logs_and_get_archive() + + self._assert_archive_created(archive) +@@ -455,7 +455,7 @@ copy,{0} + with patch("azurelinuxagent.common.logcollector._MUST_COLLECT_FILES", must_collect_files): + with patch("azurelinuxagent.common.logcollector._FILE_SIZE_LIMIT", SMALL_FILE_SIZE): + with patch('azurelinuxagent.common.logcollector.LogCollector._initialize_telemetry'): +- log_collector = LogCollector(cpu_cgroup_path="dummy_cpu_path", memory_cgroup_path="dummy_memory_path") ++ log_collector = LogCollector() + second_archive = log_collector.collect_logs_and_get_archive() + + expected_files = [ +diff --git a/tests/test_agent.py b/tests/test_agent.py +index f0f773f0..f5e87c87 100644 +--- a/tests/test_agent.py ++++ b/tests/test_agent.py +@@ -231,7 +231,7 @@ class TestAgent(AgentTestCase): + @patch("azurelinuxagent.agent.LogCollector") + def test_calls_collect_logs_on_valid_cgroups(self, mock_log_collector): + try: +- CollectLogsHandler.enable_cgroups_validation() ++ CollectLogsHandler.enable_monitor_cgroups_check() + mock_log_collector.run = Mock() + + def mock_cgroup_paths(*args, **kwargs): +@@ -246,12 +246,12 @@ class TestAgent(AgentTestCase): + + mock_log_collector.assert_called_once() + finally: +- CollectLogsHandler.disable_cgroups_validation() ++ CollectLogsHandler.disable_monitor_cgroups_check() + + @patch("azurelinuxagent.agent.LogCollector") + def test_doesnt_call_collect_logs_on_invalid_cgroups(self, mock_log_collector): + try: +- CollectLogsHandler.enable_cgroups_validation() ++ CollectLogsHandler.enable_monitor_cgroups_check() + mock_log_collector.run = Mock() + + def mock_cgroup_paths(*args, **kwargs): +@@ -270,7 +270,7 @@ class TestAgent(AgentTestCase): + mock_exit.assert_called_once_with(logcollector.INVALID_CGROUPS_ERRCODE) + self.assertEqual(exit_error, re) + finally: +- CollectLogsHandler.disable_cgroups_validation() ++ CollectLogsHandler.disable_monitor_cgroups_check() + + def test_it_should_parse_setup_firewall_properly(self): + +-- +2.39.3 + diff --git a/SPECS/WALinuxAgent.spec b/SPECS/WALinuxAgent.spec new file mode 100644 index 0000000..5c6ca3c --- /dev/null +++ b/SPECS/WALinuxAgent.spec @@ -0,0 +1,341 @@ +%global with_legacy 0 +%global dracut_modname 97walinuxagent + +Name: WALinuxAgent +Version: 2.9.1.1 +Release: 7%{?dist} +Summary: The Microsoft Azure Linux Agent + +License: Apache-2.0 +URL: https://github.com/Azure/%{name} +Source0: https://github.com/Azure/%{name}/archive/v%{version}.tar.gz +Source1: module-setup.sh + +Patch1: 0001-waagent.service-set-ConditionVirtualization-microsof.patch +# For RHEL-35963 - [Azure][WALA] Consider to disable Log collector [rhel-10] +Patch2: wla-Disable-automatic-log-collector.patch +# For RHEL-40966 - [Azure][WALA][RHEL-10] Provisioning failed if no ifcfg-eth0 +Patch3: wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch +# For RHEL-46713 - [Azure][RHEL-10][WALA] waagent -collect-logs doesn't work and the log is confusing +Patch4: wla-skip-cgorup-monitor-2939.patch + +BuildArch: noarch + +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-distro +Requires: %name-udev = %version-%release +%if 0%{?fedora} +Requires: ntfsprogs +%endif +Requires: openssh +Requires: openssh-server +Requires: openssl +Requires: parted +Requires: python3-pyasn1 +Requires: iptables + +BuildRequires: systemd +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + +%description +The Microsoft Azure Linux Agent supports the provisioning and running of Linux +VMs in the Microsoft Azure cloud. This package should be installed on Linux disk +images that are built to run in the Microsoft Azure environment. + +%if 0%{?with_legacy} +%package legacy +Summary: The Microsoft Azure Linux Agent (legacy) +Requires: %name = %version-%release +Requires: python2 +Requires: net-tools + +%description legacy +The Microsoft Azure Linux Agent supporting old version of extensions. +%endif + +%package udev +Summary: Udev rules for Microsoft Azure + +%description udev +Udev rules specific to Microsoft Azure Virtual Machines. + +%prep +%setup -q +%autopatch -p1 + +%build +%py3_build + +%install +%{__python3} setup.py install -O1 --skip-build --root %{buildroot} --lnx-distro redhat + +mkdir -p -m 0700 %{buildroot}%{_sharedstatedir}/waagent +mkdir -p %{buildroot}%{_localstatedir}/log +touch %{buildroot}%{_localstatedir}/log/waagent.log + +mkdir -p %{buildroot}%{_udevrulesdir} +mv %{buildroot}%{_sysconfdir}/udev/rules.d/*.rules %{buildroot}%{_udevrulesdir}/ + +rm -rf %{buildroot}/%{python3_sitelib}/tests +rm -rf %{buildroot}/%{python3_sitelib}/__main__.py +rm -rf %{buildroot}/%{python3_sitelib}/__pycache__/__main__*.py* + +sed -i 's,#!/usr/bin/env python,#!/usr/bin/python3,' %{buildroot}%{_sbindir}/waagent +%if 0%{?with_legacy} +sed -i 's,#!/usr/bin/env python,#!/usr/bin/python2,' %{buildroot}%{_sbindir}/waagent2.0 +%else +rm -f %{buildroot}%{_sbindir}/waagent2.0 +%endif +sed -i 's,/usr/bin/python ,/usr/bin/python3 ,' %{buildroot}%{_unitdir}/waagent.service + +mv %{buildroot}%{_sysconfdir}/logrotate.d/waagent.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name} + +install -m0755 -D -t %{buildroot}%{_prefix}/lib/dracut/modules.d/%{dracut_modname}/ %{SOURCE1} + +%post +%systemd_post waagent.service + +%preun +%systemd_preun waagent.service + +%postun +%systemd_postun_with_restart waagent.service +rm -rf %{_unitdir}/waagent.service.d/ + +%files +%doc LICENSE.txt NOTICE README.md +%ghost %{_localstatedir}/log/waagent.log +%ghost %{_unitdir}/waagent-network-setup.service +%dir %attr(0700, root, root) %{_sharedstatedir}/waagent +%config(noreplace) %{_sysconfdir}/logrotate.d/%{name} +%{_sbindir}/waagent +%config(noreplace) %{_sysconfdir}/waagent.conf +%{_unitdir}/waagent.service +%{_unitdir}/azure.slice +%{_unitdir}/azure-vmextensions.slice +%{python3_sitelib}/azurelinuxagent +%{python3_sitelib}/*.egg-info + +%files udev +%{_udevrulesdir}/*.rules +%{_prefix}/lib/dracut/modules.d/%{dracut_modname}/*.sh + +%if 0%{?with_legacy} +%files legacy +%{_sbindir}/waagent2.0 +%endif + +%changelog +* Mon Aug 05 2024 Miroslav Rezanina - 2.9.1.1-7 +- wla-skip-cgorup-monitor-2939.patch [RHEL-46713] +- Resolves: RHEL-46713 + ([Azure][RHEL-10][WALA] waagent -collect-logs doesn't work and the log is confusing) + +* Thu Jul 11 2024 Miroslav Rezanina - 2.9.1.1-6 +- wla-redhat-Use-NetworkManager-to-set-DHCP-hostnames-on-r.patch [RHEL-40966] +- wla-redhat-Remove-all-waagent-unit-files-when-uninstalli.patch [RHEL-40966] +- wla-redhat-Mark-directories-properly-in-the-files-list.patch [RHEL-40966] +- wla-redhat-Remove-files-inside-WALA-services-directory.patch [RHEL-40966] +- Resolves: RHEL-40966 + ([Azure][WALA][RHEL-10] Provisioning failed if no ifcfg-eth0) + +* Mon Jun 24 2024 Troy Dawson - 2.9.1.1-5 +- Bump release for June 2024 mass rebuild + +* Tue May 14 2024 Miroslav Rezanina - 2.9.1.1-4 +- wla-Disable-automatic-log-collector.patch [RHEL-35963] +- Resolves: RHEL-35963 + ([Azure][WALA] Consider to disable Log collector [rhel-10]) + +* Mon Jan 22 2024 Fedora Release Engineering - 2.9.1.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Fri Jan 19 2024 Fedora Release Engineering - 2.9.1.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Wed Oct 18 2023 Vitaly Kuznetsov - 2.9.1.1-1 +- Update to 2.9.1.1 (#2232763) + +* Wed Jul 19 2023 Fedora Release Engineering - 2.9.0.4-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Python Maint - 2.9.0.4-3 +- Rebuilt for Python 3.12 + +* Tue May 30 2023 Vitaly Kuznetsov - 2.9.0.4-2 +- Switch to SPDX identifiers for the license field + +* Mon Mar 13 2023 Vitaly Kuznetsov - 2.9.0.4-1 +- Update to 2.9.0.4 (#2177333) + +* Fri Jan 20 2023 Dusty Mabe - 2.8.0.11-3 +- Move module-setup.sh into git + +* Wed Jan 18 2023 Fedora Release Engineering - 2.8.0.11-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Mon Oct 31 2022 Vitaly Kuznetsov - 2.8.0.11-1 +- Update to 2.8.0.11 (#2128547) + +* Tue Oct 18 2022 Chris Patterson - 2.7.3.0-2 +- Add ConditionVirtualization=|microsoft triggering condition + +* Wed Aug 03 2022 Vitaly Kuznetsov - 2.7.3.0-1 +- Update to 2.7.3.0 (#2110155) + +* Wed Jul 20 2022 Fedora Release Engineering - 2.7.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Thu Jun 30 2022 Vitaly Kuznetsov - 2.7.1.0-1 +- Update to 2.7.1.0 (#2097244) + +* Mon Jun 13 2022 Python Maint - 2.7.0.6-2 +- Rebuilt for Python 3.11 + +* Fri Apr 22 2022 Vitaly Kuznetsov - 2.7.0.6-1 +- Update to 2.7.0.6 (#2040980) + +* Wed Jan 19 2022 Fedora Release Engineering - 2.5.0.2-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Jan 03 2022 Vitaly Kuznetsov - 2.5.0.2-1 +- Update to 2.5.0.2 (#2008699) + +* Wed Jul 21 2021 Fedora Release Engineering - 2.3.1.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Mon Jul 19 2021 Vitaly Kuznetsov - 2.3.1.1-1 +- Update to 2.3.1.1 (#1982512) +- Require iptables for setting up persistent firewall rules + +* Tue Jun 15 2021 Vitaly Kuznetsov - 2.3.0.2-1 +- Update to 2.3.0.2 (#1971116) + +* Fri Jun 04 2021 Python Maint - 2.2.54.2-2 +- Rebuilt for Python 3.10 + +* Fri May 21 2021 Vitaly Kuznetsov - 2.2.54.2-1 +- Update to 2.2.54.2 (#1916966) + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 2.2.52-6 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Fri Feb 19 2021 Vitaly Kuznetsov - 2.2.52-5 +- Require ntfsprogs on Fedora only + +* Tue Jan 26 2021 Vitaly Kuznetsov - 2.2.52-4 +- Fix distro resolution for RedHat + +* Mon Jan 25 2021 Fedora Release Engineering - 2.2.52-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Jan 15 2021 Vitaly Kuznetsov - 2.2.52-2 +- Add udev rules to initramfs (#1909287) + +* Wed Dec 09 2020 Vitaly Kuznetsov - 2.2.52-1 +- Update to 2.2.52 (#1849923) +- Add not yet upstream patches supporting Python3.9 changes + +* Mon Jul 27 2020 Fedora Release Engineering - 2.2.48.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Tue Jun 09 2020 Vitaly Kuznetsov - 2.2.48.1-1 +- Update to 2.2.48.1 (#1641605) +- Split udev rules to a separate subpackage (#1748432) + +* Tue May 26 2020 Miro Hrončok - 2.2.46-2 +- Rebuilt for Python 3.9 + +* Wed Apr 15 2020 Vitaly Kuznetsov - 2.2.46-1 +- Update to 2.2.46 + +* Tue Jan 28 2020 Fedora Release Engineering - 2.2.40-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Oct 03 2019 Miro Hrončok - 2.2.40-6 +- Rebuilt for Python 3.8.0rc1 (#1748018) + +* Wed Aug 21 2019 Miro Hrončok - 2.2.40-5 +- Rebuilt for Python 3.8 + +* Wed Aug 21 2019 Vitaly Kuznetsov - 2.2.40-4 +- Disable Python2 dependent 'legacy' subpackage (#1741029) + +* Mon Aug 19 2019 Miro Hrončok - 2.2.40-3 +- Rebuilt for Python 3.8 + +* Wed Jul 24 2019 Fedora Release Engineering - 2.2.40-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon Jun 03 2019 Vitaly Kuznetsov - 2.2.40-1 +- Update to 2.2.40 +- Fix FTBFS in the preparation for Python3.8 (#1705219) + +* Thu Mar 14 2019 Vitaly Kuznetsov - 2.2.38-1 +- Update to 2.2.38 (CVE-2019-0804) + +* Thu Mar 14 2019 Vitaly Kuznetsov - 2.2.37-1 +- Update to 2.2.37 + +* Thu Jan 31 2019 Fedora Release Engineering - 2.2.32-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Thu Sep 20 2018 Vitaly Kuznetsov - 2.2.32-1 +- Update to 2.2.32.2 + +* Thu Jul 12 2018 Fedora Release Engineering - 2.2.25-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Jun 19 2018 Miro Hrončok - 2.2.25-3 +- Rebuilt for Python 3.7 + +* Wed Apr 25 2018 Vitaly Kuznetsov - 2.2.25-2 +- Move net-tools dependency to WALinuxAgent-legacy (#1106781) + +* Mon Apr 16 2018 Vitaly Kuznetsov - 2.2.25-1 +- Update to 2.2.25 +- Switch to Python3 +- Legacy subpackage with waagent2.0 supporting old extensions + +* Wed Feb 28 2018 Iryna Shcherbina - 2.0.18-5 +- Update Python 2 dependency declarations to new packaging standards + (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) + +* Wed Feb 07 2018 Fedora Release Engineering - 2.0.18-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 2.0.18-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Fri Feb 10 2017 Fedora Release Engineering - 2.0.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Sat Apr 02 2016 Scott K Logan - 2.0.18-1 +- Update to 2.0.18 + +* Wed Feb 03 2016 Fedora Release Engineering - 2.0.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Thu Jul 02 2015 Scott K Logan - 2.0.14-1 +- Update to 2.0.14 + +* Tue Jun 16 2015 Fedora Release Engineering - 2.0.13-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Mon Jun 01 2015 Scott K Logan - 2.0.13-1 +- Update to 2.0.13 + +* Thu Apr 02 2015 Scott K Logan - 2.0.12-1 +- Update to 2.0.12-Oracle + +* Sat Jan 10 2015 Scott K Logan - 2.0.11-2 +- Use systemd for rhel7 +- Own logrotate.d +- Fix python2-devel dep + +* Sat Dec 20 2014 Scott K Logan - 2.0.11-1 +- Initial package