Commit 25368b52 by Ferenc Wagner Committed by Daniel Lezcano

no need to use a temporary directory for pivoting

Ferenc Wagner <wferi@niif.hu> writes: > Daniel Lezcano <dlezcano@fr.ibm.com> writes: > >> Ferenc Wagner wrote: >> >>> Daniel Lezcano <daniel.lezcano@free.fr> writes: > >>>> Ferenc Wagner wrote: > >>>> > >>>>> While playing with lxc-start, I noticed that /tmp is infested by > >>>>> empty lxc-r* directories: [...] Ok, this name comes from lxc-rootfs > >>>>> in conf.c:setup_rootfs. After setup_rootfs_pivot_root returns, the > >>>>> original /tmp is not available anymore, so rmdir(tmpname) at the > >>>>> bottom of setup_rootfs can't achieve much. Why is this temporary > >>>>> name needed anyway? Is pivoting impossible without it? > >>>> > >>>> That was put in place with chroot, before pivot_root, so the distro's > >>>> scripts can remount their '/' without failing. > >>>> > >>>> Now we have pivot_root, I suppose we can change that to something cleaner... >>> Like simply nuking it? Shall I send a patch? >> >> Sure, if we can kill it, I will be glad to take your patch :) > > I can't see any reason why lxc-start couldn't do without that temporary > recursive bind mount of the original root. If neither do you, I'll > patch it out and see if it still flies. For my purposes the patch below works fine. I only run applications, though, not full systems, so wider testing is definitely needed. Thanks, Feri. >From 98b24c13f809f18ab8969fb4d84defe6f812b25c Mon Sep 17 00:00:00 2001 Date: Thu, 6 May 2010 14:47:39 +0200 That was put in place before lxc-start started using pivot_root, so the distro scripts can remount / without problems. Signed-off-by: 's avatarFerenc Wagner <wferi@niif.hu> Signed-off-by: 's avatarDaniel Lezcano <dlezcano@fr.ibm.com>
parent bf6cc736
...@@ -581,37 +581,24 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir) ...@@ -581,37 +581,24 @@ static int setup_rootfs_pivot_root(const char *rootfs, const char *pivotdir)
static int setup_rootfs(const char *rootfs, const char *pivotdir) static int setup_rootfs(const char *rootfs, const char *pivotdir)
{ {
char *tmpname; const char *tmpfs = "/tmp";
int ret = -1;
if (!rootfs) if (!rootfs)
return 0; return 0;
tmpname = tempnam("/tmp", "lxc-rootfs"); if (mount(rootfs, tmpfs, "none", MS_BIND|MS_REC, NULL)) {
if (!tmpname) { SYSERROR("failed to mount '%s'->'%s'", rootfs, "/tmp");
SYSERROR("failed to generate temporary name");
return -1;
}
if (mkdir(tmpname, 0700)) {
SYSERROR("failed to create temporary directory '%s'", tmpname);
return -1; return -1;
} }
if (mount(rootfs, tmpname, "none", MS_BIND|MS_REC, NULL)) { DEBUG("mounted '%s' on '%s'", rootfs, tmpfs);
SYSERROR("failed to mount '%s'->'%s'", rootfs, tmpname);
goto out;
}
if (setup_rootfs_pivot_root(tmpname, pivotdir)) { if (setup_rootfs_pivot_root(tmpfs, pivotdir)) {
ERROR("failed to pivot_root to '%s'", rootfs); ERROR("failed to pivot_root to '%s'", rootfs);
goto out; return -1;
} }
ret = 0; return 0;
out:
rmdir(tmpname);
return ret;
} }
static int setup_pts(int pts) static int setup_pts(int pts)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment