* [PATCH 0/6][lxc][v3] Link LXC with USERCR
@ 2010-03-31 7:04 Sukadev Bhattiprolu
[not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 28+ messages in thread
From: Sukadev Bhattiprolu @ 2010-03-31 7:04 UTC (permalink / raw)
To: dlezcano-NmTC/0ZBporQT0dZR+AlfA
Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA,
sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8
lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs.
Following set of patches, when applied to LXC and built with USERCR as
described below, enable enable lxc-checkpoint and lxc-restart of some
simple containers
TODO:
- Determine if lxc_checkpoint needs a --container option (see
TODOs in src/lxc/checkpoint.c)
- This patchset was tested using lxc-nonetns.conf. I ran into a problem
creating a bridge with lxc-veth.conf and lxc-macvlan.conf. I have
not debugged the problem with VNC and lxc-macvlan.conf.
- 'global_send_sigint' is still a global variable in USERCR. We need
to define a better interface to expose its functionality to callers
of app_restart().
- Choose better names and API for USERCR :-)
- Additional TODOs specific to checkpoint/restart are listed in their
specific patches.
Changelog[v3]:
Changed following based on feedback from Michel Normand, Daniel
Lezcano and others.
- Added --with-libcr configuration option to specify the path to
usercr (see usage below).
- lxc-checkpoint now implicitly freezes before and unfreezes after
checkpoint.
- Implemented the --pause options to lxc-checkpoint and lxc-restart
and the --kill option to lxc-checkpoint.
- Ported to ckpt-v20-dev (required adding CHECKPOINT_NONETNS flag to
app_checkpoint() to work around)
Changelog[v2]:
(Based on feedback from Oren Laadan, Serge Hallyn, Daniel Lezcano
and Cedric Le Goater)
- Rather than drop --directory option to lxc_checkpoint/lxc_restart
add a new option (--image).
- Integrate lxc_checkpoint to work with USERCR
- USERCR renamed usercr.h to "app-checkpoint.h"
- USERCR does not create/install libcheckpoint.a and usercr.h for now.
So link directly with app-checkpoint.h, restart.o and checkpoint.o
- USERCR renames the interfaces to app_checkpoint() and app_restart()
'struct app_checkpoint_args' 'struct app_restart_args'.
USAGE:
1. Build USERCR
$ cd /root
$ git-clone git://git.ncl.cs.columbia.edu/pub/git/user-cr.git user-cr
$ cd user-cr
$ git-checkout ckpt-v20-dev
Tested with commit e275f77e4a82d228c1df14dbeb691342e32cdac2
as HEAD.
# Apply following two patches:
https://lists.linux-foundation.org/pipermail/containers/2010-March/024037.html
https://lists.linux-foundation.org/pipermail/containers/2010-March/024038.html
$ cd /root/user-cr
$ KERNELSRC=/root/linux-2.6/ make
Build USERCR by pointing to corresponding kernel-source.
This should create restart.o and checkpoint.o needed by LXC.
2. Build/install LXC
$ cd /root/lxc.git
Apply attached patches to LXC (I tested with these patches applied
to commit 9ea8066aa67b808f71f46e346bd7a215e2a355f3)
$ autogen.sh
$ ./configure --with-libcr=/root/user-cr
This will fail if /root/user-cr does not container checkpoint.o,
restart.o and app-checkpoint.h files
$ make
$ make install
3. Checkpoint/restart a simple LXC container
$ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000
$ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt
$ lxc-stop --name foo
$ lxc-restart --name foo --image /root/lxc-foo.ckpt
4. Checkpoint/restart other LXC containers such as:
- a file-io session (see run-fileio1 in cr-tests[1])
- process-tree (see run-ptree1 in cr-tests[1])
- A vi session inside a VNC Server using "twm". i.e
$ cat /root/.vnc/xstartup
#!/bin/sh
xsetroot -solid grey
vncconfig -iconic &
xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
$ lxc-execute --name foo --rcfile lxc-no-netns.conf -- \
/usr/bin/vncserver :1
$ vncviewer :1
# Open a vi session
$ lxc-checkpoint --name foo --statefile /root/vnc.ckpt
$ lxc-stop --name foo
$ lxc-restart --pause --name foo --statefile /root/vnc.ckpt
# Leaves the server frozen due to --pause
$ lxc-unfreeze --name foo
$ vncviewer :1
# Should bring up the old VNC session with vi window
[1]: cr-tests: git://git.sr71.net/~hallyn/cr_tests.git
Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
^ permalink raw reply [flat|nested] 28+ messages in thread[parent not found: <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* [PATCH 1/6][lxc][v3] Add --with-libcr configure option [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 7:06 ` Sukadev Bhattiprolu [not found] ` <20100331070633.GA23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 7:07 ` [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option Sukadev Bhattiprolu ` (9 subsequent siblings) 10 siblings, 1 reply; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:06 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Wed, 24 Mar 2010 17:26:44 -0700 Subject: [PATCH 1/6][lxc][v3] Add --with-libcr configure option Add a configure option, --with-libcr=dir which would allow linking with external (i.e USERCR) implementation of checkpoint/restart. For now, USERCR "publishes" a app-checkpoint.h, checkpoint.o and restart.o files which implement the functions app_checkpoint() and app_restart(). Usage: $ ./autogen.sh $ ./configure --help |grep libcr --with-libcr=dir use the Checkpoint/Restart implementation in 'dir' $ ls /home/guest/user-cr/ app-checkpoint.h checkpoint.o restart.o $ ./configure --with-libcr=/home/guest/user-cr TODO: If names of interfaces in USERCR change, we may want to rename the config option too ? LIBCR_CFLAGS are only needed for src/lxc/{checkpoint.c,restart.c} but not sure if there is an easy way to define autoconf CFLAGS just for those two files. Changelog[v2]: - Rename --with-usercr to --with-libcr - Add libeclone.a to the LIBCR_OBJS variable since functions in libeclone.a will be used by checkpoint() and restart() functions. - Add -I${with_libcr}/include to LIBCR_CFLAGS to pick up checkpoint_hdr.h, checkpoint.h etc. Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- configure.ac | 19 +++++++++++++++++++ src/lxc/Makefile.am | 10 +++++++++- 2 files changed, 28 insertions(+), 1 deletions(-) diff --git a/configure.ac b/configure.ac index f82e7df..fe6584c 100644 --- a/configure.ac +++ b/configure.ac @@ -12,6 +12,25 @@ AM_PROG_CC_C_O AC_GNU_SOURCE AC_CHECK_PROG(SETCAP, setcap, yes, no, $PATH$PATH_SEPARATOR/sbin) +AC_ARG_WITH(libcr, [AS_HELP_STRING([--with-libcr=dir], \ + [use the Checkpoint/Restart implementation in 'dir'])], [], \ + [with_libcr=no]) + +if test "x$with_libcr" != "xno"; then + AS_AC_EXPAND(LIBCR_OBJS, "${with_libcr}/checkpoint.o ${with_libcr}/restart.o ${with_libcr}/libeclone.a") + AS_AC_EXPAND(LIBCR_CFLAGS, "-DLIBCR -I${with_libcr} -I$(with_libcr}/include") + + AC_CHECK_FILE([$with_libcr/app-checkpoint.h], [], \ + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but $with_libcr/app-checkpoint.h was not found])) + + AC_CHECK_FILE([${with_libcr}/checkpoint.o], [], \ + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but ${with_libcr}/checkpoint.o was not found])) + + AC_CHECK_FILE([${with_libcr}/restart.o], [], \ + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but ${with_libcr}/restart.o was not found])) +fi + + AC_ARG_ENABLE([doc], [AC_HELP_STRING([--enable-doc], [make mans (require docbook2man installed) [default=auto]])], [], [enable_doc=auto]) diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am index 890f706..699c355 100644 --- a/src/lxc/Makefile.am +++ b/src/lxc/Makefile.am @@ -46,12 +46,20 @@ liblxc_so_SOURCES = \ mainloop.c mainloop.h \ af_unix.c af_unix.h -AM_CFLAGS=-I$(top_srcdir)/src +# We only need $(LIBCR_CFLAGS) for lxc_checkpoint and lxc_restart files +# but for now, just set it for all. +AM_CFLAGS=-I$(top_srcdir)/src $(LIBCR_CFLAGS) liblxc_so_CFLAGS = -fPIC -DPIC $(AM_CFLAGS) +# TODO: Adding $(LIBCR_OBJS) here ensures we don't have undefined references +# when building liblxc.so, but this has the side-effect of putting the +# app_checkpoint/restart functions in liblxc.so. Or alternatively, +# we could remove src/lxc/{checkpoint.o,restart.o} from liblxc.so +# and link lxc-checkpoint/lxc-restart with them directly. liblxc_so_LDFLAGS = \ -shared \ + $(LIBCR_OBJS) \ -Wl,-soname,liblxc.so.$(firstword $(subst ., ,$(VERSION))) liblxc_so_LDADD = -lutil -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
[parent not found: <20100331070633.GA23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 1/6][lxc][v3] Add --with-libcr configure option [not found] ` <20100331070633.GA23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 8:11 ` Michel Normand 2010-03-31 17:21 ` Sukadev Bhattiprolu 0 siblings, 1 reply; 28+ messages in thread From: Michel Normand @ 2010-03-31 8:11 UTC (permalink / raw) To: Sukadev Bhattiprolu Cc: Containers, clg-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, DLEZCANO-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 configure error because of typo below Le mercredi 31 mars 2010 à 00:06 -0700, Sukadev Bhattiprolu a écrit : > From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > Date: Wed, 24 Mar 2010 17:26:44 -0700 > Subject: [PATCH 1/6][lxc][v3] Add --with-libcr configure option > > Add a configure option, --with-libcr=dir which would allow linking > with external (i.e USERCR) implementation of checkpoint/restart. > > For now, USERCR "publishes" a app-checkpoint.h, checkpoint.o and > restart.o files which implement the functions app_checkpoint() and > app_restart(). > > Usage: > $ ./autogen.sh > > $ ./configure --help |grep libcr > --with-libcr=dir use the Checkpoint/Restart implementation in 'dir' > > $ ls /home/guest/user-cr/ > app-checkpoint.h checkpoint.o restart.o > > $ ./configure --with-libcr=/home/guest/user-cr > > TODO: > If names of interfaces in USERCR change, we may want to rename > the config option too ? > > LIBCR_CFLAGS are only needed for src/lxc/{checkpoint.c,restart.c} > but not sure if there is an easy way to define autoconf CFLAGS > just for those two files. > > Changelog[v2]: > - Rename --with-usercr to --with-libcr > - Add libeclone.a to the LIBCR_OBJS variable since functions in > libeclone.a will be used by checkpoint() and restart() functions. > - Add -I${with_libcr}/include to LIBCR_CFLAGS to pick up > checkpoint_hdr.h, checkpoint.h etc. > > Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > --- > configure.ac | 19 +++++++++++++++++++ > src/lxc/Makefile.am | 10 +++++++++- > 2 files changed, 28 insertions(+), 1 deletions(-) > > diff --git a/configure.ac b/configure.ac > index f82e7df..fe6584c 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -12,6 +12,25 @@ AM_PROG_CC_C_O > AC_GNU_SOURCE > AC_CHECK_PROG(SETCAP, setcap, yes, no, $PATH$PATH_SEPARATOR/sbin) > > +AC_ARG_WITH(libcr, [AS_HELP_STRING([--with-libcr=dir], \ > + [use the Checkpoint/Restart implementation in 'dir'])], [], \ > + [with_libcr=no]) > + > +if test "x$with_libcr" != "xno"; then > + AS_AC_EXPAND(LIBCR_OBJS, "${with_libcr}/checkpoint.o ${with_libcr}/restart.o ${with_libcr}/libeclone.a") > + AS_AC_EXPAND(LIBCR_CFLAGS, "-DLIBCR -I${with_libcr} -I$(with_libcr}/include") typo here $( to be replaced by ${ > + > + AC_CHECK_FILE([$with_libcr/app-checkpoint.h], [], \ > + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but $with_libcr/app-checkpoint.h was not found])) > + > + AC_CHECK_FILE([${with_libcr}/checkpoint.o], [], \ > + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but ${with_libcr}/checkpoint.o was not found])) > + > + AC_CHECK_FILE([${with_libcr}/restart.o], [], \ > + AC_MSG_ERROR([--with-libcr specified directory $with_libcr but ${with_libcr}/restart.o was not found])) > +fi > + > + > AC_ARG_ENABLE([doc], > [AC_HELP_STRING([--enable-doc], [make mans (require docbook2man installed) [default=auto]])], > [], [enable_doc=auto]) > diff --git a/src/lxc/Makefile.am b/src/lxc/Makefile.am > index 890f706..699c355 100644 > --- a/src/lxc/Makefile.am > +++ b/src/lxc/Makefile.am > @@ -46,12 +46,20 @@ liblxc_so_SOURCES = \ > mainloop.c mainloop.h \ > af_unix.c af_unix.h > > -AM_CFLAGS=-I$(top_srcdir)/src > +# We only need $(LIBCR_CFLAGS) for lxc_checkpoint and lxc_restart files > +# but for now, just set it for all. > +AM_CFLAGS=-I$(top_srcdir)/src $(LIBCR_CFLAGS) > > liblxc_so_CFLAGS = -fPIC -DPIC $(AM_CFLAGS) > > +# TODO: Adding $(LIBCR_OBJS) here ensures we don't have undefined references > +# when building liblxc.so, but this has the side-effect of putting the > +# app_checkpoint/restart functions in liblxc.so. Or alternatively, > +# we could remove src/lxc/{checkpoint.o,restart.o} from liblxc.so > +# and link lxc-checkpoint/lxc-restart with them directly. > liblxc_so_LDFLAGS = \ > -shared \ > + $(LIBCR_OBJS) \ > -Wl,-soname,liblxc.so.$(firstword $(subst ., ,$(VERSION))) > > liblxc_so_LDADD = -lutil _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 1/6][lxc][v3] Add --with-libcr configure option 2010-03-31 8:11 ` Michel Normand @ 2010-03-31 17:21 ` Sukadev Bhattiprolu 0 siblings, 0 replies; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 17:21 UTC (permalink / raw) To: Michel Normand Cc: Containers, clg-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, dlezcano-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 Michel Normand [normand-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org] wrote: | configure error because of typo below | Sorry, I had not committed after fixing it. Thanks for fixing it. Did you also need the -fPIC to compile checkpoint.o ? Thanks, Sukadev ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 7:06 ` [PATCH 1/6][lxc][v3] Add --with-libcr configure option Sukadev Bhattiprolu @ 2010-03-31 7:07 ` Sukadev Bhattiprolu [not found] ` <20100331070711.GB23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 7:07 ` [PATCH 3/6][lxc][v3] lxc_checkpoint: " Sukadev Bhattiprolu ` (8 subsequent siblings) 10 siblings, 1 reply; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:07 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Sat, 27 Mar 2010 00:08:17 -0700 Subject: [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option The existing --directory option to lxc_restart expects the checkpoint state to be a directory. USERCR however uses a single regular file to store the checkpoint image. So add a --statefile option to enable checkpointing and restarting applications using USERCR. Depending on how the application was checkpointed, users should specify either --statefile=STATEFILE or the --directory=STATEFILE option (but not both). Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- src/lxc/lxc_restart.c | 34 +++++++++++++++++++++++++--------- 1 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/lxc/lxc_restart.c b/src/lxc/lxc_restart.c index 7db1d85..de4b421 100644 --- a/src/lxc/lxc_restart.c +++ b/src/lxc/lxc_restart.c @@ -38,13 +38,21 @@ lxc_log_define(lxc_restart_ui, lxc_restart); static struct lxc_list defines; +static char *statedir; static int my_checker(const struct lxc_arguments* args) { - if (!args->statefile) { - lxc_error(args, "no statefile specified"); - return -1; - } + int d, f; + + /* make them boolean */ + d = !!(statedir); + f = !!(args->statefile); + + if (!(d ^ f)) { + lxc_error(args, "Must specify exactly one of --directory " + "and --statefile options"); + return -1; + } return 0; } @@ -52,8 +60,9 @@ static int my_checker(const struct lxc_arguments* args) static int my_parser(struct lxc_arguments* args, int c, char* arg) { switch (c) { - case 'd': args->statefile = arg; break; + case 'd': statedir = arg; break; case 'f': args->rcfile = arg; break; + case 'S': args->statefile = arg; break; case 'p': args->flags = LXC_FLAG_PAUSE; break; case 's': return lxc_config_define_add(&defines, arg); } @@ -66,21 +75,24 @@ static const struct option my_longopts[] = { {"rcfile", required_argument, 0, 'f'}, {"pause", no_argument, 0, 'p'}, {"define", required_argument, 0, 's'}, + {"statefile", required_argument, 0, 'S'}, LXC_COMMON_OPTIONS }; static struct lxc_arguments my_args = { .progname = "lxc-restart", .help = "\ ---name=NAME --directory STATEFILE\n\ +--name=NAME --directory STATEFILE (deprecated)\n\ +\tlxc_restart --name=NAME --statefile=STATEFILE\n\ \n\ lxc-restart restarts from STATEFILE the NAME container\n\ \n\ Options :\n\ -n, --name=NAME NAME for name of the container\n\ -p, --pause do not release the container after the restart\n\ - -d, --directory=STATEFILE for name of statefile\n\ + -d, --directory=STATEFILE for name of statefile (legacy mode, deprecated)\n\ -f, --rcfile=FILE Load configuration file FILE\n\ + -i, --statefile=STATEFILE Load the application state from STATEFILE (libcr mode)\n\ -s, --define KEY=VAL Assign VAL to configuration variable KEY\n", .options = my_longopts, .parser = my_parser, @@ -90,6 +102,7 @@ Options :\n\ int main(int argc, char *argv[]) { char *rcfile = NULL; + const char *statefile; struct lxc_conf *conf; lxc_list_init(&defines); @@ -131,6 +144,9 @@ int main(int argc, char *argv[]) if (lxc_config_define_load(&defines, conf)) return -1; - return lxc_restart(my_args.name, my_args.statefile, conf, - my_args.flags); + statefile = my_args.statefile; + if (statedir) + statefile = statedir; + + return lxc_restart(my_args.name, statefile, conf, my_args.flags); } -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
[parent not found: <20100331070711.GB23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option [not found] ` <20100331070711.GB23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 8:10 ` Michel Normand 0 siblings, 0 replies; 28+ messages in thread From: Michel Normand @ 2010-03-31 8:10 UTC (permalink / raw) To: Sukadev Bhattiprolu Cc: Containers, clg-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, DLEZCANO-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 unable to apply without manual changes you have blank character on one line --- Michel Le mercredi 31 mars 2010 à 00:07 -0700, Sukadev Bhattiprolu a écrit : > From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > Date: Sat, 27 Mar 2010 00:08:17 -0700 > Subject: [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option > > The existing --directory option to lxc_restart expects the checkpoint state > to be a directory. USERCR however uses a single regular file to store the > checkpoint image. So add a --statefile option to enable checkpointing and > restarting applications using USERCR. > > Depending on how the application was checkpointed, users should specify > either --statefile=STATEFILE or the --directory=STATEFILE option (but not > both). > > Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > --- > src/lxc/lxc_restart.c | 34 +++++++++++++++++++++++++--------- > 1 files changed, 25 insertions(+), 9 deletions(-) > > diff --git a/src/lxc/lxc_restart.c b/src/lxc/lxc_restart.c > index 7db1d85..de4b421 100644 > --- a/src/lxc/lxc_restart.c > +++ b/src/lxc/lxc_restart.c > @@ -38,13 +38,21 @@ > lxc_log_define(lxc_restart_ui, lxc_restart); > > static struct lxc_list defines; > +static char *statedir; > > static int my_checker(const struct lxc_arguments* args) > { > - if (!args->statefile) { > - lxc_error(args, "no statefile specified"); > - return -1; > - } > + int d, f; > + > + /* make them boolean */ > + d = !!(statedir); > + f = !!(args->statefile); > + > + if (!(d ^ f)) { > + lxc_error(args, "Must specify exactly one of --directory " > + "and --statefile options"); > + return -1; > + } > > return 0; > } > @@ -52,8 +60,9 @@ static int my_checker(const struct lxc_arguments* args) > static int my_parser(struct lxc_arguments* args, int c, char* arg) > { > switch (c) { > - case 'd': args->statefile = arg; break; > + case 'd': statedir = arg; break; > case 'f': args->rcfile = arg; break; > + case 'S': args->statefile = arg; break; > case 'p': args->flags = LXC_FLAG_PAUSE; break; > case 's': return lxc_config_define_add(&defines, arg); > } > @@ -66,21 +75,24 @@ static const struct option my_longopts[] = { > {"rcfile", required_argument, 0, 'f'}, > {"pause", no_argument, 0, 'p'}, > {"define", required_argument, 0, 's'}, > + {"statefile", required_argument, 0, 'S'}, > LXC_COMMON_OPTIONS > }; > > static struct lxc_arguments my_args = { > .progname = "lxc-restart", > .help = "\ > ---name=NAME --directory STATEFILE\n\ > +--name=NAME --directory STATEFILE (deprecated)\n\ > +\tlxc_restart --name=NAME --statefile=STATEFILE\n\ > \n\ > lxc-restart restarts from STATEFILE the NAME container\n\ > \n\ > Options :\n\ > -n, --name=NAME NAME for name of the container\n\ > -p, --pause do not release the container after the restart\n\ > - -d, --directory=STATEFILE for name of statefile\n\ > + -d, --directory=STATEFILE for name of statefile (legacy mode, deprecated)\n\ > -f, --rcfile=FILE Load configuration file FILE\n\ > + -i, --statefile=STATEFILE Load the application state from STATEFILE (libcr mode)\n\ > -s, --define KEY=VAL Assign VAL to configuration variable KEY\n", > .options = my_longopts, > .parser = my_parser, > @@ -90,6 +102,7 @@ Options :\n\ > int main(int argc, char *argv[]) > { > char *rcfile = NULL; > + const char *statefile; > struct lxc_conf *conf; > > lxc_list_init(&defines); > @@ -131,6 +144,9 @@ int main(int argc, char *argv[]) > if (lxc_config_define_load(&defines, conf)) > return -1; > > - return lxc_restart(my_args.name, my_args.statefile, conf, > - my_args.flags); > + statefile = my_args.statefile; > + if (statedir) > + statefile = statedir; > + > + return lxc_restart(my_args.name, statefile, conf, my_args.flags); > } _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 3/6][lxc][v3] lxc_checkpoint: Add --statefile option [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 7:06 ` [PATCH 1/6][lxc][v3] Add --with-libcr configure option Sukadev Bhattiprolu 2010-03-31 7:07 ` [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option Sukadev Bhattiprolu @ 2010-03-31 7:07 ` Sukadev Bhattiprolu 2010-03-31 7:08 ` [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c Sukadev Bhattiprolu ` (7 subsequent siblings) 10 siblings, 0 replies; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:07 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Wed, 10 Mar 2010 22:24:17 -0800 Subject: [PATCH 3/6][lxc][v3] lxc_checkpoint: Add --statefile option The existing --directory option to lxc_checkpoint expects to save the checkpoint state in a directory. USERCR however uses a single regular file to store the checkpoint image. So add a --statefile option to enable checkpointing and restarting applications using USERCR. Users should specify either --statefile or --directory option (but not both) to select the file/directory where the application state will be stored. Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- src/lxc/lxc_checkpoint.c | 40 +++++++++++++++++++++++++++++----------- 1 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/lxc/lxc_checkpoint.c b/src/lxc/lxc_checkpoint.c index a8c74a9..5e8506f 100644 --- a/src/lxc/lxc_checkpoint.c +++ b/src/lxc/lxc_checkpoint.c @@ -37,12 +37,21 @@ lxc_log_define(lxc_checkpoint_ui, lxc_checkpoint); +static char *statedir; + static int my_checker(const struct lxc_arguments* args) { - if (!args->statefile) { - lxc_error(args, "no statefile specified"); - return -1; - } + int d, f; + + /* make them boolean */ + d = !!(statedir); + f = !!(args->statefile); + + if (!(d ^ f)) { + lxc_error(args, "Must specify exactly one of --directory " + "and --statefile options"); + return -1; + } return 0; } @@ -52,7 +61,8 @@ static int my_parser(struct lxc_arguments* args, int c, char* arg) switch (c) { case 'k': args->flags = LXC_FLAG_HALT; break; case 'p': args->flags = LXC_FLAG_PAUSE; break; - case 'd': args->statefile = arg; break; + case 'd': statedir = arg; break; + case 'S': args->statefile = arg; break; } return 0; } @@ -61,13 +71,15 @@ static const struct option my_longopts[] = { {"kill", no_argument, 0, 'k'}, {"pause", no_argument, 0, 'p'}, {"directory", required_argument, 0, 'd'}, + {"statefile", required_argument, 0, 'S'}, LXC_COMMON_OPTIONS }; static struct lxc_arguments my_args = { .progname = "lxc-checkpoint", .help = "\ ---name=NAME --directory STATEFILE\n\ +--name=NAME --directory STATEFILE (deprecated)\n\ +\tlxc_checkpoint --name=NAME --statefile=STATEFILE\n\ \n\ lxc-checkpoint checkpoints in STATEFILE the NAME container\n\ \n\ @@ -75,7 +87,8 @@ Options :\n\ -n, --name=NAME NAME for name of the container\n\ -k, --kill stop the container after checkpoint\n\ -p, --pause don't unfreeze the container after the checkpoint\n\ - -d, --directory=STATEFILE where to store the statefile\n", + -d, --directory=STATEFILE where to store the statefile (deprecated)\n\ + -i, --statefile=STATEFILE where to store the checkpoint-image (LIBCR mode)\n", .options = my_longopts, .parser = my_parser, @@ -97,6 +110,7 @@ static int create_statefile(const char *dir) int main(int argc, char *argv[]) { int ret; + const char *statefile; ret = lxc_arguments_parse(&my_args, argc, argv); if (ret) @@ -107,11 +121,15 @@ int main(int argc, char *argv[]) if (ret) return ret; - ret = create_statefile(my_args.statefile); - if (ret) - return ret; + statefile = my_args.statefile; + if (statedir) { + statefile = statedir; + ret = create_statefile(statefile); + if (ret) + return ret; + } - ret = lxc_checkpoint(my_args.name, my_args.statefile, my_args.flags); + ret = lxc_checkpoint(my_args.name, statefile, my_args.flags); if (ret) ERROR("failed to checkpoint '%s'", my_args.name); else -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (2 preceding siblings ...) 2010-03-31 7:07 ` [PATCH 3/6][lxc][v3] lxc_checkpoint: " Sukadev Bhattiprolu @ 2010-03-31 7:08 ` Sukadev Bhattiprolu [not found] ` <20100331070848.GD23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 7:09 ` [PATCH 5/6][lxc][v3] Hook up lxc_restart() with app_restart() Sukadev Bhattiprolu ` (6 subsequent siblings) 10 siblings, 1 reply; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:08 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Mon, 29 Mar 2010 23:53:55 -0700 Subject: [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c lxc_attach.c is currently not included in liblxc.so. In afollowon patch, checkpoint() function needs to also use the get_init_pid() interface. So move the defintions into checkpoint.c - which would then be accessible to both lxc_attach and lxc-checkpoint. Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- src/lxc/checkpoint.c | 29 +++++++++++++++++++++++++++++ src/lxc/lxc.h | 6 ++++++ src/lxc/lxc_attach.c | 29 +---------------------------- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/lxc/checkpoint.c b/src/lxc/checkpoint.c index 7e8a93e..4e75cb6 100644 --- a/src/lxc/checkpoint.c +++ b/src/lxc/checkpoint.c @@ -22,9 +22,38 @@ */ #include <lxc/lxc.h> #include <lxc/log.h> +#include <lxc/commands.h> lxc_log_define(lxc_checkpoint, lxc); +pid_t get_init_pid(const char *name) +{ + struct lxc_command command = { + .request = { .type = LXC_COMMAND_PID }, + }; + + int ret, stopped = 0; + + ret = lxc_command(name, &command, &stopped); + if (ret < 0 && stopped) { + INFO("'%s' is already stopped", name); + return 0; + } + + if (ret < 0) { + ERROR("failed to send command"); + return -1; + } + + if (command.answer.ret) { + ERROR("failed to retrieve the init pid: %s", + strerror(-command.answer.ret)); + return -1; + } + + return command.answer.pid; +} + int lxc_checkpoint(const char *name, const char *statefile, int flags) { return 0; diff --git a/src/lxc/lxc.h b/src/lxc/lxc.h index b0b9f4e..bd87bdb 100644 --- a/src/lxc/lxc.h +++ b/src/lxc/lxc.h @@ -27,6 +27,7 @@ extern "C" { #endif +#include <unistd.h> #include <stddef.h> #include <lxc/state.h> @@ -56,6 +57,11 @@ extern int lxc_start(const char *name, char *const argv[], struct lxc_conf *); extern int lxc_stop(const char *name); /* + * Get the pid of the root application process tree in parent-pid namespace + */ +extern pid_t get_init_pid(const char *name); + +/* * Open the monitoring mechanism for a specific container * The function will return an fd corresponding to the events * Returns a file descriptor on success, < 0 otherwise diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c index a012c2c..3d2cdd5 100644 --- a/src/lxc/lxc_attach.c +++ b/src/lxc/lxc_attach.c @@ -28,6 +28,7 @@ #include "commands.h" #include "arguments.h" #include "namespace.h" +#include "lxc.h" #include "log.h" lxc_log_define(lxc_attach_ui, lxc); @@ -50,34 +51,6 @@ Options :\n\ .checker = NULL, }; -pid_t get_init_pid(const char *name) -{ - struct lxc_command command = { - .request = { .type = LXC_COMMAND_PID }, - }; - - int ret, stopped = 0; - - ret = lxc_command(name, &command, &stopped); - if (ret < 0 && stopped) { - INFO("'%s' is already stopped", name); - return 0; - } - - if (ret < 0) { - ERROR("failed to send command"); - return -1; - } - - if (command.answer.ret) { - ERROR("failed to retrieve the init pid: %s", - strerror(-command.answer.ret)); - return -1; - } - - return command.answer.pid; -} - int main(int argc, char *argv[], char *envp[]) { int ret; -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
[parent not found: <20100331070848.GD23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c [not found] ` <20100331070848.GD23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 8:17 ` Cedric Le Goater 0 siblings, 0 replies; 28+ messages in thread From: Cedric Le Goater @ 2010-03-31 8:17 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: dlezcano-NmTC/0ZBporQT0dZR+AlfA, Containers On 03/31/2010 09:08 AM, Sukadev Bhattiprolu wrote: > lxc_attach.c is currently not included in liblxc.so. In afollowon > patch, checkpoint() function needs to also use the get_init_pid() > interface. So move the defintions into checkpoint.c - which would > then be accessible to both lxc_attach and lxc-checkpoint. > couldn't we move that routine in src/lxc/utils.c ? thanks, C. ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH 5/6][lxc][v3] Hook up lxc_restart() with app_restart() [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (3 preceding siblings ...) 2010-03-31 7:08 ` [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c Sukadev Bhattiprolu @ 2010-03-31 7:09 ` Sukadev Bhattiprolu 2010-03-31 7:10 ` [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() Sukadev Bhattiprolu ` (5 subsequent siblings) 10 siblings, 0 replies; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:09 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Thu, 11 Mar 2010 20:47:56 -0800 Subject: [PATCH 5/6][lxc][v3] Hook up lxc_restart() with app_restart() Have lxc_restart() call app_restart() implemented in the 'restart.o' from USER-CR git tree. Changelog[v3]: - (Daniel Lezcano) Remove unnecessary check for 'statefile' before opening it - [Daniel Lezcano] Rebase to more recent version and use lxc_check_inherited() instead of lxc_close_inherited_fd(). - Have lxc_restart unfreeze the container if the --pause option was not specified. - Use -D LIBCR to fix compile error when --with-libcr config is not specified. Return ENOSYS if built with LIBCR undefined. - Implement the --pause option to set the RESTART_FROZEN flag. Changelog[v2]: - Link with restart.o from usercr rather than libcheckpoint.a - rename 'struct restart_args' to 'struct app_restart_args' - Initialize the new field app_restart_args->uerrfd - (Oren Laadan)Remove ->send_sigint field from 'struct app_restart_args' --- src/lxc/restart.c | 129 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 128 insertions(+), 1 deletions(-) diff --git a/src/lxc/restart.c b/src/lxc/restart.c index 467489e..220acbf 100644 --- a/src/lxc/restart.c +++ b/src/lxc/restart.c @@ -22,11 +22,138 @@ */ #include <lxc/lxc.h> #include <lxc/log.h> +#include <lxc/start.h> +#include <lxc/namespace.h> +#include <lxc/cgroup.h> +#include <errno.h> +#include <fcntl.h> +#include <signal.h> +#include <sys/prctl.h> +#include <sys/wait.h> +#include "error.h" +#ifdef LIBCR +#include <app-checkpoint.h> +#endif lxc_log_define(lxc_restart, lxc); +#ifdef LIBCR + +struct lxc_restart_arg { + const char *name; + const char *statefile; + char *const argv; + struct lxc_handler *handler; + int lxc_flags; +}; + +static int do_restart(struct lxc_restart_arg *lxcarg) +{ + int pid; + int lxc_flags = lxcarg->lxc_flags; + struct lxc_handler *handler = lxcarg->handler; + const char *statefile = lxcarg->statefile; + struct app_restart_args restart_args; + + if (sigprocmask(SIG_SETMASK, &handler->oldmask, NULL)) { + SYSERROR("failed to set sigprocmask"); + return -1; + } + + if (prctl(PR_SET_PDEATHSIG, SIGKILL, 0, 0, 0)) { + SYSERROR("failed to set pdeath signal"); + return -1; + } + + memset(&restart_args, 0, sizeof(restart_args)); + + restart_args.infd = open(statefile, O_RDONLY, 0); + if (restart_args.infd < 0) { + SYSERROR("Failed to open statefile %s\n", statefile); + return -1; + } + + restart_args.pids = 1; + restart_args.pidns = 1; + restart_args.mnt_pty = 1; + restart_args.mntns = 1; + restart_args.klogfd = -1; + restart_args.ulogfd = lxc_log_fd; + restart_args.uerrfd = fileno(stderr); + restart_args.debug = 1; + restart_args.wait = 0; + + if (lxc_flags & LXC_FLAG_PAUSE) + restart_args.keep_frozen = 1; + + pid = app_restart(&restart_args); + + return pid; +} + int lxc_restart(const char *name, const char *statefile, struct lxc_conf *conf, - int flags) + int lxc_flags) { + int err; + int status; + struct lxc_handler *handler; + struct lxc_restart_arg lxcarg = { + .name = name, + .statefile = statefile, + .lxc_flags = lxc_flags, + .handler = NULL, + }; + + if (lxc_check_inherited()) + return -1; + + handler = lxc_init(name, conf); + if (!handler) { + ERROR("failed to initialize the container"); + return -1; + } + + lxcarg.handler = handler; + handler->pid = do_restart(&lxcarg); + + INFO("do_restart(): returns pid %d\n", handler->pid); + lxc_rename_nsgroup(name, handler); + + err = lxc_poll(name, handler); + if (err) { + ERROR("mainloop exited with an error"); + goto out_abort; + } + + while (waitpid(handler->pid, &status, 0) < 0 && errno == EINTR) + continue; + + if (!(lxc_flags & LXC_FLAG_PAUSE)) { + err = lxc_unfreeze(name); + if (err) { + ERROR("lxc_restart(): Unable to unfreeze\n"); + goto out_fini; + } + } + + err = lxc_error_set_and_log(handler->pid, status); + +out_fini: + lxc_fini(name, handler); + return err; + +out_abort: + lxc_abort(name, handler); + goto out_fini; + return 0; } +#else +int lxc_restart(const char *name, const char *statefile, struct lxc_conf *conf, + int lxc_flags) +{ + ERROR("'restart' function not configured"); + ERROR("Try --with-libcr option to 'configure' script"); + return -1; +} +#endif -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (4 preceding siblings ...) 2010-03-31 7:09 ` [PATCH 5/6][lxc][v3] Hook up lxc_restart() with app_restart() Sukadev Bhattiprolu @ 2010-03-31 7:10 ` Sukadev Bhattiprolu [not found] ` <20100331071016.GF23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 9:29 ` [PATCH 0/6][lxc][v3] Link LXC with USERCR Michel Normand ` (4 subsequent siblings) 10 siblings, 1 reply; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 7:10 UTC (permalink / raw) To: dlezcano-NmTC/0ZBporQT0dZR+AlfA; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA From: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> Date: Thu, 11 Mar 2010 21:32:38 -0800 Subject: [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() Have lxc_checkpoint() call app_checkpoint() implemented in checkpoint.o in the USER-CR git tree TODO: - Map lxc_flags to flags in sys_checkpoint() - Initialize app_checkpoint_args.debug and other fields based on command line options to lxc_checkpoint rather than hard-coding them Changelog:[v2]: - Drop find_cinit_pid() and use get_init_pid() from a recent checkin - Implement --pause and --kill options to lxc-checkpoint - Use -D LIBCR to fix compile error when --with-libcr config option is not specified. Return ENOSYS when LIBCR is undefined. - Add CHECKPOINT_NONETNS to flags arg to app_checkpoint() which is needed to checkpoint an application that is not in a private netns (new in ckpt-v20-dev). Signed-off-by: Sukadev Bhattiprolu <sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org> --- src/lxc/checkpoint.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++- src/lxc/state.c | 1 - 2 files changed, 86 insertions(+), 3 deletions(-) diff --git a/src/lxc/checkpoint.c b/src/lxc/checkpoint.c index 4e75cb6..6e905ff 100644 --- a/src/lxc/checkpoint.c +++ b/src/lxc/checkpoint.c @@ -22,7 +22,17 @@ */ #include <lxc/lxc.h> #include <lxc/log.h> -#include <lxc/commands.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include <linux/checkpoint.h> + +#include "commands.h" +#include "arguments.h" +#include "namespace.h" +#ifdef LIBCR +#include "app-checkpoint.h" +#endif lxc_log_define(lxc_checkpoint, lxc); @@ -54,7 +64,81 @@ pid_t get_init_pid(const char *name) return command.answer.pid; } -int lxc_checkpoint(const char *name, const char *statefile, int flags) +#ifdef LIBCR +int lxc_checkpoint(const char *name, const char *statefile, int lxc_flags) { + int ret; + int pid; + int flags; + struct app_checkpoint_args crargs; + + pid = get_init_pid(name); + if (pid < 0) { + ERROR("Unable to find cinit pid"); + return -1; + } + + ret = lxc_freeze(name); + if (ret < 0) + return ret; + + memset(&crargs, 0, sizeof(crargs)); + + ret = open(statefile, O_CREAT|O_RDWR|O_EXCL, 0600); + if (ret < 0) { + ERROR("open(%s) failed, %s\n", statefile, strerror(errno)); + return -1; + } + + crargs.outfd = ret; + crargs.logfd = lxc_log_fd; + crargs.uerrfd = lxc_log_fd; + /* + * TODO: Set this to 0 for now - otherwise we get an objhash leak + * due to mismatched references to current PTY which needs to + * be investigated. + * + * TODO: Map @lxc_flags to user-cr flags ? + * + * TODO: We can probably drop the ->container field since @flags + * can provide the same selection. + * + * TODO: Do we may need a --container option to lxc_checkpoint or + * assume that we always work with full containers ? + */ + crargs.container = 0; + + /* + * TODO: Set the CHECKPOINT_NONETNS unconditionally for now. Otherwise + * it would require running the application in a private netns. + * Implement a command-line option to allow user selection. + */ + flags = CHECKPOINT_SUBTREE|CHECKPOINT_NONETNS; + + ret = app_checkpoint(pid, flags, &crargs); + if (ret < 0) { + ERROR("checkpoint of %s (pid %d) failed\n", name, pid); + return -1; + } + + if (lxc_flags & LXC_FLAG_HALT) { + ret = lxc_stop(name); + if (ret < 0) + return ret; + + return lxc_unfreeze(name); + } + + if (!(lxc_flags & LXC_FLAG_PAUSE)) + return lxc_unfreeze(name); + return 0; } +#else +int lxc_checkpoint(const char *name, const char *statefile, int lxc_flags) +{ + ERROR("'checkpoint' not configured"); + ERROR("Try --with-libcr option to 'configure' script"); + return -1; +} +#endif diff --git a/src/lxc/state.c b/src/lxc/state.c index b29ae09..1e4c7e1 100644 --- a/src/lxc/state.c +++ b/src/lxc/state.c @@ -167,4 +167,3 @@ extern int lxc_state_callback(int fd, struct lxc_request *request, out: return ret; } - -- 1.6.6.1 ^ permalink raw reply related [flat|nested] 28+ messages in thread
[parent not found: <20100331071016.GF23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() [not found] ` <20100331071016.GF23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 8:08 ` Michel Normand 2010-03-31 8:18 ` Cedric Le Goater 1 sibling, 0 replies; 28+ messages in thread From: Michel Normand @ 2010-03-31 8:08 UTC (permalink / raw) To: Sukadev Bhattiprolu Cc: Containers, clg-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, DLEZCANO-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 unable to apply without manual changes you have blank characters on two comment lines. --- Michel Le mercredi 31 mars 2010 à 00:10 -0700, Sukadev Bhattiprolu a écrit : > From: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > Date: Thu, 11 Mar 2010 21:32:38 -0800 > Subject: [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() > > Have lxc_checkpoint() call app_checkpoint() implemented in checkpoint.o > in the USER-CR git tree > > TODO: > - Map lxc_flags to flags in sys_checkpoint() > - Initialize app_checkpoint_args.debug and other fields based on > command line options to lxc_checkpoint rather than hard-coding > them > > Changelog:[v2]: > - Drop find_cinit_pid() and use get_init_pid() from a recent checkin > - Implement --pause and --kill options to lxc-checkpoint > - Use -D LIBCR to fix compile error when --with-libcr config option > is not specified. Return ENOSYS when LIBCR is undefined. > - Add CHECKPOINT_NONETNS to flags arg to app_checkpoint() which > is needed to checkpoint an application that is not in a private > netns (new in ckpt-v20-dev). > > Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com> > --- > src/lxc/checkpoint.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++- > src/lxc/state.c | 1 - > 2 files changed, 86 insertions(+), 3 deletions(-) > > diff --git a/src/lxc/checkpoint.c b/src/lxc/checkpoint.c > index 4e75cb6..6e905ff 100644 > --- a/src/lxc/checkpoint.c > +++ b/src/lxc/checkpoint.c > @@ -22,7 +22,17 @@ > */ > #include <lxc/lxc.h> > #include <lxc/log.h> > -#include <lxc/commands.h> > +#include <sys/stat.h> > +#include <fcntl.h> > +#include <errno.h> > +#include <linux/checkpoint.h> > + > +#include "commands.h" > +#include "arguments.h" > +#include "namespace.h" > +#ifdef LIBCR > +#include "app-checkpoint.h" > +#endif > > lxc_log_define(lxc_checkpoint, lxc); > > @@ -54,7 +64,81 @@ pid_t get_init_pid(const char *name) > return command.answer.pid; > } > > -int lxc_checkpoint(const char *name, const char *statefile, int flags) > +#ifdef LIBCR > +int lxc_checkpoint(const char *name, const char *statefile, int lxc_flags) > { > + int ret; > + int pid; > + int flags; > + struct app_checkpoint_args crargs; > + > + pid = get_init_pid(name); > + if (pid < 0) { > + ERROR("Unable to find cinit pid"); > + return -1; > + } > + > + ret = lxc_freeze(name); > + if (ret < 0) > + return ret; > + > + memset(&crargs, 0, sizeof(crargs)); > + > + ret = open(statefile, O_CREAT|O_RDWR|O_EXCL, 0600); > + if (ret < 0) { > + ERROR("open(%s) failed, %s\n", statefile, strerror(errno)); > + return -1; > + } > + > + crargs.outfd = ret; > + crargs.logfd = lxc_log_fd; > + crargs.uerrfd = lxc_log_fd; > + /* > + * TODO: Set this to 0 for now - otherwise we get an objhash leak > + * due to mismatched references to current PTY which needs to > + * be investigated. > + * > + * TODO: Map @lxc_flags to user-cr flags ? > + * > + * TODO: We can probably drop the ->container field since @flags > + * can provide the same selection. > + * > + * TODO: Do we may need a --container option to lxc_checkpoint or > + * assume that we always work with full containers ? > + */ > + crargs.container = 0; > + > + /* > + * TODO: Set the CHECKPOINT_NONETNS unconditionally for now. Otherwise > + * it would require running the application in a private netns. > + * Implement a command-line option to allow user selection. > + */ > + flags = CHECKPOINT_SUBTREE|CHECKPOINT_NONETNS; > + > + ret = app_checkpoint(pid, flags, &crargs); > + if (ret < 0) { > + ERROR("checkpoint of %s (pid %d) failed\n", name, pid); > + return -1; > + } > + > + if (lxc_flags & LXC_FLAG_HALT) { > + ret = lxc_stop(name); > + if (ret < 0) > + return ret; > + > + return lxc_unfreeze(name); > + } > + > + if (!(lxc_flags & LXC_FLAG_PAUSE)) > + return lxc_unfreeze(name); > + > return 0; > } > +#else > +int lxc_checkpoint(const char *name, const char *statefile, int lxc_flags) > +{ > + ERROR("'checkpoint' not configured"); > + ERROR("Try --with-libcr option to 'configure' script"); > + return -1; > +} > +#endif > diff --git a/src/lxc/state.c b/src/lxc/state.c > index b29ae09..1e4c7e1 100644 > --- a/src/lxc/state.c > +++ b/src/lxc/state.c > @@ -167,4 +167,3 @@ extern int lxc_state_callback(int fd, struct lxc_request *request, > out: > return ret; > } > - _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() [not found] ` <20100331071016.GF23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 8:08 ` Michel Normand @ 2010-03-31 8:18 ` Cedric Le Goater 1 sibling, 0 replies; 28+ messages in thread From: Cedric Le Goater @ 2010-03-31 8:18 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: dlezcano-NmTC/0ZBporQT0dZR+AlfA, Containers On 03/31/2010 09:10 AM, Sukadev Bhattiprolu wrote: > diff --git a/src/lxc/state.c b/src/lxc/state.c > index b29ae09..1e4c7e1 100644 > --- a/src/lxc/state.c > +++ b/src/lxc/state.c > @@ -167,4 +167,3 @@ extern int lxc_state_callback(int fd, struct lxc_request *request, > out: > return ret; > } > - that's noise. C. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (5 preceding siblings ...) 2010-03-31 7:10 ` [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() Sukadev Bhattiprolu @ 2010-03-31 9:29 ` Michel Normand 2010-03-31 9:38 ` Cedric Le Goater ` (3 subsequent siblings) 10 siblings, 0 replies; 28+ messages in thread From: Michel Normand @ 2010-03-31 9:29 UTC (permalink / raw) To: Sukadev Bhattiprolu Cc: Containers, clg-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8, DLEZCANO-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8 Hi Suka, I tried to follow your how-to but failed to checkpoint your first example. Le mercredi 31 mars 2010 à 00:04 -0700, Sukadev Bhattiprolu a écrit : > lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. > Following set of patches, when applied to LXC and built with USERCR as > described below, enable enable lxc-checkpoint and lxc-restart of some > simple containers > [CUT] ... > 1. Build USERCR > > $ cd /root > > $ git-clone git://git.ncl.cs.columbia.edu/pub/git/user-cr.git user-cr > > $ cd user-cr > > $ git-checkout ckpt-v20-dev > > Tested with commit e275f77e4a82d228c1df14dbeb691342e32cdac2 > as HEAD. > > # Apply following two patches: > > https://lists.linux-foundation.org/pipermail/containers/2010-March/024037.html > https://lists.linux-foundation.org/pipermail/containers/2010-March/024038.html > > $ cd /root/user-cr > > $ KERNELSRC=/root/linux-2.6/ make > > Build USERCR by pointing to corresponding kernel-source. > This should create restart.o and checkpoint.o needed by LXC. I assume we need a sudo make install, at least for ckptinfo, do we ? > 2. Build/install LXC > > $ cd /root/lxc.git > > Apply attached patches to LXC (I tested with these patches applied > to commit 9ea8066aa67b808f71f46e346bd7a215e2a355f3) > > $ autogen.sh > > $ ./configure --with-libcr=/root/user-cr > > This will fail if /root/user-cr does not container checkpoint.o, > restart.o and app-checkpoint.h files > $ make > > $ make install > > 3. Checkpoint/restart a simple LXC container > > $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 > > $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt not --image but --statefile * The command failed, but no details of the error. Would it be possible to have displayed on stderr an error message to explain the cause of the problem ? === $lxc-checkpoint -n foo --statefile sf lxc-checkpoint: checkpoint of foo (pid 1554) failed lxc-checkpoint: failed to checkpoint 'foo' === * If I am re-running the command adding -ofoo.log -lTRACE I have one more clue with following two lines, but do not help. could the message be improved ? === checkpoint: Invalid argument (you may use 'ckptinfo -e' for more info) === * and doing a strace of the command. How to determine what is wrong ? === open("sf", O_RDWR|O_CREAT|O_EXCL, 0600) = 4 SYS_339(0x628, 0x4, 0x3, 0xffffffff, 0x1) = -1 EINVAL (Invalid argument) === --- Michel > > $ lxc-stop --name foo > > $ lxc-restart --name foo --image /root/lxc-foo.ckpt > [CUT] ... _______________________________________________ Containers mailing list Containers@lists.linux-foundation.org https://lists.linux-foundation.org/mailman/listinfo/containers ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (6 preceding siblings ...) 2010-03-31 9:29 ` [PATCH 0/6][lxc][v3] Link LXC with USERCR Michel Normand @ 2010-03-31 9:38 ` Cedric Le Goater [not found] ` <4BB31801.4000304-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> 2010-03-31 13:58 ` Daniel Lezcano ` (2 subsequent siblings) 10 siblings, 1 reply; 28+ messages in thread From: Cedric Le Goater @ 2010-03-31 9:38 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: dlezcano-NmTC/0ZBporQT0dZR+AlfA, Containers On 03/31/2010 09:04 AM, Sukadev Bhattiprolu wrote: > 3. Checkpoint/restart a simple LXC container > > $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 > > $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt > > $ lxc-stop --name foo > > $ lxc-restart --name foo --image /root/lxc-foo.ckpt Here's a very simple program : # pi1.sh # # IBM Confidential # # OCO Source Materials # # P91223 # # (C) Copyright IBM Corp. 2003, 2008 # # The source code for this program is not published or otherwise # divested of its trade secrets, irrespective of what has been # deposited with the U.S. Copyright Office. #!/bin/sh me=`basename "$0" 2>/dev/null` ndigit=${1:-1000} echo $me - $ndigit digits echo "scale=$ndigit;a(1)*4" | bc -l can you run in a terminal : $ lxc-execute -n pi1 -- ./pi1.sh 3000 & $ lxc-checkpoint -n pi1 -d ./ckpt -k $ lxc-restart -n pi1 -d ./ckpt Thanks, C. ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB31801.4000304-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB31801.4000304-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 12:13 ` Cedric Le Goater [not found] ` <4BB33C81.9070802-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Cedric Le Goater @ 2010-03-31 12:13 UTC (permalink / raw) Cc: dlezcano-NmTC/0ZBporQT0dZR+AlfA, Sukadev Bhattiprolu, Containers > Here's a very simple program : > > # pi1.sh > # > # IBM Confidential > # > # OCO Source Materials > # > # P91223 > # > # (C) Copyright IBM Corp. 2003, 2008 > # > # The source code for this program is not published or otherwise > # divested of its trade secrets, irrespective of what has been > # deposited with the U.S. Copyright Office. that's from the example section of bc(1) manpage. nothing confidential there :) > #!/bin/sh > > me=`basename "$0" 2>/dev/null` > ndigit=${1:-1000} > > echo $me - $ndigit digits > echo "scale=$ndigit;a(1)*4" | bc -l > > can you run in a terminal : > > $ lxc-execute -n pi1 -- ./pi1.sh 3000& > $ lxc-checkpoint -n pi1 -d ./ckpt -k > $ lxc-restart -n pi1 -d ./ckpt please try that suka, it's much more interesting than sleep which can silently segfault after restart. thanks, C. ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB33C81.9070802-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB33C81.9070802-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> @ 2010-04-01 5:03 ` Sukadev Bhattiprolu 0 siblings, 0 replies; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-04-01 5:03 UTC (permalink / raw) To: Cedric Le Goater; +Cc: dlezcano-NmTC/0ZBporQT0dZR+AlfA, Containers Cedric Le Goater [clg-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org] wrote: >> #!/bin/sh >> >> me=`basename "$0" 2>/dev/null` >> ndigit=${1:-1000} >> >> echo $me - $ndigit digits >> echo "scale=$ndigit;a(1)*4" | bc -l >> >> can you run in a terminal : >> >> $ lxc-execute -n pi1 -- ./pi1.sh 3000& >> $ lxc-checkpoint -n pi1 -d ./ckpt -k >> $ lxc-restart -n pi1 -d ./ckpt > > please try that suka, it's much more interesting than sleep which can > silently segfault after restart. Agree. BTW, after the sleep I tested C/R of a VNC server with a vi session running inside. I tried the above program, which is definitely more interesting, but am having trouble with stdout after restart - restart seems to succeed, but nothing shows up on stdout. If I redirect the output of "bc -l" to a file, the C/R (with lxc) works fine. I am investigating the stdout issue though. Thanks, Sukadev ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (7 preceding siblings ...) 2010-03-31 9:38 ` Cedric Le Goater @ 2010-03-31 13:58 ` Daniel Lezcano [not found] ` <4BB35519.8080500-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> 2010-03-31 16:31 ` Daniel Lezcano 2010-03-31 19:58 ` Daniel Lezcano 10 siblings, 1 reply; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 13:58 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Sukadev Bhattiprolu wrote: > lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. > Following set of patches, when applied to LXC and built with USERCR as > described below, enable enable lxc-checkpoint and lxc-restart of some > simple containers > [ ... ] > 1. Build USERCR > > $ cd /root > > $ git-clone git://git.ncl.cs.columbia.edu/pub/git/user-cr.git user-cr > > $ cd user-cr > > $ git-checkout ckpt-v20-dev > > Tested with commit e275f77e4a82d228c1df14dbeb691342e32cdac2 > as HEAD. > > # Apply following two patches: > > https://lists.linux-foundation.org/pipermail/containers/2010-March/024037.html > https://lists.linux-foundation.org/pipermail/containers/2010-March/024038.html > > $ cd /root/user-cr > > $ KERNELSRC=/root/linux-2.6/ make Assuming the kernel source tree below is right, http://www.linux-cr.org/git/?p=linux-cr.git;a=summary Shall I use ckpt-v20 or ckpt-v20-dev with your patchset ? ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB35519.8080500-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB35519.8080500-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> @ 2010-04-01 5:37 ` Oren Laadan 0 siblings, 0 replies; 28+ messages in thread From: Oren Laadan @ 2010-04-01 5:37 UTC (permalink / raw) To: Daniel Lezcano Cc: Containers, Sukadev Bhattiprolu, clg-NmTC/0ZBporQT0dZR+AlfA Daniel Lezcano wrote: > Sukadev Bhattiprolu wrote: >> lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. >> Following set of patches, when applied to LXC and built with USERCR as >> described below, enable enable lxc-checkpoint and lxc-restart of some >> simple containers >> > > [ ... ] > >> 1. Build USERCR >> >> $ cd /root >> >> $ git-clone git://git.ncl.cs.columbia.edu/pub/git/user-cr.git user-cr >> >> $ cd user-cr >> >> $ git-checkout ckpt-v20-dev >> >> Tested with commit e275f77e4a82d228c1df14dbeb691342e32cdac2 >> as HEAD. >> >> # Apply following two patches: >> >> https://lists.linux-foundation.org/pipermail/containers/2010-March/024037.html >> https://lists.linux-foundation.org/pipermail/containers/2010-March/024038.html >> >> $ cd /root/user-cr >> >> $ KERNELSRC=/root/linux-2.6/ make > > Assuming the kernel source tree below is right, > > http://www.linux-cr.org/git/?p=linux-cr.git;a=summary > > Shall I use ckpt-v20 or ckpt-v20-dev with your patchset ? It's in rcX state and hence not made the primary branch, but you should probably try ckpt-v21-rc2 (kernel) and ckpt-v20-dev (for user-cr) instead. Oren. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (8 preceding siblings ...) 2010-03-31 13:58 ` Daniel Lezcano @ 2010-03-31 16:31 ` Daniel Lezcano 2010-03-31 19:58 ` Daniel Lezcano 10 siblings, 0 replies; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 16:31 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Sukadev Bhattiprolu wrote: > lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. > Following set of patches, when applied to LXC and built with USERCR as > described below, enable enable lxc-checkpoint and lxc-restart of some > simple containers > Hi Suka, Thanks for the patchset. Before going further and comment the patchset and the TODOs, I would like to succeed to checkpoint something. Despite your detailed informations, I was not able to checkpoint 'sleep'. I am sure I am missing something or something is missing :) [ ... ] Here is the different steps I did: 1 - downloaded the git tree at git://www.linux-cr.org/pub/git/linux-cr 2 - compiled the kernel making sure I have the following kernel config options > grep CHECKPOINT .config CONFIG_CHECKPOINT_SUPPORT=y CONFIG_SYSVIPC_CHECKPOINT=y CONFIG_CHECKPOINT=y CONFIG_CHECKPOINT_DEBUG=y and of course the needed namespaces. 3 - The level of the code is the commit 3522c57a9ec6f08a129a78322318abcb4467db28 > 1. Build USERCR > > $ cd /root > > $ git-clone git://git.ncl.cs.columbia.edu/pub/git/user-cr.git user-cr > > $ cd user-cr > > $ git-checkout ckpt-v20-dev > > Tested with commit e275f77e4a82d228c1df14dbeb691342e32cdac2 > as HEAD. > > # Apply following two patches: > > https://lists.linux-foundation.org/pipermail/containers/2010-March/024037.html > https://lists.linux-foundation.org/pipermail/containers/2010-March/024038.html > > $ cd /root/user-cr > > $ KERNELSRC=/root/linux-2.6/ make > > Build USERCR by pointing to corresponding kernel-source. > This should create restart.o and checkpoint.o needed by LXC. > 4 - followed these steps ^^^^ I had to compile user-cr with the "-fPIC" flags in order to link lxc and user-cr. /usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: /home/dlezcano/work/src/user-cr/checkpoint.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /home/dlezcano/work/src/user-cr/checkpoint.o: could not read symbols: Bad value > 2. Build/install LXC > > $ cd /root/lxc.git > > Apply attached patches to LXC (I tested with these patches applied > to commit 9ea8066aa67b808f71f46e346bd7a215e2a355f3) > Ok, I applied the patchset with quilt. It looks like Michel used git which is stricter than quilt. I fixed the typo in configure.ac > 3. Checkpoint/restart a simple LXC container > > $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 > > $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt > Ok, I reach this point. But the checkpoint fails always with EINVAL and the statefile is empty. Digging a bit in the userspace + kernel code, I was wondering if the user flags match ? Thanks in advance. -- Daniel ps : I noticed the application is not thawed in the error code path, so I have to resume it manually everytime the checkpoint fails. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> ` (9 preceding siblings ...) 2010-03-31 16:31 ` Daniel Lezcano @ 2010-03-31 19:58 ` Daniel Lezcano [not found] ` <4BB3A981.4020709-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> 10 siblings, 1 reply; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 19:58 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Sukadev Bhattiprolu wrote: > lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. > Following set of patches, when applied to LXC and built with USERCR as > described below, enable enable lxc-checkpoint and lxc-restart of some > simple containers [ ... ] > 3. Checkpoint/restart a simple LXC container > > $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 > > $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt > > $ lxc-stop --name foo > > $ lxc-restart --name foo --image /root/lxc-foo.ckpt Finally, using ckpt-v20-dev, I succeeded to checkpoint sleep but when I restart, I got the error: <4534>number of tasks: 2 <4534>number of vpids: 0 <4534>total tasks (including ghosts): 2 <4534>pid 2: inherit sid 0 <4534>pid 2: creator set to 1 <4534>====== TASKS <4534> [0] pid 1 ppid 0 sid 0 creator 0 <4534> [1] pid 2 ppid 1 sid 0 creator 1 <4534>............ <4534>task[0].vidx = -1 <4534>task[1].vidx = -1 <4534>new pidns with init <4534>forking child vpid 1 flags 0x321 <4534>task 1 forking with flags 20020011 numpids 1 <4534>task 1 pid[0]=0 <4535>====== PIDS ARRAY <4535>[0] pid 1 ppid 0 sid 0 pgid 0 <4535>[1] pid 2 ppid 1 sid 0 pgid 0 <4535>............ Error: /dev/ptmx must be a link to /dev/pts/ptmx <4534>forked child vpid 4536 (asked 1) root task exited status 0 What can I do to prevent this error ? Thanks -- Daniel ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB3A981.4020709-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB3A981.4020709-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 20:12 ` Serge E. Hallyn [not found] ` <20100331201240.GA26773-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Serge E. Hallyn @ 2010-03-31 20:12 UTC (permalink / raw) To: Daniel Lezcano Cc: Containers, Sukadev Bhattiprolu, clg-NmTC/0ZBporQT0dZR+AlfA Quoting Daniel Lezcano (dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org): > Sukadev Bhattiprolu wrote: > >lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. > >Following set of patches, when applied to LXC and built with USERCR as > >described below, enable enable lxc-checkpoint and lxc-restart of some > >simple containers > > [ ... ] > > >3. Checkpoint/restart a simple LXC container > > > > $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 > > > > $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt > > > > $ lxc-stop --name foo > > > > $ lxc-restart --name foo --image /root/lxc-foo.ckpt > > Finally, using ckpt-v20-dev, I succeeded to checkpoint sleep but > when I restart, I got the error: > > <4534>number of tasks: 2 > <4534>number of vpids: 0 > <4534>total tasks (including ghosts): 2 > <4534>pid 2: inherit sid 0 > <4534>pid 2: creator set to 1 > <4534>====== TASKS > <4534> [0] pid 1 ppid 0 sid 0 creator 0 > <4534> [1] pid 2 ppid 1 sid 0 creator 1 > <4534>............ > <4534>task[0].vidx = -1 > <4534>task[1].vidx = -1 > <4534>new pidns with init > <4534>forking child vpid 1 flags 0x321 > <4534>task 1 forking with flags 20020011 numpids 1 > <4534>task 1 pid[0]=0 > <4535>====== PIDS ARRAY > <4535>[0] pid 1 ppid 0 sid 0 pgid 0 > <4535>[1] pid 2 ppid 1 sid 0 pgid 0 > <4535>............ > Error: /dev/ptmx must be a link to /dev/pts/ptmx > <4534>forked child vpid 4536 (asked 1) > root task exited status 0 > > What can I do to prevent this error ? test -e /dev/pts/ptmx || (echo "Don't go through with the rest of this" && exit) rm -f /dev/ptmx ln -s /dev/pts/ptmx /dev/ptmx chmod 666 /dev/ptmx Unfortunately with udev i tend to always have to do this after every mount (So I do it in the same script that mounts freezer) ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <20100331201240.GA26773-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331201240.GA26773-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 20:22 ` Daniel Lezcano 2010-03-31 21:00 ` Daniel Lezcano 1 sibling, 0 replies; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 20:22 UTC (permalink / raw) To: Serge E. Hallyn Cc: Containers, Sukadev Bhattiprolu, clg-NmTC/0ZBporQT0dZR+AlfA Serge E. Hallyn wrote: > Quoting Daniel Lezcano (dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org): >> Sukadev Bhattiprolu wrote: >>> lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. >>> Following set of patches, when applied to LXC and built with USERCR as >>> described below, enable enable lxc-checkpoint and lxc-restart of some >>> simple containers >> [ ... ] >> >>> 3. Checkpoint/restart a simple LXC container >>> >>> $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 >>> >>> $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt >>> >>> $ lxc-stop --name foo >>> >>> $ lxc-restart --name foo --image /root/lxc-foo.ckpt >> Finally, using ckpt-v20-dev, I succeeded to checkpoint sleep but >> when I restart, I got the error: >> >> <4534>number of tasks: 2 >> <4534>number of vpids: 0 >> <4534>total tasks (including ghosts): 2 >> <4534>pid 2: inherit sid 0 >> <4534>pid 2: creator set to 1 >> <4534>====== TASKS >> <4534> [0] pid 1 ppid 0 sid 0 creator 0 >> <4534> [1] pid 2 ppid 1 sid 0 creator 1 >> <4534>............ >> <4534>task[0].vidx = -1 >> <4534>task[1].vidx = -1 >> <4534>new pidns with init >> <4534>forking child vpid 1 flags 0x321 >> <4534>task 1 forking with flags 20020011 numpids 1 >> <4534>task 1 pid[0]=0 >> <4535>====== PIDS ARRAY >> <4535>[0] pid 1 ppid 0 sid 0 pgid 0 >> <4535>[1] pid 2 ppid 1 sid 0 pgid 0 >> <4535>............ >> Error: /dev/ptmx must be a link to /dev/pts/ptmx >> <4534>forked child vpid 4536 (asked 1) >> root task exited status 0 >> >> What can I do to prevent this error ? > > test -e /dev/pts/ptmx || (echo "Don't go through with the rest of this" && exit) > rm -f /dev/ptmx > ln -s /dev/pts/ptmx /dev/ptmx > chmod 666 /dev/ptmx I was able to restart. I will play a bit with it :) Thanks Serge. ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331201240.GA26773-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-03-31 20:22 ` Daniel Lezcano @ 2010-03-31 21:00 ` Daniel Lezcano [not found] ` <4BB3B7E1.8080608-GANU6spQydw@public.gmane.org> 1 sibling, 1 reply; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 21:00 UTC (permalink / raw) To: Serge E. Hallyn Cc: Containers, Sukadev Bhattiprolu, clg-NmTC/0ZBporQT0dZR+AlfA Serge E. Hallyn wrote: > Quoting Daniel Lezcano (dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org): >> Sukadev Bhattiprolu wrote: >>> lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. >>> Following set of patches, when applied to LXC and built with USERCR as >>> described below, enable enable lxc-checkpoint and lxc-restart of some >>> simple containers >> [ ... ] >> >>> 3. Checkpoint/restart a simple LXC container >>> >>> $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 >>> >>> $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt >>> >>> $ lxc-stop --name foo >>> >>> $ lxc-restart --name foo --image /root/lxc-foo.ckpt >> Finally, using ckpt-v20-dev, I succeeded to checkpoint sleep but >> when I restart, I got the error: >> >> <4534>number of tasks: 2 >> <4534>number of vpids: 0 >> <4534>total tasks (including ghosts): 2 >> <4534>pid 2: inherit sid 0 >> <4534>pid 2: creator set to 1 >> <4534>====== TASKS >> <4534> [0] pid 1 ppid 0 sid 0 creator 0 >> <4534> [1] pid 2 ppid 1 sid 0 creator 1 >> <4534>............ >> <4534>task[0].vidx = -1 >> <4534>task[1].vidx = -1 >> <4534>new pidns with init >> <4534>forking child vpid 1 flags 0x321 >> <4534>task 1 forking with flags 20020011 numpids 1 >> <4534>task 1 pid[0]=0 >> <4535>====== PIDS ARRAY >> <4535>[0] pid 1 ppid 0 sid 0 pgid 0 >> <4535>[1] pid 2 ppid 1 sid 0 pgid 0 >> <4535>............ >> Error: /dev/ptmx must be a link to /dev/pts/ptmx >> <4534>forked child vpid 4536 (asked 1) >> root task exited status 0 >> >> What can I do to prevent this error ? > > test -e /dev/pts/ptmx || (echo "Don't go through with the rest of this" && exit) > rm -f /dev/ptmx > ln -s /dev/pts/ptmx /dev/ptmx > chmod 666 /dev/ptmx I was able to CR a simple program like sleep. But most of the simple test programs I run, exit right after the restart was marked successful instead of continuing their execution. In the kernel I see the traces: [26108:3:c/r:restore_debug_free:145] active pid was 3, ctx->errno 0 [26108:3:c/r:restore_debug_free:147] kflags 6 uflags 0 oflags 3 [26108:3:c/r:restore_debug_free:149] task[0] to run 1 [26108:3:c/r:restore_debug_free:149] task[1] to run 2 [26108:3:c/r:restore_debug_free:149] task[2] to run 3 [26108:3:c/r:restore_debug_free:174] pid 26104 type Coord state Success [26108:3:c/r:restore_debug_free:174] pid 26106 type Root state Success [26108:3:c/r:restore_debug_free:174] pid 26107 type Task state Success [26108:3:c/r:restore_debug_free:174] pid 26108 type Task state Success [26108:3:c/r:pgarr_release_pages:102] total pages 0 [26108:3:c/r:do_restart:1446] sys_restart returns -516 What does mean -516 ? an error ? I am running on a x86_64. Thanks -- Daniel ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB3B7E1.8080608-GANU6spQydw@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB3B7E1.8080608-GANU6spQydw@public.gmane.org> @ 2010-03-31 21:23 ` Sukadev Bhattiprolu [not found] ` <20100331212359.GA18934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> 2010-04-01 5:43 ` Oren Laadan 1 sibling, 1 reply; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-03-31 21:23 UTC (permalink / raw) To: Daniel Lezcano; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Daniel Lezcano [daniel.lezcano-GANU6spQydw@public.gmane.org] wrote: > But most of the simple test programs I run, exit right after the restart > was marked successful instead of continuing their execution. > > In the kernel I see the traces: > > [26108:3:c/r:restore_debug_free:145] active pid was 3, ctx->errno 0 > [26108:3:c/r:restore_debug_free:147] kflags 6 uflags 0 oflags 3 > [26108:3:c/r:restore_debug_free:149] task[0] to run 1 > [26108:3:c/r:restore_debug_free:149] task[1] to run 2 > [26108:3:c/r:restore_debug_free:149] task[2] to run 3 > [26108:3:c/r:restore_debug_free:174] pid 26104 type Coord state Success > [26108:3:c/r:restore_debug_free:174] pid 26106 type Root state Success > [26108:3:c/r:restore_debug_free:174] pid 26107 type Task state Success > [26108:3:c/r:restore_debug_free:174] pid 26108 type Task state Success > [26108:3:c/r:pgarr_release_pages:102] total pages 0 > [26108:3:c/r:do_restart:1446] sys_restart returns -516 > > What does mean -516 ? an error ? Could it be ERESTART_RESTARTBLOCK ? Also, can you let us know what application causes this ? Are any signals generated ? Thanks, Sukadev > > I am running on a x86_64. > > Thanks > -- Daniel ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <20100331212359.GA18934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <20100331212359.GA18934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org> @ 2010-03-31 21:30 ` Daniel Lezcano [not found] ` <4BB3BF02.7060402-GANU6spQydw@public.gmane.org> 0 siblings, 1 reply; 28+ messages in thread From: Daniel Lezcano @ 2010-03-31 21:30 UTC (permalink / raw) To: Sukadev Bhattiprolu; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Sukadev Bhattiprolu wrote: > Daniel Lezcano [daniel.lezcano-GANU6spQydw@public.gmane.org] wrote: > >> But most of the simple test programs I run, exit right after the restart >> was marked successful instead of continuing their execution. >> >> In the kernel I see the traces: >> >> [26108:3:c/r:restore_debug_free:145] active pid was 3, ctx->errno 0 >> [26108:3:c/r:restore_debug_free:147] kflags 6 uflags 0 oflags 3 >> [26108:3:c/r:restore_debug_free:149] task[0] to run 1 >> [26108:3:c/r:restore_debug_free:149] task[1] to run 2 >> [26108:3:c/r:restore_debug_free:149] task[2] to run 3 >> [26108:3:c/r:restore_debug_free:174] pid 26104 type Coord state Success >> [26108:3:c/r:restore_debug_free:174] pid 26106 type Root state Success >> [26108:3:c/r:restore_debug_free:174] pid 26107 type Task state Success >> [26108:3:c/r:restore_debug_free:174] pid 26108 type Task state Success >> [26108:3:c/r:pgarr_release_pages:102] total pages 0 >> [26108:3:c/r:do_restart:1446] sys_restart returns -516 >> >> What does mean -516 ? an error ? >> > > Could it be ERESTART_RESTARTBLOCK ? Also, can you let us know what application > causes this ? Are any signals generated ? > That happens with sleep. ^ permalink raw reply [flat|nested] 28+ messages in thread
[parent not found: <4BB3BF02.7060402-GANU6spQydw@public.gmane.org>]
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB3BF02.7060402-GANU6spQydw@public.gmane.org> @ 2010-04-02 5:54 ` Sukadev Bhattiprolu 0 siblings, 0 replies; 28+ messages in thread From: Sukadev Bhattiprolu @ 2010-04-02 5:54 UTC (permalink / raw) To: Daniel Lezcano; +Cc: Containers, clg-NmTC/0ZBporQT0dZR+AlfA Daniel Lezcano [daniel.lezcano-GANU6spQydw@public.gmane.org] wrote: > Sukadev Bhattiprolu wrote: >> Daniel Lezcano [daniel.lezcano-GANU6spQydw@public.gmane.org] wrote: >> >>> But most of the simple test programs I run, exit right after the >>> restart was marked successful instead of continuing their execution. >>> >>> In the kernel I see the traces: >>> >>> [26108:3:c/r:restore_debug_free:145] active pid was 3, ctx->errno 0 >>> [26108:3:c/r:restore_debug_free:147] kflags 6 uflags 0 oflags 3 >>> [26108:3:c/r:restore_debug_free:149] task[0] to run 1 >>> [26108:3:c/r:restore_debug_free:149] task[1] to run 2 >>> [26108:3:c/r:restore_debug_free:149] task[2] to run 3 >>> [26108:3:c/r:restore_debug_free:174] pid 26104 type Coord state Success >>> [26108:3:c/r:restore_debug_free:174] pid 26106 type Root state Success >>> [26108:3:c/r:restore_debug_free:174] pid 26107 type Task state Success >>> [26108:3:c/r:restore_debug_free:174] pid 26108 type Task state Success >>> [26108:3:c/r:pgarr_release_pages:102] total pages 0 >>> [26108:3:c/r:do_restart:1446] sys_restart returns -516 >>> >>> What does mean -516 ? an error ? >>> >> >> Could it be ERESTART_RESTARTBLOCK ? Also, can you let us know what application >> causes this ? Are any signals generated ? >> > That happens with sleep. Oh, I misread earlier and thought both checkpoint and restat of sleep worked. Anyway, when I run C/R a simple program with sleep(), I see the above errors too, but I think they are expected if the checkpoint happened during sleep - the system call returned prematurely and after restart the syscall returns -ERESTART_RESTARTBLOCK which I think causes libc to repeat the syscall. I get the above ERESTART* error in dmesg, when I lxc-checkpoint/lxc-restart the following simple program, but, application restarts correctly and continues to write to /tmp/foo. If fd == 1, however, the writes to stdout do not show up on stdout even though the application continues to run (you can strace and see that 'i' continues to get incremented). I am chasing the stdout problem. Sukadev --- #include <stdio.h> #include <string.h> #include <sys/fcntl.h> main() { int i, n, fd; char buf[256]; fd = open("/tmp/foo", O_CREAT|O_RDWR|O_TRUNC, 0666); if (fd < 0) { perror("open()"); exit(1); } for (i = 0; i < 1000; i++) { sprintf(buf, "i %d\n", i); n = write(fd, buf, strlen(buf)); if (n != strlen(buf)) perror("write()"); sleep(1); } } ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH 0/6][lxc][v3] Link LXC with USERCR [not found] ` <4BB3B7E1.8080608-GANU6spQydw@public.gmane.org> 2010-03-31 21:23 ` Sukadev Bhattiprolu @ 2010-04-01 5:43 ` Oren Laadan 1 sibling, 0 replies; 28+ messages in thread From: Oren Laadan @ 2010-04-01 5:43 UTC (permalink / raw) To: Daniel Lezcano Cc: Containers, Sukadev Bhattiprolu, clg-NmTC/0ZBporQT0dZR+AlfA Daniel Lezcano wrote: > Serge E. Hallyn wrote: >> Quoting Daniel Lezcano (dlezcano-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org): >>> Sukadev Bhattiprolu wrote: >>>> lxc-checkpoint, lxc-restart in the LXC source tree are currently stubs. >>>> Following set of patches, when applied to LXC and built with USERCR as >>>> described below, enable enable lxc-checkpoint and lxc-restart of some >>>> simple containers >>> [ ... ] >>> >>>> 3. Checkpoint/restart a simple LXC container >>>> >>>> $ lxc-execute --name foo --rcfile lxc-no-netns.conf -- /bin/sleep 1000 >>>> >>>> $ lxc-checkpoint --name foo --image /root/lxc-foo.ckpt >>>> >>>> $ lxc-stop --name foo >>>> >>>> $ lxc-restart --name foo --image /root/lxc-foo.ckpt >>> Finally, using ckpt-v20-dev, I succeeded to checkpoint sleep but >>> when I restart, I got the error: >>> >>> <4534>number of tasks: 2 >>> <4534>number of vpids: 0 >>> <4534>total tasks (including ghosts): 2 >>> <4534>pid 2: inherit sid 0 >>> <4534>pid 2: creator set to 1 >>> <4534>====== TASKS >>> <4534> [0] pid 1 ppid 0 sid 0 creator 0 >>> <4534> [1] pid 2 ppid 1 sid 0 creator 1 >>> <4534>............ >>> <4534>task[0].vidx = -1 >>> <4534>task[1].vidx = -1 >>> <4534>new pidns with init >>> <4534>forking child vpid 1 flags 0x321 >>> <4534>task 1 forking with flags 20020011 numpids 1 >>> <4534>task 1 pid[0]=0 >>> <4535>====== PIDS ARRAY >>> <4535>[0] pid 1 ppid 0 sid 0 pgid 0 >>> <4535>[1] pid 2 ppid 1 sid 0 pgid 0 >>> <4535>............ >>> Error: /dev/ptmx must be a link to /dev/pts/ptmx >>> <4534>forked child vpid 4536 (asked 1) >>> root task exited status 0 >>> >>> What can I do to prevent this error ? >> test -e /dev/pts/ptmx || (echo "Don't go through with the rest of this" && exit) >> rm -f /dev/ptmx >> ln -s /dev/pts/ptmx /dev/ptmx >> chmod 666 /dev/ptmx > > I was able to CR a simple program like sleep. > > But most of the simple test programs I run, exit right after the restart > was marked successful instead of continuing their execution. > > In the kernel I see the traces: > > [26108:3:c/r:restore_debug_free:145] active pid was 3, ctx->errno 0 > [26108:3:c/r:restore_debug_free:147] kflags 6 uflags 0 oflags 3 > [26108:3:c/r:restore_debug_free:149] task[0] to run 1 > [26108:3:c/r:restore_debug_free:149] task[1] to run 2 > [26108:3:c/r:restore_debug_free:149] task[2] to run 3 > [26108:3:c/r:restore_debug_free:174] pid 26104 type Coord state Success > [26108:3:c/r:restore_debug_free:174] pid 26106 type Root state Success > [26108:3:c/r:restore_debug_free:174] pid 26107 type Task state Success > [26108:3:c/r:restore_debug_free:174] pid 26108 type Task state Success > [26108:3:c/r:pgarr_release_pages:102] total pages 0 > [26108:3:c/r:do_restart:1446] sys_restart returns -516 > > What does mean -516 ? an error ? It means ERESTART_RESTARTBLOCK - it's the way sys_restart tells the kernel to resume the previous sleep by reusing the exact same mechanism in the kernel to resume a previous sleep after a signal or freeze. You can request that the application be frozen when restart is complete, and then attach with a debugger and single step it to see what's happening. See the --freezer= option of 'restart'. Oren. > > I am running on a x86_64. > > Thanks > -- Daniel > > _______________________________________________ > Containers mailing list > Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org > https://lists.linux-foundation.org/mailman/listinfo/containers > ^ permalink raw reply [flat|nested] 28+ messages in thread
end of thread, other threads:[~2010-04-02 5:54 UTC | newest]
Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-31 7:04 [PATCH 0/6][lxc][v3] Link LXC with USERCR Sukadev Bhattiprolu
[not found] ` <20100331070440.GA21570-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 7:06 ` [PATCH 1/6][lxc][v3] Add --with-libcr configure option Sukadev Bhattiprolu
[not found] ` <20100331070633.GA23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 8:11 ` Michel Normand
2010-03-31 17:21 ` Sukadev Bhattiprolu
2010-03-31 7:07 ` [PATCH 2/6][lxc][v3] lxc_restart: Add --statefile option Sukadev Bhattiprolu
[not found] ` <20100331070711.GB23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 8:10 ` Michel Normand
2010-03-31 7:07 ` [PATCH 3/6][lxc][v3] lxc_checkpoint: " Sukadev Bhattiprolu
2010-03-31 7:08 ` [PATCH 4/6][lxc][v3] Move get_init_pid() into checkpoint.c Sukadev Bhattiprolu
[not found] ` <20100331070848.GD23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 8:17 ` Cedric Le Goater
2010-03-31 7:09 ` [PATCH 5/6][lxc][v3] Hook up lxc_restart() with app_restart() Sukadev Bhattiprolu
2010-03-31 7:10 ` [PATCH 6/6][lxc][v3] Hook up lxc_checkpoint() with app_checkpoint() Sukadev Bhattiprolu
[not found] ` <20100331071016.GF23567-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 8:08 ` Michel Normand
2010-03-31 8:18 ` Cedric Le Goater
2010-03-31 9:29 ` [PATCH 0/6][lxc][v3] Link LXC with USERCR Michel Normand
2010-03-31 9:38 ` Cedric Le Goater
[not found] ` <4BB31801.4000304-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2010-03-31 12:13 ` Cedric Le Goater
[not found] ` <4BB33C81.9070802-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2010-04-01 5:03 ` Sukadev Bhattiprolu
2010-03-31 13:58 ` Daniel Lezcano
[not found] ` <4BB35519.8080500-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2010-04-01 5:37 ` Oren Laadan
2010-03-31 16:31 ` Daniel Lezcano
2010-03-31 19:58 ` Daniel Lezcano
[not found] ` <4BB3A981.4020709-NmTC/0ZBporQT0dZR+AlfA@public.gmane.org>
2010-03-31 20:12 ` Serge E. Hallyn
[not found] ` <20100331201240.GA26773-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 20:22 ` Daniel Lezcano
2010-03-31 21:00 ` Daniel Lezcano
[not found] ` <4BB3B7E1.8080608-GANU6spQydw@public.gmane.org>
2010-03-31 21:23 ` Sukadev Bhattiprolu
[not found] ` <20100331212359.GA18934-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2010-03-31 21:30 ` Daniel Lezcano
[not found] ` <4BB3BF02.7060402-GANU6spQydw@public.gmane.org>
2010-04-02 5:54 ` Sukadev Bhattiprolu
2010-04-01 5:43 ` Oren Laadan
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.