On Thu, Feb 02, 2017 at 02:33:17PM +0100, Pino Toscano wrote:
Hi,
the libguestfs library uses a number of external tools; for some of them, we search for them at build time, enabling some feature only if found, and later on assuming at runtime they are installed. However, the situation is more complex than that: - hardcoding the full path means that there is an incoherency in the way some of the tools are used, as some other tools (e.g. qemu-img) are just run as assumed to be in $PATH; also hardcoding means libguestfs cannot use different versions of those tools
There is reasoning here, see m4/guestfs_programs.m4: # Check for external programs required to either build or run # libguestfs. # # AC_CHECK_PROG(S) or AC_PATH_PROG(S)? # # Use AC_CHECK_PROG(S) for programs which are only used during build. # # Use AC_PATH_PROG(S) for program names which are compiled into the # binary and used at run time. The reason is so that we know which # programs the binary actually uses. As it says in the message, the main reason I like to hard code the full path is because I want to know that the user is running the same program that we tested against, ie. they didn't install some half-baked binary in /usr/local/bin. I think it's a mistake if we call qemu-img without the full path BTW ...
- some of the tools are actually optional, and their runtime lack can be handled gracefully instead of throwing a "failed to execute" error
Now, I do think this is a problem. But why don't we just test if the (full pathnamed) program exists using a simple stat or access? Rich.
The chosen approach is to build a process-wide cache in the libguestfs library of paths of tools searched, even in case they are not available: this way it is easier to just skip something at runtime if a program is not there. The patch series applies it for the libdb tools, and for the tools used to extract icons from guests.
Thanks,
Pino Toscano (3): lib: add internal cache for external application lib: improve libdb tools handling at runtime (RHBZ#1409024) inspect: make netpbm and icoutils really optional runtime tools
lib/Makefile.am | 1 + lib/external-apps.c | 190 +++++++++++++++++++++++++++++++++++++++++++++ lib/guestfs-internal.h | 3 + lib/inspect-apps.c | 14 +++- lib/inspect-icon.c | 54 +++++++------ m4/guestfs-find-db-tool.m4 | 2 +- m4/guestfs_progs.m4 | 24 ------ 7 files changed, 237 insertions(+), 51 deletions(-) create mode 100644 lib/external-apps.c
-- 2.9.3
_______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs
-- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 100 libraries supported. http://fedoraproject.org/wiki/MinGW