From d47d93b1049ecfad2f9bb9db30dc630c3d6131ca Mon Sep 17 00:00:00 2001 From: "Frank Ch. Eigler" Date: Mon, 31 Oct 2022 17:40:01 -0400 Subject: PR29472: debuginfod: add metadata query webapi, C api, client This patch extends the debuginfod API with a "metadata query" operation. It allows clients to request an enumeration of file names known to debuginfod servers, returning a JSON response including the matching buildids. This lets clients later download debuginfo for a range of versions of the same named binaries, in case they need to to prospective work (like systemtap-based live-patching). It also lets server operators implement prefetch triggering operations for popular but slow debuginfo slivers like kernel vdso.debug files on fedora. Implementation requires a modern enough json-c library, namely 0.11, which dates from 2014. Without that, debuginfod client/server bits will refuse to build. % debuginfod-find metadata file /bin/ls % debuginfod-find metadata glob "/usr/local/bin/c*" Refactored several functions in debuginfod-client.c, because the metadata search logic is different for multiple servers (merge all responses instead of first responder wins). Documentation and testing are included. Signed-off-by: Ryan Goldberg Signed-off-by: Frank Ch. Eigler --- configure.ac | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'configure.ac') diff --git a/configure.ac b/configure.ac index 5adf7667..836d61ea 100644 --- a/configure.ac +++ b/configure.ac @@ -863,9 +863,6 @@ AS_IF([test "x$enable_libdebuginfod" != "xno"], [ enable_libdebuginfod=yes # presume success PKG_PROG_PKG_CONFIG PKG_CHECK_MODULES([libcurl],[libcurl >= 7.29.0],[],[enable_libdebuginfod=no]) - if test "x$enable_libdebuginfod" = "xno"; then - AC_MSG_ERROR([dependencies not found, use --disable-libdebuginfod to disable or --enable-libdebuginfod=dummy to build a (bootstrap) dummy library.]) - fi else AC_MSG_NOTICE([building (bootstrap) dummy libdebuginfo library]) fi @@ -899,10 +896,8 @@ AS_IF([test "x$enable_debuginfod" != "xno"], [ PKG_CHECK_MODULES([libmicrohttpd],[libmicrohttpd >= 0.9.33],[],[enable_debuginfod=no]) PKG_CHECK_MODULES([oldlibmicrohttpd],[libmicrohttpd < 0.9.51],[old_libmicrohttpd=yes],[old_libmicrohttpd=no]) PKG_CHECK_MODULES([sqlite3],[sqlite3 >= 3.7.17],[],[enable_debuginfod=no]) - PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no], AC_DEFINE([HAVE_LIBARCHIVE], [0], [Define to 0 if libarchive is not available])) - if test "x$enable_debuginfod" = "xno"; then - AC_MSG_ERROR([dependencies not found, use --disable-debuginfod to disable.]) - fi + PKG_CHECK_MODULES([libarchive],[libarchive >= 3.1.2],[],[enable_debuginfod=no]) + PKG_CHECK_MODULES([jsonc],[json-c >= 0.11],[],[enable_debuginfod=no]) ]) AS_IF([test "x$enable_debuginfod" != "xno"],AC_DEFINE([ENABLE_DEBUGINFOD],[1],[Build debuginfod])) -- cgit v1.2.3