Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-13 Thread Serge Hallyn
Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Serge Hallyn (2012-02-11 00:08:10 +0100) wrote:
 
  Quoting Ivan Vilata i Balaguer (i...@selidor.net):
  Serge Hallyn (2012-02-10 16:05:19 +0100) wrote:
  
   mv /usr/bin/lxc-start /usr/bin/lxc-start.real
  
   cat  /usr/bin/lxc-start.mid  EOF
   mount --make-unbindable /lxc-shared
   mount --make-shared /lxc-shared
 
  Oops, this isn't right.  I think I just meant
 
  cat  /usr/bin/lxc-start.mid  EOF
  mount --make-rslave /lxc-shared
  exec /usr/bin/lxc-start.real $*
  EOF
 
   exec /usr/bin/lxc-start.real $*
   EOF
  
   cat  /usr/bin/lxc-start  EOF
   lxc-unshare -s MOUNT -- /usr/bin/lxc-start.mid $*
   EOF
  
   chmod ugo+x /usr/bin/lxc-start{,.mid}
 
 Yup, the new one did work! :)
 
  Well, I'm actually trying on the host to mount and unmount file systems
  I don't know beforehand *while myvm is running* under subdirectories in
  /lxc-shared,
 
  You've lost me here (I don't understand what you're saying), but
 
 Sorry, tried to stuff too much into too few words. :D
 
 What I want to do is set up a shared directory /lxc-shared in the host,
 which will appear as /shared in myvm.  While myvm is running, I'll be
 binding host directories to /lxc-shared/foo, /lxc-shared/bar and other
 subdirs I don't know beforehand so that they become visible as
 /shared/foo, /shared/bar etc. at myvm.  I don't need other containers to
 access /lxc-shared (and of course I don't want them to accidentaly
 unmount things from it when starting).
 
  but running myvm through the scripts you suggest creates a
  new namespace so that myvm no longer sees mounts done by the host.
 
  Note that you're still supposed to do
 
  mount --bind /lxc-shared /lxc-shared
  mount --make-shared /lxc-shared /lxc-shared
 
  at host boot.  Then creating a new namespace shouldn't stop myvm from
  seeing new mounts done by the host.  The reason I was creating that new
  namespace was so that the mount --make-rslave wouldn't happen in the
  host's namespace.
 
 Yes, I was already doing that before starting myvm.  Indeed, your fix
 above made the sharing work as expected.
 
  But in any case, like I say I think it'd be worth adding explicit
  support through the config file for this.
 
 Running the containers through your scripts do the trick, but having an
 option in myvm's config file to make the host's /lxc-shared directory
 shared only for this container (so that other containers don't need to
 go through lxc-unshare  --make-rslave) would be great.  Does that fit
 the behaviour of the new config entries you suggest?

I think so.  I've put it down on the list of things to consider for
next cycle.

 Anyway, thanks a lot for you help!

My pleasure.  It's a good feature to have.

-serge

--
Try before you buy = See our experts in action!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-dev2
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users


Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-11 Thread Ivan Vilata i Balaguer
Serge Hallyn (2012-02-11 00:08:10 +0100) wrote:

 Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Serge Hallyn (2012-02-10 16:05:19 +0100) wrote:
 
  mv /usr/bin/lxc-start /usr/bin/lxc-start.real
 
  cat  /usr/bin/lxc-start.mid  EOF
  mount --make-unbindable /lxc-shared
  mount --make-shared /lxc-shared

 Oops, this isn't right.  I think I just meant

 cat  /usr/bin/lxc-start.mid  EOF
 mount --make-rslave /lxc-shared
 exec /usr/bin/lxc-start.real $*
 EOF

  exec /usr/bin/lxc-start.real $*
  EOF
 
  cat  /usr/bin/lxc-start  EOF
  lxc-unshare -s MOUNT -- /usr/bin/lxc-start.mid $*
  EOF
 
  chmod ugo+x /usr/bin/lxc-start{,.mid}

Yup, the new one did work! :)

 Well, I'm actually trying on the host to mount and unmount file systems
 I don't know beforehand *while myvm is running* under subdirectories in
 /lxc-shared,

 You've lost me here (I don't understand what you're saying), but

Sorry, tried to stuff too much into too few words. :D

What I want to do is set up a shared directory /lxc-shared in the host,
which will appear as /shared in myvm.  While myvm is running, I'll be
binding host directories to /lxc-shared/foo, /lxc-shared/bar and other
subdirs I don't know beforehand so that they become visible as
/shared/foo, /shared/bar etc. at myvm.  I don't need other containers to
access /lxc-shared (and of course I don't want them to accidentaly
unmount things from it when starting).

 but running myvm through the scripts you suggest creates a
 new namespace so that myvm no longer sees mounts done by the host.

 Note that you're still supposed to do

   mount --bind /lxc-shared /lxc-shared
   mount --make-shared /lxc-shared /lxc-shared

 at host boot.  Then creating a new namespace shouldn't stop myvm from
 seeing new mounts done by the host.  The reason I was creating that new
 namespace was so that the mount --make-rslave wouldn't happen in the
 host's namespace.

Yes, I was already doing that before starting myvm.  Indeed, your fix
above made the sharing work as expected.

 But in any case, like I say I think it'd be worth adding explicit
 support through the config file for this.

Running the containers through your scripts do the trick, but having an
option in myvm's config file to make the host's /lxc-shared directory
shared only for this container (so that other containers don't need to
go through lxc-unshare  --make-rslave) would be great.  Does that fit
the behaviour of the new config entries you suggest?

Anyway, thanks a lot for you help!
-- 
Ivan Vilata i Balaguer -- https://elvil.net/


--
Virtualization  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users


Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-10 Thread Ivan Vilata i Balaguer
Serge Hallyn (2012-02-09 19:30:29 +0100) wrote:

 Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Hi all.  I'm running Debian's LXC 0.7.5 under Linux 3.2.0.  I've set up
 a shared mountpoint to dynamically export some host directories into one
 container, like this::
 
   # mkdir -p /lxc-shared
   # mount --bind /lxc-shared /lxc-shared
   # mount --make-unbindable /lxc-shared
   # mount --make-shared /lxc-shared

 (I should think more before answering, but ...)

 What if you do 'mount --make-rslave /lxc-shared' here?  That should
 prevent the container's mount actions from being forwarded to the
 host.

Thanks for the suggestion!  That does prevent a starting container from
unmounting bind mounts under /lxc-shared in the host, *however* it also
renders (un)mounts performed after the --make-rslave invisible to any
container which had access to the directory.  E.g. imagine myvm has a
/shared directory and this config line::

  lxc.mount.entry = /lxc-shared/myvm/ /var/lib/lxc/debtest/rootfs/shared/ none 
defaults,bind 0 0

Then::

  host# mkdir -p /lxc-shared
  host# mount --bind /lxc-shared /lxc-shared
  host# mount --make-shared /lxc-shared
  host# lxc-start -n myvm -d
  # myvm sees /lxc-shared/myvm at /shared
  host# mkdir -p /lxc-shared/myvm/foo
  host# mount --bind /tmp /lxc-shared/myvm/foo
  # myvm sees mounted /shared/foo
  host# mount --make-rslave /lxc-shared
  # myvm still sees mounted /shared/foo
  host# lxc-start -n myothervm -d
  # myvm still sees mounted /shared/foo
  host# mkdir -p /lxc-shared/myvm/bar
  host# mount --bind /tmp /lxc-shared/myvm/bar
  # myvm sees /shared/bar but nothing mounted on it!

A workaround I found is bind mounting the desired directory *in the
container* (which requires not dropping the sys_admin capability)::

  host# mkdir -p /lxc-shared
  host# mount --bind /lxc-shared /lxc-shared
  host# mount --make-shared /lxc-shared
  host# lxc-start -n myvm -d
  # myvm sees /lxc-shared/myvm at /shared
  host# mkdir -p /lxc-shared/myvm/foo
  host# mount --bind /tmp /lxc-shared/myvm/foo
  # myvm sees mounted /shared/foo
  myvm# mount --bind /shared/foo /mnt/foo
  host# lxc-start -n myothervm -d
  # host's /lxc-shared/myvm/foo gets unmounted
  # myvm sees /shared/foo but nothing mounted on it
  # myvm still sees mounted /mnt/foo
  host# mkdir -p /lxc-shared/myvm/bar
  host# mount --bind /tmp /lxc-shared/myvm/bar
  # myvm sees mounted /shared/bar
  myvm# mount --bind /shared/bar /mnt/bar
  # and so on...

However, the question still remains: *Why on Earth does starting a
container unmount all bind mounts under a shared mount???*

Doesn't it look like a bug to you?

Thanks  cheers!

 Now I bind mount the host directory under the shared directory::
 
   # mkdir -p /lxc-shared/myvm/foo
   # mount --bind /tmp /lxc-shared/myvm/foo
 The problem is that whenever I start any container, /lxc-shared/myvm/foo
 gets unmounted (even if it has processes working under it!).  This
 affects bind mounts only if they are under shared mountpoints, e.g. if I
 also do this mount on the host::
 
   # mount --bind /tmp /mnt
 
 It survives after starting the container.
 
 Does anyone know why does this happen?  Should I file a bug report?
 Thanks a lot!
-- 
Ivan Vilata i Balaguer -- https://elvil.net/


--
Virtualization  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users


Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-10 Thread Serge Hallyn
Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Serge Hallyn (2012-02-09 19:30:29 +0100) wrote:
 
  Quoting Ivan Vilata i Balaguer (i...@selidor.net):
  Hi all.  I'm running Debian's LXC 0.7.5 under Linux 3.2.0.  I've set up
  a shared mountpoint to dynamically export some host directories into one
  container, like this::
  
# mkdir -p /lxc-shared
# mount --bind /lxc-shared /lxc-shared
# mount --make-unbindable /lxc-shared
# mount --make-shared /lxc-shared
 
  (I should think more before answering, but ...)
 
  What if you do 'mount --make-rslave /lxc-shared' here?  That should
  prevent the container's mount actions from being forwarded to the
  host.
 
 Thanks for the suggestion!  That does prevent a starting container from
 unmounting bind mounts under /lxc-shared in the host, *however* it also
 renders (un)mounts performed after the --make-rslave invisible to any
 container which had access to the directory.  E.g. imagine myvm has a

Right, this was a quick test.  What you actually want to do is leave the
mount shared on the host, and have the container startup turn it into a
slave mount.  I'm not sure offhand what would be the best time to do this,
but one thing you could do is use a wrapper around lxc-start like:

mv /usr/bin/lxc-start /usr/bin/lxc-start.real

cat  /usr/bin/lxc-start.mid  EOF
mount --make-unbindable /lxc-shared
mount --make-shared /lxc-shared
exec /usr/bin/lxc-start.real $*
EOF

cat  /usr/bin/lxc-start  EOF
lxc-unshare -s MOUNT -- /usr/bin/lxc-start.mid $*
EOF

chmod ugo+x /usr/bin/lxc-start{,.mid}

You can probably do this through /var/lib/lxc/container/fstab entries,
but it would take some tweaking.  We could also add support for this
in the lxc config files.  I think it's a common enough request that it'd
be worth doing.

 /shared directory and this config line::
 
   lxc.mount.entry = /lxc-shared/myvm/ /var/lib/lxc/debtest/rootfs/shared/ 
 none defaults,bind 0 0
 
 Then::
 
   host# mkdir -p /lxc-shared
   host# mount --bind /lxc-shared /lxc-shared
   host# mount --make-shared /lxc-shared
   host# lxc-start -n myvm -d
   # myvm sees /lxc-shared/myvm at /shared
   host# mkdir -p /lxc-shared/myvm/foo
   host# mount --bind /tmp /lxc-shared/myvm/foo
   # myvm sees mounted /shared/foo
   host# mount --make-rslave /lxc-shared
   # myvm still sees mounted /shared/foo
   host# lxc-start -n myothervm -d
   # myvm still sees mounted /shared/foo
   host# mkdir -p /lxc-shared/myvm/bar
   host# mount --bind /tmp /lxc-shared/myvm/bar
   # myvm sees /shared/bar but nothing mounted on it!
 
 A workaround I found is bind mounting the desired directory *in the
 container* (which requires not dropping the sys_admin capability)::
 
   host# mkdir -p /lxc-shared
   host# mount --bind /lxc-shared /lxc-shared
   host# mount --make-shared /lxc-shared
   host# lxc-start -n myvm -d
   # myvm sees /lxc-shared/myvm at /shared
   host# mkdir -p /lxc-shared/myvm/foo
   host# mount --bind /tmp /lxc-shared/myvm/foo
   # myvm sees mounted /shared/foo
   myvm# mount --bind /shared/foo /mnt/foo
   host# lxc-start -n myothervm -d
   # host's /lxc-shared/myvm/foo gets unmounted
   # myvm sees /shared/foo but nothing mounted on it
   # myvm still sees mounted /mnt/foo
   host# mkdir -p /lxc-shared/myvm/bar
   host# mount --bind /tmp /lxc-shared/myvm/bar
   # myvm sees mounted /shared/bar
   myvm# mount --bind /shared/bar /mnt/bar
   # and so on...
 
 However, the question still remains: *Why on Earth does starting a
 container unmount all bind mounts under a shared mount???*
 
 Doesn't it look like a bug to you?

No, when a container starts up, it mounts its new root under, say,
/usr/lib/lxc/, and mounts other directories under there.  Then it
does pivot_root (see man 8 pivot_root), so now /usr/lib/lxc is its
'/', and the old '/' and all its submounts are now mounted on '/old'.
Then the container startup recursively unmounts /old, including
/old/lxc-shared.

That umount of /old/lxc-shared is what is getting propagated to
the host mount.

-serge

 Thanks  cheers!
 
  Now I bind mount the host directory under the shared directory::
  
# mkdir -p /lxc-shared/myvm/foo
# mount --bind /tmp /lxc-shared/myvm/foo
  The problem is that whenever I start any container, /lxc-shared/myvm/foo
  gets unmounted (even if it has processes working under it!).  This
  affects bind mounts only if they are under shared mountpoints, e.g. if I
  also do this mount on the host::
  
# mount --bind /tmp /mnt
  
  It survives after starting the container.
  
  Does anyone know why does this happen?  Should I file a bug report?
  Thanks a lot!
 -- 
 Ivan Vilata i Balaguer -- https://elvil.net/
 
 
 --
 Virtualization  Cloud Management Using Capacity Planning
 Cloud computing makes use of virtualization - but cloud computing 
 also focuses on allowing computing to be delivered as a service.
 http://www.accelacomm.com/jaw/sfnl/114/51521223/

Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-10 Thread Ivan Vilata i Balaguer
Serge Hallyn (2012-02-10 16:05:19 +0100) wrote:

 Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Serge Hallyn (2012-02-09 19:30:29 +0100) wrote:
 
  Quoting Ivan Vilata i Balaguer (i...@selidor.net):
  Hi all.  I'm running Debian's LXC 0.7.5 under Linux 3.2.0.  I've set up
  a shared mountpoint to dynamically export some host directories into one
  container, like this::
  
# mkdir -p /lxc-shared
# mount --bind /lxc-shared /lxc-shared
# mount --make-unbindable /lxc-shared
# mount --make-shared /lxc-shared
 
  (I should think more before answering, but ...)
 
  What if you do 'mount --make-rslave /lxc-shared' here?  That should
  prevent the container's mount actions from being forwarded to the
  host.
 
 Thanks for the suggestion!  That does prevent a starting container from
 unmounting bind mounts under /lxc-shared in the host, *however* it also
 renders (un)mounts performed after the --make-rslave invisible to any
 container which had access to the directory.  E.g. imagine myvm has a

 Right, this was a quick test.  What you actually want to do is leave the
 mount shared on the host, and have the container startup turn it into a
 slave mount.  I'm not sure offhand what would be the best time to do this,
 but one thing you could do is use a wrapper around lxc-start like:

 mv /usr/bin/lxc-start /usr/bin/lxc-start.real

 cat  /usr/bin/lxc-start.mid  EOF
 mount --make-unbindable /lxc-shared
 mount --make-shared /lxc-shared
 exec /usr/bin/lxc-start.real $*
 EOF

 cat  /usr/bin/lxc-start  EOF
 lxc-unshare -s MOUNT -- /usr/bin/lxc-start.mid $*
 EOF

 chmod ugo+x /usr/bin/lxc-start{,.mid}

 You can probably do this through /var/lib/lxc/container/fstab entries,
 but it would take some tweaking.  We could also add support for this
 in the lxc config files.  I think it's a common enough request that it'd
 be worth doing.

Well, I'm actually trying on the host to mount and unmount file systems
I don't know beforehand *while myvm is running* under subdirectories in
/lxc-shared, but running myvm through the scripts you suggest creates a
new namespace so that myvm no longer sees mounts done by the host.
However, I can use a slight modification of your suggestion, namely
running myvm through normal lxc-start (so it uses the same namespace as
the host), and the other containers through those scripts (actually I
don't need --make-shared there).

The ideal solution for me would be making /lxc-shared shared, running
myvm and then doing something which allows mounts under /lxc-shared to
be seen only in the host and myvm but not in other containers started
normaly.  But the previous solution comes quite close to it. :)

 However, the question still remains: *Why on Earth does starting a
 container unmount all bind mounts under a shared mount???*
 
 Doesn't it look like a bug to you?

 No, when a container starts up, it mounts its new root under, say,
 /usr/lib/lxc/, and mounts other directories under there.  Then it
 does pivot_root (see man 8 pivot_root), so now /usr/lib/lxc is its
 '/', and the old '/' and all its submounts are now mounted on '/old'.
 Then the container startup recursively unmounts /old, including
 /old/lxc-shared.

 That umount of /old/lxc-shared is what is getting propagated to
 the host mount.

Ummm, now I see clearly what's going on there.  Thanks a lot for your
help and for the explanation! :)
-- 
Ivan Vilata i Balaguer -- https://elvil.net/


--
Virtualization  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users


Re: [Lxc-users] Container start unmounts shared bind mounts

2012-02-10 Thread Serge Hallyn
Quoting Ivan Vilata i Balaguer (i...@selidor.net):
 Serge Hallyn (2012-02-10 16:05:19 +0100) wrote:
 
  Quoting Ivan Vilata i Balaguer (i...@selidor.net):
  Serge Hallyn (2012-02-09 19:30:29 +0100) wrote:
  
   Quoting Ivan Vilata i Balaguer (i...@selidor.net):
   Hi all.  I'm running Debian's LXC 0.7.5 under Linux 3.2.0.  I've set up
   a shared mountpoint to dynamically export some host directories into one
   container, like this::
   
 # mkdir -p /lxc-shared
 # mount --bind /lxc-shared /lxc-shared
 # mount --make-unbindable /lxc-shared
 # mount --make-shared /lxc-shared
  
   (I should think more before answering, but ...)
  
   What if you do 'mount --make-rslave /lxc-shared' here?  That should
   prevent the container's mount actions from being forwarded to the
   host.
  
  Thanks for the suggestion!  That does prevent a starting container from
  unmounting bind mounts under /lxc-shared in the host, *however* it also
  renders (un)mounts performed after the --make-rslave invisible to any
  container which had access to the directory.  E.g. imagine myvm has a
 
  Right, this was a quick test.  What you actually want to do is leave the
  mount shared on the host, and have the container startup turn it into a
  slave mount.  I'm not sure offhand what would be the best time to do this,
  but one thing you could do is use a wrapper around lxc-start like:
 
  mv /usr/bin/lxc-start /usr/bin/lxc-start.real
 
  cat  /usr/bin/lxc-start.mid  EOF
  mount --make-unbindable /lxc-shared
  mount --make-shared /lxc-shared

Oops, this isn't right.  I think I just meant

cat  /usr/bin/lxc-start.mid  EOF
mount --make-rslave /lxc-shared
exec /usr/bin/lxc-start.real $*
EOF

  exec /usr/bin/lxc-start.real $*
  EOF
 
  cat  /usr/bin/lxc-start  EOF
  lxc-unshare -s MOUNT -- /usr/bin/lxc-start.mid $*
  EOF
 
  chmod ugo+x /usr/bin/lxc-start{,.mid}
 
  You can probably do this through /var/lib/lxc/container/fstab entries,
  but it would take some tweaking.  We could also add support for this
  in the lxc config files.  I think it's a common enough request that it'd
  be worth doing.
 
 Well, I'm actually trying on the host to mount and unmount file systems
 I don't know beforehand *while myvm is running* under subdirectories in
 /lxc-shared,

You've lost me here (I don't understand what you're saying), but

 but running myvm through the scripts you suggest creates a
 new namespace so that myvm no longer sees mounts done by the host.

Note that you're still supposed to do

mount --bind /lxc-shared /lxc-shared
mount --make-shared /lxc-shared /lxc-shared

at host boot.  Then creating a new namespace shouldn't stop myvm from
seeing new mounts done by the host.  The reason I was creating that new
namespace was so that the mount --make-rslave wouldn't happen in the
host's namespace.

But in any case, like I say I think it'd be worth adding explicit
support through the config file for this.

thanks,
-serge

--
Virtualization  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users


[Lxc-users] Container start unmounts shared bind mounts

2012-02-09 Thread Ivan Vilata i Balaguer
Hi all.  I'm running Debian's LXC 0.7.5 under Linux 3.2.0.  I've set up
a shared mountpoint to dynamically export some host directories into one
container, like this::

  # mkdir -p /lxc-shared
  # mount --bind /lxc-shared /lxc-shared
  # mount --make-unbindable /lxc-shared
  # mount --make-shared /lxc-shared

Now I bind mount the host directory under the shared directory::

  # mkdir -p /lxc-shared/myvm/foo
  # mount --bind /tmp /lxc-shared/myvm/foo

The problem is that whenever I start any container, /lxc-shared/myvm/foo
gets unmounted (even if it has processes working under it!).  This
affects bind mounts only if they are under shared mountpoints, e.g. if I
also do this mount on the host::

  # mount --bind /tmp /mnt

It survives after starting the container.

Does anyone know why does this happen?  Should I file a bug report?
Thanks a lot!
-- 
Ivan Vilata i Balaguer -- https://elvil.net/


--
Virtualization  Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
___
Lxc-users mailing list
Lxc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxc-users