osmith submitted this change.
2 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted one.
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(-)
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)
To view, visit change 38803. To unsubscribe, or for help writing mail filters, visit settings.