[lxc-devel] RFC: Refactoring lxc-attach
Serge Hallyn
serge.hallyn at ubuntu.com
Mon Apr 29 14:22:04 UTC 2013
Quoting Christian Seiler (christian at iwakd.de):
> Hi there,
>
> any comments on my proposal?
>
> > The basic idea for the refactored attach API would be:
> >
> > - pid_t lxc_attach(const char* name, const char* lxcpath,
> > options...)
> > + create a socket pair for sync
> > + fork() (get rid of threading, nss stuff, etc.)
> > |- same process:
> > | + waits for signal from child
> > | + [optional] puts grandchild in cgroup
> > | + closes synchronisation sockets
> > | + reap child process
> > | + returns pid of grandchild
> > |- child:
> > + setns()
> > + clone() with CLONE_PARENT
> > | (child will be child of parent, this process
> > | may exit and the parent won't care)
> > |- same process
> > | + signal parent pid of grandchild
> > | + exit
> > |- grandchild process
> > + [optional] drop privileges
> > + [optional] apparmor stuff
> > + set environment
> > + execute stuff
> >
> > - options paremeter:
> > + pointer to some struct that contains all the options that
> > may be specified to the current lxc-attach process
> > + also contains function pointer to the function that is to
> > be
> > executed inside the container
> > - lxc_attach_exec
> > default implementation that executes a specific
> > command
> > - lxc_attach_shell
> > default implementation that executes a shell
> > - this would allow for example the following python code
> > using the API (if one doesn't want to exec() a command
> > or a shell):
> > def test_file_exists():
> > sys.exit(os.path.exists('/foo/bar') and 0 or 1)
> > proc = container.attach(run=test_file_exists)
> >
> > lxc-attach's main would then trivially be:
> >
> > 1. parse parameters, fill the options struct
> > 2. call lxc_attach()
> > 3. waitpid() on attached process
> > 4. pass through exit code
> >
> > Comments welcome, if you think this is the right way to go, then I'll
> > go
> > ahead and implement it in the next few days.
Sorry I thought I'd said this before - sounds good to me.
thanks,
-serge
More information about the lxc-devel
mailing list