[CRIU] [Announce] Compel library and tool is now alpha

Pavel Emelyanov xemul at virtuozzo.com
Mon Nov 28 02:33:45 PST 2016


Hello everyone!

I'm excited to announce that we've done a major portion of making the
infection engine be available as a separate piece of software :)

What we've got so far is not perfect yet (we're working on it, everybody
is welcome to join), but is ready to be played with.

Many thanks and kudos go to Cyrill who did this heavy lifting by carefully 
splitting the code and keeping it alive on all supported architectures!

Useful links:

* Repo https://github.com/xemul/criu/ branch criu-dev.
  Sitting in this branch means that the code is not "officially released" and 
  is subject to change. Once we all agree it's working, I'll merge it into 
  master (or into its own repo) and release.

* Compel itself is in compel/ subdir.
  Building all CRIU with 'make' builds the whole compel stuff too.

* Infection and remote syscall execution examples are in compel/test/.
  To try them -- build criu, then go to test/$name/ directory and run 'make'
  there. Running the 'spy' binary runs the test.

* Some docs about most of the above are here: https://criu.org/Compel


Nearest plans:

* Check and fix non-x86 arches.
  CRIU works with compel just fine, but standalone mode is verified by tests
  on x86 only.

* Fix "root-only" obstacle.
  CRIU is root-only tool, so we've only checked compel to work when used by
  root-capable tasks. However, making it work from non-root user is possible,
  not that hard and makes perfect sense.

* Tune the API.
  Right now we have some stuff that just got into compel/include/uapi/ when we
  moved the code around and should be hidden. Naming could probably be better 
  too. Configuring the infection context is also FIXME-able.

* Rectify parasite loading.
  For now the prepared parasite ELF should be converted into a C header file,
  then compiled with infection code, then libcompel can inject it into victim.
  Reorganizing the code so that it loads the ELF itself is tempting.

* Make .so version of the library.
  For now the libcompel.a is built, so only static linkage is possible. Making
  it .so should not be a big deal, it mostly depends on the API rectification
  task (API should be extendable and backward compatible).

Have fun!

-- Pavel


More information about the CRIU mailing list