[lxc-devel] [PATCH] Add lxc-net tool

Serge Hallyn serge.hallyn at canonical.com
Fri May 18 13:47:43 UTC 2012


Quoting Christian Seiler (christian at iwakd.de):
> Hi,
> 
> >>  - they unshare the mount namespace and remount /sys - apparently, in
> >>    contrast to /proc, which depends on the current process's context,
> >>    /sys depends on the context of the process mounting it
> > 
> > Both actually depend on the context of the process mounting it.  If you
> > do "lxc-unshare -s PID /bin/bash" and then do "echo $$" and "ls /proc",
> > you'll see proc is still the old proc.
> 
> Actually, it's even more complicated than that. Try the following:
> 
> lxc-unshare -s NETWORK -- cat /proc/self/net/dev
> 
> I did a few simple tests and found the following:
> 
> Network namespaces:
>           /proc/$pid/net         Context of process $pid
>           /sys/class/net etc.    Context of process mounting /sys
> PID namespaces:
>           /proc                  Context of process mounting /proc
> Mount namespaces:
>           /proc/$pid/mountinfo   Context of process $pid
> 
> So - due to the /proc/self logic - for network namespaces, one only

Right, so long as you are not also doing '-s PID|NETWORK' then /proc/self
will work.  However if you add PID, then /proc/self will not work  (will
point to the wrong task or to nowhere).

To be clear it's not the /proc/self logic, it's the logic for all /proc/$pid
directories.  Those contents reflect per-process values.

> needs to remount /sys, for PID namespaces, only /proc; and for mount
> namespaces we don't really care since if we attach to a mount namespace
> that belongs to a container, the corresponding file systems we see are
> already mounted in the correct context.
> 
> >> So for lxc-attach without mount namespaces but with network namespaces,
> >> should we do the same? (i.e. catch that case) Or should we just ignore
> > 
> > I think we should let users do this themselves, but warn about it in
> > the lxc-attach manpage.
> 
> I agree it may be wise not to do too much as a default in order not to
> confuse users, however, I really would like lxc-attach to be able to
> handle this stuff on its own if needed.
> 
> Suggestion:
> 
> 1) Default behavior: Just attach to specified namespaces.
> 2) Additional command line flag -R, (or something else, if you prefer)
>    that does the following:
> 
>      a) If the process is to be attached to either NETWORK or PID
>         namespaces
>            -and-
>      b) it is NOT to be attached to the MOUNT namespace
> 
>    then *additionally* unshare (not attach) MOUNT namespace,
>    remount /sys and /proc.

That sounds ok to me, so long as it gets no further involved than
that.  A good default.

>    Ignore the flag if those conditions are not met.
> 
> Because if we leave that completely to the user, one really has to do
> something along the lines of
> 
> lxc-attach -n container -s NETWORK -- \
>    lxc-unshare -s MOUNT -- /bin/bash -c \
>       "umount /sys ; mount -t sysfs none /sys ; \
>        umount /proc ; mount -t proc none /proc ; \
>        /some/complicated/command/that/uses//sys"
> 
> instead of simply
> 
> lxc-attach -n container -R -s NETWORK -- \
>    /some/complicated/command/that/uses//sys
> 
> The first seems like too much of a mouthful to me. Thoughts?
> 
> Other than this issue and the man page, I have a patch for lxc-attach
> ready; as soon as I get to update the man page I'll post it to the list.
> (The /proc and /sys stuff can be added later IMHO.)
> 
> Regards,
> Christian




More information about the lxc-devel mailing list