diff options
author | Mürsel Türk | 2022-09-14 23:12:36 +0200 |
---|---|---|
committer | Mürsel Türk | 2022-09-14 23:12:36 +0200 |
commit | c37147a07f9830cc6c6084142cbdae53741a2913 (patch) | |
tree | 1bc173cf0125a4c2d4f2f3cd8245d2f8e556d6c3 /tools | |
parent | Rename deb to dpkg (diff) | |
download | vm-inspector-c37147a07f9830cc6c6084142cbdae53741a2913.tar.gz vm-inspector-c37147a07f9830cc6c6084142cbdae53741a2913.tar.xz vm-inspector-c37147a07f9830cc6c6084142cbdae53741a2913.zip |
Add support for alpine linux
Diffstat (limited to 'tools')
-rw-r--r-- | tools/inspect_apps.py | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tools/inspect_apps.py b/tools/inspect_apps.py index 7031a0a..613649b 100644 --- a/tools/inspect_apps.py +++ b/tools/inspect_apps.py @@ -6,6 +6,7 @@ import tempfile from . import log, subdirs __all__ = [ + "list_applications_apk", "list_applications_dpkg", "list_applications_pacman", "list_applications_rpm", @@ -34,6 +35,60 @@ except ModuleNotFoundError: @log +def list_applications_apk(path): + """Find all packages installed on the linux distribution Alpine Linux. + + See also: + https://wiki.alpinelinux.org/wiki/Alpine_Package_Keeper + + Args: + path (str): Path to the mounted filesystem. + + Returns: + List of packages. For example: + [{'name': 'musl', 'version': '1.2.3-r0'}, ...] + """ + apk_db = None + + location = "lib/apk/db/installed" + + db = os.path.join(path, location) + if os.path.exists(db): + apk_db = db + + if apk_db is None: + for dir in subdirs(path): + new_path = os.path.join(path, dir) + db = os.path.join(new_path, location) + if os.path.exists(db): + apk_db = db + break + + if apk_db is None: + L.debug("apk database not found") + return [] + + pkgs = [] + with open(apk_db) as f: + name = version = "" + for line in f: + line = line.strip() + if not line: + if name and version: + pkgs.append({ + "name": name, + "version": version + }) + name = version = "" + elif line.startswith("P:"): + name = line[2:] + elif line.startswith("V:"): + version = line[2:] + + return pkgs + + +@log def list_applications_dpkg(path): """Find all packages installed on a debian-based linux distribution. |