criu: dlopen() optional libraries

Submitted by Dmitry Safonov on Nov. 23, 2019, 11:46 p.m.

Details

Reviewer None
Submitted Nov. 23, 2019, 11:46 p.m.
Last Updated Nov. 24, 2019, 11:57 a.m.
Revision 1

Cover Letter

Introduce support for dynamically loaded libraries in CRIU for
optional functionality.

Currently we check for optional dependencies build-time which makes
them non-optional for the end user and requires installation on build.

Let's move the optional functionality to run-time.
In the end such libraries could be put in a separate section of
the Specfile. As for example `firefox' on my system:

> Name            : firefox
> Version         : 70.0.1-1
> Description     : Standalone web browser from mozilla.org
> Depends On      : gtk3  libxt  startup-notification  mime-types  dbus-glib  ffmpeg
>                   nss  ttf-font  libpulse
> Optional Deps   : networkmanager: Location detection via available WiFi networks
>                   libnotify: Notification integration [installed]
>                   pulseaudio: Audio support [installed]
>                   speech-dispatcher: Text-to-Speech
>                   hunspell-en_US: Spell checking, American English [installed]

This also helps with adding nftables support (#861) as
libnftables.so.0 is ABI-incompatible with libnftables.so.1

So, I wish we wouldn't bind to a particular version.

Though, the introduced cr-libs force you to put supported major version
of the library as per semver.org the new major version means that there
may be incompatible API-breaking changes.

And finally, I'm not very fond of this boilerplate that's result of
helper shared_libs_lookup_once() - but we can introduce some macro
such as DEFINE_SHARED_LIB_FUNCION(lib_id, name, ...) to add some sugar
and reduce the code for every library's function..
Still, I wanted to send this before introducing this macro while it's
more clear how it works "inside".

Dmitry Safonov (6):
  log: Include stdbool.h
  criu: Use shared libraries for optional functionality
  criu: Add lib-bsd
  criu: Remove CONFIG_HAS_LIBBSD
  net/lsm: Move default socket labeling helpers in lsm.c
  lsm: Remove reset_setsockcreatecon()

 Makefile.config              |  11 +--
 criu/Makefile.crtools        |   3 +-
 criu/cgroup-props.c          |   1 -
 criu/cgroup.c                |   1 -
 criu/cr-dump.c               |   2 +-
 criu/cr-libs.c               | 133 +++++++++++++++++++++++++++++++++++
 criu/cr-service.c            |   2 +-
 criu/crtools.c               |  20 ++++--
 criu/include/cr-libs.h       |  39 ++++++++++
 criu/include/lib-bsd.h       |  11 +++
 criu/include/log.h           |   3 +-
 criu/include/lsm.h           |  19 ++---
 criu/include/setproctitle.h  |  19 -----
 criu/include/string.h        |  20 ------
 criu/{string.c => lib-bsd.c} |  63 +++++++++++++----
 criu/log.c                   |   2 +-
 criu/lsm.c                   |  97 +++++++++++++++++++++----
 criu/net.c                   |  77 +++-----------------
 criu/proc_parse.c            |   2 +-
 criu/sk-inet.c               |   2 +-
 criu/tun.c                   |   2 +-
 scripts/feature-tests.mak    |  50 -------------
 22 files changed, 354 insertions(+), 225 deletions(-)
 create mode 100644 criu/cr-libs.c
 create mode 100644 criu/include/cr-libs.h
 create mode 100644 criu/include/lib-bsd.h
 delete mode 100644 criu/include/setproctitle.h
 delete mode 100644 criu/include/string.h
 rename criu/{string.c => lib-bsd.c} (52%)
  

Revisions