[CRIU] [PATCH] scripts: set CRIU_IMAGE_DIR when running scripts
Tycho Andersen
tycho.andersen at canonical.com
Tue Aug 12 08:07:08 PDT 2014
Hi Pavel,
On Tue, Aug 12, 2014 at 06:31:45PM +0400, Pavel Emelyanov wrote:
> On 08/12/2014 06:22 PM, Tycho Andersen wrote:
> > When doing a restore for LXC, we store some other metadata (which bridge a veth
> > was on) in the image directory so that the restore script can correctly unlock
> > a network device and attach it to the right interface. This patch is needed so
> > that the script can find this metadata.
> >
> > Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
> > ---
> > util.c | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/util.c b/util.c
> > index a180ea5..4ff8768 100644
> > --- a/util.c
> > +++ b/util.c
> > @@ -460,6 +460,7 @@ int run_scripts(char *action)
> > {
> > struct script *script;
> > int ret = 0;
> > + char image_dir[PATH_MAX];
>
> Odd enough, but we have a magic constant PSFDS that says "how much
> would the path to /proc/self/fd/%d occupy on the stack" :)
>
> >
> > pr_debug("Running %s scripts\n", action);
> >
> > @@ -468,6 +469,12 @@ int run_scripts(char *action)
> > return -1;
> > }
> >
> > + sprintf(image_dir, "/proc/%ld/fd/%d", (long) getpid(), get_service_fd(IMG_FD_OFF));
>
> Maybe /proc/self/fd/%d would be nicer? This would allow using the
> PSFDS above :)
I this, but it seems that the fds are declared O_CLOEXEC or something?
It doesn't look like open_image_dir does that, though, so I'm not sure
what is going on. They weren't available in the script, in any case.
Tycho
> > + if (setenv("CRTOOLS_IMAGE_DIR", image_dir, 1)) {
> > + pr_perror("Can't set CRTOOLS_IMAGE_DIR=%s", image_dir);
> > + return -1;
> > + }
> > +
> > list_for_each_entry(script, &opts.scripts, node) {
> > if (script->path == SCRIPT_RPC_NOTIFY) {
> > pr_debug("\tRPC\n");
> >
>
More information about the CRIU
mailing list