diff options
author | Daniil Baturin <daniil@vyos.io> | 2024-03-23 20:50:36 +0000 |
---|---|---|
committer | Daniil Baturin <daniil@vyos.io> | 2024-03-23 21:02:44 +0000 |
commit | 750819bfec5335566dfc48de1ab6dbbc869068a3 (patch) | |
tree | 19499a1ac7cdfeb0b49624e8878750f514537c65 /scripts/image-build/utils.py | |
parent | f08721e15bb4974fefe7dadb6a3d10774e9a301f (diff) | |
download | vyos-build-750819bfec5335566dfc48de1ab6dbbc869068a3.tar.gz vyos-build-750819bfec5335566dfc48de1ab6dbbc869068a3.zip |
build scripts: T3664: move image build scripts to a dedicated directory
to avoid a mix of image build scripts and ancilliary scripts in the same directory
Diffstat (limited to 'scripts/image-build/utils.py')
-rw-r--r-- | scripts/image-build/utils.py | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/scripts/image-build/utils.py b/scripts/image-build/utils.py new file mode 100644 index 00000000..6906c52d --- /dev/null +++ b/scripts/image-build/utils.py @@ -0,0 +1,78 @@ +# Copyright (C) 2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# File: util.py +# Purpose: +# Various common functions for use in build scripts. + + +import sys +import os +from distutils.spawn import find_executable + +# Local modules +import defaults + +def check_build_config(): + if not os.path.exists(defaults.BUILD_CONFIG): + print("Build config file ({file}) does not exist".format(file=defaults.BUILD_CONFIG)) + print("If you are running this script by hand, you should better not. Run 'make iso' instead.") + sys.exit(1) + + +class DependencyChecker(object): + def __init__(self, spec): + missing_packages = self._get_missing_packages(spec['packages']) + missing_binaries = self._get_missing_binaries(spec['binaries']) + self.__missing = {'packages': missing_packages, 'binaries': missing_binaries} + + + def _package_installed(self, name): + result = os.system("dpkg-query -W --showformat='${{Status}}\n' {name} 2>&1 | grep 'install ok installed' >/dev/null".format(name=name)) + return True if result == 0 else False + + def _get_missing_packages(self, packages): + missing_packages = [] + for p in packages: + if not self._package_installed(p): + missing_packages.append(p) + return missing_packages + + def _get_missing_binaries(self, binaries): + missing_binaries = [] + for b in binaries: + if not find_executable(b): + missing_binaries.append(b) + return missing_binaries + + def get_missing_dependencies(self): + if self.__missing['packages'] or self.__missing['binaries']: + return self.__missing + return None + + def format_missing_dependencies(self): + msg = "E: There are missing system dependencies!\n" + if self.__missing['packages']: + msg += "E: Missing packages: " + " ".join(self.__missing['packages']) + if self.__missing['binaries']: + msg += "E: Missing binaries: " + " ".join(self.__missing['binaries']) + return msg + +def check_system_dependencies(deps): + checker = DependencyChecker(deps) + missing = checker.get_missing_dependencies() + if missing: + raise OSError(checker.format_missing_dependencies()) + else: + pass |