On Mon, Jun 29, 2015 at 06:44:13PM +0200, Cédric Bosdonnat wrote: > In order to be able to mount a custom host-image as / we need to be able > to access libvirt-sandbox-init-common and all its needed dependencies. > In the container case we also need to copy libvirt-sandbox-init-lxc. > > They are now copied into SANDBOXCONFIGDIR /.libs. Hard linking is not > possible since we may be working on separate partitions, and symlinks > wouldn't help to work with apparmor. Copying makes apparmor happy and > solves our problem. > --- > configure.ac | 7 + > .../libvirt-sandbox-builder-container.c | 15 +- > libvirt-sandbox/libvirt-sandbox-builder.c | 159 ++++++++++++++++++++- > libvirt-sandbox/libvirt-sandbox-builder.h | 2 + > libvirt-sandbox/libvirt-sandbox-init-lxc.c | 8 +- > libvirt-sandbox/libvirt-sandbox-init-qemu.c | 9 +- > 6 files changed, 196 insertions(+), 4 deletions(-) > > diff --git a/libvirt-sandbox/libvirt-sandbox-init-lxc.c b/libvirt-sandbox/libvirt-sandbox-init-lxc.c > index 798af37..e2fe7f0 100644 > --- a/libvirt-sandbox/libvirt-sandbox-init-lxc.c > +++ b/libvirt-sandbox/libvirt-sandbox-init-lxc.c > @@ -77,10 +77,16 @@ main(int argc, char **argv) > args[narg++] = "1000"; > } > > - args[narg++] = LIBEXECDIR "/libvirt-sandbox-init-common"; > + args[narg++] = SANDBOXCONFIGDIR "/.libs/libvirt-sandbox-init-common"; > if (debug) > args[narg++] = "-d"; > > + if (setenv("LD_LIBRARY_PATH", SANDBOXCONFIGDIR "/.libs", 1) != 0) { > + fprintf(stderr, "libvirt-sandbox-init-lxc: %s: cannot set LD_LIBRARY_PATH: %s\n", > + __func__, strerror(errno)); > + exit(EXIT_FAILURE); > + } > + > if (debug) > fprintf(stderr, "Running interactive\n"); > execv(args[0], (char**)args); > diff --git a/libvirt-sandbox/libvirt-sandbox-init-qemu.c b/libvirt-sandbox/libvirt-sandbox-init-qemu.c > index 44305fd..62e8e40 100644 > --- a/libvirt-sandbox/libvirt-sandbox-init-qemu.c > +++ b/libvirt-sandbox/libvirt-sandbox-init-qemu.c > @@ -338,10 +338,17 @@ main(int argc ATTR_UNUSED, char **argv ATTR_UNUSED) > args[narg++] = "1000"; > } > > - args[narg++] = LIBEXECDIR "/libvirt-sandbox-init-common"; > + args[narg++] = SANDBOXCONFIGDIR "/.libs/libvirt-sandbox-init-common"; > if (debug) > args[narg++] = "-d"; > > + if (setenv("LD_LIBRARY_PATH", SANDBOXCONFIGDIR "/.libs", 1) < 0) { > + fprintf(stderr, "libvirt-sandbox-init-qemu: %s: cannot set LD_LIBRARY_PATH: %s\n", > + __func__, strerror(errno)); > + exit_poweroff(); > + } > + > + > if (debug) > fprintf(stderr, "libvirt-sandbox-init-qemu: Running common init %s\n", args[0]); > execv(args[0], (char**)args); We need to unsetenv() in init-common to clear the LD_LIBRARY_PATH setting to prevent it being used by the user application too Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list