]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
no need to use a temporary directory for pivoting
authorFerenc Wagner <wferi@niif.hu>
Mon, 10 May 2010 09:50:10 +0000 (11:50 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Mon, 10 May 2010 09:50:10 +0000 (11:50 +0200)
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>
src/lxc/conf.c

index 213be5537bb22c8d9861318f63d452907c9a2d8d..2575413713d3bc514dc8bb9f39949fb750ee3efa 100644 (file)
@@ -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)
 {
-       char *tmpname;
-       int ret = -1;
+       const char *tmpfs = "/tmp";
 
        if (!rootfs)
                return 0;
 
-       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);
+       if (mount(rootfs, tmpfs, "none", MS_BIND|MS_REC, NULL)) {
+               SYSERROR("failed to mount '%s'->'%s'", rootfs, "/tmp");
                return -1;
        }
 
-       if (mount(rootfs, tmpname, "none", MS_BIND|MS_REC, NULL)) {
-               SYSERROR("failed to mount '%s'->'%s'", rootfs, tmpname);
-               goto out;
-       }
+       DEBUG("mounted '%s' on '%s'", rootfs, tmpfs);
 
-       if (setup_rootfs_pivot_root(tmpname, pivotdir)) {
+       if (setup_rootfs_pivot_root(tmpfs, pivotdir)) {
                ERROR("failed to pivot_root to '%s'", rootfs);
-               goto out;
+               return -1;
        }
 
-       ret = 0;
-out:
-       rmdir(tmpname);
-       return ret;
+       return 0;
 }
 
 static int setup_pts(int pts)