[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