From: Serge Hallyn Date: Tue, 3 Jun 2014 03:03:34 +0000 (-0500) Subject: execute: bind init.lxc.static into container X-Git-Tag: lxc-1.1.0.alpha1~75 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2322903baaa005032d660dec837877c0140c846d;p=thirdparty%2Flxc.git execute: bind init.lxc.static into container Changelog: May 19: put init.lxc.static into container's root dir rather than under SBINDIR [stgraber]. Signed-off-by: Serge Hallyn Acked-by: Stéphane Graber --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 2b298a4a6..8beded29c 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -3811,6 +3811,43 @@ static void remount_all_slave(void) free(line); } +void lxc_execute_bind_init(struct lxc_conf *conf) +{ + int ret; + char path[PATH_MAX], destpath[PATH_MAX]; + + ret = snprintf(path, PATH_MAX, SBINDIR "/init.lxc.static"); + if (ret < 0 || ret >= PATH_MAX) { + WARN("Path name too long searching for lxc.init.static"); + return; + } + + if (!file_exists(path)) { + INFO("%s does not exist on host", path); + return; + } + + ret = snprintf(destpath, PATH_MAX, "%s%s", conf->rootfs.mount, "/init.lxc.static"); + if (ret < 0 || ret >= PATH_MAX) { + WARN("Path name too long for container's lxc.init.static"); + return; + } + + if (!file_exists(destpath)) { + FILE * pathfile = fopen(destpath, "wb"); + if (!pathfile) { + SYSERROR("Failed to create mount target '%s'", destpath); + return; + } + fclose(pathfile); + } + + ret = mount(path, destpath, "none", MS_BIND, NULL); + if (ret < 0) + SYSERROR("Failed to bind lxc.init.static into container"); + INFO("lxc.init.static bound into container at %s", path); +} + /* * This does the work of remounting / if it is shared, calling the * container pre-mount hooks, and mounting the rootfs. @@ -3905,6 +3942,9 @@ int lxc_setup(struct lxc_handler *handler) return -1; } + if (lxc_conf->is_execute) + lxc_execute_bind_init(lxc_conf); + /* now mount only cgroup, if wanted; * before, /sys could not have been mounted * (is either mounted automatically or via fstab entries)