osmith has uploaded this change for review.

View Change

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)


To view, visit change 38803. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: I4dc57257b944126fed2c7b031c92c77a3d4286e0
Gerrit-Change-Number: 38803
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith@sysmocom.de>