summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorMürsel Türk2022-09-14 23:12:36 +0200
committerMürsel Türk2022-09-14 23:12:36 +0200
commitc37147a07f9830cc6c6084142cbdae53741a2913 (patch)
tree1bc173cf0125a4c2d4f2f3cd8245d2f8e556d6c3 /tools
parentRename deb to dpkg (diff)
downloadvm-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.py55
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.