osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38803?usp=email )
Change subject: testenv: install dbg pkgs with --binary-repo too ......................................................................
testenv: install dbg pkgs with --binary-repo too
When using --binary-repo, figure out the -dbg and -dbgsym packages for all dependencies of packages to be installed, and install them as well.
This will make debug symbols available in jenkins, useful for the related issue. Before this patch debug symbols were only available when building locally without --binary-repo.
Related: OS#6630 Change-Id: I4dc57257b944126fed2c7b031c92c77a3d4286e0 --- M _testenv/data/podman/Dockerfile M _testenv/testenv/podman_install.py 2 files changed, 58 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/03/38803/1
diff --git a/_testenv/data/podman/Dockerfile b/_testenv/data/podman/Dockerfile index 6f6c739..5321bfe 100644 --- a/_testenv/data/podman/Dockerfile +++ b/_testenv/data/podman/Dockerfile @@ -19,6 +19,7 @@ -y \ --no-install-recommends \ -o Dpkg::Options::="--force-confold" \ + apt-rdepends \ autoconf \ automake \ bc \ diff --git a/_testenv/testenv/podman_install.py b/_testenv/testenv/podman_install.py index 9c680b9..77183ed 100644 --- a/_testenv/testenv/podman_install.py +++ b/_testenv/testenv/podman_install.py @@ -3,6 +3,9 @@ import logging import multiprocessing import os +import shlex +import string +import subprocess import sys import testenv.cmd import testenv.podman @@ -30,6 +33,58 @@ os.makedirs(git_dir, exist_ok=True)
+def get_dbg_pkgs(dep): + ret = [f"{dep}-dbg", f"{dep}-dbgsym"] + + # Get from e.g. libosmocore22 to libosmocore-dbg + dep_nodigits = dep.rstrip(string.digits) + if dep_nodigits != dep: + ret += [f"{dep_nodigits}-dbg", f"{dep_nodigits}-dbgsym"] + + return ret + + +def apt_get_dbg_pkgs(pkgs): + dbg_pkgs_all = os.path.join(testenv.args.cache, "podman", "dbg_pkgs_all") + dbg_pkgs = {} + + testenv.cmd.run(f"apt-cache pkgnames | grep -- -dbg > {shlex.quote(dbg_pkgs_all)}") + + for pkg in pkgs: + # Iterate over apt-rdepends, example output: + # osmo-mgw + # Depends: libc6 (>= 2.34) + # Depends: libosmoabis13 + rdeps = testenv.cmd.run(["apt-rdepends", pkg], stdout=subprocess.PIPE) + for line in rdeps.stdout.decode("utf-8").split("\n"): + if line.startswith(" "): + continue + dep = line.rstrip() + + if dep not in dbg_pkgs: + for dbg_pkg in get_dbg_pkgs(dep): + # Use subprocess.run so we don't get lots of log messages. + # Also we don't need to run grep through podman. + grep = subprocess.run(["grep", "-q", f"^{dbg_pkg}$", dbg_pkgs_all]) + + if grep.returncode == 0: + dbg_pkgs[dep] = dbg_pkg + break + + if dep not in dbg_pkgs: + dbg_pkgs[dep] = None + + if dbg_pkgs[dep]: + logging.debug(f"{pkg} -> {dep}: installing {dbg_pkgs[dep]}") + + ret = [] + for dep, dbg in dbg_pkgs.items(): + if dbg: + ret += [dbg] + + return ret + + def apt_install(pkgs): if not pkgs: return @@ -37,6 +92,8 @@ # Remove duplicates pkgs = list(set(pkgs))
+ pkgs += apt_get_dbg_pkgs(pkgs) + logging.info(f"Installing packages: {', '.join(pkgs)}") testenv.cmd.run(["apt-get", "-q", "install", "-y", "--no-install-recommends"] + pkgs)