[CC'd to danpb]
On Thu, Sep 29, 2011 at 10:52:31PM +0530, Aneesh Kumar K.V wrote:
On Thu, 29 Sep 2011 17:12:22 +0100, "Richard W.M. Jones"
<rjones(a)redhat.com> wrote:
> On Thu, Sep 29, 2011 at 09:19:03PM +0530, Harsh Bora wrote:
> > Richard, FYI.
> >
> > On Wed, 28 Sep 2011 17:05:42 +0530, Harsh Bora
> > <harsh(a)linux.vnet.ibm.com> wrote:
> > >Hi Aneesh,
> > >
> > >Richard asked me if we have any plans to provide a solution for this use
> > >case:
> > >
> > >https://www.redhat.com/archives/libguestfs/2011-September/msg00089.html
> > >
> > >IIUC, VirtFS as a rootfs is targeted towards this requirement only,
> > >right? Any inputs ?
> > >
> >
> > The right way to do this is to use a export path /guest and bind mount
> > needed directories within. VirtFS just export /guest and everything
> > works out easily. I already have autotest driving virtFS as root. So
> > that works easily
>
> That's not going to work for us.
>
> Firstly bind mounting requires root, which is no good for libguestfs.
>
Another alternative suggested by pekka for tools/kvm (native linux kvm)
is to create a directory layout as below
in /guest1-export/
bin -> /host/bin
sbin -> /host/sbin
usr -> /host/usr
lib -> /host/lib
etc
proc
var
host
and qemu starts with two export path /guest1-export as root and / of the
common image (or host) as /host on guest. Now 9p resolves symbolic links
in the guest. So which ever directory that need to be shared with host
can have a symlink and everything works
I'm going to play with this later.
The downside is the whole of the host filesystem is exported to the
appliance, which is a security risk (compromised appliance can read
any file from the host).
Another thought related to symlinks: We could solve it with a "nest
of symlinks" in the host, eg:
/guest-export/usr/sbin/guestfs -> /our/own/guestfsd
/guest-export/usr/sbin/e2fsck -> /usr/sbin/e2fsck
[etc]
*if* 9p resolved *some* (but not all) symlinks in the host. Perhaps
we could mark the symlinks we want resolved on the host side using an
xattr?
> Secondly there are no directories that we could bind mount. We
really
> need the flexibility outlined in that email. Just two examples of
> this (there are more):
>
> - /usr/sbin in the appliance is not the same as /usr/sbin on the
> host. The appliance version should contain a subset of the host
> directory, plus at least one extra binary (/usr/sbin/guestfsd).
>
> - Because /etc files on the host can be arbitrarily modified, we need
> to construct our own /etc directory, with files from the host and
> files that we supply.
>
> What's may help here is some sort of plugin or passthrough mechanism
> letting us add our own 9p server/plugin without pushing all the
> complexity we need into qemu sources.
>
> More here:
>
http://libguestfs.org/febootstrap.8.html#supermin_appliances
There is some level of plugability with VirtFS server already. You can
look at virtio-9p-local.c, virtio-9p-handle.c and virtio-9p-synth.c in
the example. git://repo.or.cz/qemu/v9fs.git
Thanks.
Rich.
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
New in Fedora 11: Fedora Windows cross-compiler. Compile Windows
programs, test, and build Windows installers. Over 70 libraries supprt'd
http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw