[CRIU] [PATCH] Add an optional --script-data argument to criu
Tycho Andersen
tycho.andersen at canonical.com
Thu Oct 16 01:54:10 PDT 2014
On Thu, Oct 16, 2014 at 12:50:27PM +0400, Pavel Emelyanov wrote:
> On 10/16/2014 12:39 PM, Tycho Andersen wrote:
> > When restoring a particular container, we would like to pass the container id
> > to our network-{lock,unlock} script so that it can figure out which is the
> > right network to lock and unlock. We add a --script-data argument, which can be
> > used to set an environment variable that is exported for scripts to inspect.
>
> Why not set this as environment in LXC and let it flow through
> criu process seamlessly? Does it get lost somewhere in between?
Ah, because I am sleep and didn't think of that :). You can ignore
this patch.
Tycho
> Like this
>
> In LXC:
> setenv("LXC_RST_CT_ID", "12345")
> system("criu restore ... --action-script lxc.rst.script")
>
> In lxc.rst.script:
> CTID=$LXC_RST_CT_ID
>
>
> Thanks,
> Pavel
>
> > Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> > ---
> > Makefile | 2 +-
> > action-scripts.c | 8 ++++++++
> > crtools.c | 6 ++++++
> > include/cr_options.h | 1 +
> > 4 files changed, 16 insertions(+), 1 deletion(-)
> >
> > diff --git a/Makefile b/Makefile
> > index f2d06ab..e87575f 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -250,7 +250,7 @@ criu-$(CRTOOLSVERSION).tar.bz2:
> > v$(CRTOOLSVERSION) | bzip2 > $@
> > .PHONY: dist tar
> >
> > -install: $(PROGRAM) $(CRIU-LIB) install-man
> > +install: $(PROGRAM) $(CRIU-LIB)
> > $(E) " INSTALL " $(PROGRAM)
> > $(Q) mkdir -p $(DESTDIR)$(SBINDIR)
> > $(Q) install -m 755 $(PROGRAM) $(DESTDIR)$(SBINDIR)
> > diff --git a/action-scripts.c b/action-scripts.c
> > index d2b1a59..638dfc5 100644
> > --- a/action-scripts.c
> > +++ b/action-scripts.c
> > @@ -39,6 +39,11 @@ int run_scripts(enum script_actions act)
> > return -1;
> > }
> >
> > + if (opts.script_data && setenv("CRTOOLS_SCRIPT_DATA", opts.script_data, 1)) {
> > + pr_perror("Can't set CRTOOLS_SCRIPT_DATA=%s", opts.script_data);
> > + return -1;
> > + }
> > +
> > list_for_each_entry(script, &opts.scripts, node) {
> > if (script->path == SCRIPT_RPC_NOTIFY) {
> > pr_debug("\tRPC\n");
> > @@ -51,6 +56,9 @@ int run_scripts(enum script_actions act)
> >
> > unsetenv("CRTOOLS_SCRIPT_ACTION");
> > unsetenv("CRTOOLS_IMAGE_DIR");
> > + unsetenv("CRTOOLS_SCRIPT_DATA");
> > + if (ret)
> > + pr_err("Script exited with code %d\n", ret);
> > return ret;
> > }
> >
> > diff --git a/crtools.c b/crtools.c
> > index a245bbb..bca60ae 100644
> > --- a/crtools.c
> > +++ b/crtools.c
> > @@ -187,6 +187,7 @@ int main(int argc, char *argv[], char *envp[])
> > { "exec-cmd", no_argument, 0, 1059},
> > { "manage-cgroups", no_argument, 0, 1060},
> > { "cgroup-root", required_argument, 0, 1061},
> > + { "script-data", required_argument, 0, 1062},
> > { },
> > };
> >
> > @@ -392,6 +393,9 @@ int main(int argc, char *argv[], char *envp[])
> > return -1;
> > }
> > break;
> > + case 1062:
> > + opts.script_data = optarg;
> > + break;
> > case 'M':
> > {
> > char *aux;
> > @@ -591,6 +595,8 @@ usage:
> > " --veth-pair IN=OUT map inside veth device name to outside one\n"
> > " --link-remap allow to link unlinked files back when possible\n"
> > " --action-script FILE add an external action script\n"
> > +" --script-data A string of data to pass to action scripts as the\n"
> > +" CRTOOLS_SCRIPT_DATA environment variable.\n"
> > " -j|--" OPT_SHELL_JOB " allow to dump and restore shell jobs\n"
> > " -l|--" OPT_FILE_LOCKS " handle file locks, for safety, only used for container\n"
> > " -L|--libdir path to a plugin directory (by default " CR_PLUGIN_DEFAULT ")\n"
> > diff --git a/include/cr_options.h b/include/cr_options.h
> > index a9f9e92..73ca5e8 100644
> > --- a/include/cr_options.h
> > +++ b/include/cr_options.h
> > @@ -58,6 +58,7 @@ struct cr_options {
> > char *new_global_cg_root;
> > struct list_head new_cgroup_roots;
> > bool aufs; /* auto-deteced, not via cli */
> > + char *script_data;
> > };
> >
> > extern struct cr_options opts;
> >
>
More information about the CRIU
mailing list