From: Daniel Lezcano Date: Fri, 9 Oct 2009 09:38:38 +0000 (+0200) Subject: use the configuration structure for setting up the rootfs X-Git-Tag: lxc_0_6_4~70 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c69bd12f8878620fc71cd1b7a288f912a13db725;p=thirdparty%2Flxc.git use the configuration structure for setting up the rootfs use the configuration structure for setting up the rootfs Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/conf.c b/src/lxc/conf.c index 2517fb3d6..131f88e9a 100644 --- a/src/lxc/conf.c +++ b/src/lxc/conf.c @@ -842,25 +842,46 @@ static int setup_tty(const char *name, const struct lxc_tty_info *tty_info) return 0; } -static int setup_rootfs(const char *name) +static int setup_rootfs(const char *rootfs) { - char path[MAXPATHLEN]; + char *tmpname; + int ret = -1; - snprintf(path, MAXPATHLEN, LXCPATH "/%s/rootfs", name); + if (!rootfs) + return 0; - if (chroot(path)) { - SYSERROR("failed to set chroot %s", path); + tmpname = tempnam("/tmp", "lxc-rootfs"); + if (!tmpname) { + SYSERROR("failed to generate temporary name"); return -1; } + if (mkdir(tmpname, 0700)) { + SYSERROR("failed to create temporary directory '%s'", tmpname); + return -1; + } + + if (mount(rootfs, tmpname, "none", MS_BIND|MS_REC, NULL)) { + SYSERROR("failed to mount '%s'->'%s'", rootfs, tmpname); + goto out; + } + + if (chroot(tmpname)) { + SYSERROR("failed to set chroot %s", tmpname); + goto out; + } + if (chdir(getenv("HOME")) && chdir("/")) { SYSERROR("failed to change to home directory"); - return -1; + goto out; } - INFO("chrooted to '%s'", path); + INFO("chrooted to '%s'", rootfs); - return 0; + ret = 0; +out: + rmdir(tmpname); + return ret; } static int setup_pts(const char *name) @@ -1434,11 +1455,6 @@ int lxc_configure(const char *name, struct lxc_conf *conf) return -1; } - if (conf->rootfs && configure_rootfs(name, conf->rootfs)) { - ERROR("failed to configure the rootfs"); - return -1; - } - if (conf->pts && configure_pts(name, conf->pts)) { ERROR("failed to configure a new pts instance"); return -1; @@ -1860,7 +1876,7 @@ int lxc_setup(const char *name, const char *cons, return -1; } - if (lxc_conf.rootfs && setup_rootfs(name)) { + if (setup_rootfs(lxc_conf.rootfs)) { ERROR("failed to set rootfs for '%s'", name); return -1; }