From 696a9483fed194742fb541c95d5abe0401e9aa25 Mon Sep 17 00:00:00 2001 From: ganglyu Date: Sun, 24 Apr 2022 13:46:10 +0800 Subject: [PATCH 1/5] [sonic-host-services]: Fix import and invalid path Signed-off-by: Gang Lv ganglv@microsoft.com --- files/build_templates/sonic_debian_extension.j2 | 8 +++++++- src/sonic-host-services/scripts/sonic-host-server | 15 ++++++++++++--- src/sonic-host-services/setup.py | 1 + 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index a49e29406eeb..050216d8daac 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -75,6 +75,12 @@ else sudo chroot $FILESYSTEM_ROOT $DOCKER_CTL_SCRIPT start fi +# Apply apt configuration files +sudo cp $IMAGE_CONFIGS/apt/sources.list $FILESYSTEM_ROOT/etc/apt/ +sudo mkdir -p $FILESYSTEM_ROOT/etc/apt/sources.list.d/ +sudo cp -R $IMAGE_CONFIGS/apt/sources.list.d/${CONFIGURED_ARCH}/* $FILESYSTEM_ROOT/etc/apt/sources.list.d/ +cat $IMAGE_CONFIGS/apt/sonic-dev.gpg.key | sudo LANG=C chroot $FILESYSTEM_ROOT apt-key add - + # Update apt's snapshot of its repos sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get update @@ -233,7 +239,7 @@ sudo cp -f $IMAGE_CONFIGS/bash/bash.bashrc $FILESYSTEM_ROOT/etc/ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y install libcairo2-dev libdbus-1-dev libgirepository1.0-dev libsystemd-dev pkg-config # Mark runtime dependencies as manually installed to avoid them being auto-removed while uninstalling build dependencies -sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-mark manual gir1.2-glib-2.0 libdbus-1-3 libgirepository-1.0-1 libsystemd0 +sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-mark manual gir1.2-glib-2.0 libdbus-1-3 libgirepository-1.0-1 libsystemd0 python3-dbus # Install SONiC host services package SONIC_HOST_SERVICES_PY3_WHEEL_NAME=$(basename {{sonic_host_services_py3_wheel_path}}) diff --git a/src/sonic-host-services/scripts/sonic-host-server b/src/sonic-host-services/scripts/sonic-host-server index a9fdc2eb25fd..eb1ae781a8d6 100755 --- a/src/sonic-host-services/scripts/sonic-host-server +++ b/src/sonic-host-services/scripts/sonic-host-server @@ -13,9 +13,16 @@ import dbus.mainloop.glib from gi.repository import GObject -def register_modules(): +def find_module_path(): + """Find path for host_moduels""" + for path in sys.path: + mod_path = path + '/host_modules' + if os.path.exists(mod_path): + return mod_path + return None + +def register_modules(mod_path): """Register all host modules""" - mod_path = '/usr/local/lib/python3.7/dist-packages/host_modules' sys.path.append(mod_path) for mod_file in glob.glob(os.path.join(mod_path, '*.py')): if os.path.isfile(mod_file) and not mod_file.endswith('__init__.py'): @@ -62,7 +69,9 @@ class SignalManager(object): loop.quit() sigmgr = SignalManager() -register_modules() +mod_path = find_module_path() +if mod_path is not None: + register_modules(mod_path) # Only run if we actually have some handlers if handlers: diff --git a/src/sonic-host-services/setup.py b/src/sonic-host-services/setup.py index 8926e960e311..9ed9e1082a0c 100644 --- a/src/sonic-host-services/setup.py +++ b/src/sonic-host-services/setup.py @@ -24,6 +24,7 @@ ], install_requires = [ 'dbus-python', + 'systemd-python', 'Jinja2>=2.10', 'PyGObject', 'sonic-py-common' From 061ae8fcd9a00bfafd7e500ecf3c3b70e8767b9c Mon Sep 17 00:00:00 2001 From: ganglyu Date: Sun, 24 Apr 2022 13:50:30 +0800 Subject: [PATCH 2/5] Remove wrong commit --- files/build_templates/sonic_debian_extension.j2 | 6 ------ 1 file changed, 6 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 050216d8daac..8a04b682abae 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -75,12 +75,6 @@ else sudo chroot $FILESYSTEM_ROOT $DOCKER_CTL_SCRIPT start fi -# Apply apt configuration files -sudo cp $IMAGE_CONFIGS/apt/sources.list $FILESYSTEM_ROOT/etc/apt/ -sudo mkdir -p $FILESYSTEM_ROOT/etc/apt/sources.list.d/ -sudo cp -R $IMAGE_CONFIGS/apt/sources.list.d/${CONFIGURED_ARCH}/* $FILESYSTEM_ROOT/etc/apt/sources.list.d/ -cat $IMAGE_CONFIGS/apt/sonic-dev.gpg.key | sudo LANG=C chroot $FILESYSTEM_ROOT apt-key add - - # Update apt's snapshot of its repos sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get update From 2e78e3c095e12a151ad3ba93e0336c6d4cc180b8 Mon Sep 17 00:00:00 2001 From: ganglyu Date: Sun, 24 Apr 2022 17:08:09 +0800 Subject: [PATCH 3/5] Use pip to install systemd-python and update path. --- files/build_templates/sonic_debian_extension.j2 | 3 +++ src/sonic-host-services/scripts/sonic-host-server | 10 +++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/files/build_templates/sonic_debian_extension.j2 b/files/build_templates/sonic_debian_extension.j2 index 8a04b682abae..349c195f975e 100644 --- a/files/build_templates/sonic_debian_extension.j2 +++ b/files/build_templates/sonic_debian_extension.j2 @@ -235,6 +235,9 @@ sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-get -y in # Mark runtime dependencies as manually installed to avoid them being auto-removed while uninstalling build dependencies sudo LANG=C DEBIAN_FRONTEND=noninteractive chroot $FILESYSTEM_ROOT apt-mark manual gir1.2-glib-2.0 libdbus-1-3 libgirepository-1.0-1 libsystemd0 python3-dbus +# Install systemd-python for SONiC host services +sudo https_proxy=$https_proxy LANG=C chroot $FILESYSTEM_ROOT pip3 install systemd-python + # Install SONiC host services package SONIC_HOST_SERVICES_PY3_WHEEL_NAME=$(basename {{sonic_host_services_py3_wheel_path}}) sudo cp {{sonic_host_services_py3_wheel_path}} $FILESYSTEM_ROOT/$SONIC_HOST_SERVICES_PY3_WHEEL_NAME diff --git a/src/sonic-host-services/scripts/sonic-host-server b/src/sonic-host-services/scripts/sonic-host-server index eb1ae781a8d6..23dfc3f2ccb7 100755 --- a/src/sonic-host-services/scripts/sonic-host-server +++ b/src/sonic-host-services/scripts/sonic-host-server @@ -15,11 +15,11 @@ from gi.repository import GObject def find_module_path(): """Find path for host_moduels""" - for path in sys.path: - mod_path = path + '/host_modules' - if os.path.exists(mod_path): - return mod_path - return None + try: + from host_modules import host_service + return os.path.dirname(host_service.__file__) + except: + return None def register_modules(mod_path): """Register all host modules""" From b74dbaf06c9f47f80e89a59d5c75980efa14cb52 Mon Sep 17 00:00:00 2001 From: ganglyu Date: Sun, 24 Apr 2022 17:37:24 +0800 Subject: [PATCH 4/5] Fix LGTM alert. --- src/sonic-host-services/scripts/sonic-host-server | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/sonic-host-services/scripts/sonic-host-server b/src/sonic-host-services/scripts/sonic-host-server index 23dfc3f2ccb7..fbf11a7e9049 100755 --- a/src/sonic-host-services/scripts/sonic-host-server +++ b/src/sonic-host-services/scripts/sonic-host-server @@ -18,7 +18,8 @@ def find_module_path(): try: from host_modules import host_service return os.path.dirname(host_service.__file__) - except: + except Exception as e: + print("error occurred in find_module_path: {}".format(sys.exc_info()[1])) return None def register_modules(mod_path): From 15368679245e5c4f5bfc683b925a7b10d193f74d Mon Sep 17 00:00:00 2001 From: ganglyu Date: Tue, 26 Apr 2022 08:07:06 +0800 Subject: [PATCH 5/5] Use ImportError instead. --- src/sonic-host-services/scripts/sonic-host-server | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/sonic-host-services/scripts/sonic-host-server b/src/sonic-host-services/scripts/sonic-host-server index fbf11a7e9049..bf4449e34eda 100755 --- a/src/sonic-host-services/scripts/sonic-host-server +++ b/src/sonic-host-services/scripts/sonic-host-server @@ -18,8 +18,7 @@ def find_module_path(): try: from host_modules import host_service return os.path.dirname(host_service.__file__) - except Exception as e: - print("error occurred in find_module_path: {}".format(sys.exc_info()[1])) + except ImportError as e: return None def register_modules(mod_path):