[libvirt] [PATCH] Explicitly pass uml_dir argument to user-mode-linux

Daniel P. Berrange berrange at redhat.com
Wed Aug 25 14:18:40 UTC 2010


On Wed, Aug 25, 2010 at 10:07:45AM -0400, Cole Robinson wrote:
> On 08/25/2010 05:03 AM, Soren Hansen wrote:
> > uml_dir overrides user-mode-linux's default of ~/.uml. This is needed
> > for a couple of different reasons:
> > 
> > libvirt expects this to default to virGetUserDirectory(geteuid()) +
> > '/.uml'. However, user-mode-linux actually uses the HOME environment
> > variable to determine where to look for the uml sockets, but if running
> > libvirtd under sudo (which I routinely do during development), $HOME is
> > pointing at my user's homedir, while my euid is 0, so libvirt looks in
> > /root.
> > 
> > Also (and this was my actual motivation for this patch), if HOME isn't
> > set at all, user-mode-linux utterly fails. Looking at the code, it seems
> > it's meant to emit a warning, but alas, it doesn't for some reason.
> > If running libvirtd from upstart, HOME is not set, so any system using
> > upstart will need this change.
> > 
> > Signed-off-by: Soren Hansen <soren at linux2go.dk>
> > ---
> >  src/uml/uml_conf.c |    4 ++--
> >  1 files changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/src/uml/uml_conf.c b/src/uml/uml_conf.c
> > index 65b06c5..4906192 100644
> > --- a/src/uml/uml_conf.c
> > +++ b/src/uml/uml_conf.c
> > @@ -409,7 +409,7 @@ static char *umlNextArg(char *args)
> >   * for a given virtual machine.
> >   */
> >  int umlBuildCommandLine(virConnectPtr conn,
> > -                        struct uml_driver *driver ATTRIBUTE_UNUSED,
> > +                        struct uml_driver *driver,
> >                          virDomainObjPtr vm,
> >                          fd_set *keepfd,
> >                          const char ***retargv,
> > @@ -499,7 +499,6 @@ int umlBuildCommandLine(virConnectPtr conn,
> >      ADD_ENV_COPY("LD_PRELOAD");
> >      ADD_ENV_COPY("LD_LIBRARY_PATH");
> >      ADD_ENV_COPY("PATH");
> > -    ADD_ENV_COPY("HOME");
> >      ADD_ENV_COPY("USER");
> >      ADD_ENV_COPY("LOGNAME");
> >      ADD_ENV_COPY("TMPDIR");
> > @@ -508,6 +507,7 @@ int umlBuildCommandLine(virConnectPtr conn,
> >      //ADD_ARG_PAIR("con0", "fd:0,fd:1");
> >      ADD_ARG_PAIR("mem", memory);
> >      ADD_ARG_PAIR("umid", vm->def->name);
> > +    ADD_ARG_PAIR("uml_dir", driver->monitorDir);
> >  
> >      if (vm->def->os.root)
> >          ADD_ARG_PAIR("root", vm->def->os.root);
> 
> I think this should also solve this long standing fedora/selinux bug:

Almost. We still need to change 'driver->monitorDir' so that it
gets initialized to '$LOCAL_STATE_DIR/lib/libvirt/uml' like we
do with QEMU (or $HOME/.libvirt/uml/lib for session mode)

Regards,
Daniel
-- 
|: Red Hat, Engineering, London    -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :|
|: http://autobuild.org        -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list