[lxc-devel] [PATCH 2/6] execute: bind init.lxc.static into container
Serge Hallyn
serge.hallyn at ubuntu.com
Tue Jun 3 03:03:34 UTC 2014
Changelog:
May 19: put init.lxc.static into container's root dir
rather than under SBINDIR [stgraber].
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
Conflicts:
src/lxc/conf.c
---
src/lxc/conf.c | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/src/lxc/conf.c b/src/lxc/conf.c
index 2b298a4..8beded2 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)
--
2.0.0
More information about the lxc-devel
mailing list