I'm not really sure we should be looking in the rootfs for an existing
init, but I'll send a much more invasive patch to correct that. For now,
let's just make sure we set init_path when we find one, so that later in
execute_start() we don't bail.
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
/* If init exists in the container, don't bind mount a static one */
p = choose_init(conf->rootfs.mount);
if (p) {
- free(p);
- return 0;
+ char *old = p;
+
+ p = strdup(old + strlen(conf->rootfs.mount));
+ free(old);
+ if (!p)
+ return -ENOMEM;
+
+ INFO("Found existing init at \"%s\"", p);
+ goto out;
}
ret = snprintf(path, PATH_MAX, SBINDIR "/init.lxc.static");
p = strdup(destpath + strlen(conf->rootfs.mount));
if (!p)
return -ENOMEM;
- ((struct execute_args *)handler->data)->init_path = p;
INFO("Bind mounted lxc.init.static into container at \"%s\"", path);
+out:
+ ((struct execute_args *)handler->data)->init_path = p;
return 0;
}