init package

This commit is contained in:
fushanqing 2022-02-10 09:38:48 +08:00
parent 8b69752a7f
commit 0348fae289
7 changed files with 401 additions and 0 deletions

View File

@ -0,0 +1,72 @@
From cc9b7996e542640bb19365822344298a04b18e44 Mon Sep 17 00:00:00 2001
From: Paula Gombar <gombarica@gmail.com>
Date: Wed, 18 Nov 2020 12:24:33 -0800
Subject: [PATCH 1/3] update array.tostring() and json.loads without encoding
for py3.9
---
azurelinuxagent/common/osutil/bigip.py | 7 ++++++-
azurelinuxagent/common/osutil/default.py | 6 +++++-
tests/protocol/test_imds.py | 4 ++--
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/azurelinuxagent/common/osutil/bigip.py b/azurelinuxagent/common/osutil/bigip.py
index 61d3c695f911..ceadf8ca2066 100644
--- a/azurelinuxagent/common/osutil/bigip.py
+++ b/azurelinuxagent/common/osutil/bigip.py
@@ -280,7 +280,12 @@ class BigIpOSUtil(DefaultOSUtil):
if retsize == (expected * struct_size):
logger.warn(('SIOCGIFCONF returned more than {0} up '
'network interfaces.'), expected)
- sock = buff.tostring()
+ try:
+ # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
+ sock = buff.tostring()
+ except AttributeError:
+ sock = buff.tobytes()
+
for i in range(0, struct_size * expected, struct_size):
iface = self._format_single_interface_name(sock, i)
diff --git a/azurelinuxagent/common/osutil/default.py b/azurelinuxagent/common/osutil/default.py
index 521776818e64..6179061756e3 100644
--- a/azurelinuxagent/common/osutil/default.py
+++ b/azurelinuxagent/common/osutil/default.py
@@ -758,7 +758,11 @@ class DefaultOSUtil(object):
logger.warn(('SIOCGIFCONF returned more than {0} up '
'network interfaces.'), expected)
- ifconf_buff = buff.tostring()
+ try:
+ # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
+ ifconf_buff = buff.tostring()
+ except AttributeError:
+ ifconf_buff = buff.tobytes()
ifaces = {}
for i in range(0, array_size, struct_size):
diff --git a/tests/protocol/test_imds.py b/tests/protocol/test_imds.py
index a730ded03525..47462fd25ac3 100644
--- a/tests/protocol/test_imds.py
+++ b/tests/protocol/test_imds.py
@@ -109,7 +109,7 @@ class TestImds(AgentTestCase):
"zone": "In"
}'''
- data = json.loads(s, encoding='utf-8')
+ data = json.loads(s)
compute_info = imds.ComputeInfo()
set_properties("compute", compute_info, data)
@@ -258,7 +258,7 @@ class TestImds(AgentTestCase):
"version": "{3}"
}}'''.format(publisher, offer, sku, version)
- data = json.loads(s, encoding='utf-8')
+ data = json.loads(s)
compute_info = imds.ComputeInfo()
set_properties("compute", compute_info, data)
--
2.26.2

View File

@ -0,0 +1,90 @@
From 66f600ed3d9f22c2aa6790002507d0c821a7fd0c Mon Sep 17 00:00:00 2001
From: Paula Gombar <gombarica@gmail.com>
Date: Tue, 8 Dec 2020 18:38:33 -0800
Subject: [PATCH 2/3] handle py3.9 check in future.py
---
azurelinuxagent/common/future.py | 13 ++++++++++++-
azurelinuxagent/common/osutil/bigip.py | 8 +++-----
azurelinuxagent/common/osutil/default.py | 9 ++-------
3 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/azurelinuxagent/common/future.py b/azurelinuxagent/common/future.py
index 577fb12e186e..0f76aceba786 100644
--- a/azurelinuxagent/common/future.py
+++ b/azurelinuxagent/common/future.py
@@ -103,4 +103,15 @@ def get_openwrt_platform():
elif product_matches:
if product_matches.group(1) == "OpenWrt":
result[0] = "openwrt"
- return result
\ No newline at end of file
+ return result
+
+
+def array_to_string_or_bytes(buffer):
+ # Python 3.9 removed the tostring() method on arrays, the new alias is tobytes()
+ if sys.version_info[0] == 2:
+ return buffer.tostring()
+
+ if sys.version_info[0] == 3 and sys.version_info[1] <= 8:
+ return buffer.tostring()
+
+ return buffer.tobytes()
diff --git a/azurelinuxagent/common/osutil/bigip.py b/azurelinuxagent/common/osutil/bigip.py
index ceadf8ca2066..cc1b64143c12 100644
--- a/azurelinuxagent/common/osutil/bigip.py
+++ b/azurelinuxagent/common/osutil/bigip.py
@@ -24,6 +24,8 @@ import socket
import struct
import time
+from azurelinuxagent.common.future import array_to_string_or_bytes
+
try:
# WAAgent > 2.1.3
import azurelinuxagent.common.logger as logger
@@ -280,12 +282,8 @@ class BigIpOSUtil(DefaultOSUtil):
if retsize == (expected * struct_size):
logger.warn(('SIOCGIFCONF returned more than {0} up '
'network interfaces.'), expected)
- try:
- # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
- sock = buff.tostring()
- except AttributeError:
- sock = buff.tobytes()
+ sock = array_to_string_or_bytes(buff)
for i in range(0, struct_size * expected, struct_size):
iface = self._format_single_interface_name(sock, i)
diff --git a/azurelinuxagent/common/osutil/default.py b/azurelinuxagent/common/osutil/default.py
index 6179061756e3..c1ca15cf64ef 100644
--- a/azurelinuxagent/common/osutil/default.py
+++ b/azurelinuxagent/common/osutil/default.py
@@ -41,7 +41,7 @@ import azurelinuxagent.common.utils.fileutil as fileutil
import azurelinuxagent.common.utils.shellutil as shellutil
import azurelinuxagent.common.utils.textutil as textutil
from azurelinuxagent.common.exception import OSUtilError
-from azurelinuxagent.common.future import ustr
+from azurelinuxagent.common.future import ustr, array_to_string_or_bytes
from azurelinuxagent.common.utils.cryptutil import CryptUtil
from azurelinuxagent.common.utils.flexible_version import FlexibleVersion
from azurelinuxagent.common.utils.networkutil import RouteEntry, NetworkInterfaceCard
@@ -758,12 +758,7 @@ class DefaultOSUtil(object):
logger.warn(('SIOCGIFCONF returned more than {0} up '
'network interfaces.'), expected)
- try:
- # Python 3.9 removed the tostring() method on arrays, tobytes() is the new alias
- ifconf_buff = buff.tostring()
- except AttributeError:
- ifconf_buff = buff.tobytes()
-
+ ifconf_buff = array_to_string_or_bytes(buff)
ifaces = {}
for i in range(0, array_size, struct_size):
iface = ifconf_buff[i:i+IFNAMSIZ].split(b'\0', 1)[0]
--
2.26.2

33
0003-fix-pylint.patch Normal file
View File

@ -0,0 +1,33 @@
From 90f1a4862cf63df4a96ad912effcfb54192ad4d7 Mon Sep 17 00:00:00 2001
From: Paula Gombar <gombarica@gmail.com>
Date: Tue, 8 Dec 2020 18:53:57 -0800
Subject: [PATCH 3/3] fix pylint
---
azurelinuxagent/common/future.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/azurelinuxagent/common/future.py b/azurelinuxagent/common/future.py
index 0f76aceba786..a6796f19fec2 100644
--- a/azurelinuxagent/common/future.py
+++ b/azurelinuxagent/common/future.py
@@ -106,12 +106,12 @@ def get_openwrt_platform():
return result
-def array_to_string_or_bytes(buffer):
+def array_to_string_or_bytes(buff):
# Python 3.9 removed the tostring() method on arrays, the new alias is tobytes()
if sys.version_info[0] == 2:
- return buffer.tostring()
+ return buff.tostring()
if sys.version_info[0] == 3 and sys.version_info[1] <= 8:
- return buffer.tostring()
+ return buff.tostring()
- return buffer.tobytes()
+ return buff.tobytes()
--
2.26.2

View File

@ -0,0 +1,64 @@
From 3420fef144cf9a5be62cfae16f64c298ca397a17 Mon Sep 17 00:00:00 2001
From: Paula Gombar <gombarica@gmail.com>
Date: Wed, 2 Dec 2020 21:36:41 -0800
Subject: [PATCH] Fix distro resolution for RedHat (#2083)
vkuznets: cherry-picking the primary change of the commit (adding 'rhel')
only, pylint changes require additional commits.
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
---
azurelinuxagent/common/osutil/factory.py | 4 +---
tests/common/osutil/test_factory.py | 14 ++++++++++++++
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/azurelinuxagent/common/osutil/factory.py b/azurelinuxagent/common/osutil/factory.py
index 69f8430052d5..caecaa0887e2 100644
--- a/azurelinuxagent/common/osutil/factory.py
+++ b/azurelinuxagent/common/osutil/factory.py
@@ -97,9 +97,7 @@ def _get_osutil(distro_name, distro_code_name, distro_version, distro_full_name)
else:
return DebianOSBaseUtil()
- if distro_name == "redhat" \
- or distro_name == "centos" \
- or distro_name == "oracle":
+ if distro_name in ("redhat", "rhel", "centos", "oracle"):
if Version(distro_version) < Version("7"):
return Redhat6xOSUtil()
else:
diff --git a/tests/common/osutil/test_factory.py b/tests/common/osutil/test_factory.py
index aa7daebcf25f..2ac0849f75c9 100644
--- a/tests/common/osutil/test_factory.py
+++ b/tests/common/osutil/test_factory.py
@@ -188,6 +188,13 @@ class TestOsUtilFactory(AgentTestCase):
self.assertTrue(type(ret) == Redhat6xOSUtil)
self.assertEquals(ret.get_service_name(), "waagent")
+ ret = _get_osutil(distro_name="rhel",
+ distro_code_name="",
+ distro_full_name="",
+ distro_version="6")
+ self.assertTrue(type(ret) == Redhat6xOSUtil)
+ self.assertEquals(ret.get_service_name(), "waagent")
+
ret = _get_osutil(distro_name="centos",
distro_code_name="",
distro_full_name="",
@@ -209,6 +216,13 @@ class TestOsUtilFactory(AgentTestCase):
self.assertTrue(type(ret) == RedhatOSUtil)
self.assertEquals(ret.get_service_name(), "waagent")
+ ret = _get_osutil(distro_name="rhel",
+ distro_code_name="",
+ distro_full_name="",
+ distro_version="7")
+ self.assertTrue(type(ret) == RedhatOSUtil)
+ self.assertEquals(ret.get_service_name(), "waagent")
+
ret = _get_osutil(distro_name="centos",
distro_code_name="",
distro_full_name="",
--
2.29.2

126
WALinuxAgent.spec Normal file
View File

@ -0,0 +1,126 @@
%global with_legacy 0
%global dracut_modname 97walinuxagent
Name: WALinuxAgent
Version: 2.2.52
Release: 1
Summary: The Microsoft Azure Linux Agent
License: ASL 2.0
URL: https://github.com/Azure/%{name}
Source0: https://github.com/Azure/%{name}/archive/v%{version}.tar.gz
Source1: module-setup.sh
# Python3.9 fixes
Patch0: 0001-update-array.tostring-and-json.loads-without-encodin.patch
Patch1: 0002-handle-py3.9-check-in-future.py.patch
Patch2: 0003-fix-pylint.patch
Patch3: 0004-Fix-distro-resolution-for-RedHat-2083.patch
BuildArch: noarch
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-distro
Requires: %name-udev = %version-%release
Requires: openssh
Requires: openssh-server
Requires: openssl
Requires: parted
Requires: python3-pyasn1
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
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -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}
mv %{buildroot}%{_sysconfdir}/logrotate.d/waagent-extn.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/%{name}-extn
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
%files
%doc Changelog LICENSE.txt NOTICE README.md
%ghost %{_localstatedir}/log/waagent.log
%dir %attr(0700, root, root) %{_sharedstatedir}/waagent
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}-extn
%{_sbindir}/waagent
%config(noreplace) %{_sysconfdir}/waagent.conf
%{_unitdir}/waagent.service
%{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
* Thu Feb 17 2022 fushanqing <fushanqing@kylinos.cn> - 2.2.52-1
- Initial package

16
module-setup.sh Normal file
View File

@ -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
}

BIN
v2.2.52.tar.gz Normal file

Binary file not shown.