mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-07-14 21:29:05 +00:00
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: Ferenc Wagner <wferi@niif.hu> Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
This commit is contained in:
parent
bf6cc73696
commit
25368b5249
@ -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;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mkdir(tmpname, 0700)) {
|
DEBUG("mounted '%s' on '%s'", rootfs, tmpfs);
|
||||||
SYSERROR("failed to create temporary directory '%s'", tmpname);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mount(rootfs, tmpname, "none", MS_BIND|MS_REC, NULL)) {
|
if (setup_rootfs_pivot_root(tmpfs, pivotdir)) {
|
||||||
SYSERROR("failed to mount '%s'->'%s'", rootfs, tmpname);
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (setup_rootfs_pivot_root(tmpname, 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)
|
||||||
|
Loading…
Reference in New Issue
Block a user