osmith has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/38803?usp=email )
(
2 is the latest approved patch-set. No files were changed between the latest approved patch-set and the submitted one. )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(-)
Approvals: fixeria: Looks good to me, approved Jenkins Builder: Verified pespin: Looks good to me, but someone else must approve laforge: Looks good to me, but someone else must approve
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..3c38285 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().split(" ", 1)[0] + + 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)